gpt4 book ai didi

cuda - Cuda C++ 的设备代码中没有元组吗?

转载 作者:行者123 更新时间:2023-12-05 08:42:32 27 4
gpt4 key购买 nike

__global__ void addKernel(int *c, const int *a, const int *b)
{
int i = threadIdx.x;
auto lamb = [](int x) {return x + 1; }; // Works.
auto t = std::make_tuple(1, 2, 3); // Does not work.
c[i] = a[i] + b[i];
}

NVCC 至少有 lambda,但 std::make_tuple 编译失败。当前版本的 Cuda 中是否不允许使用元组?

最佳答案

我刚刚试过了,使用 std::(std::tuple、std::get 等...)的元组元编程将在启用 C++14 和 expt-relaxed-constexpr 的设备代码中工作(CUDA8+) 在编译期间(例如 nvcc -std=c++14 xxxx.cu -o yyyyy --expt-relaxed-constexpr)- C++14 需要 CUDA 9,但基本标准: :tuple 应该在 CUDA 8 中工作,如果你被限制的话。 Thrust/tuple 有效但有一些缺点:限制为 10 个项目并且缺少一些 std::tuple 辅助函数(例如 std::tuple_cat)。因为元组及其相关函数是编译时的,所以 expt-relaxed-constexpr 应该使您的 std::tuple 能够“正常工作”。

#include <tuple>

__global__ void kernel()
{
auto t = std::make_tuple(1, 2, 3);
printf("%d\n",std::get<0>(t));
}

int main()
{
kernel<<<1,1>>>();
cudaDeviceSynchronize();
}

关于cuda - Cuda C++ 的设备代码中没有元组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40742242/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com