cuda

Memoria de texturas en CUDA: concepto y ejemplo sencillo para demostrar el rendimiento.



(1)

  1. Cuda SDK contiene un ejemplo sencillo de simpleTexture que demuestra la realización de una transformación de coordenadas 2D trivial utilizando una textura.
  2. Lo primero que hay que tener en cuenta es que la memoria de textura es la memoria global. La única diferencia es que se accede a las texturas a través de un caché de solo lectura dedicado, y que el caché incluye un filtro de hardware que puede realizar una interpolación lineal de punto flotante como parte del proceso de lectura. Sin embargo, el caché es diferente de un caché convencional, ya que está optimizado para la localidad espacial (en el sistema de coordenadas de la textura) y no para la localidad en la memoria. Para algunas aplicaciones, esto es ideal y brindará una ventaja de rendimiento tanto por la memoria caché como por los FLOP gratuitos que puede obtener del hardware de filtrado, pero para otras, no lo hará y las texturas pueden ser más lentas porque el acceso implica una penalización por falta de memoria caché Además de la lectura de la memoria global, no se requiere interpolación.

Entonces, algo así como la simulación de partículas puede beneficiarse de las texturas porque los cálculos generalmente se realizan en celdas o volúmenes de control donde se consideran las interacciones locales, y las partículas vecinas necesitan acceder a las otras velocidades y aceleraciones. Un caché espacial local funciona mejor para esto que un caché de memoria lineal simple. Pero para otras aplicaciones, no hay una localidad espacial intrínseca en los patrones de acceso a la memoria, y las texturas ofrecen poco o ningún beneficio sobre la memoria caché convencional.

Estoy leyendo el informe técnico de NVIDIA titulado Simulación de partículas con CUDA por Simon Green.

Describe el ejemplo de partículas SDK y los algoritmos utilizados.

Mientras analiza el rendimiento del código, el autor dice que los arreglos de memoria global de posición y velocidad de las partículas están "ligados" a las texturas.

Ahora estoy muy confundido por el concepto de memoria de texturas. La guía de programación NVIDIA CUDA pasa por algunas explicaciones realmente sangrientas y difíciles sin ningún ejemplo.

Por lo tanto tengo 2 preguntas:

  1. Alguien me puede dar / remitir a un ejemplo realmente simple (Memoria de texturas para tontos) de cómo se usa la textura y cómo mejora el rendimiento.

  2. La guía de programación CUDA 4.0 en la página 40 en la página dice "Una textura puede ser cualquier región de la memoria lineal o una matriz CUDA". Ahora si, (como se dice), la memoria de textura ofrece un mejor rendimiento que la memoria global, ¿por qué no "vincular" toda la memoria global a la memoria de textura?