• No se han encontrado resultados

Implementación del algoritmo de Ray Tracing clásico en una GPU NVidia usando algoritmos de computación cuántica Preguntas de Investigación

N/A
N/A
Protected

Academic year: 2019

Share "Implementación del algoritmo de Ray Tracing clásico en una GPU NVidia usando algoritmos de computación cuántica Preguntas de Investigación"

Copied!
9
0
0

Texto completo

(1)

Implementación del algoritmo de Ray Tracing clásico en una GPU NVidia usando

algoritmos de computación cuántica

Preguntas de Investigación

¿Qué es Ray Tracing?

¿Qué es computación cuántica?

¿Qué es una GPU?

¿Cuál es el modelo de computación de la GPU NVidia?

¿Qué es computación en paralelo?

¿Cómo se programa una GPU NVidia?

¿Cómo implementa la computación cuántica de manera natural la computación en

paralelo?

¿Cuáles son los principales algoritmos para implementar la computación cuántica?

¿Cómo se logra hacer una renderización en tiempo real usando Ray Tracing?

¿Qué estudios existen actualmente en cuanto a renderización cuántica?

(2)

Mapa Conceptual

1.

Resumen

2.

Introducción

3.

¿Qué es el Ray Tracing?

3.1.

Concepto y algoritmo básico

4.

¿Qué es la computación cuántica?

4.1.

Conceptos básicos

4.2.

Algoritmos cuánticos

4.

Estudios previos

(3)

Implementación del algoritmo de Ray Tracing clásico en una GPU NVidia usando

algoritmos de computación cuántica

Emir Alexander Galvis

Estudiante de Maestría en Ingeniería de Sistemas y Computación

Universidad Nacional de Colombia – Sede Bogotá

1. Resumen

En el presente artículo se presenta un marco teórico con respecto a Ray Tracing, programación de GPUs NVidia y la computación cuántica, además se discuten trabajos previos conducentes a lograr una renderización en tiempo real.

Palabras clave: Programación de hardware grafico, computación paralela, computación de flujos, programación de GPUs, computación cuántica, renderización, Ray Tracing.

Abstract

The present article presents a theoretical framework about to Ray Tracing, NVidia GPU programming and quantum computing, I also discuss preliminary work leading to a real-time rendering.

Keywords: Programmable Graphics Hardware, Data Parallel Computing, Stream Computing, GPU Computing, Quantum Computing, Rendering, Ray Tracing

2. Introducción

Desde hace muchos años la computación grafica ha cobrado gran importancia en varias industrias, una de las ellas la del entretenimiento y particularmente el cine; para lograr escenas con efectos realistas se hace necesario una gran inversión en cuanto a capacidad de computo y tiempo lo cual hace costosa y lenta una producción, en vista de estos inconvenientes en los últimos años las GPUs han sufrido un desarrollo exponencial, es así como la más potente de las CPUs no llega ni a un cuarto de la capacidad de cálculo de las GPUs de última generación. Los algoritmos de renderización también han avanzado y los todos los esfuerzos en este campo de la ingeniería apuntan a lograr hacerlo en tiempo real. Muchas investigaciones se han realizado con el objetivo de desarrollar métodos y técnicas eficientes para reducir el tiempo necesario para realizar la gran cantidad de cálculos necesarios para renderizar una escena compleja. La computación cuántica ofrece características únicas entre ellas la posibilidad de acelerar algunos algoritmos usando computación paralela.

3. ¿Qué es el Ray Tracing?

3.1. Concepto y algoritmo básicos: Ray tracing es la técnica dominante en el ámbito de la síntesis de imágenes realistas o de gran calidad, cuando el tiempo de computo es un factor secundario. Los grandes tiempos de procesamiento se deben a los elevados costes computacionales que requiere el trazado de rayos. Para cada pixel que conforma la imagen es necesario lanzar uno o varios rayos que atraviesen la escena, intersectarlos con los objetos que la conforman, calcular el color, y finalmente mostrar todos los pixeles así obtenidos en la pantalla. Ray tracing ofrece un gran número de características ventajosas y sería beneficioso disponer de ellas en el renderizado en tiempo real:

