13

Visual Studio 2008 C++ で Windows 7 64 ビットを実行している空のプロジェクトとして、新しい Win32 コンソール アプリを作成します。この記事の下部からサンプル コードを取得してビルドしようとしています: http://www.ddj.com/architect/207200659

プロジェクトのカスタム ビルド ルールに CUDA ビルド ルール v2.3.0 を追加します。利用可能なルールファイルリストにチェックボックスがあるのはこれだけです

ソース ファイル (フォルダー/フィルター???) に moveArrays.cu を作成します。

そのファイルに次のコードを追加します。

// moveArrays.cu
//
// demonstrates CUDA interface to data allocation on device (GPU)
// and data movement between host (CPU) and device.

#include <stdio.h>
#include <assert.h>
#include <cuda.h>
int main(void)
{
   float *a_h, *b_h;     // pointers to host memory
   float *a_d, *b_d;     // pointers to device memory
   int N = 14;
   int i;
   // allocate arrays on host
   a_h = (float *)malloc(sizeof(float)*N);
   b_h = (float *)malloc(sizeof(float)*N);
   // allocate arrays on device
   cudaMalloc((void **) &a_d, sizeof(float)*N);
   cudaMalloc((void **) &b_d, sizeof(float)*N);
   // initialize host data
   for (i=0; i<N; i++) {
      a_h[i] = 10.f+i;
      b_h[i] = 0.f;
   }
   // send data from host to device: a_h to a_d 
   cudaMemcpy(a_d, a_h, sizeof(float)*N, cudaMemcpyHostToDevice);
   // copy data within device: a_d to b_d
   cudaMemcpy(b_d, a_d, sizeof(float)*N, cudaMemcpyDeviceToDevice);
   // retrieve data from device: b_d to b_h
   cudaMemcpy(b_h, b_d, sizeof(float)*N, cudaMemcpyDeviceToHost);
   // check result
   for (i=0; i<N; i++)
      assert(a_h[i] == b_h[i]);
   // cleanup
   free(a_h); free(b_h); 
   cudaFree(a_d); cudaFree(b_d);
}

ビルドすると、次のエラーが発生します。

1>------ ビルド開始: プロジェクト: CUDASandbox、構成: デバッグ x64 ------
1>リンク中...
1>moveArrays.cu.obj: エラー LNK2019: 関数 main で参照されている未解決の外部シンボル cudaFree
1>moveArrays.cu.obj: エラー LNK2019: 関数 main で参照されている未解決の外部シンボル cudaMemcpy
1>moveArrays.cu.obj: エラー LNK2019: 関数 main で参照されている未解決の外部シンボル cudaMalloc
1>moveArrays.cu.obj: エラー LNK2019: 関数 __cudaUnregisterBinaryUtil で参照されている未解決の外部シンボル __cudaUnregisterFatBinary
1>moveArrays.cu.obj : エラー LNK2019: 未解決の外部シンボル __cudaRegisterFatBinary が関数 __sti____cudaRegisterAll_45_tmpxft_00001264_00000000_6_moveArrays_cpp1_ii_main で参照されました
1>D:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\x64\Debug\CUDASandbox.exe: 致命的なエラー LNK1120: 5 つの未解決の外部
1>ビルド ログは「file://d:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\CUDASandbox\x64\Debug\BuildLog.htm」に保存されました。
1>CUDASandbox - 6 エラー、0 警告
========== ビルド: 0 成功、1 失敗、0 最新、0 スキップ ==========

SDK に付属のサンプル CUDA プログラムをコンパイルして実行できます。ここで単純なものが欠けていることはわかっていますが、それは何ですか?

4

3 に答える 3

17

正しいライブラリへのリンクが不足していると思います。「構成プロパティ->リンカー->入力」の下にCUDAライブラリが追加されていることを確認してください。これを参照してください。

于 2010-01-14T02:33:58.877 に答える