为什么 __device__ 变量不能标记为 constexpr?

Why the __device__ variable can't be marked as constexpr?

如果我 declare/define 这样的变量:

__device__ constexpr int test{5};

我收到一个错误

error: A __device__ variable cannot be marked constexpr

我在指南中找不到该限制。指南说:

I.4.20.9. __managed__ and __shared__ variables cannot be marked with the keyword constexpr.

此外,我的同事使用相同的主要编译器版本(11)没有这个错误。

究竟是什么导致我的机器出现此错误?

在 CUDA 11.2 中,不允许这样使用。见 here:

G.4.16.9. __device__/__constant__/__shared__ variables __device__, __constant__ and __shared__ variables cannot be marked with the keyword constexpr.

在 CUDA 11.4(及更高版本)中,这种用法是允许的。

编译器允许的行为更改发生在 CUDA 11.2.0 版本和 CUDA 11.4.0 版本之间。

大概路过的机器的 CUDA 11 版本比你的更新。