Circular FIFO Work Queue
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
z Toggle filter mode V Revert filter to original state

Menu toggling

q Quotes r References f Filter c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Credits Menu

Enter Open URL (in new tab)
0:00:25Owl of Shame: Single producer/Multiple consumer issue
0:00:25Owl of Shame: Single producer/Multiple consumer issue
0:00:25Owl of Shame: Single producer/Multiple consumer issue
0:03:33InterlockedCompareExchange
0:03:33InterlockedCompareExchange
0:03:33InterlockedCompareExchange
0:04:20Fixing our shame
0:04:20Fixing our shame
0:04:20Fixing our shame
0:06:19Siumplifying more with the API change
0:06:19Siumplifying more with the API change
0:06:19Siumplifying more with the API change
0:09:00Implementing the multithreading API
0:09:00Implementing the multithreading API
0:09:00Implementing the multithreading API
0:12:42Piping the work queue through
0:12:42Piping the work queue through
0:12:42Piping the work queue through
0:14:33Global defines for AddEntry and CompleteAllWork
0:14:33Global defines for AddEntry and CompleteAllWork
0:14:33Global defines for AddEntry and CompleteAllWork
0:16:00Typedefs for the work queue types
0:16:00Typedefs for the work queue types
0:16:00Typedefs for the work queue types
0:18:30Smoothing out the multithreading API
0:18:30Smoothing out the multithreading API
0:18:30Smoothing out the multithreading API
0:24:10Getting compiling again
0:24:10Getting compiling again
0:24:10Getting compiling again
0:28:00Initializing pointers on game startup
0:28:00Initializing pointers on game startup
0:28:00Initializing pointers on game startup
0:28:37Continuing clean-up
0:28:37Continuing clean-up
0:28:37Continuing clean-up
0:33:00GetCurrentThreadID for our test code
0:33:00GetCurrentThreadID for our test code
0:33:00GetCurrentThreadID for our test code
0:34:46Reviewing/Checking for bugs
0:34:46Reviewing/Checking for bugs
0:34:46Reviewing/Checking for bugs
0:35:53Problem: Queue never resets
0:35:53Problem: Queue never resets
0:35:53Problem: Queue never resets
0:36:00Temporary Fix: Reset queue when all work is done
0:36:00Temporary Fix: Reset queue when all work is done
0:36:00Temporary Fix: Reset queue when all work is done
0:39:04Turning the queue into a circular buffer
0:39:04Turning the queue into a circular buffer
0:39:04Turning the queue into a circular buffer
0:42:50Blackboard: Circular FIFO
0:42:50Blackboard: Circular FIFO
0:42:50Blackboard: Circular FIFO
0:44:15Implementing the FIFO queue
0:44:15Implementing the FIFO queue
0:44:15Implementing the FIFO queue
0:50:35Testing the FIFO queue
0:50:35Testing the FIFO queue
0:50:35Testing the FIFO queue
0:51:06Debugging the FIFO wrapping
0:51:06Debugging the FIFO wrapping
0:51:06Debugging the FIFO wrapping
0:55:50Fixing the completion goal code
0:55:50Fixing the completion goal code
0:55:50Fixing the completion goal code
0:59:00Working multithreaded rendering!
0:59:00Working multithreaded rendering!
0:59:00Working multithreaded rendering!
1:02:23Q&A
🗩
1:02:23Q&A
🗩
1:02:23Q&A
🗩
1:02:58andsz_ Since the workloads don't complete in order what if one workload takes very long while the other threads wrap around in the queue such that a new workload overwrites the slot with the one that is still running?
🗪
1:02:58andsz_ Since the workloads don't complete in order what if one workload takes very long while the other threads wrap around in the queue such that a new workload overwrites the slot with the one that is still running?
🗪
1:02:58andsz_ Since the workloads don't complete in order what if one workload takes very long while the other threads wrap around in the queue such that a new workload overwrites the slot with the one that is still running?
🗪
1:04:26miblo Now that we're multithreaded, could we compile in debug mode and have the game run at a reasonable framerate?α
🗪
1:04:26miblo Now that we're multithreaded, could we compile in debug mode and have the game run at a reasonable framerate?α
🗪
1:04:26miblo Now that we're multithreaded, could we compile in debug mode and have the game run at a reasonable framerate?α
🗪
1:08:27powerc9k Can we tell how much faster it is now that it's multithreaded?
🗪
1:08:27powerc9k Can we tell how much faster it is now that it's multithreaded?
🗪
1:08:27powerc9k Can we tell how much faster it is now that it's multithreaded?
🗪
1:12:0460 FPS test
1:12:0460 FPS test
1:12:0460 FPS test
1:13:03robotchocolatedino Instead of asserting that the queue doesn't overflow when adding an entry would it be better to just wait for an entry to be read if there's no space to write
🗪
1:13:03robotchocolatedino Instead of asserting that the queue doesn't overflow when adding an entry would it be better to just wait for an entry to be read if there's no space to write
🗪
1:13:03robotchocolatedino Instead of asserting that the queue doesn't overflow when adding an entry would it be better to just wait for an entry to be read if there's no space to write
🗪
1:13:25braincruser Would you call this a thread pool?
🗪
1:13:25braincruser Would you call this a thread pool?
🗪
1:13:25braincruser Would you call this a thread pool?
🗪
1:13:44soysaucethekid When stepping through multithreaded code all the other threads stop as well, I take it?
🗪
1:13:44soysaucethekid When stepping through multithreaded code all the other threads stop as well, I take it?
🗪
1:13:44soysaucethekid When stepping through multithreaded code all the other threads stop as well, I take it?
🗪
1:15:10vellyx Can you make the number of threads an in-game configuration option?
🗪
1:15:10vellyx Can you make the number of threads an in-game configuration option?
🗪
1:15:10vellyx Can you make the number of threads an in-game configuration option?
🗪
1:15:33ttbjm How long until the renderer is sorted?
🗪
1:15:33ttbjm How long until the renderer is sorted?
🗪
1:15:33ttbjm How long until the renderer is sorted?
🗪
1:16:10pragmascrypt Is the WeShouldSleep still right after you changed the if condition?
🗪
1:16:10pragmascrypt Is the WeShouldSleep still right after you changed the if condition?
🗪
1:16:10pragmascrypt Is the WeShouldSleep still right after you changed the if condition?
🗪
1:17:55manicthenobody Why do you use #if 0 instead of // or /*?
🗪
1:17:55manicthenobody Why do you use #if 0 instead of // or /*?
🗪
1:17:55manicthenobody Why do you use #if 0 instead of // or /*?
🗪
1:19:09nightbasilisk Can you show 4k?
🗪
1:19:09nightbasilisk Can you show 4k?
🗪
1:19:09nightbasilisk Can you show 4k?
🗪
1:19:47gasto5 Q: Is multithreaded code less reliable than singlethreaded code?
1:19:47gasto5 Q: Is multithreaded code less reliable than singlethreaded code?
1:19:47gasto5 Q: Is multithreaded code less reliable than singlethreaded code?
1:20:37noxy_key So is the circular buffer recycling threads after they're done processing a tile? I wasn't clear on why a circular buffer was chosen.
🗪
1:20:37noxy_key So is the circular buffer recycling threads after they're done processing a tile? I wasn't clear on why a circular buffer was chosen.
🗪
1:20:37noxy_key So is the circular buffer recycling threads after they're done processing a tile? I wasn't clear on why a circular buffer was chosen.
🗪
1:20:56Power cord bumped, computer shut down
1:20:56Power cord bumped, computer shut down
1:20:56Power cord bumped, computer shut down
1:24:20noxy_key (once more) So is the circular buffer recycling threads after they're done processing a tile? I wasn't clear on why a circular buffer was chosen.
🗪
1:24:20noxy_key (once more) So is the circular buffer recycling threads after they're done processing a tile? I wasn't clear on why a circular buffer was chosen.
🗪
1:24:20noxy_key (once more) So is the circular buffer recycling threads after they're done processing a tile? I wasn't clear on why a circular buffer was chosen.
🗪
1:24:35Blackboard: Circular buffers
1:24:35Blackboard: Circular buffers
1:24:35Blackboard: Circular buffers
1:26:33kyaii I just saw where you're sleeping threads if there's no work, are you still using semaphores to block and wake up threads or are you sleeping threads?
🗪
1:26:33kyaii I just saw where you're sleeping threads if there's no work, are you still using semaphores to block and wake up threads or are you sleeping threads?
🗪
1:26:33kyaii I just saw where you're sleeping threads if there's no work, are you still using semaphores to block and wake up threads or are you sleeping threads?
🗪
1:27:15powerc9k Is the archive going to save this correctly?
🗪
1:27:15powerc9k Is the archive going to save this correctly?
🗪
1:27:15powerc9k Is the archive going to save this correctly?
🗪
1:27:41robotchocolatedino Would it be easier to implement the queue as a linked list so it has no maximum size? Since we never need to traverse the list it should still be fast.
🗪
1:27:41robotchocolatedino Would it be easier to implement the queue as a linked list so it has no maximum size? Since we never need to traverse the list it should still be fast.
🗪
1:27:41robotchocolatedino Would it be easier to implement the queue as a linked list so it has no maximum size? Since we never need to traverse the list it should still be fast.
🗪
1:28:56robrobby In the rolling buffer you check each entry to be filled before writing a new one in and otherwise skip to the next slot?
🗪
1:28:56robrobby In the rolling buffer you check each entry to be filled before writing a new one in and otherwise skip to the next slot?
🗪
1:28:56robrobby In the rolling buffer you check each entry to be filled before writing a new one in and otherwise skip to the next slot?
🗪
1:29:39Done for the day.
🗩
1:29:39Done for the day.
🗩
1:29:39Done for the day.
🗩