Difference between revisions of "Raytrace Scheduler"
Jump to navigation
Jump to search
(5 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | This Exercise Has Been Updated | ||
+ | <!-- | ||
=Motivation= | =Motivation= | ||
Gain some exposure to different task scheduling styles. | Gain some exposure to different task scheduling styles. | ||
Line 4: | Line 6: | ||
=Background= | =Background= | ||
[https://en.wikipedia.org/wiki/Ray_tracing_(graphics) Ray Tracing] | [https://en.wikipedia.org/wiki/Ray_tracing_(graphics) Ray Tracing] | ||
+ | |||
+ | <youtube>iLHNF7SgVN4</youtube> | ||
=Code To Investigate= | =Code To Investigate= | ||
+ | Static Scheduler-like ray tracer. | ||
+ | |||
{{CodeToInvestigate|SplitFourWayRayTracer|rayTrace|raytrace.demo}} | {{CodeToInvestigate|SplitFourWayRayTracer|rayTrace|raytrace.demo}} | ||
Line 15: | Line 21: | ||
===DivideAndConquerRayTracer=== | ===DivideAndConquerRayTracer=== | ||
[[File:DivideAndConquerRayTracer.png|thumb]] | [[File:DivideAndConquerRayTracer.png|thumb]] | ||
− | Recursively divide the given region into 4 tasks for each of the four quadrants until you get below the threshold. | + | Recursively divide the given region into 4 tasks for each of the four quadrants until you get below the threshold (see the IntPredicate areaThreshold instance variable). |
When areaThreshold predicate test method returns false, call the <code>rayTraceBaseCase(context, xMin, yMix, xMax, yMax)</code> method to render the section. | When areaThreshold predicate test method returns false, call the <code>rayTraceBaseCase(context, xMin, yMix, xMax, yMax)</code> method to render the section. | ||
{{CodeToImplement|DivideAndConquerRayTracer|rayTraceKernel|raytrace.fun}} | {{CodeToImplement|DivideAndConquerRayTracer|rayTraceKernel|raytrace.fun}} | ||
− | {{Parallel|private void rayTraceKernel(RayTraceContext context, int xMin, int yMin, int xMax, int yMax | + | {{Parallel|private void rayTraceKernel(RayTraceContext context, int xMin, int yMin, int xMax, int yMax)}} |
===WorkStealingRayTracer=== | ===WorkStealingRayTracer=== | ||
Line 33: | Line 39: | ||
{{Sequential|private void renderMyTasksUntilEmptyThenStealWorkFromOthers(RayTraceTaskContext taskContext, Deque<Section> myTaskDeque, List<Deque<Section>> otherTaskDeques, int id)}} | {{Sequential|private void renderMyTasksUntilEmptyThenStealWorkFromOthers(RayTraceTaskContext taskContext, Deque<Section> myTaskDeque, List<Deque<Section>> otherTaskDeques, int id)}} | ||
+ | --> |
Latest revision as of 15:50, 26 April 2022
This Exercise Has Been Updated