VS2017 CUDA编程学习7:线程同步-共享内存

本文介绍了在CUDA编程中如何利用共享内存进行线程间的数据交互,并通过VS2017 C++示例展示了如何实现线程同步。重点讲解了__syncthreads()函数的作用,以及共享内存相较于全局内存的速度优势。
摘要由CSDN通过智能技术生成


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>
#</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值