Вот как это делает nvcc.
__global__
void exp(float x, float y, float* z) {
*z = powf(x,y);
}
nvcc --ptx --use_fast_math exp.cu
exp.ptx
.visible .entry _Z3expffPf(
.param .f32 _Z3expffPf_param_0,
.param .f32 _Z3expffPf_param_1,
.param .u64 _Z3expffPf_param_2
)
{
.reg .f32 %f<6>;
.reg .b64 %rd<3>;
ld.param.f32 %f1, [_Z3expffPf_param_0];
ld.param.f32 %f2, [_Z3expffPf_param_1];
ld.param.u64 %rd1, [_Z3expffPf_param_2];
cvta.to.global.u64 %rd2, %rd1;
lg2.approx.ftz.f32 %f3, %f1;
mul.ftz.f32 %f4, %f3, %f2;
ex2.approx.ftz.f32 %f5, %f4;
st.global.f32 [%rd2], %f5;
ret;
}
Стоит сравнить этот ptx с тем, что вы получите без --use_fast_math
.