一段代码搞懂 gpu memory
2017-08-16 09:52
232 查看
一段代码搞懂 gpu memory
GPU 的 memory 分为 三种,io速度从快到慢排序为:local memory
shared memory
global memory
其中 shared memory 的io 速度是远快于 global memory 的。
这三种 memory 的访问性质是:
local memory: 线程私有,只能本线程访问
shared memory: 线程块(thread block) 共享, 同一个线程块中的线程可以访问。
global memory: 所有线程都可访问。
那么在编程的过程中,这三种 memory 是从什么地方体现出来的呢?
#include <stdio.h> __global__ void memory_demo(float* array) { // array 指针是在 local memory 上的,但是它指向的 memory 是 global memory // i, index 都是 local variable,每个 线程 私有。 int i, index = threadIdx.x; // __shared__ variable 对 block 中的 线程可见 // 并 和 thread block 有相同的 生命周期。 __shared__ float sh_arr[128]; // 将 global memory 的值 拷贝到 shared memory 上。 sh_arr[index] = array[index]; // barrier here __syncthreads(); // 之后对 shared memory 的 IO 要快的多 // do something } int main() { float h_arr[128]; float *d_arr; // cudaMalloc 分配的 memory 是在 global memory 上的。 cudaMalloc((void **)&d_arr, sizeof(float)*128); cudaMemcpy((void*) d_arr, (void*) h_arr, sizeof(float)*128, cudaMemcpyHostToDevice); // 启动 kernel memory_demo<<<1, 128>>>(d_arr); // .. do other stuff }
相关文章推荐
- 一段代码搞懂关于Java中List、Set集合及Map的使用
- HTML5 Canvas 绘制云团 【每日一段代码35】
- 从一段Deferred代码片段想到的
- Unity 延迟执行一段代码的较为优雅的方式
- Python实现装饰模式的一段代码
- 如何看一段JAVA代码耗了多少内存
- Android性能优化大全(Code Memory CPU GPU UI)
- 题 阅读 评论 评论权限 操作 以前实习期间写的一段mfc编程,对数据库和xml格式文档的相关操作 主要相关代码 之五 导入xml格式文档数据到数据库
- 老外写的一段代码,在Server中编写这个类读取配置文件比较实用
- JavaSE7基础 case穿透 多个case执行同一段代码
- notify和notifyAll的一段代码分析
- main中执行shellcode的一段代码的解释
- 一段javascript实现缩略图的好代码
- 一段动态获得和执行方法的代码
- 一段代码分析 理解多线程交互
- 转:一段代码挑战你的杀毒软件
- 一段JS代码,让你的WordPress支持简繁转换(转)
- JavaScript return语句 【每日一段代码53】
- 通过获取客户端Json数据字符串,反序列化为实体对象的一段代码
- 一段计算北京2008年最新税后收入的python代码