我是CUDA的新手,正在嘗試學習使用方法。有人可以請幫忙。我已在主要功能如下(我在Visual Studio和我的源文件和頭文件是.CU分別.cuh)CUDA中的thrust :: device_vector
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和kernel調用一次內核。還要注意,在這個簡單的例子中,我有變量xxx(在我的實際情況下是一些產生雙精度或浮點數的計算)。
和我得到兩個誤差: 1>從__global__
函數調用__host__
函數(操作符=)不允許 2>從__global__
函數調用__host__
函數(操作符[])是不允許的
所以我想「d_vec [tid] = ..」中的「[]」和「=」是問題。但我的問題是我如何訪問我的內核中的設備向量。有人可以澄清什麼是正確的程序,我做錯了什麼。在此先感謝
我也意識到,最有可能我做的事情不好。說我的矢量非常大說60000元。理想情況下,我想生成60000內核並將每個內核計算的結果複製到該向量的相應索引。但我不想產生每個長度爲60000的60000個向量(希望這不是我的代碼中發生的事情)。 – user1612986