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:58@andsz_ 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:58@andsz_ 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:58@andsz_ 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:26@miblo Now that we're multithreaded, could we compile in debug mode and have the game run at a reasonable framerate?α
🗪
1:04:26@miblo Now that we're multithreaded, could we compile in debug mode and have the game run at a reasonable framerate?α
🗪
1:04:26@miblo Now that we're multithreaded, could we compile in debug mode and have the game run at a reasonable framerate?α
🗪
1:08:27@powerc9k Can we tell how much faster it is now that it's multithreaded?
🗪
1:08:27@powerc9k Can we tell how much faster it is now that it's multithreaded?
🗪
1:08:27@powerc9k 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:03@robotchocolatedino 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:03@robotchocolatedino 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:03@robotchocolatedino 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:25@braincruser Would you call this a thread pool?
🗪
1:13:25@braincruser Would you call this a thread pool?
🗪
1:13:25@braincruser Would you call this a thread pool?
🗪
1:13:44@soysaucethekid When stepping through multithreaded code all the other threads stop as well, I take it?
🗪
1:13:44@soysaucethekid When stepping through multithreaded code all the other threads stop as well, I take it?
🗪
1:13:44@soysaucethekid When stepping through multithreaded code all the other threads stop as well, I take it?
🗪
1:15:10@vellyx Can you make the number of threads an in-game configuration option?
🗪
1:15:10@vellyx Can you make the number of threads an in-game configuration option?
🗪
1:15:10@vellyx Can you make the number of threads an in-game configuration option?
🗪
1:15:33@ttbjm How long until the renderer is sorted?
🗪
1:15:33@ttbjm How long until the renderer is sorted?
🗪
1:15:33@ttbjm How long until the renderer is sorted?
🗪
1:16:10@pragmascrypt Is the WeShouldSleep still right after you changed the if condition?
🗪
1:16:10@pragmascrypt Is the WeShouldSleep still right after you changed the if condition?
🗪
1:16:10@pragmascrypt Is the WeShouldSleep still right after you changed the if condition?
🗪
1:17:55@manicthenobody Why do you use #if 0 instead of // or /*?
🗪
1:17:55@manicthenobody Why do you use #if 0 instead of // or /*?
🗪
1:17:55@manicthenobody Why do you use #if 0 instead of // or /*?
🗪
1:19:09@nightbasilisk Can you show 4k?
🗪
1:19:09@nightbasilisk Can you show 4k?
🗪
1:19:09@nightbasilisk Can you show 4k?
🗪
1:19:47@gasto5 Q: Is multithreaded code less reliable than singlethreaded code?
🗪
1:19:47@gasto5 Q: Is multithreaded code less reliable than singlethreaded code?
🗪
1:19:47@gasto5 Q: Is multithreaded code less reliable than singlethreaded code?
🗪
1:20:37@noxy_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:37@noxy_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:37@noxy_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:20@noxy_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:20@noxy_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:20@noxy_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:33@kyaii 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:33@kyaii 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:33@kyaii 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:15@powerc9k Is the archive going to save this correctly?
🗪
1:27:15@powerc9k Is the archive going to save this correctly?
🗪
1:27:15@powerc9k Is the archive going to save this correctly?
🗪
1:27:41@robotchocolatedino 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:41@robotchocolatedino 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:41@robotchocolatedino 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:56@robrobby 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:56@robrobby 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:56@robrobby 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.
🗩