(4)

gran avance en este aspecto, pero es difícil obtener ventaja de estas características pues son difíciles de implementar y cuando se consigue, se trata simplemente de aproximaciones a la realidad. Esto contrasta con la facilidad y naturalidad con que ray-tracing permite calcular refracciones, reflexiones, sombras, iluminación indirecta y otros efectos de forma físicamente correcta.

Figura 1. Imagen sintetizada mediante Ray Tracing. Creada por D Scott Ferrin (C), 6/1995

 Escenas complejas: Para escenas complejas, el hardware grafico es limitado pues la rasterización presenta costo lineal al número de primitivas de la escena. Por ello requiere técnicas de preprocesamiento sofisticadas para reducir la geometría. El problema se agrava si se emplean efectos que requieren múltiples pasadas de renderizado para la misma escena. Frente a ello, ray tracing presenta complejidad logarítmica respecto al número de primitivas de la escena e incorpora occlusion culling. Tan solo es preciso realizar aquellos cálculos que sean realmente necesarios para la escena final pues los shaders solo se procesan una vez determinada la visibilidad, cabe anotar que la naturaleza del algoritmo de ray-tracing permite una paralelizacion trivial.

Ray Tracing, al fin y al cabo, no es más que un algoritmo. Admite unas entradas, realiza un proceso y genera unas salidas.

Como entradas del algoritmo estarían la posición y características físicas de cada uno de los objetos que forman la escena. Seguiría la ubicación, intensidad y tipo de las fuentes de luz presentes en la misma. Después el modelo de iluminación a utilizar, que describiría como calcular el color en un punto de la superficie de un objeto. A continuación la posición y dirección desde la que se quiere representar la escena, es decir, la posición del observador. Y en último lugar la ubicación y dimensiones del plano de proyección sobre el que ha de quedar reflejada la imagen, que normalmente equivale a la pantalla del ordenador donde se verá finalmente el resultado.

En cuanto al algoritmo en sí mismo, decir que el proceso básico se basa en trazar un rayo a través de cada uno de los pixels del plano de proyección, tomando como origen de los rayos la posición del observador. Y para cada uno de estos rayos trazados estudiar si se produce una intersección con alguno de los objetos de la escena. Si no se encuentra ningún objeto se termina el proceso para ese píxel y se le asigna un color de fondo por defecto. Por el contrario, si se encuentra un objeto, se miran sus características físicas y se decide que hacer en función del modelo de iluminación.

(5)

En la práctica, todos los elementos que intervienen en el proceso se tratan como entidades matemáticas muy simples. Los objetos se definen mediante primitivas geométricas como esferas, planos o polígonos, aunque se tiende a utilizar mallas de triángulos ya que así funcionan la mayoría de programas de modelado actuales. Los rayos se tratan como vectores, con un punto de origen y una dirección de propagación. Y por tanto, el cálculo de intersecciones entre rayos y objetos se reduce a la resolución de ecuaciones en las que intervienen vectores y primitivas.

4. ¿Qué es la computación cuántica?

4.1. Conceptos básicos: Las computadoras actuales no son omnipotentes la cruda realidad es que tienen muchas limitaciones. El conjunto de problemas que pueden resolver es más bien pobre, aunque claro, los problemas que les atañen usualmente los resuelven mucho más rápido que lo que nosotros los seres humanos podríamos hacerlo. Parte de su limitación fundamental radica en que tienen una cantidad finita de estados, son máquinas discretas y en un momento dado solo pueden estar en uno de esos estados perfectamente identificado y se puede predecir con exactitud que llegará a él, esto es, son máquinas determinísticas.

Utilizando los principios de la mecánica cuántica se ha identificado un tipo de máquina que puede estar en más de un estado al mismo tiempo: la computadora cuántica. Esta cualidad le ayuda, en teoría, porque todavía no se ha construido un prototipo funcional y estable, aunque ya se han presentado bastantes candidatos, a realizar computaciones en tiempos inconcebibles para las computadoras clásicas

