OpenCL 存储器区域

OpenCL执行模型的上下文中,我们简要提及OpenCL存储器对象,并没有详细讲述OpenCL存储器对象的细节,也没有提及OpenCL存储器对象的不同类别等问题。我们将从存储器区域、存储器对象、共享虚拟存储器三方面分析OpenCL存储器模型。

存储器区域

OpenCL异构平台由主机端和设备端构成,存储器区域包含主机与设备的内存。在OpenCL中具体定义了下面几种不同的存储器区域:

  • 主机内存(host memory):主机直接可用的内存,OpenCL并未定义主机内存的具体行为。通过OpenCL API或者共享虚拟存储器接口,实现存储器对象在主机与设备间的传输。

  • 全局存储器(global memory):这个存储器区域允许上下文中任何设备中所有工作组的所有工作项的读写,工作项可以读写存储器对象中的任意元素。全局存储器的读写可能会被缓存,这取决于设备能力。

  • 常量存储器(constant memory):全局存储器中的一块区域,在内核实例执行期间其保存的数据保持不变。对工作项而言这个存储器对象是只读的,主机负责对该存储器对象的分配和初始化。

  • 局部存储器(local memory):这个存储器区域对工作组是局部可见的,它可以用来分配由该工作组中所有工作项共享的变量。

  • 私有存储器(private memory):这个存储器区域是一个工作项的私有区域。一个工作项私有存储器中定义的变量对其他工作项是不可见的。

这些存储器区域以及它们与平台和执行模型的关系如下图所示。一般对于存储器与主机端共享的OpenCL设备而言,一个OpenCL设备关联局部存储器和私有存储器;全局存储器和常量存储器由在上下文内的所有设备间共享,OpenCL设备可能包含缓存来支持对这两个存储器的高效访问。

OpenCL内存模型

全局存储器和常量存储器可以在一个上下文内的一个或多个设备间共享,一个OpenCL设备关联局部存储器和私有存储器。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程