Symmetric Multiprocessing

Computer architectures using multiple similar processors connected via a high-bandwidth link and managed by one operating system are referred to as Symmetric Multiprocessing systems. Each processor has equal access to I/O devices. As Law and Yagel's traversal scheme [22] was originally developed for parallelization, it is straight-forward to apply to SMP architectures. The blocks in each of the block lists can be processed simultaneously. Each block list is partitioned among the $count_{physical}$ CPUs available.

A possible problem occurs when rays from two simultaneously processed blocks have the same subsequent block. One way of handling these cases would be to use synchronization primitives, such as mutexes or critical sections, to ensure that only one thread can assign rays at a time. However, the required overhead can decrease the performance drastically. Therefore, to avoid the race conditions when two threads try to add rays to the ray list of a block, each block has a list for every physical CPU. When a block is being processed, the rays of all these lists are processed. When a ray leaves the block, it is added to the new block's ray list corresponding to the CPU currently processing the ray.