Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 推力:CUDA中的设备_矢量_C++_Visual Studio 2010_Cuda - Fatal编程技术网

C++ 推力:CUDA中的设备_矢量

C++ 推力:CUDA中的设备_矢量,c++,visual-studio-2010,cuda,C++,Visual Studio 2010,Cuda,我是CUDA的新手,正在努力学习它的用法。有人能帮忙吗。我在主函数中有以下内容(我在visual studio中,源文件和头文件分别为.cu和.cuh) 推力:设备向量d向量(100); 内核(d_-vec); 然后在内核中我有 template <typename T> __global__ kernel(thrust::device_vector<T> d_vec) { int tid = threadIdx.x + blockIdx.x*bloc

我是CUDA的新手,正在努力学习它的用法。有人能帮忙吗。我在主函数中有以下内容(我在visual studio中,源文件和头文件分别为.cu和.cuh)

推力:设备向量d向量(100); 内核(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;
     }
template\uuuuu全局\uuuuuuu内核(推力::设备向量d\uvec)
{int tid=threadIdx.x+blockIdx.x*blockDim.x;
T xxx=3.0;
d_vec[tid]=xxx;
}
我的目标是用float调用内核一次,用double调用一次。还要注意,在这个简单的例子中,我有一个变量xxx(在我的实际情况中,它是一些产生双精度或浮点数的计算)

我得到两个错误: 1> 不允许从
\uuuu全局函数调用
\uuuu主机函数(运算符=)
2> 不允许从
\uuuu全局函数调用
\uuuu主机函数(运算符[])


因此,我猜“d_vec[tid]=..”中的“[]”和“=”就是问题所在。但我的问题是如何访问内核中的设备向量。请有人澄清什么是正确的程序,我做错了什么。提前感谢

推力::设备\矢量对象/引用不能用作内核参数。 可以使用原始指针传递设备向量数据

thrust::device_vector<float> d_vec(100);
float* pd_vec = thrust::raw_pointer_cast(d_vec.data());
kernel<<<100,1>>>(pd_vec);
推力:设备向量d向量(100); float*pd_vec=推力::原始指针(d_vec.data()); 内核(pd_-vec);
这是内核的原型

template <typename T> __global__ kernel(T* pd_vec)
template\uuuu全局内核(T*pd\uvec)

YouQ和这个很相似

我也意识到我很可能在做一些不好的事情。假设我的向量很大,比如说60000个元素。理想情况下,我希望生成60000个内核,并将每个内核计算的结果复制到向量的适当索引中。但我不想产生60000个向量,每个向量的长度为60000(希望我的代码中不会出现这种情况)
template <typename T> __global__ kernel(T* pd_vec)