私はCUDAが初めてで、使い方を学ぼうとしています。誰か助けてください。メイン関数には次のものがあります(私はビジュアルスタジオにいて、ソースファイルとヘッダーファイルはそれぞれ.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 で 1 回、double で 1 回呼び出すことです。また、この単純な例では、変数 xxx があることに注意してください (私の実際のケースでは、倍精度または浮動小数点数を生成する計算です)。
そして、私は2つのエラーを受け取ります:1>__host__
関数からの関数(演算子=)の__global__
呼び出しは許可されていません2>関数からの__host__
関数(演算子[])の呼び出し__global__
は許可されていません
したがって、「d_vec[tid] = ..」の「[]」と「=」が問題だと思います。しかし、私の質問は、カーネル内のデバイス ベクトルにどのようにアクセスするかです。誰かが正しい手順と私が間違っていることを明確にしてください。前もって感謝します