【问题标题】:Why is NVCC more strict with constexpr than non-constexpr host functions?为什么 NVCC 对 constexpr 比非 constexpr 主机函数更严格?
【发布时间】:2021-09-01 17:58:46
【问题描述】:

考虑以下代码:

constexpr __host__   void foo() {  }

__global__ void baz()
{
    if constexpr(1==2) { foo(); }
}

这个fails to compile 带有 CUDA 11.3.1 的 NVCC。但是,如果我删除constexpr - 它是does compile

怎么会?这是一个错误吗?

【问题讨论】:

  • 这是一个stated limitation。当您删除两个 constexpr 关键字中的第一个关键字时,事情起作用的原因是因为 C++ 的另一个方面允许它这样做。但是由于执行空间装饰器不是 C++ 语言的一部分,编译器可以按照它认为合适的顺序执行这些规则,并按照它认为合适的顺序。如果您认为这是一个错误,请随时 file a bug
  • @RobertCrovella:但是:我的代码没有打破限制:它不会从函数的__device__ 版本调用 foo。如果它被认为是调用它,那么第二个版本也不应该编译。

标签: compiler-errors cuda nvcc compiler-bug


【解决方案1】:

这是一个错误。我已将其提交给 NVIDIA:

https://developer.nvidia.com/nvidia_bug/3328502

(很难访问他们的错误跟踪系统,尝试先通过https://developer.nvidia.com登录,然后查看您的错误,然后替换错误编号。)

现在显然正在进行修复!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多