transitoria test tarjeta repentina por para online grafica estres diagnosticar amnesia caching cuda gpu hpc tlb

caching - test - ¿Cómo evitar la falla de TLB(y la alta inversión de memoria global) en las GPU CUDA?



test para tarjeta de video (1)

Solo puede evitar errores de TLB al cambiar el patrón de acceso a la memoria. Un diseño diferente de sus datos en la memoria puede ayudar con esto.
Una textura 3D no mejorará su situación, ya que comercializa una localidad espacial mejorada en dos dimensiones adicionales frente a una localidad espacial reducida en la tercera dimensión. Por lo tanto, leería innecesariamente datos de vecinos a lo largo del eje Y.

Sin embargo, lo que puede hacer es mitigar el impacto de la latencia resultante en el rendimiento. Para ocultar t = 700 ciclos de latencia en un ancho de banda de memoria global de b = 250GB / s, necesita tener transacciones de memoria para b / t = 175 KB de datos en vuelo en cualquier momento (o 12.5 KB para cada uno de los 14 SMX). Con una interfaz de memoria completamente cargada y una alta proporción de errores TLB, sin embargo, encontrará que la latencia se acerca a los 2000 ciclos, lo que requiere aproximadamente 32 KB de transacciones en vuelo por sm.

Como cada palabra de una transacción de lectura de memoria en vuelo requiere un registro donde se almacenará el valor una vez que llega, ocultar la latencia de memoria tiene que equilibrarse con la presión de registro. Mantener 32 KB de datos en vuelo requiere 8192 registros, o el 12.5% ​​del total de registros disponibles en una SMX.

(Tenga en cuenta que para las estimaciones generales anteriores he descuidado la diferencia entre KiB y KB ).

El título podría ser más específico que mi problema real, aunque creo que responder a esta pregunta resolvería un problema más general, que es: cómo disminuir el efecto de la alta latencia (~ 700 ciclos) que proviene de un mundo global aleatorio (pero fusionado) acceso a memoria en GPU.

En general, si uno accede a la memoria global con carga combinada (por ejemplo, leo 128 bytes consecutivos), pero con una distancia muy grande (256KB-64MB) entre accesos fusionados, se obtiene una alta tasa de errores TLB (Translation Lookaside Buffer). Esta alta tasa de errores de TLB se debe al número limitado (~ 512) y al tamaño (~ 4KB) de las páginas de memoria utilizadas en la tabla de búsqueda de TLB.

Supongo que la alta tasa de errores TLB debido al hecho de que la memoria virtual es utilizada por NVIDIA, el hecho de que obtengo una alta (98%) Repetición global de memoria global y bajo rendimiento (45GB / s, con una K20c) en el perfilador y el hecho de que la partición de camping no es un problema desde Fermi.

¿Es posible evitar la alta tasa de errores de TLB de alguna manera? ¿Ayudaría la caché de texturas 3D si estoy accediendo a un cubo (X x Y x Z) unido a lo largo de la dimensión X y con un "zancada" X * Y a lo largo de la dimensión Z?

Cualquier comentario sobre este tema es apreciado.

Restricciones: 1) los datos globales no pueden ser reordenados / transpuestos; 2) kernel está vinculado a la comunicación.