GPU 高性能编程 CUDA :原子性

本文介绍了NVIDIA GPU的计算功能集中的一种关键特性——原子操作。原子操作在多线程环境中保证了读取-修改-写入操作的完整性,尤其在并行计算如计算直方图时,当多个线程可能同时更新同一内存位置时,使用atomicAdd()函数确保了原子性。尽管这可能导致性能下降,硬件仍会确保操作的串行化以防止数据冲突。文章还提及了共享内存和全局内存中的原子操作在直方图计算中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NVIDIA GPU 的计算功能集:

NVIDIA 将 GPU 支持的各种功能统称为计算功能集

nvcc -arch=sm_11
//告诉编译器需要1.1版本或者更高
nvcc -arch=sm_12
//告诉编译器需要1.2版本或者更高

原子操作简介:

在执行过程中不能分解为更小的部分,将满足这种条件限制的操作称为原子操作,当有数千个线程在内存访问上发生竞争时,这些操作可以保证在内存上实现安全的操作

对于 读取-修改-写入 三个操作,我们需要通过某种方式一次性的执行完,并且在执行过程中不会被其他线程中断,这些操作就是原子操作

计算直方图:

#define SIZE (100*1024*1024)
int main(void){
    unsigned char *buffer = (unsigned char*)big_random_block(SIZE);
    unsigned int histo[256];
    for(int i=0;i<256;i++)
        histo[i]=0;
    for(itn i=0;i<SIZE;i++)
        histo[buffer[i]]++;

在 gpu 上计算时,可以由不同的线程来读取不同的部分输入数据,但多个线程可能同时对输出直方图的同一个元素进行递增,这种情况下就需要使用原子操作


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值