NVIDIA Computing Toolkit(CUDA 9.0 SDKを含む)をダウンロードしました。 SDK内には、cppIntegration
というVisual Studioプロジェクトがあります。 cppIntegration
プロジェクトでcudaMallocを使用して割り当てられたメモリは `?? ?? ?
、cudaMalloc()
を使用してメモリを割り当てられ、その後、データはcudaMemcpy()
を使用してこれらの変数にコピーされているタイプchar*
の変数があります。 Visual Studioでプロジェクトをデバッグしているときに、char*
変数が指し示すメモリアドレスがわかりますが、デバッガのメモリウィンドウを使用してそのメモリを読み込もうとすると、私はちょうど?? ?? ??
と表示されます。
cppIntegration
プロジェクトで.cu
ファイルは(唯一の問題に関連するコードを示す)、次のとおりです。
extern "C" bool
runTest(const int argc, const char **argv, char *data, int2 *data_int2, unsigned int len)
{
// use command-line specified CUDA device, otherwise use device with highest Gflops/s
findCudaDevice(argc, (const char **)argv);
const unsigned int num_threads = len/4;
assert(0 == (len % 4));
const unsigned int mem_size = sizeof(char) * len;
const unsigned int mem_size_int2 = sizeof(int2) * len;
// allocate device memory
char *d_data;
checkCudaErrors(cudaMalloc((void **) &d_data, mem_size));
// copy host memory to device
checkCudaErrors(cudaMemcpy(d_data, data, mem_size,
cudaMemcpyHostToDevice));
...
...
...
}
runTest()
はmain()
から呼び出されます。
d_data
が指すデータを表示しようとしましたが、?? ?? ??
と表示されます。 char*
が指す実際のメモリデータを表示するにはどうすればよいですか?
デバッグの目的で、人々は通常、デバイスからホストにメモリをコピーして見せるのですか?私はこれをどのように達成するのかを含めてください。私は[this](http://developer.download.nvidia.com/NsightVisualStudio/3.0/Documentation/UserGuide/HTML/Content/View_Memory.htm)を読んでデバイスのメモリを見ることができると思ったが、読み込みしようとしているのがグローバルではなく、共有でもローカルでもないのですか? – db7638
Nsight VSEのデバイスコードデバッグ機能を使用し、デバイスコードにブレークポイントを設定して(そのブレークポイントでヒット/ストップする)、その時点でデバイスデータを検査できるはずです。 –
'cuda-gdb'を使うと'(@グローバルchar *)データ 'としてキャストすることでメモリにアクセスできます。この場合、Windowsプラットフォームからは役に立ちません – BAdhi