cuda - 在ptx nvidia cuda(程序集)中将x提高到y的幂
问题描述
我想在 ptx 中将 x 提高到 y 的幂。
Nvidia有一个计算2^x的函数ex2和计算log2x的lg2,但没有计算x^y的函数。
是否有更聪明、更简单的解决方案可以在循环中乘以值?.cu 文件中的代码如何转换为 .ptx pow(x, y)
?
也许有使用ex2和lg2计算x^y的聪明解决方案?
解决方案:
正如@talonmies 提到的:
如果z = x^y
,log2(z) = y * log2(x)
那么x^y = 2^(y*log2(x))
解决方案
这是 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
.
推荐阅读
- html - 通过 Xslt 转换 Html 到 XML FlowDocument
- c++ - C++ 代码崩溃并出现无限循环
- c# - 如何使用参数将路径重定向到 URL?
- basic - TAB 子程序 Applesoft BASIC 出错
- java - 如何从作为字符串给出的 java 代码中解析包?
- java - 图像选择器未从图库中捕获图像
- string - Long 类型的 toString(long) 方法不适用于参数 (void)
- r - 如何修复闪亮和 DT 中的错误消息“必须有长度”
- c# - Interlocked.Increment *with* [ThreadStatic]?
- c# - 从 C# 到 MySQL 实例的 SSH 和 sudo 连接