es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comportamientos extraños de un kernel de CUDA con bucle infinito en diferentes GPU de NVIDIA.

#include

void loop(void) {
int smid = -1;
if (threadIdx.x == 0) {
asm volatile(“mov.u32 %0, %%smid;”: “=r”(smid));
printf(“smid: %d\n”, smid);
}
while (1);
}

int main() {
loop<<<1, 32>>>();
cudaDeviceSynchronize();
return 0;
}
“`
Este es mi código fuente, el kernel imprime smid cuando el índice del hilo es 0 y luego entra en un bucle infinito. El host invoca el kernel de cuda anterior y espera por él. Realicé algunos experimentos en 2 configuraciones diferentes, como sigue:

  • 1. GPU(Geforce 940M) SO(Ubuntu 18.04) MPS(Habilitado) CUDA(v11.0)
  • 2. GPU(Geforce RTX 3050Ti Mobile) SO(Ubuntu 20.04) MPS(Habilitado) CUDA(v11.4)

Experimento 1: Cuando ejecuto este código en configuración 1, el sistema de GUI parece congelarse porque no se pueden observar respuestas gráficas, pero al presionar ctrl+c, este fenómeno desaparece cuando el proceso de CUDA se mata.

Experimento 2: Cuando ejecuto este código en configuración 2, el sistema parece funcionar bien sin ningún fenómeno anormal y se puede mostrar la salida de smid como smid: 2\n.

Experimento 3: Al cambiar la configuración del bloque loop<<<1, 1024>>> y ejecutar este nuevo código dos veces en configuración 2, obtengo la misma salida de smid como smid: 2\nsmid: 2\n.(En el caso de Geforce RTX 3050Ti Mobile, la cantidad de SM es 20, el número máximo de hilos por multiprocesador es 1536 y el número máximo de hilos por bloque es 1024.)

Estoy confundido con estos resultados, y aquí están mis preguntas:

  • 1. ¿Por qué el sistema no muestra la salida de smid en la configuración 1?
  • 2. ¿Por qué el sistema GUI parece congelarse en la configuración 1?
  • 3. A diferencia del experimento 1, ¿por qué el experimento 2 muestra smid normalmente?
  • 4. En el tercer experimento, la configuración del bloque alcanza los 1024 hilos, lo que significa que dos bloques diferentes no pueden programarse en el mismo SM. Bajo el entorno de MPS, todos los contextos de CUDA se fusionarán en un solo contexto de CUDA y compartirán el recurso de la GPU sin timeslice, pero ¿por qué sigo obteniendo el mismo smid en el tercer experimento? (Además, al cambiar la configuración de la cuadrícula a 10 y ejecutarlo dos veces, el smid varía de 0 a 19 y cada smid aparece solo una vez)
Tags:  ,

Answer

  1. Avatar for davy.ai
    1. ¿Por qué el sistema no muestra la salida de smid en la configuración 1?

    – Es posible que la instrucción smid no sea compatible con la GPU (Geforce 940M) utilizada en la configuración 1, por lo que no se puede observar la salida de smid.

    1. ¿Por qué el sistema de GUI parece congelarse en la configuración 1?

    – Esto podría deberse al bucle infinito en la función del kernel que hace que la GPU consuma todos los recursos disponibles, lo que resulta en un comportamiento no receptivo del sistema de GUI.

    1. A diferencia del experimento 1, ¿por qué el experimento 2 muestra smid normalmente?

    – En la configuración 2, la GPU (Geforce RTX 3050Ti Mobile) es compatible con la instrucción smid, lo que permite obtener la salida de smid sin ningún problema.

    1. En el tercer experimento, la configuración de bloque alcanza los 1024 hilos, lo que significa que dos bloques diferentes no pueden programarse en el mismo SM. Bajo el entorno MPS, todos los contextos de CUDA se fusionarán en un contexto de CUDA y compartirán el recurso de la GPU sin timeslice, pero ¿por qué sigo obteniendo el mismo smid en el tercer experimento?

    – Aunque bajo el entorno MPS, todos los contextos de CUDA se fusionan en uno y comparten el recurso de la GPU sin timeslicing, todavía es posible programar bloques en diferentes SM según los recursos disponibles al momento de la programación. Por lo tanto, es posible que se muestre el mismo smid para diferentes bloques incluso si no se programan en el mismo SM. Además, para una configuración de grid de 10 bloques, ya que cada bloque contiene 1024 hilos, se esperan valores de smid que van desde 0 hasta 19, lo que representa los 20 SM diferentes presentes en la GPU.

Comments are closed.