En el corazón de la computadora cuántica reina el flamante y elusivo sucesor del bit: el qbit o quantum binary digit, que puede presentar uno de los dos estados del bit (1 y 0) pero también es capaz de colocarse en ambos estados al mismo tiempo gracias a la superposición, esta es la base de lo que se denomina paralelismo cuántico.

Al superponer estados, los qbits pueden procesar la información en simultáneo, en lugar de hacerlo

en serie o en paralelo, como las computadoras actuales. Por ejemplo, para procesar 8 bits en paralelo se usarían 8 bits físicos que en un ciclo de computación representan un solo valor de entre 256 posibles, con lo cual el sistema tiene 256 estados. Procesar todos los estados requeriría igual cantidad de ciclos como mínimo. En cambio, en la computadora cuántica 8 qbits podrían asumir todas las combinaciones de estados de 8 bits y procesar todo en un solo ciclo de computación.

Figura 3. Representación de los 4 diferentes estados de un qbit

La capacidad computacional de procesamiento paralelo de la computación cuántica, es enormemente incrementada por el procesamiento masivamente en paralelo, debido a una interacción que ocurre durante algunas millonésimas de segundo. Este fenómeno de la mecánica cuántica es llamado "entanglement".

Debido al "entanglement", dos partículas subatómicas, permanecen indefectiblemente relacionadas entre si, si han sido generadas en un mismo proceso. Estas partículas forman subsistemas que no pueden describirse separadamente. Cuando una de las dos partículas sufre un cambio de estado, la otra lo sufre automáticamente. Y eso ocurre de forma instantánea y con independencia de la distancia que las separe en ese momento. Esta característica se desencadena cuando se realiza una medición sobre una de las partículas.

(6)

En teoría es posible realizar todas las operaciones en un solo paso usando computación cuántica, pero solamente uno de todos los resultados podrá ser conocido en cada momento, lo que en la práctica significa que no se obtiene ningún beneficio de rendimiento para este caso frente a la computación tradicional. Nuevamente esto es un resultado previsto por la mecánica cuántica pues los estados cuánticos superpuestos se “colapsan” a un solo valor al momento en que se efectúa una medición.

Las técnicas criptográficas de llave pública y llave privada, como RSA o intercambio de clave de Diffie y Hellman, entre otras, pueden recibir ataques, es decir, intentos no autorizados de desencriptamiento, pero los atacantes se enfrentarán con el problema de factorización de números grandes y el problema del logaritmo discreto respectivamente. Estos problemas se vuelven computacionalmente irresolubles si los números primos involucrados son muy grandes. Pero con computación cuántica una persona podría rápidamente resolver ambos problemas y descifrar la información contenida en los mensajes. Esta posibilidad compromete seriamente la seguridad de muchísimos sistemas informáticos actuales, incluyendo bancos, universidades, empresas de Internet, etc.

Tal escenario de ataque informático con computación cuántica fue descubierto por Peter Shor, en 1994, trabajando para AT&T. Shor describió completamente el algoritmo cuántico para encontrar los dos números primos que factorizan a un número, sabiendo que es el resultado de multiplicar dos primos, y por ello se le nombró en su honor Algoritmo de Shor

4.2. Algoritmos cuánticos: Se aprecia una conexión entre mecánica cuántica y las ciencias de la computación, que surge cuando se observa que propiedades simples de los sistemas cuánticos, tales como las perturbaciones inevitables implicadas en cualquier medida del sistema cuántico, podrían tener potencial uso práctico, en la que se bautizado como la "criptografía cuántica". Esta nueva disciplina abarca varias ideas, y entre la que está más firmemente establecida es la distribución de clave cuántica. Éste es un ingenioso método, en el cual los estados cuánticos transmitidos se usan para

