CUDA y C ++ | Operaciones atómicas en matrices

Sin operación atómica

Cuando se realiza una secuencia de operaciones de "lectura-modificación-escritura", una gran cantidad de subprocesos que modifican un área de memoria pequeña causará muchos problemas. Por ejemplo, para d_out [i] ++, este código primero lee el valor original de d_out [i] de la memoria, luego realiza la operación +1 y luego escribe el resultado en la memoria. Sin embargo, varios subprocesos que operan en esta área pueden obtener resultados incorrectos.

En el siguiente ejemplo, idealmente, habrá 1000 subprocesos realizando (+1) operaciones para cada posición de elemento en la misma memoria, y el elemento en cada posición en la matriz se incrementará en 1000 (el siguiente 1), y el único El resultado de salida no es de esta manera. Esto se debe a que muchos subprocesos leen la misma ubicación al mismo tiempo, luego aumentan el mismo valor y los almacenan en la memoria de video.

#include <stdio.h>
#define N 5

__global__ void gpu_global_memory(int* d_a

Supongo que te gusta

Origin blog.csdn.net/weixin_43236007/article/details/109711085
Recomendado
Clasificación