1

私の初心者を許してください。私たちの研究グループは最近、2 台の NVIDIA Tesla ユニットを搭載したサーバーを購入しました。私はそのセットアップを担当しています。

サーバーユニットは Rocks 6.0 を実行しています。

そこで、この指示に従って NVIDIA からダウンロードした CUDA SDK をインストールします: http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/index.html

SDK で提供されている NVIDIA のサンプル コードをコンパイルしようとしたところ、多数のエラーが発生しました。おそらく Makefile が設定されていないのではないかと思ったので、Stack Overflow を調べたところ、次のテスト コードが見つかりました。

using namespace std;

#include <iostream>
#include <string.h>
#include <unistd.h>

int main (int argc, const char *argv[]) {

    //our message
    const char *message = "hello world!";
    size_t size = strlen(message)+1;

    //delcare and allocate a buffer on the device
    char *d_buffer;
    if (cudaMalloc(&d_buffer,size) != cudaSuccess){
        cerr << cudaGetErrorString(cudaGetLastError()) << endl;
        exit(1);
    }

    //copy our message to the device buffer
    if (cudaMemcpy(d_buffer,message,size,cudaMemcpyHostToDevice)
        != cudaSuccess){
        cerr << cudaGetErrorString(cudaGetLastError()) << endl;
        exit(1);
    }

    //declare and allocate a buffer on the host
    char *h_buffer = (char*)malloc(size);
    if (h_buffer == 0){
        cerr << "malloc failed" << endl;
        exit(1);
    }

    //copy the device buffer back to the host
    if (cudaMemcpy(h_buffer,d_buffer,size,cudaMemcpyDeviceToHost)
        != cudaSuccess) {
        cerr << cudaGetErrorString(cudaGetLastError()) << endl;
        exit(1);
    }

    cout << h_buffer << endl;
    cudaFree(d_buffer);
    free(h_buffer);
}

そのため、指示に従って、次のコードをコンパイルしました。

nvcc -o hello_cuda hello_cuda.cu

そして、次のエラーが発生しました:

In file included from /usr/local/cuda-5.0/bin/../include/cuda_runtime.h:76,
                 from <command-line>:0:
/usr/local/cuda-5.0/bin/../include/common_functions.h:76:15: error: new: No such file or directory
In file included from /usr/local/cuda-5.0/bin/../include/common_functions.h:162,
                 from /usr/local/cuda-5.0/bin/../include/cuda_runtime.h:76,
                 from <command-line>:0:
/usr/local/cuda-5.0/bin/../include/math_functions.h:7555:17: error: cmath: No such file or directory
/usr/local/cuda-5.0/bin/../include/math_functions.h:7556:19: error: cstdlib: No such file or directory
hello_cuda.cu:11:20: error: iostream: No such file or directory

これらは基本的に、サンプル コードをコンパイルしたときに表示されるエラー メッセージと同じ種類のものです。私の推測では、iostream は C の標準ライブラリである必要があるため、コンパイラが適切に構成されていません。

これをどのように修正できるかについての考えや指針はありますか? それは非常に単純な問題のように思えますが、私はこれで何日も頭を悩ませてきました!

4

1 に答える 1

1

gcc/g++ が正しくインストールされていないようです。サンプルはブーストを必要としません。エラー メッセージには、標準ライブラリ (new、cmath、cstdlib) が見つからないことが示されています。

セクション 2.8.1 からhttp://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#proper-compiler-install

Linux と Windows の両方で、適切にインストールされたコンパイラは、システム インクルード ファイル、システム ライブラリと dll を見つけ、コンパイラのインストール自体に関連するファイルとライブラリをインクルードし、libc と libc++ を実装するファイルとライブラリをインクルードすることを可能にする何らかの形式の内部知識を持っています。

于 2014-05-08T07:41:08.550 に答える