CUDA & C++ | 原子操作数组

无原子操作

当进行“读取-修改-写入”操作序列的时候,大量的线程修改一段较小的内存区域将带来很多麻烦。例如将d_out[i]++,这段代码先将d_out[i]的原值从储存器中读取出来,然后执行了+1操作,再将结果回写到储存器。然而多个线程在这个区域操作可能会得到错误的结果。

下面例子,理想情况下每个相同的内存中的元素位置将有1000个线程进行(+1)的运算,数组中的每个位置的元素将被增加1000(次个1),单输出结果并非如此。这是因为很多线程同时读取同样的位置,然后增加同样的值,并将它们储存到显存中。

#include <stdio.h>
#define N 5

__global__ void gpu_global_memory(int* d_a

猜你喜欢

转载自blog.csdn.net/weixin_43236007/article/details/109711085
今日推荐