3.9 指令优化
各种指令有不同的执行时间,这样要更快的速度可尽量使用占用时间少的指令,比如x *= 2; 最好写成x += x;因为乘法的占用的时间比加法多,但是这个并不明显,因为在现代处理器上乘法的效率已经和加法差不多了。要注意的是除法和模余,它们占用的时间远大于加法,要尽量少使用。另外一些超越函数占用的时间更长,为此CUDA提供了超越函数的更快版本,更快的代价是精度损失。所以在速度远比精度重要的情况下,可以使用,但是如果精度比较重要的话,就要注意了。
3.9.1 寄存器依赖
在程序的一些部分,我们经常要存取数据,如果在后面的比较近的指令中要读取这个数据,此时就要等到这个数据存取完成,这就是寄存器依赖,其后果就是由于要等待导致的性能损耗。这种损耗往往可以通过重新安排程序的语句减弱。
3.10 分支优化
在CUDA中,分支会极大的减弱性能,因为SM没有分支预测,因此只能让束内线程在每个分支上都执行一遍,当然如果某个分支没有线程执行,就可以忽略,因此要减少分支的数目。但是在实践中很多时候分支是没有办法减少的。此时目前还没有好的解决方案。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23057064/viewspace-667614/
,如需转载,请注明出处,否则将追究法律责任。