1

(この例では "Hello" 文字列で初期化されている) デバイスで配列を定義し、これをホストにコピーしようとすると、エラー コードが表示されますcudaErrorInvalidValue。ただし、カーネル内からはd_helloStr[]アクセスできます。CUDA プログラミング ガイドの章 B.2.1 を参照すると、このような変数はランタイム ライブラリからもアクセスできる必要があります。このサンプル コードが機能しないのはなぜですか?

#include <cuda.h>
#include <stdio.h>


__device__ char d_helloStr[] = {'H','e','l','l','o','\0'};

// Host function
int
main(int argc, char** argv)
{
  cudaError_t err;
  char h_helloStr [sizeof(d_helloStr)];

  // copy device string to host string: 
  err = cudaMemcpy(h_helloStr, d_helloStr, sizeof(d_helloStr), cudaMemcpyDeviceToHost);
  printf("err = %d\n", err);

  // result string:   
  printf("%s\n", h_helloStr);

  return 0;
}
4

1 に答える 1

1

cudaMemcpyFromSymbolを使用する必要があります。

于 2010-06-21T21:14:33.183 に答える