【发布时间】:2013-03-17 09:22:11
【问题描述】:
请理解我,但我不懂英语。
我的计算环境是
- CPU:英特尔至强 x5690 3.46Ghz * 2EA
- 操作系统: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%]”。
Helper 说使用合并的内存访问。 但是,我不知道我应该使用内存的索引上下文。
详细代码,The result of an experiment different from CUDA Occupancy Calculator
【问题讨论】:
标签: cuda