¿Cuántas memoria latencia de memoria ciclos por tipo de acceso en OpenCL / CUDA?
Pregunta
Me miró a través de la guía de programación y las mejores prácticas guiar y mencionó que el acceso de memoria global lleva a 400-600 ciclos. No he visto mucho en los otros tipos de memoria caché como la textura, el caché constante, la memoria compartida. Registros tienen 0 latencia de la memoria.
creo caché constante es la misma que si los registros de todas las discusiones utilizan la misma dirección en la memoria caché constante. Peor de los casos no estoy tan seguro.
la memoriacompartida es el mismo que los registros siempre que no haya conflictos de banco? Si hay entonces ¿cómo se despliegan la latencia?
¿Qué pasa con la textura caché?
Solución
La latencia a la memoria compartida / constante / textura es pequeño y depende del tipo de dispositivo que tenga. En general, sin embargo GPU están diseñados como una arquitectura de rendimiento que significa que mediante la creación de suficientes hilos de la latencia de la memoria, incluyendo la memoria global, está oculta.
La razón las guías hablan de la latencia de la memoria global es que la latencia es órdenes de magnitud mayor que la de otros recuerdos, lo que significa que es la latencia dominante para ser considerado para la optimización.
Usted ha mencionado caché constante en particular. Tiene usted toda la razón en que si todos los hilos de urdimbre dentro de un grupo (es decir de 32 hilos) acceso a la misma dirección, entonces no hay penalización, es decir, el valor se lee de la memoria caché y difusión a todos los hilos simultáneamente. Sin embargo, si subprocesos tienen acceso a diferentes direcciones entonces la necesidad de accesos serializar desde la memoria caché sólo puede proporcionar un valor a la vez. Si estás usando el CUDA Profiler, a continuación, ésta se mostrará debajo del mostrador serialización.
La memoria compartida, a diferencia de caché constante, puede proporcionar un ancho de banda mucho mayor. Echa un vistazo a la CUDA Optimización charla para más detalles y una explicación de banco conflictos y sus efectos.
Otros consejos
Para (Kepler) Tesla K20 las latencias son como sigue:
Memoria global: 440 relojes
la memoria constante
L1: 48 relojes
L2: 120 relojes
Memoria compartida: 48 relojes
memoria de textura
L1: 108 relojes
L2: 240 relojes
¿Cómo puedo saber? Me encontré con los microbenchmarks descritos por los autores de Desmitificar la GPU a través de la microarquitectura Microbenchmarking . Ellos proporcionan resultados similares para la mayor GTX 280.
Esto se midió en un clúster Linux, el nodo de computación donde estaba corriendo los puntos de referencia no fue utilizado por cualquier otro usuario o corrió cualesquiera otros procesos. Es Linux bullx con un par de 8 Xeons núcleo y 64 GB de RAM, NVCC 6.5.12. He cambiado la sm_20
a sm_35
para compilar.
También hay una operandos costo capítulo en PTX ISA aunque no es muy útil, que sólo reitera lo que ya esperas, sin dar cifras precisas.