请理解我,但我不懂英文。如何正确合并从全局内存写入全局内存?
我的计算环境是
- CPU:英特尔至强X5690 3.46GHz的* 2EA
- OS:CentOS的5.8
- VGA:NVIDIA公司的GeForce GTX580(CC是2.0)
我请阅读CUDA C编程指南中关于“合并内存访问”的文档。 但我不能将它们应用于我的情况。
我有32x32块/网格和16x16线程/块。 这意味着如下代码。
dim3 grid(32, 32);
dim3 block(16,16);
kernel<<<grid, block>>>(...);
然后,我如何使用聚结内存访问?
我在下面的内核中使用了代码。
int i = blockIdx.x*16 + threadIdx.x;
int j = blockIdx.y*16 + threadIdx.y;
...
global_memory[i*512+j] = ...;
我使用了常量512,因为线程总量是512x512个线程:它是grid_size x block_size。
但是,我从Visual Profiler看到“低全局内存存储效率[9.7%平均值,对于计算100%的内核而言]”。
帮手说使用合并内存访问。 但是,我不知道我应该使用内存的索引上下文。
用于详细信息代码的更多信息,The result of an experiment different from CUDA Occupancy Calculator
虽然我无法实现完全合并的内存访问,但我可以部分实现它。谢谢。 – strawnut 2013-03-18 23:39:52