VS2017 CUDA编程学习1:CUDA编程两变量加法运算
VS2017 CUDA编程学习2:在GPU上执行线程
VS2017 CUDA编程学习3:CUDA获取设备上属性信息
VS2017 CUDA编程学习4:CUDA并行处理初探 - 向量加法实现
VS2017 CUDA编程学习5:CUDA并行执行-线程
VS2017 CUDA编程学习6: GPU存储器架构
前言
1. CUDA线程同步-共享内存理解
在之前的学习中,CUDA多线程执行都是单独执行的,没有进行交互,也就是我们常说的数据交流,但是实际上我们往往需要多线程交互,这时就可以用到共享内存来完成,但是多线程交互必须要注意同步问题,这和CPU上多线程同步问题一样。
当然,多线程交互不是必须使用共享内存,也可以使用全局内存,只是共享内存速度快。
共享内存位于芯片内部,比全局内存快,延迟大约低100倍(相比于没有缓存的全局内存访问)。之前的博客中有介绍GPU存储器架构,不同块中线程所见到的共享内存数据内容是不同的。
同步问题可以使用__syncthreads()指令完成,该指令保证块中所有线程都将到达该代码行,然后等待所有其他线程执行。
2. C++ CUDA代码实现
这里以求数组均值为例,使用VS2017 C++调用CUDA库实现例子程序。
例子程序主要介绍CUDA库中的新的函数__syncthreads()和共享内存关键字__shared__的使用方法。
#include <iostream>
#include <stdio.h>
#include <cuda.h>
#include <cuda_runtime.h>
#</