最近,笔者在阅读这篇文章时很好奇,为什么使用看起来高大上的shuffle算法之后,并没有造成优化反而有了负优化,想到了一个可以优化的地方:在最后针对一个warp进行处理时,当前block中不在第一个warp中的线程会进行很多额外的处理:首先是对线程内部寄存器的读写,然后是一些处理,于是有了如下的更改:
可以看到,通过使用double y = 0,减少了对无关线程的寄存器读写量和计算量,但是此优化也并没有达到warp内同步算法的结果,详细内容看下图:
还差0.05ms(不同评测机上结果可能不同)
猜测是shuffle内部的某些机制造成了延迟,不过这个只有在看到源码时才能具体分析。
详细代码已上传Gitee。