realizar la siguiente operación: establecer en dos lugares separados un par de idénticas pero aleatorias secuencias de dígitos binarios, sin permitir que una tercera parte pueda hacerse con la secuencia; y esto es útil cuando se tiene en cuenta que una secuencia aleatoria puede ser usada como clave criptográfica para permitir comunicaciones seguras. La propiedad notable es que los principios de la mecánica cuántica garantizan un tipo de conservación de la información cuántica, de tal forma que cuando la necesaria información cuántica de la secuencia ha llegado a las partes interesadas en hacerse con una clave, pueden estar seguros que sólo ha ido a parar a ellos (y no a otro sitio). Ahora, de la misma forma que la potencial capacidad de estos sistemas cuánticos para garantizar la seguridad en la transmisión de información secreta, la capacidad de cálculo puede ser usada para atacar sistemas criptográficos clásicos, tales como DES(Data Encryption Standard) ó el RSA(Rivest, Shamir, Adleman). Romper un DES requiere una búsqueda de entre 2^56 =7 x10^16 posibles claves. Si esta búsqueda puede ser comprobada a una razón de 1 millón de claves por segundo, un ordenador clásico necesitaría miles de años para hallar la clave correcta, mientras que un ordenador cuántico precisaría menos de cuatro minutos usando un algoritmo cuántico.

(7)

ello son precisos códigos de corrección de errores que funcionen tan efectivamente, que difícilmente un único qbit falle en el curso del cálculo. Son la versión cuántica de los códigos de corrección de errores clásicos, tales como los de Hamming o de Huffman, pero con la particularidad de que son esenciales para un funcionamiento efectivo en la transmisión de datos.

5. Estudios previos

Pese a que ray tracing es una técnica muy antigua [2, 9, 10], su uso para aplicaciones interactivas es relativamente nuevo. Las GPUs están optimizadas para rasterización de triángulos [11, 12], aunque no obstante, ha habido diversos intentos de adaptar su uso para acelerar el ray tracing [3, 4, 5, 6]. Actualmente, los resultados obtenidos en GPUs apenas mejoran ligeramente los resultados que se obtienen en CPUs convencionales. Ello es debido a que si bien las GPUs son arquitecturas paralelas de cómputo muy poderosas, presentan dificultades para aplicaciones con alto control de flujo. Si bien esto posiblemente cambiara en el futuro por el continuo desarrollo de las GPUs. Por tanto, consideramos que sigue siendo interesante desarrollar técnicas de aceleración de ray tracing en CPUs que sean adaptables a su uso en GPUs. Wald [7, 8] presenta un algoritmo basado en CPU que explota la coherencia existente en los rayos primarios. Se basa en la idea de que los rayos coherentes, con mucha posibilidad, harían el mismo recorrido a través de la estructura jerárquica de indexación espacial que contiene la escena, e intersectaran con los mismos objetos.

Su propuesta, pues, consiste en recorrer el índice espacial y realizar las intersecciones rayo – triangulo con paquetes de cuatro rayos empleando las instrucciones SIMD de los procesadores actuales, reduce el tiempo de cálculo del algoritmo al realizar los cómputos para los cuatro rayos en paralelo. Además, Wald presenta un meticuloso diseño orientado a minimizar la complejidad del código y las fallas de cache. Esta idea es válida para rayos primarios pues es fácil localizar rayos que a priori tengan altas posibilidades de ser coherentes (aquellos que atraviesen el mismo pixel o pixeles consecutivos de la imagen). Pero falla para rayos

secundarios donde no es posible hacer esta presunción.

Una de las partes más importantes para la implementación en forma paralela de la técnica de ray tracing es identificar una manera de descomponer la aplicación en partes para que cada una de estas pueda ser procesada por un proceso diferente [11]. Con respecto a este punto existen diferentes tipos de paralelismo que pueden ser usados como: el paralelismo funcional (functional parallelism) y el paralelismo en datos (data parallelism) [2], en este último. La idea es que dividamos la imagen en bloques y asignemos cada uno de ´estos a procesos para que al final todos ellos en conjunto construyan la imagen. Este modelo generalmente está limitado por los recursos físicos (computadoras, procesadores) con los que contemos y además en este cobra importancia la red que comunica a cada una de las unidades de procesamiento [6]. Ray tracing es una técnica que podemos considerar inherentemente paralela, ya que el cálculo del color de cada uno de los pixeles se puede realizar en forma independiente, esto permite que haya una comunicación casi nula entre las unidades de procesamiento. En cada una de las implementaciones, las unidades de procesamiento tienen acceso local a la lista de objetos que existen en la escena, esto permite que el cálculo del color del pixel se realice de forma independiente y la comunicación se realice al final solo para que envíen la información del bloque al proceso que se encarga de guardar la imagen al archivo [3].

