Our project concerns accelerating the path tracer from Project 3, through optimizations and application of special ray-tracing acceleration libraries, such as NVIDIA OptiX and, more generally, OpenCL.
So far, we have spent our time trying to understand the OptiX and OpenCL programming models, so we have a better understanding of how to integrate them into the existing path tracer code that we implemented within project 3.
We’ve also spent a lot of time just trying to get the SDKs to compile on our platform, which are machines running Debian 9 Stretch. Unfortunately, this has proven to be nontrivial, as all the resources we can find seem to refer to driver versions that are not available on our platform, and all the examples we can find online seem to be designed for execution in Windows environments. One added complexity of working with Debian is related to the release methodolgy of the distribution. While Debian as an operating system is incredibly stable, it has the downside of not natively supporting the latest versions of various packages required by other programs. We did, however, manage to compile and execute the OptiX 5.1.1 SDK examples, which composes the product of our milestone.
We also spent many hours figuring out how to import the OptiX library into the project 3 code, which involved learning about CMake configuration. We were able to successfully do this, and we can now import the library and use its symbols without errors.
We have been using the computers available at the Open Computing Facility, and specifically, access to the OCF’s high-performance computing cluster, in order to experiment with this project. This is because the OCF machines all feature NVIDIA GPUs, specifically, GTX 1060, GTX 1070, and RTX 2070 GPUs in the desktops, and 4 GTX 1080Ti GPUs in the HPC node. Though the OCF machines run the latest version of Debian GNU/Linux, the Debian distribution is known for only including software in its repositories after a lengthly testing period, and only updating it thereafter for security purposes. This means that the software in Debian, even the latest release, is often out of date compared to that which is available from the upstream provider, sometimes by several years. It is still possible to install more recent software on Debian, of course, but when this software relies on more recent versions of low-level shared libraries, such as libc, the installation will either fail, or the entire system can become unstable if the new library changes APIs that other software on the system depends on. One way to get around this limitation is to use a virtual machine, or container, which allows us to isolate the dependencies for particular applications from the underlying host operating systems by means of kernel-level isolation features. This is a solution for many problems, but in our case, we would need to give the VM exclusive access to the GPU, which is not yet a well-supported or stable feature in many open-source hypervisors, such as the KVM hypervisor available in the Linux 4.9 kernel found on Debian 9. To get around this, we had to engage in some degree of hackery.
The OptiX provided examples compile on one of the machines we have available, after disabling GL interop features. We are working on getting it to compile and run on other platforms with other GPUs. Then, we are going to attempt to convert the PathTracer BVH to the object hierarchy expected by the OptiX SDK, and use the provided plane and sphere intersection programs to see how much of the scene we are able to render.