当我试图从内核中挤出最后一点性能时,通常我会发现使用位运算符(&
和|
)替换逻辑运算符(&&
和||
)会使内核速度稍微快一点。这是通过在CUDA Visual Profiler中观察内核时间摘要得出的。
那么,在CUDA中为什么位运算符比逻辑运算符更快呢?我必须承认,它们并不总是更快,但很多时候它们确实更快。我想知道是什么魔法赋予了这种加速。
免责声明:我知道逻辑运算符会短路,而位运算符则不会。我很清楚如何误用这些运算符导致错误的代码。我只在保证结果逻辑相同,有加速且加速对我有意义时小心使用此替换 :-)