如何在CUDA中防止单行的FTZ

时间:2015-04-10 13:54:58

标签: c++ performance assembly cuda ptx

我正在研究一个粒子代码,其中大量使用flush to-zero来提取性能。但是,有一个浮点比较语句,我不希望被刷新。一种解决方案是使用内联PTX,但它引入了不必要的指令,因为在PTX中没有布尔类型,只是谓词寄存器: C ++代码:

float a, b;
if ( a < b ) do_something;
// compiles into SASS:
//     FSETP.LT.FTZ.AND P0, PT, A, B, PT;
// @P0 DO_SOMETHING 

PTX:

float a, b;
uint p;
asm("{.reg .pred p; setp.lt.f32 p, %1, %2; selp %0, 1, 0, p;}" : "=r"(p) : "f"(a), "f"(b) );
if (p) do_something;
// compiled into SASS:
//     FSETP.LT.AND P0, PT, A, B, PT;
//     SEL R2, RZ, 0x1, !P0;
//     ISETP.NE.AND P0, PT, R2, RZ, PT;
// @P0 DO_SOMETHING 

有没有办法可以在没有编码整个PTX / SASS的情况下用单个指令进行非FTZ比较?

0 个答案:

没有答案