内存模型

1、在一般情况下,计算机平台之间的内存子系统差异巨、大,比如,所有现代CPU都支持自动缓存,不过许多GPU并不支持。
2、为了支持代码的可移植性,Opencl采用的方法是定义一个抽象的内存模型,编程人员可以根据该模型编写代码,厂商可以映射到他们自己实际的内存硬件。
3、全局内存对设备上所有计算单位都是可见的,每次从主机端到设备端传输的数据都将驻留在全局内存中,从设备端传输到主机端的任何数据,也是这样的。
在指针声明中添加关键字__global用于指定该指所引用的数据驻留于全局内存。
__global float *A.

在这里插入图片描述
4、常量内存是全局内存的一部分,因此,传输到全局内存中的内存可以指定为常量。
使用__constant关键字将数据映射到常量内存。
5、本地内存是高速暂存存储器,其地址空间对于计算设备是独立一无二的,通常当做片上存储器。

本地内存供workgroup共享。

相比于全局内存,访问延迟更短,宽带更高。

通过附加关键字_ _local可以静态声明在本地内存中 ( __local float[64] shareData),但是需要在编译时指定数组的大小。
6、私有内存只对于单个work-item可见,局部变量和非指针类型的kernel参数默认情况下是私有的。
7、Opencl的内存空间和现代GPU类似,下图显示了Opencl的内存空间AMD6970GPU内存之间的关系。
在这里插入图片描述

将opencl定义的内存模型映射到AMD Radeon 6970GPU上,一般私有内存存储于寄存器中,复杂的取止地址操作或者过分使用的参数将使数据存储在DRAM中。
(DRAM(Dynamic Random Access Memory),即动态随机存取存储器,最为常见的系统内存。DRAM 只能将数据保持很短的时间。为了保持数据,DRAM使用电容存储,所以必须隔一段时间刷新(refresh)一次,如果存储单元没有被刷新,存储的信息就会丢失。 (关机就会丢失数据))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值