Estoy totalmente de acuerdo con la respuesta del usuario de Quora de que un buen conocimiento del hardware de GPU subyacente es esencial para ser una página eficiente de CUDA en el programador. Puedo explicar eso usando ejemplos:
1. Accesos de memoria combinada: uno de los ejemplos más simples para esto es la suma de matrices, donde las matrices (A [filas] [cols] y B [filas] [cols]) se almacenan en el orden principal de la fila. En este caso, la ecuación para la matriz resultante C [cols] [filas] = A [cols] [filas] + [cols] [filas] funcionará más rápido que la ecuación habitual. Desde que se agrega la columna de matrices, se obtienen muchos elementos en lugar de acceder a las filas.
2. Evitar conflictos de bancos de memoria: la mayoría de los programadores de CUDA usan memoria compartida para evitar la latencia de memoria global para cada hilo (si no está en la memoria caché). Pero una consecuencia de esto es el conflicto del banco de memoria, si más de un hilo accede al mismo banco, tienen que ser respondidos en serie.
- ¿Cuál es la dura realidad que un pasante de ingeniería de software debe conocer?
- ¿Todos los ingenieros de software de Google necesitan tener conocimiento de sus lenguajes principales, C ++ y Java, o pueden ser simplemente expertos en su propio campo, digamos Python / Swift, etc.?
- ¿Trabajar los fines de semana es algo normal como ingeniero de software sin pago adicional, se espera / requiere?
- ¿Cuáles son algunas habilidades comunes requeridas para un ingeniero informático / de software?
- ¿Cuál es la vida técnica promedio de un ingeniero de software?
3. Evitar la divergencia de deformación: en CUDA, una deformación, es decir, 32 hilos ejecuta una sola instrucción en paralelo. Pero una declaración de rama hace que la urdimbre diverja y, por lo tanto, puede conducir a una grave degradación del rendimiento.
Entonces, si el programador conoce el hardware subyacente, ¡el rendimiento será excelente!