OpenCL memory object 之 Global memory (1)
本文转载自:http://www.cnblogs.com/mikewolf2002/archive/2011/12/17/2291239.html
这篇日志是学习AMD OpenCL文档时候的总结。
OpenCL用memory object在host和device之间传输数据,memory object由runtime(运行库,driver的一部分)来管理。
OpenCL中的内存对象包括buffer以及image,buffer是一维数据元素的集合。image主要用来存储一维、二维、三维图像、纹理或者framebuffer。[对image对象,gpu会有优化,比如使用L1 cache,使用tile mode地址等等]
我们先画一张图,然后再来学习各种内存概念:
Host memory:
是指系统内存,cpu能够以全速带宽访问系统内存,但是GPU不能直接访问它。
Pinned host memory(page locked):
是host内存的一部分,由操作系统确定它的驻留位置,它的物理地址是固定的,不能改变。runtime会限制opencl memory object使用的pinned memory数量。注:pinned memory如同名字所言,不能被交换出内存,是page locked。cpu能够以全速带宽访问pinned内存,且需保持cpu cache一致性,GPU通过PCIE访问pinned memory,也要保持cache一致性。
Device visible host memory:
是pinned memory一部分,GPU访问时可以不必保持cpu cache一致性,这样可以加快GPU访问速度,但由于没有cache一致性,cpu读这些memory就变慢了,由于可以combined write(就是通过一次内存访问,邻接的很多地址进行写操作),cpu写操作速度并不慢。
Device memory:
dGPU有自己的device memory,gpu可以以高带宽进行访问,但cpu不能直接访问。
Host visible device memroy:
dGPU的一部分,GPU能够以全速带宽访问它,该内存被映射到cpu地址空间,做为无cache内存,cpu可以通过PCIE直接访问它,当然速度和system memory比,要慢好多,但是由于可以combined write(scatter write),所以写速度取决于PCIE带宽。
对于APU而言,没有单独的global memory,它用device visible memory 做为global memory。
下面我们看下如何在system memory和device memory之间传输数据:
当system memory中的数据要拷贝到device memory中去的时候,OpenCL runtime执行下面的操作:
1、当传输数据小于32K时,cpu把数据拷贝到runtime能够访问的pinned memory buffer中,然后DMA engine执行相应的传输,相反的过程也一样,数据从device memory传输到pinned memory buffer,然后copy到指定的系统内存块中。
2、传输数据大于32K,小于16M时,数据的物理内存页首先被pinned(lock page),然后DMA engine执行传输操作,最后内存块被unpinned。
3、当传输数据大于16M时,host pinned memory的staging buffer被使用,数据分批次被拷贝到staging buffer,然后传输到device memory。注:会使用双缓冲,以便DMA向device拷贝数据、cpu向stage buffer拷贝数据能够并行执行。
OpenCL memory object 之 Global memory (1)的更多相关文章
- OpenCL memory object 之 Global memory (2)
转载自:http://www.cnblogs.com/mikewolf2002/archive/2011/12/18/2291584.html 当我们用clCreateBuffer, clCreate ...
- OpenCL memory object 之 传输优化
转载自:http://www.cnblogs.com/mikewolf2002/archive/2011/12/18/2291741.html 首先我们了解一些优化时候的术语及其定义: 1.defer ...
- 【并行计算-CUDA开发】有关CUDA当中global memory如何实现合并访问跟内存对齐相关的问题
ps:这是英伟达二面面的一道相关CUDA的题目.<NVIDIA CUDA编程指南>第57页开始 在合并访问这里,不要跟shared memory的bank conflic ...
- 【转】C++ Incorrect Memory Usage and Corrupted Memory(模拟C++程序内存使用崩溃问题)
http://www.bogotobogo.com/cplusplus/CppCrashDebuggingMemoryLeak.php Incorrect Memory Usage and Corru ...
- System and method for parallel execution of memory transactions using multiple memory models, including SSO, TSO, PSO and RMO
A data processor supports the use of multiple memory models by computer programs. At a device extern ...
- php编译 :virtual memory exhausted: Cannot allocate memory
有时候用vps建站时需要通过编译的方式来安装主机控制面板.对于大内存的VPS来说一般问题不大,但是对于小内存,比如512MB内存的VPS来说,很有可能会出现问题,因为编译过程是一个内存消耗较大的动作. ...
- 编译时:virtual memory exhausted: Cannot allocate memory
一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编译程序会出现virtual memory exhausted: Cannot allocate memory的问题,可以用swap扩 ...
- 错误处理:error(0) error portability:3 this xilinx application has run out of memory has encountered a memory conflict
在FPGA侧提供了一个gp0,gp1各占1m内存的版本后.生成mcs版本,在下载版本时报错: error(0) error portability:3 this xilinx application ...
- 编译时:virtual memory exhausted: Cannot allocate memory,常见于VPS
原文链接:http://blog.csdn.net/taiyang1987912/article/details/41695895 一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编 ...
随机推荐
- 关于datagridview单元格不切换焦点无法获得新输入数据的问题解决方法
问题描述:将EXCEL中的数据导入到dataGridView中,然后通过点击toolStripButton对dataGrideView中的数据进行处理,在测试时,向dataGridView中的某个单元 ...
- ECharts使用记
系统开发厂商一直都使用基于Flash的图表解决方案,例如Fushioncharts.本人也曾略做研究,当时对js不熟,只能采用静态xml方式,颇为繁琐. 自从了解了html5的新特性,意识到基于Can ...
- Android使用adb工具及root权限完成手机抓包
1.环境准备/注意: 手机要求已经root. 首先需要配置JDK环境变量,这里主要讲解抓包,JDK环境变量配置跳过. 将包内附带的adb.zip解压到C盘根目录. 整个操作过程都需要用手机用数据线连 ...
- jsp查询页面和结果页面在同一页面显示和交互
用frameset实现查询页面和结果页面在同一页面 用target实现交互显示在同一页面上 请参照以下方法解决: main.jsp: <html> <head> <met ...
- PCB设计之原理图绘制笔记
02原理图工作环境设置原理图画布由画布和边界(Border)构成.可以通过DocumentOptions设置(快捷键DO).DocumentOptions设置--------------------- ...
- POJ 1129 Channel Allocation 四色定理dfs
题目: http://poj.org/problem?id=1129 开始没读懂题,看discuss的做法,都是循环枚举的,很麻烦.然后我就决定dfs,调试了半天终于0ms A了. #include ...
- javascript第二遍基础学习笔记(一)
1.兼容xhtml方法: <script> //<![CDATA[ ... ... //]]> </script> 2.文档模式: IE5.5引入,最初包含2种:混 ...
- 第 4 章 多例模式【Multition Pattern】
以下内容出自:24种设计模式介绍与6大设计原则 这种情况有没有?有!大点声,有没有? 有!,是,确实有,就出现在明朝,那三国期间的算不算,不算,各自称帝,各有各的地盘,国号不同.大家还记得那首诗< ...
- Painting The Wall 期望DP Codeforces 398_B
B. Painting The Wall time limit per test 1 second memory limit per test 256 megabytes input standard ...
- NCPC 2012 Bread Sorting
逆序对数的应用: 逆序对数的写法有,二分,树状数组,分治: 学习一下: 树状数组版: 代码: #include<cstdio> #include<cstring> #inclu ...