【发布时间】:2014-05-15 17:21:14
【问题描述】:
为了优化我的 cuda 内核的性能,我尝试将全局内存中的数据预取(或预读)到我的内核中,以尝试重叠内存带宽和计算。
我的实现基于以下逻辑:
// Original code
for (i = 0; i < N; i++) {
sum += array[i];
}
// Code with pre-fetch
temp = array[0];
for (i = 0; i < N-1; i++) {
temp2 = array[i+1];
sum += temp;
temp = temp2;
}
sum += temp;
这个想法是尝试同时执行 temp2 = array[i+1] 和 sum+=temp,这样我就可以将当前元素的执行与下一个元素的数据获取重叠。
与原来的相比,这样的实现在加速方面产生了非常小的提升(大约 3%)。我想知道是否有明确的方法告诉 cuda 重叠执行这两行代码?如何确保这些行同时运行,从而在读取全局内存和执行某些计算之间实现良好的重叠
感谢您抽出宝贵时间阅读我的问题。
【问题讨论】:
标签: cuda