1.共享存储器与L1的区别.频繁访问的数据,数据量不是很大,感觉上落在L1概率较大。但是数据访问方式比较散乱,不是合并的。
我想如果利用共享存储器,数据可能还是有一定概率分布在不同BANK,这样减缓带宽需求。
但不知道,假设这些数据落在L1,L1能够以没有BANK冲突就可以一次访问吗?还是合并才能一次访问。
2.主机端缓存与GPU显存带宽比较
就带宽来讲,主机内存一般都比GPU的差很多。但有个问题,就是CPU缓存很大,可能真正访问内存频率很低,频繁访问的数据都在缓存,所以应该以CPU缓存带宽来衡量更合适。
不太清楚CPU的缓存与GPU显存比较结果如何?
(1)根据您的描述,我建议您使用shared memory, 作出这个建议的原因如下:
L1 Data Cache对global memory的缓冲,是一次给出连续的128B地址边界开始的,长度也为128B的数据,所以对于你的“分散的数据“,这样会导致多次传输,不划算了。而shared memory不需要考虑连续的问题。
(2)您只用CPU更好的方面(L1 Data Cache), 来比较GPU不占据优势的方面(global memory),来作为您的问题。却不考虑GPU的占据优势的方面(例如巨多的寄存器,巨大的寄存器吞吐率)。所以我不赞同您的询问方式。因为我不赞同您这种询问,所以无法给出直接解答。
对于2问题,如果您真的需要一个解答,那么我说一下amd K10 CPU和amd K15 CPU的L1 cache指标:
K10 CPU: L1 Data Cache读取, 32B每周期每核心。(例如一个4核的3Ghz的K10 CPU有约400GB/S的理论最高值).
K15 CPU: L1 Data Cache读取,64B每周期每模块。(例如一个2模块的3Ghz的K15 CPU有约400GB/S的理论峰值).
用CPU的长处,攻击GPU的短处,不是一个好主意,因此在您要求的数据之外,我给出K10 GPU的理论寄存器读写吞吐率(8SMX, 0.745Ghz, sm_30, 双卡)
K10 GPU寄存器:47.68TB/S峰值读写(理论, 但是实际你也很容易跑到大约40TB/S的)。
数据仅供参考。