Circular FIFO Work Queue
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

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

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:25Owl of Shame: Single producer/Multiple consumer issue
0:25Owl of Shame: Single producer/Multiple consumer issue
0:25Owl of Shame: Single producer/Multiple consumer issue
3:33InterlockedCompareExchange
3:33InterlockedCompareExchange
3:33InterlockedCompareExchange
4:20Fixing our shame
4:20Fixing our shame
4:20Fixing our shame
6:19Simplifying more with the API change
6:19Simplifying more with the API change
6:19Simplifying more with the API change
9:00Implementing the multithreading API
9:00Implementing the multithreading API
9:00Implementing the multithreading API
12:42Piping the work queue through
12:42Piping the work queue through
12:42Piping the work queue through
14:33Global defines for AddEntry and CompleteAllWork
14:33Global defines for AddEntry and CompleteAllWork
14:33Global defines for AddEntry and CompleteAllWork
16:00Typedefs for the work queue types
16:00Typedefs for the work queue types
16:00Typedefs for the work queue types
18:30Smoothing out the multithreading API
18:30Smoothing out the multithreading API
18:30Smoothing out the multithreading API
24:10Getting compiling again
24:10Getting compiling again
24:10Getting compiling again
28:00Initializing pointers on game startup
28:00Initializing pointers on game startup
28:00Initializing pointers on game startup
28:37Continuing clean-up
28:37Continuing clean-up
28:37Continuing clean-up
33:00GetCurrentThreadID for our test code
33:00GetCurrentThreadID for our test code
33:00GetCurrentThreadID for our test code
34:46Reviewing/Checking for bugs
34:46Reviewing/Checking for bugs
34:46Reviewing/Checking for bugs
35:53Problem: Queue never resets
35:53Problem: Queue never resets
35:53Problem: Queue never resets
36:00Temporary Fix: Reset queue when all work is done
36:00Temporary Fix: Reset queue when all work is done
36:00Temporary Fix: Reset queue when all work is done
39:04Turning the queue into a circular buffer
39:04Turning the queue into a circular buffer
39:04Turning the queue into a circular buffer
42:50Blackboard: Circular FIFO
42:50Blackboard: Circular FIFO
42:50Blackboard: Circular FIFO
44:15Implementing the FIFO queue
44:15Implementing the FIFO queue
44:15Implementing the FIFO queue
50:35Testing the FIFO queue
50:35Testing the FIFO queue
50:35Testing the FIFO queue
51:06Debugging the FIFO wrapping
51:06Debugging the FIFO wrapping
51:06Debugging the FIFO wrapping
55:50Fixing the completion goal code
55:50Fixing the completion goal code
55:50Fixing the completion goal code
59:00Working multithreaded rendering!
59:00Working multithreaded rendering!
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.
🗩