result那为什么没有结果呢
用到的是CUDA5.0中SDK带的NVVP,其中uncoalesced global memory 出现的是result 图显示的内容,divergent branch 出现的是divergent branch.jpg显示的内容
我没有注意到平日使用中遇到这个提示,不过根据字面意思,我建议楼主:
在您的.cu的右键属性的CUDA C/C++里的command line里填入-lineinfo
然后点击确定,
然后进行rebuild all,
然后重新跑一下profiler再看看结果。
是这样加不?
uncoalesced global memory 这个好了,里面的文字表示什么意思呢,但divergent branch 那个还不行
是的。是这个框。
(1)恭喜楼主。此图的意思是字面意思,如下:
左部份代表你的某.cu中的某行出现效率过低的情况,你可以去看你的这个.cu的这行。
右边代表你的执行的访存指令执行次数和实际导致的L2传输次数。请注意在fermi上一次L2传输到SM是32Bytes, 而你的4:1的比率表明,你的一次访问(例如假设warp访问的元素类型是char, 采用[4 * id]的形式),导致了128B的传输。
这一般出现在访问的地址过于分散的情况下。
(2)根据你之前的楼层,divergent branch被报告为no issue, 这不是表明不行,而是表明无问题。即你无warp内的指令分支。
抱歉回复晚了,我的浏览器启用了鼠标手势,而我的狗刚才移动了鼠标,做出了“后退”的手势,导致丢失,这次是重新打的。
EDIT:
楼主需要注意的一点是,有的时候,同样的比值,在不同的元素类型下,意义不同。
举个例子:
char *p; char x = p[4 * id]; 其中id是线程编号。
和
int *p; int x = p[4 * id];
对于n个warp来说,一共执行了n条指令(执行按warp计算,不是里面的线程), 一共需要4n次L2传输(即128n Bytes), 比值均为:
4n : n = 4 : 1
但对于后者,不存在不合并的问题,profiler也不会抱怨;
而前者,存在严重的不合并,profiler会抱怨。
所以同样的比值请根据你的元素类型单独考虑。。
(以上讨论均只针对fermi)
[
谢谢版主
能服务您是我的荣幸!