Multithreading
?
?

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:09Recap and set the stage for the day
0:09Recap and set the stage for the day
0:09Recap and set the stage for the day
1:15ray.cpp: Rename RayCount to BounceCount
1:15ray.cpp: Rename RayCount to BounceCount
1:15ray.cpp: Rename RayCount to BounceCount
1:46View our image and determine to perform better material processing and to optimise
1:46View our image and determine to perform better material processing and to optimise
1:46View our image and determine to perform better material processing and to optimise
8:28ray.cpp: Figure out the resolution of clock_t1
8:28ray.cpp: Figure out the resolution of clock_t1
8:28ray.cpp: Figure out the resolution of clock_t1
12:56ray.cpp. Introduce a timer using clock() from time.h
12:56ray.cpp. Introduce a timer using clock() from time.h
12:56ray.cpp. Introduce a timer using clock() from time.h
19:15Run our ray caster and see the timer results, noting that the ms/bounce remains constant for various bounce counts
19:15Run our ray caster and see the timer results, noting that the ms/bounce remains constant for various bounce counts
19:15Run our ray caster and see the timer results, noting that the ms/bounce remains constant for various bounce counts
20:55Consider the performance gain we may achieve by multithreading
20:55Consider the performance gain we may achieve by multithreading
20:55Consider the performance gain we may achieve by multithreading
25:29Determine to perform the usual way of doing ray tracing, using tiles that are square shaped
25:29Determine to perform the usual way of doing ray tracing, using tiles that are square shaped
25:29Determine to perform the usual way of doing ray tracing, using tiles that are square shaped
26:26ray.cpp: Introduce RenderTile() and GetPixelPointer()
26:26ray.cpp: Introduce RenderTile() and GetPixelPointer()
26:26ray.cpp: Introduce RenderTile() and GetPixelPointer()
32:25ray.cpp: Break up the world into multiple tiles
32:25ray.cpp: Break up the world into multiple tiles
32:25ray.cpp: Break up the world into multiple tiles
43:36ray.cpp: Add TileRetiredCount to the world struct
43:36ray.cpp: Add TileRetiredCount to the world struct
43:36ray.cpp: Add TileRetiredCount to the world struct
48:38ray.cpp: Inline the contents of RayCast() in RenderTile()
48:38ray.cpp: Inline the contents of RayCast() in RenderTile()
48:38ray.cpp: Inline the contents of RayCast() in RenderTile()
54:08ray.h: Introduce work_queue and work_order to enable multithreading
54:08ray.h: Introduce work_queue and work_order to enable multithreading
54:08ray.h: Introduce work_queue and work_order to enable multithreading
56:17Describe volatile
56:17Describe volatile
56:17Describe volatile
1:01:09ray.cpp: Initialise a work_queue and push our RenderTile() calls onto it
1:01:09ray.cpp: Initialise a work_queue and push our RenderTile() calls onto it
1:01:09ray.cpp: Initialise a work_queue and push our RenderTile() calls onto it
1:06:55Run our ray tracer to see that everything's good
1:06:55Run our ray tracer to see that everything's good
1:06:55Run our ray tracer to see that everything's good
1:07:14ray.cpp: Make RenderTile() only take a work_queue and get its work_order off that queue itself
1:07:14ray.cpp: Make RenderTile() only take a work_queue and get its work_order off that queue itself
1:07:14ray.cpp: Make RenderTile() only take a work_queue and get its work_order off that queue itself
1:10:51Run to see that all is well
1:10:51Run to see that all is well
1:10:51Run to see that all is well
1:12:09ray.cpp: Set us up for multithreading by introducing LockedAddAndReturnPreviousValue() and CreateWorkThread()
1:12:09ray.cpp: Set us up for multithreading by introducing LockedAddAndReturnPreviousValue() and CreateWorkThread()
1:12:09ray.cpp: Set us up for multithreading by introducing LockedAddAndReturnPreviousValue() and CreateWorkThread()
1:21:09ray.cpp: Implement CreateWorkThread() using CreateThread()2,3 and introduce WorkerThread()
1:21:09ray.cpp: Implement CreateWorkThread() using CreateThread()2,3 and introduce WorkerThread()
1:21:09ray.cpp: Implement CreateWorkThread() using CreateThread()2,3 and introduce WorkerThread()
1:27:08Run to see that our speed has improved dramatically
1:27:08Run to see that our speed has improved dramatically
1:27:08Run to see that our speed has improved dramatically
1:28:25ray.cpp: Make LockedAddAndReturnPreviousValue() call InterlockedExchangeAdd64()4
1:28:25ray.cpp: Make LockedAddAndReturnPreviousValue() call InterlockedExchangeAdd64()4
1:28:25ray.cpp: Make LockedAddAndReturnPreviousValue() call InterlockedExchangeAdd64()4
1:29:27Run to see our 5x speed-up
1:29:27Run to see our 5x speed-up
1:29:27Run to see our 5x speed-up
1:30:24ray.cpp: Fuss with the CoreCount and Tile sizes to see if they affect the speed
1:30:24ray.cpp: Fuss with the CoreCount and Tile sizes to see if they affect the speed
1:30:24ray.cpp: Fuss with the CoreCount and Tile sizes to see if they affect the speed
1:32:38Blackboard: Drain-out
1:32:38Blackboard: Drain-out
1:32:38Blackboard: Drain-out
1:35:23ray.cpp: Introduce GetCPUCoreCount()5
1:35:23ray.cpp: Introduce GetCPUCoreCount()5
1:35:23ray.cpp: Introduce GetCPUCoreCount()5
1:39:18win32_ray.cpp: Pull in Windows-specific functions from ray.cpp
1:39:18win32_ray.cpp: Pull in Windows-specific functions from ray.cpp
1:39:18win32_ray.cpp: Pull in Windows-specific functions from ray.cpp
1:42:29build.bat: Prevent our program from running if compilation fails
1:42:29build.bat: Prevent our program from running if compilation fails
1:42:29build.bat: Prevent our program from running if compilation fails
1:47:04ray.cpp: Crank up the RaysPerPixel from 16 to 512 and view our smooth image
1:47:04ray.cpp: Crank up the RaysPerPixel from 16 to 512 and view our smooth image
1:47:04ray.cpp: Crank up the RaysPerPixel from 16 to 512 and view our smooth image
1:48:20Run our program on the command line
1:48:20Run our program on the command line
1:48:20Run our program on the command line
1:49:32ray.h: Add RaysPerPixel and MaxBounceCount to work_queue
1:49:32ray.h: Add RaysPerPixel and MaxBounceCount to work_queue
1:49:32ray.h: Add RaysPerPixel and MaxBounceCount to work_queue
1:52:11Run to see all the information we need, and note that the next step will be SIMD
1:52:11Run to see all the information we need, and note that the next step will be SIMD
1:52:11Run to see all the information we need, and note that the next step will be SIMD
1:53:34Q&A
🗩
1:53:34Q&A
🗩
1:53:34Q&A
🗩
1:53:45@dautor Could you please make a portal (changing ray position and orientation upon hitting the portal to come out of the second portal)?
🗪
1:53:45@dautor Could you please make a portal (changing ray position and orientation upon hitting the portal to come out of the second portal)?
🗪
1:53:45@dautor Could you please make a portal (changing ray position and orientation upon hitting the portal to come out of the second portal)?
🗪
1:54:00@syanoks Do you assume the x86 memory model in your code?
🗪
1:54:00@syanoks Do you assume the x86 memory model in your code?
🗪
1:54:00@syanoks Do you assume the x86 memory model in your code?
🗪
1:54:27@dautor What about const volatile and register together in a single declaration? (I saw it once in an implementation for a BLE stack)
🗪
1:54:27@dautor What about const volatile and register together in a single declaration? (I saw it once in an implementation for a BLE stack)
🗪
1:54:27@dautor What about const volatile and register together in a single declaration? (I saw it once in an implementation for a BLE stack)
🗪
1:55:25ray.cpp: Log stats to stderr
1:55:25ray.cpp: Log stats to stderr
1:55:25ray.cpp: Log stats to stderr
1:56:43@macielda What is the difference between Path Tracing and Ray Tracing?
🗪
1:56:43@macielda What is the difference between Path Tracing and Ray Tracing?
🗪
1:56:43@macielda What is the difference between Path Tracing and Ray Tracing?
🗪
1:59:24@LongBoolean Now that the raysPerPixel and maxBounceCount are parameters, you could potentially give different tiles different settings, to compare quality side by side on the same image?
🗪
1:59:24@LongBoolean Now that the raysPerPixel and maxBounceCount are parameters, you could potentially give different tiles different settings, to compare quality side by side on the same image?
🗪
1:59:24@LongBoolean Now that the raysPerPixel and maxBounceCount are parameters, you could potentially give different tiles different settings, to compare quality side by side on the same image?
🗪
1:59:44@siltnamis What do you think about OpenMP?
🗪
1:59:44@siltnamis What do you think about OpenMP?
🗪
1:59:44@siltnamis What do you think about OpenMP?
🗪
1:59:48@3dextended What is SIMD [sic]?
🗪
1:59:48@3dextended What is SIMD [sic]?
🗪
1:59:48@3dextended What is SIMD [sic]?
🗪
2:01:05@seventh_chord Do you get effects like bloom / lens flare "for free" if you implement more realistic camera stuff?
🗪
2:01:05@seventh_chord Do you get effects like bloom / lens flare "for free" if you implement more realistic camera stuff?
🗪
2:01:05@seventh_chord Do you get effects like bloom / lens flare "for free" if you implement more realistic camera stuff?
🗪
2:02:46@butwhynot1 Isn't the uniform random sampling bad? I thought you need to use blue noise or Poisson-Disc sampling or something?
🗪
2:02:46@butwhynot1 Isn't the uniform random sampling bad? I thought you need to use blue noise or Poisson-Disc sampling or something?
🗪
2:02:46@butwhynot1 Isn't the uniform random sampling bad? I thought you need to use blue noise or Poisson-Disc sampling or something?
🗪
2:03:40@syanoks ARM memory model is extremely relaxed, though
🗪
2:03:40@syanoks ARM memory model is extremely relaxed, though
🗪
2:03:40@syanoks ARM memory model is extremely relaxed, though
🗪
2:03:56@garryjohanson So you mentioned that hyperthreading can schedule instructions on separate ALUs of the same core. Did I hear that correctly or did I misconstrue what you said in my mind?
🗪
2:03:56@garryjohanson So you mentioned that hyperthreading can schedule instructions on separate ALUs of the same core. Did I hear that correctly or did I misconstrue what you said in my mind?
🗪
2:03:56@garryjohanson So you mentioned that hyperthreading can schedule instructions on separate ALUs of the same core. Did I hear that correctly or did I misconstrue what you said in my mind?
🗪
2:06:30@ttbjm Would you change anything if you were using a Ryzen / Threadripper CPU that has 4 core core-complexes?
🗪
2:06:30@ttbjm Would you change anything if you were using a Ryzen / Threadripper CPU that has 4 core core-complexes?
🗪
2:06:30@ttbjm Would you change anything if you were using a Ryzen / Threadripper CPU that has 4 core core-complexes?
🗪
2:07:20@macielda Can you give a quick overview of how Importance Sampling works?
🗪
2:07:20@macielda Can you give a quick overview of how Importance Sampling works?
🗪
2:07:20@macielda Can you give a quick overview of how Importance Sampling works?
🗪
2:07:25@ray_caster Why were you trying to kill me? I was working very hard
🗪
2:07:25@ray_caster Why were you trying to kill me? I was working very hard
🗪
2:07:25@ray_caster Why were you trying to kill me? I was working very hard
🗪
2:07:36@dautor Could you maybe do a GJK implementation on a test stream some time?
🗪
2:07:36@dautor Could you maybe do a GJK implementation on a test stream some time?
🗪
2:07:36@dautor Could you maybe do a GJK implementation on a test stream some time?
🗪
2:07:45@thisdrunkdane Is AVX2 common enough to use it in, like, a game?
🗪
2:07:45@thisdrunkdane Is AVX2 common enough to use it in, like, a game?
🗪
2:07:45@thisdrunkdane Is AVX2 common enough to use it in, like, a game?
🗪
2:08:27@gordolani Will the raytracer program in the future use GPU to do the ray traces?
🗪
2:08:27@gordolani Will the raytracer program in the future use GPU to do the ray traces?
🗪
2:08:27@gordolani Will the raytracer program in the future use GPU to do the ray traces?
🗪
2:08:31@y_ah Where can we find the code?
🗪
2:08:31@y_ah Where can we find the code?
🗪
2:08:31@y_ah Where can we find the code?
🗪
2:08:46@3dextended Wouldn't it be more sufficient to make an entry for each ray to split up the work even more evenly and also this could work on the GPU?
🗪
2:08:46@3dextended Wouldn't it be more sufficient to make an entry for each ray to split up the work even more evenly and also this could work on the GPU?
🗪
2:08:46@3dextended Wouldn't it be more sufficient to make an entry for each ray to split up the work even more evenly and also this could work on the GPU?
🗪
2:09:16@jim0_o How much different is this raytracer to those with "live previews" where you see the image get better starting low res and goes higher and higher? (I assume they don't render line by line?)
🗪
2:09:16@jim0_o How much different is this raytracer to those with "live previews" where you see the image get better starting low res and goes higher and higher? (I assume they don't render line by line?)
🗪
2:09:16@jim0_o How much different is this raytracer to those with "live previews" where you see the image get better starting low res and goes higher and higher? (I assume they don't render line by line?)
🗪
2:10:23@LongBoolean Are there any things that you need to do to take extra advantage of hyperthreading CPUs or do you treat threading the same as a non-hyperthreading CPU?
🗪
2:10:23@LongBoolean Are there any things that you need to do to take extra advantage of hyperthreading CPUs or do you treat threading the same as a non-hyperthreading CPU?
🗪
2:10:23@LongBoolean Are there any things that you need to do to take extra advantage of hyperthreading CPUs or do you treat threading the same as a non-hyperthreading CPU?
🗪
2:11:33The ARM memory model6
📖
2:11:33The ARM memory model6
📖
2:11:33The ARM memory model6
📖
2:18:50That's it for today
🗩
2:18:50That's it for today
🗩
2:18:50That's it for today
🗩