請理解我,但我不懂英文。如何正確合併從全局內存寫入全局內存?
我的計算環境是
- 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