Ray tracing is a well understood algorithm and many applications exist to implement it. A synthetic scene can be generated using known properties of light and materials. Simply, a ray of light is sent into the scene and the physics of the rays of light are simulated. Ray tracing has been around for many years and implemented on a wide range of architectures. Since each ray is basically independent of each other ray, this leads to a highly parallel implementation which leads to using all the cores in a system. In addition, ray tracing is highly floating point intensive.
With multithreading on a multicore system, the time to render a scene can be reduced dramatically. If there was one core per ray on a system, the time to completion would be the time it would take to render the most complex ray. As primary rays are shot in to the scene, secondary and other rays may also be used to determine the final pixel color.
The Embree rendering kernels were developed to enable other application developers to create high quality and fast ray tracing applications, or to incorporated into existing applications that needed this feature. These kernels exploit parallelism on multiple levels. Various techniques for ray tracing are used in the kernels to take advantage of the parallelism on the Intel Xeon Phi coprocessors.
Experiments with a variety of examples demonstrates the performance of the Embree kernels, when used on a system with the Intel Xeon Phi coprocessor. Rays can be calculated in the 60 million per second to 100 million per second range.
The Embree kernel approach, using the Intel Xeon Phi coprocessor is applicable to many situations. The implementation can be tuned to the hardware available, using different vector widths and workloads per ray. With a flexible toolkit for rendering, applications can take advantage of the latest hardware acceleration to achieve maximum performance.
Source: Intel, USA and Intel, Germany