Análisis y optimización de un motor de ray-tracing mediante técnicas de paralelización sobre CPU y GPU

Bookmark (0)
Please login to bookmark Close

El objetivo principal de este Trabajo de Fin de Grado ha sido mejorar el rendimiento de un motor de ray-tracing, una técnica utilizada para generar imágenes realistas simulando el comportamiento de la luz. Dado que el trazado de rayos es un proceso muy demandante en cómputo pero con un alto grado de paralelismo inherente, se eligió este algoritmo para explorar técnicas de paralelización que aprovechen el hardware moderno y así reducir significativamente los tiempos de cálculo intensivo.
Esta mejora en el rendimiento es especialmente relevante porque el ray-tracing tradicionalmente requiere tiempos largos de procesamiento, lo que limita su uso en aplicaciones en tiempo real o en proyectos con recursos computacionales restringidos. Por ello, se decidió aplicar técnicas de paralelización sobre CPU y GPU, buscando demostrar cómo el aprovechamiento eficiente del paralelismo puede hacer que este algoritmo sea más accesible y práctico en distintos entornos.
Para ello, se analizó una implementación concreta y más exigente del algoritmo de ray-tracing llamada Stochastic Path Tracing with Russian Roulette Termination, identificando las secciones del código más críticas en cuanto a tiempo de ejecución y paralelización. Se aplicaron dos enfoques principales: primero, la paralelización sobre CPU mediante OpenMP, para aprovechar el paralelismo a nivel de núcleos de procesador; y luego la aceleración mediante CUDA, que permite explotar el paralelismo masivo de las GPUs. En ambos casos, se adaptó y refactorizó el código para garantizar la correcta gestión de la memoria y evitar errores comunes en programación paralela, como condiciones de carrera. Finalmente, se compararon los resultados obtenidos con cada método para evaluar las mejoras en tiempo de ejecución y eficiencia, mostrando que la aceleración por GPU ofrece un rendimiento superior en cargas de trabajo elevadas aunque también requiere más adaptaciones del código original.
Este estudio evidencia cómo adaptar un algoritmo de ray-tracing tradicional a entornos paralelos puede generar beneficios significativos, y sienta las bases para futuros trabajos centrados en la optimización de la transferencia de datos y la escalabilidad en sistemas multicore y multiprocesador gráfico.
ABSTRACT
The main objective of this Bachelor’s Thesis has been to improve the performance of a ray-tracing engine, a technique used to generate realistic images by simulating the behavior of light. Since ray tracing is a highly computationally demanding process but inherently parallel, this algorithm was chosen to explore parallelization techniques that take advantage of modern hardware and thus significantly reduce intensive computation times.
This performance improvement is especially relevant because traditional ray-tracing requires long processing times, which limits its use in real-time applications or projects with constrained computational resources. Therefore, parallelization techniques were applied on both CPU and GPU, aiming to demonstrate how efficient exploitation of parallelism can make this algorithm more accessible and practical in different environments.
To this end, a specific and more demanding implementation of the ray-tracing algorithm called Stochastic Path Tracing with Russian Roulette Termination was analyzed, identifying the most critical code sections regarding execution time and parallelization. Two main approaches were applied: first, arallelization on the CPU using OpenMP to exploit core-level parallelism; and then acceleration using CUDA, which allows exploiting the massive parallelism of GPUs. In both cases, the code was adapted and refactored to ensure correct memory management and avoid common parallel programming errors such as race conditions. Finally, the results obtained with each method were compared to evaluate improvements in execution time and efficiency, showing that GPU acceleration offers superior performance on high workloads but also requires more code adaptation.
This study demonstrates how adapting a traditional ray-tracing algorithm to parallel environments can yield significant benefits and lays the groundwork for future work focused on optimizing data transfer and scalability in multicore and multiprocessor GPU systems.

​El objetivo principal de este Trabajo de Fin de Grado ha sido mejorar el rendimiento de un motor de ray-tracing, una técnica utilizada para generar imágenes realistas simulando el comportamiento de la luz. Dado que el trazado de rayos es un proceso muy demandante en cómputo pero con un alto grado de paralelismo inherente, se eligió este algoritmo para explorar técnicas de paralelización que aprovechen el hardware moderno y así reducir significativamente los tiempos de cálculo intensivo.
Esta mejora en el rendimiento es especialmente relevante porque el ray-tracing tradicionalmente requiere tiempos largos de procesamiento, lo que limita su uso en aplicaciones en tiempo real o en proyectos con recursos computacionales restringidos. Por ello, se decidió aplicar técnicas de paralelización sobre CPU y GPU, buscando demostrar cómo el aprovechamiento eficiente del paralelismo puede hacer que este algoritmo sea más accesible y práctico en distintos entornos.
Para ello, se analizó una implementación concreta y más exigente del algoritmo de ray-tracing llamada Stochastic Path Tracing with Russian Roulette Termination, identificando las secciones del código más críticas en cuanto a tiempo de ejecución y paralelización. Se aplicaron dos enfoques principales: primero, la paralelización sobre CPU mediante OpenMP, para aprovechar el paralelismo a nivel de núcleos de procesador; y luego la aceleración mediante CUDA, que permite explotar el paralelismo masivo de las GPUs. En ambos casos, se adaptó y refactorizó el código para garantizar la correcta gestión de la memoria y evitar errores comunes en programación paralela, como condiciones de carrera. Finalmente, se compararon los resultados obtenidos con cada método para evaluar las mejoras en tiempo de ejecución y eficiencia, mostrando que la aceleración por GPU ofrece un rendimiento superior en cargas de trabajo elevadas aunque también requiere más adaptaciones del código original.
Este estudio evidencia cómo adaptar un algoritmo de ray-tracing tradicional a entornos paralelos puede generar beneficios significativos, y sienta las bases para futuros trabajos centrados en la optimización de la transferencia de datos y la escalabilidad en sistemas multicore y multiprocesador gráfico.
ABSTRACT
The main objective of this Bachelor’s Thesis has been to improve the performance of a ray-tracing engine, a technique used to generate realistic images by simulating the behavior of light. Since ray tracing is a highly computationally demanding process but inherently parallel, this algorithm was chosen to explore parallelization techniques that take advantage of modern hardware and thus significantly reduce intensive computation times.
This performance improvement is especially relevant because traditional ray-tracing requires long processing times, which limits its use in real-time applications or projects with constrained computational resources. Therefore, parallelization techniques were applied on both CPU and GPU, aiming to demonstrate how efficient exploitation of parallelism can make this algorithm more accessible and practical in different environments.
To this end, a specific and more demanding implementation of the ray-tracing algorithm called Stochastic Path Tracing with Russian Roulette Termination was analyzed, identifying the most critical code sections regarding execution time and parallelization. Two main approaches were applied: first, arallelization on the CPU using OpenMP to exploit core-level parallelism; and then acceleration using CUDA, which allows exploiting the massive parallelism of GPUs. In both cases, the code was adapted and refactored to ensure correct memory management and avoid common parallel programming errors such as race conditions. Finally, the results obtained with each method were compared to evaluate improvements in execution time and efficiency, showing that GPU acceleration offers superior performance on high workloads but also requires more code adaptation.
This study demonstrates how adapting a traditional ray-tracing algorithm to parallel environments can yield significant benefits and lays the groundwork for future work focused on optimizing data transfer and scalability in multicore and multiprocessor GPU systems. Read More