thrust::device_vector in CUDA

thrust::device_vector in CUDA

本文关键字:in CUDA vector device thrust      更新时间:2023-10-16

我是CUDA的新手,正在尝试学习用法。有人能帮帮我吗?我有以下主要功能(我在visual studio和我的源和头文件分别是。cu和。cuh)

 thrust::device_vector<float> d_vec(100);
 kernel<<<100,1>>>(d_vec);

然后在内核中我有

    template <typename T> __global__ kernel(thrust::device_vector<T> d_vec)
    {  int tid = threadIdx.x + blockIdx.x*blockDim.x;
       T xxx = 3.0;
       d_vec[tid] = xxx;
     }

我的目标是调用内核一次float和一次double。还要注意,在这个简单的例子中,我有一个变量xxx(在我的实际情况中,它是一些产生双精度或浮点数的计算)。

得到两个错误:1>不允许从__global__函数调用__host__函数(operator =)2>不允许从__global__函数调用__host__函数(operator [])

所以我猜"[]"answers"="在"d_vec[tid] = .."是问题所在。但我的问题是我如何访问我的内核内的设备矢量。有人可以澄清什么是正确的程序和我做错了什么。提前感谢

thrust::device_vector对象/引用不能用作内核参数。您可以使用原始指针来传递设备向量数据。

thrust::device_vector<float> d_vec(100);
float* pd_vec = thrust::raw_pointer_cast(d_vec.data());
kernel<<<100,1>>>(pd_vec);

这是内核的原型

template <typename T> __global__ kernel(T* pd_vec)

你的Q和这个差不多。如何转换推力::device_vector到原始指针