请理解我,但我不懂英语。
我的计算环境是
- CPU:英特尔至强 x5690 3.46Ghz * 2EA
- 操作系统:CentOS 5.8
- VGA:英伟达 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%]”。
助手说使用合并的内存访问。但是,我不知道应该使用内存的索引上下文。
有关详细代码的更多信息,与 CUDA 占用计算器不同的实验结果