Tengo varios bloques, cada uno con algunos enteros en una matriz de memoria compartida de tamaño 512. ¿Cómo puedo verificar si la matriz en cada bloque contiene un cero como elemento?Escrituras concurrentes en la misma ubicación de memoria global
Lo que estoy haciendo es crear una matriz que reside en la memoria global. El tamaño de esta matriz depende del número de bloques y se inicializa en 0. De ahí que cada bloque escriba en a[blockid] = 1
si la matriz de memoria compartida contiene un cero.
Mi problema es cuando tengo varios hilos en un solo bloque escribiendo al mismo tiempo. Es decir, si la matriz en la memoria compartida contiene más de un cero, varios hilos escribirán a[blockid] = 1
. ¿Esto generaría algún problema?
En otras palabras, ¿Sería un problema si 2 hilos escriben exactamente el mismo valor en el mismo elemento de matriz en la memoria global?
Mi +1 por responder desde la perspectiva de CUDA que es lo que OP está buscando en lugar de una perspectiva de desarrollo de entorno C/C++. –
Consulte mi respuesta para obtener más información (no se pueden publicar enlaces y comillas en un comentario). CUDA se asegura de que si varios hilos en una urdimbre escriben en la misma ubicación, al menos un hilo tendrá éxito al escribir en la ubicación, pero el hilo que es (o qué hilo es el último) no está definido. – Tom