VS2017 CUDA编程学习1:CUDA编程两变量加法运算
VS2017 CUDA编程学习2:在GPU上执行线程
VS2017 CUDA编程学习3:CUDA获取设备上属性信息
VS2017 CUDA编程学习4:CUDA并行处理初探 - 向量加法实现
VS2017 CUDA编程学习5:CUDA并行执行-线程
VS2017 CUDA编程学习6: GPU存储器架构
VS2017 CUDA编程学习7:线程同步-共享内存
前言
又到了学习CUDA编程的时刻,继续上一篇线程同步的学习,这次学习原子操作,这里做下笔记并分享给大家。
1. 原子操作的理解
我们都知道,多线程运行程序不可避免会出现数据竞态问题,即多个线程同一时刻读取-修改-写入同一变量数据,很明显这会出问题。举个例子,我的账户有5000元,我和我的朋友在不同的ATM机同时取4000元,这里的数据竞态问题就是ATM机就会分别吐给我和我的朋友4000元,但是我的账户只有5000元,确取出了8000元,看看,这就是有问题。
原子操作就可以避免多线程数据竞态问题,个人理解,原子操作就是不可多个线程同时读取-修改-写入同一变量数据。
2. C++ CUDA实现原子操作
这里以自增运算为例实现CUDA原子操作,即使用atomicAdd()函数,当然这里也会给出非原子操作结果,来证实上面我们所说的多线程数据竞态问题确实存在。
#include <stdio.h>
#include <cuda.h>
#include <cuda_runtime.h>
#include <device_launch_parame