如果程序就是完全展开的代码序列,从头到尾,没有循环,这个内核效率能够很高吗?
内核代码本身的读取是不是也有带宽的需求?缓存能放得下的代码总量是多少?
如果我的内核代码指令总数估计为10K左右。这种量级的完全展开合适吗?
(1)如果没有循环,一路平铺,效率是否高要考虑你的代码是怎么写的,能否充分榨干硬件。
(2)代码本身的读取的确需要访存, 目前是L1 I-Cache + L2 cache这2级,其中L1 I-Cache大小NV不公布,L2 cache则是我们常说的texture/data/code等通用缓存(L2 unifed cache), 大小根据你的卡不同而不同,可以看你的卡的规则确定。
(3)无法直接评估展开是否合适,但楼主可以尝试一下。2.x上和3.x上一般普通指令长度一条为8B, 小部分指令(以_N结尾的那些)是4B,所以你如果有10K条指令,完全展开大约需要40-80KB。至于是否适合完全展开,需要你自己实践下,我不能给出直接的答案这样是好还是不好。
感谢您的莅临,以及您的思考。
另外,我记得横扫版主之前讨论过循环增加的额外指令数量,大致结论是可以根据循环体指令数量多少加以权衡。
您不妨找找之前的讨论。
祝您春节快乐!