内存事物颗粒

内存事物颗粒

  • 内存事物数×颗粒大小×效率 = 处理数据量
  • 每个请求数量的事物数量×颗粒大小×效率 = 一个请求处理的事物量
  • 事物量/每个请求事物量 = 请求数

GTX1050Ti

经实验得:
以此求GTX1050Ti的内存事物颗粒大小:
加载颗粒
在请求内存量<32字节时,加载颗粒是32字节。
在请求内存量>32字节时,加载颗粒是16字节。
存储颗粒
无论什么情况都是32字节。

小的内存颗粒适合做乱序的内存请求问题,因为内存事物效率相对较高。但在处理对齐合并内存请求时,由于颗粒小内存事物会增多,带宽会下降。
所以各有所长。另外GTX1050Ti的理论全局内存带宽是112G/s,实际带宽是程序处理数据量/所耗时间的结果,是实际值。另外1M数据的赋值操作实验一,耗时84us左右


实验一:

核函数处理了1M的4字节的inti的赋值运算:
b[i] = a[i];
套用公式一:262144×n×100% = 1<<20*4得:
加载颗粒16字节
同理
存储颗粒32字节
实验一


实验二:

核函数处理了1M的4字节的float的加法赋值运算:
c[i] = a[i]+b[i];
套用公式一:524288×n×100%=1<<20×4×2 //最后的成2是因为处理了两倍的加载数据量。得:
加载颗粒16字节
同理
存储颗粒32字节
实验二


实验三:启用一级缓存

重复实验一并开启一级缓存:
实验发现:以上实验结果都是在默认条件下:禁用一级缓存(书上的默认情况是启用一级缓存)
下面启用一级缓存发现:
猜想:启用一级缓存,颗粒肯定会变大,且对这种对齐合并问题,内存效率应该是100%,(只要内存颗粒不大于32*4),速度应该加快。
但实验结果是:
1.耗时(速度)与不启用一样。
2.加载内存效率是50%
如果按实际计算,
存储和加载的颗粒都是32,带宽提高一倍是应该的,但为什么加载的效率是50%?
实验三


本篇的实验和书上的启用128,不启用32字节不相同,可能是现代的GPU全局内存存取的模式发生了变化,与之前版本的GPU不同而造成的。
最近的实验发现,对全局内存的访问与书上有些不同,有很多疑问,可能是现代GPU的革新造成的,所以本篇所计算的16字节的加载颗粒大小也可能是错误的,因为在nvidia官方文档里说说明了3.0以上的计算能力的GPU默认的加载存储颗粒都是32。还有在看自己的device属性的时候,发现,我的GPU跟本没有L1一级缓存。所以内存访问这里就当成一个黑箱,先不去管它,但后面解释的共享内存等都是没有问题的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值