我需要将128到256字节长度的数组加载到GPU共享内存。 我想在有效执行按位操作的同时最小化全局内存访问。 让我们解释一下。
我有一个256字节的数组加载到全局内存,我想在内核代码的开头将所有256个字节加载到共享内存。
然后,在每个字节上必须执行按位操作,而此操作可以应用于两个一个字节变量,两个2字节变量或两个4字节和更大。 问题是:
例如我想将第3位设置为1
__shared__ (which data type?) temp = ((which data type?) *)array[i];
temp |= (a variable with third bit set to 1)
数组在全局内存上,我希望通过最小的全局内存访问将其加载到共享内存。
答案 0 :(得分:1)
将内存事务的大小与银行大小相匹配。大多数情况下,银行大小为32位。从Kepler开始,您可以通过调用cudaDeviceSharedMemConfig()
Acceleware拥有关于该主题的良好资源:
http://acceleware.com/blog/maximizing-shared-memory-bandwidth-nvidia-kepler-gpus