• 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地址等等]

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

    image

    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。

    image

    下面我们看下如何在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拷贝数据能够并行执行

  • 相关阅读:
    使用新建项目,引用底层库,运行时提示http://www.xinxizhan.cn/none-authorization.html。无授权解决方法
    treeviewhelper用法,找child的UIElement
    用#FFFF2222的string生成color
    DataTemplate.LoadContent Method将resource中的datatemplate转换为UIElement,可以用于对象添加
    Server.Mappath
    回调函数
    用where进行条件查询
    NPOI用法。
    [转].tostring设置格式。C# tostring 格式化输出
    【转】灵活运用 SQL SERVER FOR XML PATH。用于方便处理生成视图
  • 原文地址:https://www.cnblogs.com/biglucky/p/4033534.html
Copyright © 2020-2023  润新知