Sabemos que la computación cuántica es capaz de aprovechar la posibilidad de superposición en forma de paralelismo cuántico [10, 12]. No obstante, pese al manejo simultáneo de mucha información y a que las etapas en la computación no son las mismas que las de la computación clásica, no deja de ser cierto que realizamos con ella una serie de operaciones secuencialmente, por mucho que algunas de sus etapas se lleven a cabo de golpe. Al fin y al cabo, basta decidir que es una etapa y que no lo es para que la idea tradicional de algoritmo siga siendo válida.

(8)

tiempo exponencial. Lo normal es que para hacerlo la computación cuántica aproveche su capacidad de explorar rápidamente el espacio de soluciones [17, 18]. También hay problemas fuera del dominio np que la computación cuántica puede resolver en un tiempo polinómico respecto a la entrada, mientras que un computador tradicional lo hará en un tiempo también exponencial.

El principio de superposición nos permite condensar en un único estado toda una serie de alternativas, obteniéndose la propiedad conocida como paralelismo cuántico, que es básicamente lo que permite reducir drásticamente el número de pasos necesarios para determinadas tareas.

La renderización debe aprovechar las características de las GPUs actuales y su capacidad de paralelismo, la computación cuántica ofrece esta capacidad, aunque por el momento no exista la máquina capaz de probar el resultado de un algoritmo que los combine, esto no quiere decir que no se deba iniciar el estudio [ 19].

Los procesadores especializados de gráficos han evolucionado de manera sorprendente en nuestros días, en comparación a sus congéneres CPU. Uno los procesadores especializados para gráficos, La unidad de procesamiento gráfico (GPU: por sus siglas en ingles) vino a recoger la atención no sólo de los programadores de aplicaciones gráficas, sino también de los programadores de las aplicaciones de propósito general, donde es posible explotar la gran capacidad informática de este tipo de material en la resolución de problemas [6, 13].

Pero de nada sirve el poder de computo de una GPU sin que pueda ser programada directamente para evitar el paso por la CPU; CUDA [15] es una tecnología desarrollada por NVIDIA consistente en un entorno de programación en C que tiene la particularidad de que después de que el programa es compilado se ejecuta no sobre el procesador sino sobre la tarjeta gráfica (o GPU). Lo interesante de esta tecnología para la computación de alto rendimiento es que mientras que el rendimiento de una CPU moderna (como un Intel Core 2 Duo) puede estar entorno a una decena de GigaFlops la capacidad de procesamiento de una máquina con varias

GPU actuando en paralelo puede multiplicar esta cifra entre 40 y 100 veces.

Las aplicaciones de esta tecnología son muchas, desde todo los que tenga que ver con simulación de procesos físicos (astrofísica, física estadística, fluidos...), biológicos (genética, simulación de plegado de proteínas...), obtención de imágenes médicas de alta resolución, criptografía y por supuesto computación grafica.

OpenCL 1.0, el primer estándar multiplataforma, abierto y sin regalías para la programación en paralelo de los modernos procesadores y otros dispositivos actuales. OpenCL ("Open Computing Language", Lenguaje de Computación Abierto) consta de una API y de un lenguaje de programación. Juntos permiten crear aplicaciones con paralelismo a nivel de datos y de tareas que pueden ejecutarse tanto en GPUs como CPUs. OpenCL fue inicialmente propuesto por Apple y luego el consorcio de desarrolladores Khronos Group se encargó de desarrollar la especificación

[21]

