是的,您已经猜到CUDA clang前端确实在C ++功能支持方面领先,甚至在设备代码方面也是如此。过去已经有过,在NVCC之前引入了C ++ 14功能,这在大多数情况下是社区所没有注意到的。
以这个C ++ 17(不必要地修改if constexpr)的代码段:Fibo
#include <cuda_runtime.h>
#include <cstdio>
constexpr unsigned
fibonacci(const unsigned x) {
if constexpr (false)
{
return 0u;
}
if( x <= 1 )
return 1;
return fibonacci(x - 1) + fibonacci(x - 2);
}
__global__
void k()
{
constexpr unsigned arg = fibonacci(5);
printf("%u", arg);
}
int main()
{
k<<<1,1>>>();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它已经运行了clang++ -std=c++17 -x cuda:https : //cuda.godbolt.org/z/GcIqeW
不过,对于这个特定示例,C ++ 17扩展的lambda和C ++ 14宽松的constexpr在现代C ++中非常重要,即使在C ++ 11和C ++ 14模式下,都添加了NVCC 8.0+标志以启用这些功能。功能已经存在:https : //devblogs.nvidia.com/new-compiler-features-cuda-8/
这意味着上面的示例__device__在删除演示性的C ++ 17 if constexpr构造并添加-std=c++14 --expt-relaxed-constexpr标志时,即使没有限定符,也可以使用NVCC 9.2进行编译。
以下是nvcc和的设备端有关C ++标准支持的列表clang -x cuda:https : //gist.github.com/ax3l/9489132#device-side-c-standard-support
目前设备代码最高支持 C++14(在CUDA 9中引入)
--std {c++03|c++11|c++14}
Run Code Online (Sandbox Code Playgroud)
但是,如果您的主机仅使用 C++17,则应该可以使用单独的编译并将它们与库链接。单独编译和链接 CUDA C++ 设备代码
更新:格式和更多信息
| 归档时间: |
|
| 查看次数: |
3007 次 |
| 最近记录: |