std::bit_cast 相当于 CUDA 设备端代码?

问题描述 投票:0回答:1

我有几个“神奇”的浮点常量,我想在 CUDA 设备端计算中以

constexpr
符号的形式使用位精确的常量。在主机端,您可以使用
std::bit_cast<float>(0x........)
来实现这一点。然而 NVCC 并不“喜欢”设备端代码中的
std::bit_cast

在 GLSL 中,您可以使用

intBitsToFloat
,但是我在 CUDA C++ 语言扩展中没有看到可以执行此操作的内置函数。


1:嗯,它们并不是那么“神奇”,基本上它们是相当于 0.999…·2ⁿ 的浮点,即将尾数的所有位设置为

1
,并将
-(n+1)
添加到指数“0” (即
0x7E-n-1
)。

cuda constexpr type-punning
1个回答
1
投票

如果有支持它的 host 编译器,您可以在 CUDA C++20

device
代码中使用 std::bit_cast 来初始化
constexpr
变量。您只需要通过传递
--expt-relaxed-constexpr
告诉 nvcc 即可实现。

© www.soinside.com 2019 - 2024. All rights reserved.