OpenCL memory object 之 Global memory (1)

时间:2022-09-08 00:21:07

本文转载自: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地址等等]

我们先画一张图,然后再来学习各种内存概念:

OpenCL memory object 之 Global memory (1)

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。

OpenCL memory object 之 Global memory (1)

下面我们看下如何在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)的更多相关文章

  1. OpenCL memory object 之 Global memory (2)

    转载自:http://www.cnblogs.com/mikewolf2002/archive/2011/12/18/2291584.html 当我们用clCreateBuffer, clCreate ...

  2. OpenCL memory object 之 传输优化

    转载自:http://www.cnblogs.com/mikewolf2002/archive/2011/12/18/2291741.html 首先我们了解一些优化时候的术语及其定义: 1.defer ...

  3. 【并行计算-CUDA开发】有关CUDA当中global memory如何实现合并访问跟内存对齐相关的问题

    ps:这是英伟达二面面的一道相关CUDA的题目.<NVIDIA CUDA编程指南>第57页开始          在合并访问这里,不要跟shared memory的bank conflic ...

  4. 【转】C&plus;&plus; Incorrect Memory Usage and Corrupted Memory&lpar;模拟C&plus;&plus;程序内存使用崩溃问题&rpar;

    http://www.bogotobogo.com/cplusplus/CppCrashDebuggingMemoryLeak.php Incorrect Memory Usage and Corru ...

  5. System and method for parallel execution of memory transactions using multiple memory models&comma; including SSO&comma; TSO&comma; PSO and RMO

    A data processor supports the use of multiple memory models by computer programs. At a device extern ...

  6. php编译 :virtual memory exhausted&colon; Cannot allocate memory

    有时候用vps建站时需要通过编译的方式来安装主机控制面板.对于大内存的VPS来说一般问题不大,但是对于小内存,比如512MB内存的VPS来说,很有可能会出现问题,因为编译过程是一个内存消耗较大的动作. ...

  7. 编译时:virtual memory exhausted&colon; Cannot allocate memory

    一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编译程序会出现virtual memory exhausted: Cannot allocate memory的问题,可以用swap扩 ...

  8. 错误处理:error&lpar;0&rpar; error portability&colon;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 ...

  9. 编译时:virtual memory exhausted&colon; Cannot allocate memory,常见于VPS

    原文链接:http://blog.csdn.net/taiyang1987912/article/details/41695895 一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编 ...

随机推荐

  1. c&num; FTP操作类

    using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net ...

  2. Android数据存储之SQLite的操作

    Android作为一个应用在移动设备上的操作系统,自然也就少不了数据的存储.然而SQLite作为一个轻型的关系型数据库,基于其轻量.跨平台.多语言接口及安全性等诸多因数考虑,因而Android较大的数 ...

  3. codeforces 590C C&period; Three States&lpar;bfs&plus;连通块之间的最短距离&rpar;

    题目链接: C. Three States time limit per test 5 seconds memory limit per test 512 megabytes input standa ...

  4. Javascript如何判断一个变量是数字类型&quest;

    isNaN()不能判断一个变量是否为数字类型,isNaN(123)值为false,isNaN('123')值也为false.isNaN() 的实际作用跟它的名字isNaN并不一致,isNaN(NaN) ...

  5. UML要点总结(一)

    UML中的事物 UML事物包含结构事物.行为事物.组织事物和辅助事物. 结构事物: 类.接口.用例.协作.活动类.组件和节点. 行为事物: 也称动作事物,交互和状态机. 组织事物: 也称分组事物,仅仅 ...

  6. &lpar;转载&rpar;Eclipse下配置Github环境 &period;

    总的参考文档:EGit User Guide http://wiki.eclipse.org/EGit/User_Guide Address: http://www.linuxidc.com/Linu ...

  7. Sublime text3配置LiveReload

    Tip: LiveReload是很棒的插件,可以在浏览器中实时预览,但是在Sublime text3里,从Package Control中安装的LiveReload是无法使用的,但是可以选择手动安装解 ...

  8. Vue 爬坑之路(三)—— 使用 vue-router 跳转页面

    使用 Vue.js 做项目的时候,一个页面是由多个组件构成的,所以在跳转页面的时候,并不适合用传统的 href,于是 vue-router 应运而生. 官方文档: https://router.vue ...

  9. THINKphp中复杂的查询

    字符串拼接查询 案例一:拼接字符串(多条件查询) $where = ''; //定义字符串,用于拼接满足条件的数据字段 $value = []; // 定义空数组,用于接收值 if(!empty($n ...

  10. OSI七层协议模型、TCP&sol;IP四层模型和五层协议体系结构之间的关系

    一.OSI七层模型 OSI七层协议模型主要是:应用层(Application).表示层(Presentation).会话层(Session).传输层(Transport).网络层(Network).数 ...