2011-12-24 9 views
5

que estoy haciendo lo siguiente:inicializador no permitido para __shared__ variable para CUDA

__shared__ int exForBlockLessThanP = totalElementLessThanPivotEntireBlock[blockIdx.x]; 

donde totalElementLessThanPivotEntireBlock es una matriz en la GPU. El compilador está lanzando como error como se indica en el título de la pregunta. Realmente no entiendo por qué esto es un problema?

Respuesta

7

La inicialización estática de variables compartidas es ilegal en CUDA. El problema es que la semántica de cómo cada hilo debe tratar la inicialización estática de la memoria compartida no está definida en el modelo de programación. ¿Qué hilo debería hacer la escritura? ¿Qué sucede si el valor no es uniforme entre los hilos? ¿Cómo debería el compilador emitir código para un caso así y cómo debería funcionar el hardware?

En su ejemplo absurdo le pide a cada hilo en el bloque que inicialice la misma variable compartida con un valor, básicamente una carrera de memoria compilada estáticamente.

+1

SO, ¿cuál es el método correcto? – Programmer

+0

Por favor, tenga en cuenta. En lo anterior, le pido a cada hilo en el bloque que asigne exForBlockLessThanp al mismo valor – Programmer

+0

Use una instrucción condicional para que un hilo haga la inicialización al comienzo del núcleo – talonmies

Cuestiones relacionadas