.

6. Conclusiones

(9)

7. Referencias

[1] HenrikWann Jensen. Global Illumination using Photon Maps. In Rendering Techniques '96. Eds. X. Pueyo and P. Schröder.Springer-Verlag, pp. 21-30, 1996

[2] A. Appel. Some Techniques for Shading Machine Renderings of Solids. SJCC, pages 27-45, 1968.

[3] N. Carr, J. Hall and J. Hart. The ray engine. In Proceedings of the ACM Siggraph/Eurographics conference on Graphics hardware, 37-46. Eurographics Association, 2002. ISBN: 1-58113-580-7.

[4] M .Christen: Ray Tracing on GPU. Diploma thesis, University of Applied Sciences Basel, Switzerland, 2005.

[5] T. Foley and J. Sugerman. Kd-tree Acceleration Structures for a GPU Raytracer. In Proc. Graphics Hardware, 15-22, 2005.

[6] T. Purcell, I. Buck, W. Mark, and P. Hanrahan. Ray Tracing on Programmable Graphics Hardware. ACM Transactions on Graphics, 21(3):703-712, 2002. (Proceedings of SIGGRAPH 2002).

[7] I. Wald, P. Slusallek, C. Benthin, and M. Wagner. Interactive Rendering with Coherent Ray Tracing. Computer Graphics Forum, 20(3):153-164, 2001. (Proceedings of Eurographics).

[8] I. Wald. Realtime Ray Tracing and Interactive Global Illumination. PhD thesis, Saarland University, 2004

[9] M. Agus, E. Gobbetti, J. Guitien, F. Marton, and G. Pintore, "GPU Accelerated Direct Volume Rendering on an Interactive Light Field Display," Comput. Graphics Forum, vol. 27, no. 2, pp. 231-240, 2008.

[10] E. Bernstein and U. Vazirani, "Quantum Complexity Theory," SIAM Journal on Computing, vol. 26, no. 5, p. 1411, 1997.

[11] M. Gauvin and D. Scott, "Multi-CPU architecture speeds ray tracing," Laser Focus World, vol. 43, no. 3, pp. 49-52, 2007.

[12] D. Gottesman, "Fault-tolerant quantum computation with local gates," Journal of Modern Optics, vol. 47, no. 2, pp. 333-345, 2000.

[13] A. Herrera, "GPU Computing Uncovered," Comput. Graphics World, vol. 30, no. 6, pp. 34-37, 2007.

[14] M. Nagy and S. G. Akl, "Quantum computation and quantum information," International Journal of Parallel, Emergent & Distributed Systems, vol. 21, no. 1, pp. 1-59, 2006.

[15] B. Oster, "Programming The CUDA Architecture: A Look At GPU Computing," Electronic Design, vol. 57, no. 7, pp. 45-49, 2009.

[16] S. Popov, J. Ganther, H. P. Seidel, and P. Slusallek, "Stackless KD-Tree Traversal for High Performance GPU Ray Tracing," Comput. Graphics Forum, vol. 26, no. 3, pp. 415-424, 2007.

[17] A. van Tonder, "A Lambda Calculus for Quantum Computation," SIAM Journal on Computing, vol. 33, no. 5, pp. 1109-1135, 2004.

[18] P. Zuliani, "Compiling quantum programs," Acta Informatica, vol. 41, no. 7, pp. 435-473, 2005.

[19] Marco O. Lanzagorta, Richard B. Gomez, Jeffrey K. Uhlmann, “Quantum rendering”, Proc. SPIE, Vol. 5105, 128 (2003); DOI:10.1117/12.486410, September 2003

[20] M. Agus, E. Gobbetti, J. Guitien, F. Marton, and G. Pintore, "GPU Accelerated Direct Volume Rendering on an Interactive Light Field Display," Comput. Graphics Forum, vol. 27, no. 2, pp. 231-240, 2008.

Figure

Figura 1.  Imagen sintetizada mediante Ray  Tracing. Creada por D Scott Ferrin (C), 6/1995

Referencias

Documento similar