8

cudaMemcpyFromSymbol()以下に、カーネルから結果を取得するために使用する自己完結型の例を含めました。この例では、symbol パラメーター (呼び出しの 2 番目のパラメーター) を通常の変数として渡します。ただし、CUDAのドキュメントを理解しているので、パラメーターを文字列として渡します。つまり、次のとおりです。

cudaMemcpyFromSymbol(&out, "out_d", sizeof(out_d), 0, cudaMemcpyDeviceToHost);

(シンボル名を引用符で囲む) も機能するはずです。それは私にはうまくいきません。

シンボル名はいつ機能し、文字列としてのシンボル名はいつ機能しますか?

#include "cuda_runtime.h"
#include <stdio.h>

__device__ int out_d;

__global__ void test() {
  out_d = 123;
}

int main() {
  test<<<1,1>>>();
  int out;
  cudaMemcpyFromSymbol(&out, out_d, sizeof(out_d), 0, cudaMemcpyDeviceToHost);
  printf("%d\n", out);
  return 0;
}
4

1 に答える 1

9

シンボル名を文字列パラメーターとして渡すことはCUDA4.2で非推奨になり、構文はcuda5.0で削除されました。その理由は、CUDA 5に登場した個別のデバイスコードリンカー機能を有効にすることに関係していました。cuda5ツールキットの場合、この変更はリリースノートに記載されています。

  • 特定のAPI関数で可能だったデバイスシンボルを示すための文字列の使用は、サポートされなくなりました。代わりに、記号を直接使用する必要があります。
于 2013-02-10T04:15:06.673 に答える