CUDA C支持共享内存, 将CUDA C关键字__shared__添加到变量声明中,将使这个变量驻留在共享内存中。对在GPU上启动的每个线程块,CUDA C编译器都将创建该变量的一个副本。线程块中的每个线程都共享这块内存,但线程无法看到也不能修改其他线程块的变量副本。共享内存缓冲区驻留在物理GPU上,而不是GPU之外的系统内存中。因此访问共享内存时的延迟远远低于访问普通缓冲区的延迟,使得共享内存像每个线程块的高速缓存或者中间结果暂存器那样高效。

const int N = 33*1024;
const int threadsPerBlock = 256;__global__ void dot(float *a, float *b, float *c)
{__shared__  float  cache[threadsPerBlock];int tid = threadIdx.x + blockId.x*blockDim.x;int cacheIndex = threadIdx.x;float temp = 0;while(tid<N){temp += a[tid]*b[tid];tid += blockDim.x * gridDim.x; }cache[cacheIndex] = temp;  __syncthreads();int i = blockDim.x/2;while(i != 0){if(cacheIndex < i)cache[cacheIndex] += cache[cacheIndex + i];__syncthreads();i /= 2;}if(cacheIndex == 0)c[blockIdex.x] = cache[0];
}            

__syncthreads();

这个函数调用将确保线程块中的每个线程都执行完__syncthreads()前面的语句后,才会执行下一条语句。

转载于:https://www.cnblogs.com/programmer-wfq/p/6733272.html

CUDA: 共享内存与同步相关推荐

  1. 访问时发生了共享冲突是什么意思_【CUDA 基础】5.1 CUDA共享内存概述

    Abstract: 本文为CUDA内存的概述,介绍共享内存的模型,分配,访问,配置,同步等内容Keywords: 模型,分配,访问,配置,同步 开篇废话 这里首先要进一步说明一下,前面我们在说缓存的时 ...

  2. C/C++使用Windows的API实现共享内存以及同步

    目录 共享内存 事件-Event 实现思路 创建方(服务端) 连接方: 进程同步: windows的API CreateFileMapping MapViewOfFile CreateEvent Wa ...

  3. CUDA共享内存操作(__shared__关键字)

    CUDA 对GPU的显存操作时,若线程频繁对某个数据进行读写操作,可以设置操作的数据常驻缓存,这样可以进一步提高代码的运行效率,并且同一个线程块内的所有线程共享该内存区域.然而当出现多个线程对同一个内 ...

  4. linux如何创建共享内存,linux实现共享内存同步的四种方法

    https://blog.csdn.net/sunxiaopengsun/article/details/79869115 本文主要对实现共享内存同步的四种方法进行了介绍. 共享内存是一种最为高效的进 ...

  5. linux 实现共享内存同步

    本文主要对实现共享内存同步的四种方法进行了介绍. 共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝.它是IPC对象的一种. 为了在多个进程间交换信息,内核专门留出了 ...

  6. cuda 本地内存使用_CUDA 基础知识博客整理

    CUDA 0.0 腾讯云CUDA环境搭建 1.0 并行计算与计算机架构 1.1 异构计算与CUDA 2.0 CUDA编程模型概述(一) 2.1 CUDA编程模型概述(二) 2.2 给核函数计时 2.3 ...

  7. 进程间通信之-共享内存Shared Memory--linux内核剖析(十一)

    共享内存 共享内存是进程间通信中最简单的方式之中的一个. 共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区. 共享内存同意两个或很多其他进程訪问同一块内存,就如同 malloc() 函数 ...

  8. 进程间通信IPC(二)(共享内存、信号、信号量)

    共享内存: 共享内存就是允许两个或多个进程共享一定的存储区.就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针.当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更 ...

  9. linux进程间的通信(C): 共享内存

    一.共享内存介绍 共享内存是三个IPC(Inter-Process Communication)机制中的一个. 它允许两个不相关的进程访问同一个逻辑内存. 共享内存是在两个正在进行的进程之间传递数据的 ...

  10. Linux 下的进程间通信:管道、消息队列、共享文件、共享内存

    Table of Contents 无名管道 命名管道 消息队列 共享文件 示例 1. 生产者程序 示例 2. 消费者程序 共享内存 示例 3. memwriter 进程的源程序 示例 4. memr ...

最新文章

  1. tushare正确爬取 指数数据
  2. mysql 代理作业_查看SQLServer 代理作业的历史信息
  3. 单一职责原则--设计模式系列
  4. python作业题目用户输入行数、输出倒的等腰三角形_智慧职教云课堂APPPython程序设计(常州工业职业技术学院)作业期末考试答案...
  5. itchat 保存好友信息以及生成好友头像图片墙
  6. linux 文件系统 dfs,分布式文件系统fastDFS 机器硬件要求
  7. IE6/7 double padding-bottom Bug
  8. linux C 中的volatile使用【转】
  9. 133道Java面试题及答案(面试必看)
  10. python 拼音输入法_用Python从0开始实现一个中文拼音输入法
  11. couch db_如何在Ubuntu上安装Couch DB 1.5
  12. 【Spring MVC 源码】MultipartResolver 的使用与解析
  13. java基础周报_java第四周周报
  14. 安卓海外SDK接入问题
  15. mac安装zsh和oh my zsh,并配置显示历史命令
  16. 中国惠普前总裁孙振耀的毕生经验之谈
  17. 实习总结1-小试牛刀(面试经历1)
  18. 多线程爪巴虫下载进击的巨人
  19. 拨号上网变成WiFi热点
  20. 四字节与浮点数之间的转换(c语言实现)

热门文章

  1. 虚拟机报错:collect.exe
  2. CSDN终端数据更新不同步?
  3. gstreamer插件用不了,及黑名单Blacklist的解决办法
  4. php中常见的错误类型有,php中的错误类型有哪些
  5. mysql返回的数据是什么格式_磁盘格式化后能恢复数据吗?先了解什么是格式化...
  6. python编程读取文件内容_python编程从入门到实践:读取整个文件和创建包含文件各行的内容...
  7. php 按行入读文件 返回数组
  8. C++各种文件的作用
  9. string中c_str()用法
  10. 经典vim插件功能说明、安装方法和使用方法