feimi架构中,在kernel中定义一个数组a[N],对于a[N]是放在寄存器中,寄存器满了就放local memory中还是直接放到local memory中?
要看情况:
(1)如果对a[N]的所有的下标引用都是编译时可知的,而且N不大,不会导致寄存器压力,则放置在寄存器中。
(2)如果有一次或者多次下标引用是运行时刻才能确定的(fermi/kepler不支持对寄存器寻址), 或者,寄存器放不下。任何一种成立,则放置在local memory。
感谢您的来访,祝您愉快!
在我信号处理,窗口大小N为8,这个值不大。但是是在kernel中处理是:
for(i,N)
a[i]=xx;
这种方式就是放在local memory了。但是读写速度太慢了,有什么办法能避免呢?我总不可能定义八个变量,然后for循环中,判断i的值再对对应的八个值处理吧。
看不懂您的for(i,N) a=xx;是什么意思?建议其他版主/NVIDIA技术支持/总版主为您解答。
以及,我认为我在2#已经说的足够清楚了。请楼主三思吧。
LZ您好,您这里代码段可能显示的不对,以及建议您用“代码模式”发一下完整的代码。
如果您的kernel只是赋值的话,那么应该可以在编译的时候确认下标,所以直接在寄存器里面。
如果还有其他您没有贴出来的代码,还需要具体分析。
如果您不确定是否使用了local memory,您也可以使用NVVP跑一下profiler,看看local memory的使用情况即可。
祝您编码顺利~