por
pobrecito hablador
el Jueves, 11 Diciembre de 2008, 21:41h
(#1107497)
Un shader se compila en tiempo de ejecución. Para eso está la llamada glProgramStringARB (openGL) que recoge un string con el programa escrito en cg (un string de texto plano normal y corriente), lo compila y lo carga en la gráfica. Esto es así debido a que no hay nada más heterogéneo que las gpus. Cada una es hija de su madre, aunque sean del mismo fabricante. De hecho si está escrito en cg, el mismo shader sirve para tarjetas ati y para nvidia (y sus arquitecturas son completamente diferentes).
La diferencia entre openMP y openCL es que openMP se compila a la vez que el resto del programa y openCL se compila cuando va a ejecutarse, es decir cuando openCL conoce la máquina en la que se va a ejecutar el programa (exactamente igual que un shader). Esto permite compilarl los kernels (unidad mínima de computo de opencl) como un shader para hacer gpgpu (si opencl decide que es lo adecuado), o paralelizarlo con threads para la una arquitectura smp, o mandarlo por la red a otros nodos (en un cluster). Al paralelizar un programa no importa la arquitectura, sólo las dependencias entre los datos. Una suma de matrices se paraleliza igual en una gpu, en un cell, un intel o lo que sea. Otra cosa es como se implemente, pero las dependencias de datos son las mismas siempre (vale en este caso no hay jeje).
Re:Opinión a primera vista
(Puntos:0)