1

このコードを実行すると、コンパイラは、デバイスからホスト関数を呼び出していると言います。よくわかりません。

   __global__ void kernel(thrust::device_vector<float*> d_V) {

       float *var = d_V[0];
   }

   int main() {

      thrust::host_vector<float*> V;
      thrust::host_vector<float*> d_V;

      float f[10];
      for (int i = 0; i < 10; i++) {
          f[i] = i;
      }
      V.push_back(f);
      d_V = V;
      kernel<<<1, 1>>>(d_V);

      return 0;     
   }
4

1 に答える 1

4

スラスト関数/メソッドは、ホスト (CPU) 側で使用するように設計されています。CUDA カーネルのデバイス (GPU) 側では呼び出すことができません。

コードで実際に示したのは、一部のデータをカーネルに渡すことです。データは、カーネルの引数リスト内のスラスト コンテナー以外の生のポインターによって参照できます。

__global__ void kernel(float* p)
{
   float *var = p;
}

int main()
{
    thrust::device_vector<float> d_v(
        thrust::make_counting_iterator((float)0),
        thrust::make_counting_iterator((float)0)+10);
    kernel<<<1,1>>>(thrust::raw_pointer_cast(&d_v[0])); 
}
于 2013-07-23T15:26:07.443 に答える