2011-03-05 7 views
0

私はこの1つの答えを探しているのインターネットを精練しているが、いずれかを見つけることができませんでした。私はCUDA 3.2 SDK(と、ちょうど今、CUDA 4.0 RC)をインストールしたすべては、ディレクトリ、NSight、およびすべての残りの部分を含んで浮気の長い時間後に正常に動作するようです。この1つのことを除いて、<<< >>>オペレータを間違いとして強調表示し続けます。 VS2010のみ - VS2008ではありません。CUDA&VS2010問題

私はまた、次の種類のいくつかの警告を取得VS2010で

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\xdebug(109): warning C4251: 'std::_String_val<_Ty,_Alloc>::_Alval' : class 'std::_DebugHeapAllocator<_Ty>' needs to have dll-interface to be used by clients of class 'std::_String_val<_Ty,_Alloc>' 

アップデート:私は試してみて、CUDAカーネルを呼び出す.cppファイルのエントリポイントが含まれている場合を、代わりにmain()を書きます.cu私がやっていたように、オペレータは実際には強調表示されているだけでエラーとして表示されます! VS2008でも同じことが起こります。

誰もがこれを固定する方法を知っていますか?

アップデート2:ここでは、コードです。 main.cppファイル:

#include "kernel.cu" 

int main() 
{ 
    doStuff(); 
    return 0; 
} 

.cuファイル:

#include <iostream> 
#include "cuda.h" 
#include "cuda_runtime.h" 
#include "device_launch_parameters.h" 
#include <cutil_inline.h> 
#include <time.h> 

using namespace std; 

#define N 16 

__global__ void MatAdd(float A[N][N], float B[N][N], float C[N][N]) 

{ 
    int i = blockIdx.x * blockDim.x + threadIdx.x; 
int j = blockIdx.y * blockDim.y + threadIdx.y; 

if (i < N && j < N) 
    C[i][j] = A[i][j] + B[i][j]; 
} 

int doStuff() 
{ 
    dim3 threadsPerBlock(8, 8); 
    dim3 numBlocks(N/threadsPerBlock.x, N/threadsPerBlock.y); 

    float A[N][N], B[N][N], C[N][N]; 

    for (int i = 0; i < N; ++i) 
     for (int j = 0; j < N; ++j) 
     { 
      A[i][j] = 0; 
      B[i][j] = 0; 
      C[i][j] = 0; 
     } 

    clock_t start = clock(); 
    MatAdd<<<numBlocks, threadsPerBlock>>>(A, B, C); 
    clock_t end = clock(); 

    cout << "Took " << float(end - start) << "ms to work out." << endl; 
    cin.get(); 

    return 0; 
} 

アップデート3:さてさて、それはcouldn当然のように、私は、.cppファイルでCUDAコードを含む(idiotically)でしたtコンパイルします。今、私はCUDA 4.0をVS2010上で稼動させていますが、上記のようないくつかの警告が表示されます。あなたがこれを行うことはできません

+1

CUDA 4.0 RCはVS 2010で動作しますか? –

+0

部分的に、私は上記のように。私は3.2で動作するはずの同じ手順に従いましたが、ソリューションに.cppファイルがないとコンパイルされます。それ以外の場合は上記の問題が発生します。特にCUDA 3.2(CUDA 4.0の問題ではない)で同じことが起こるので、私は賢明なところです。 –

+0

foo <<<...>を>> main.cppから呼び出していますか? NVCCコンパイラだけがこの構文を理解しているので、これは(今までどおり)動作するとは思いません。 –

答えて

1

...

#include "kernel.cu" 

は今、あなたはそれがヘッダーだったかのよう.CUファイルをコンパイルするVisual StudioのCPPコンパイラを求めています。 doStuff()を宣言し、定義ではなくヘッダーをインクルードするヘッダーファイルが必要です。

以下が役に立つかもしれません。

http://www.ademiller.com/blogs/tech/2010/12/using-cudathrust-with-the-parallel-patterns-library/

http://blog.cuvilib.com/2011/02/24/how-to-run-cuda-in-visual-studio-2010/

通常、私は2つのプロジェクトとしてこれを設定します。 .CUのための2008年のCPPコンパイラと2010年のコンパイラを使用してC++のすべての機能を得るための1つのプロジェクト。あなたが取得

警告は、適切なテンプレートをエクスポートすることによって固定することができます。このようなものですが、警告の種類ごとに特定のものを記述する必要があります。

#if defined(__CUDACC__) 
#define DECLSPECIFIER __declspec(dllexport) 
#define EXPIMP_TEMPLATE 

#else 
#define DECLSPECIFIER __declspec(dllimport) 
#define EXPIMP_TEMPLATE extern 
#endif 

EXPIMP_TEMPLATE template class DECLSPECIFIER thrust::device_vector<unsigned long>; 

参照:

http://support.microsoft.com/default.aspx?scid=KB;EN-US;168958http://msdn.microsoft.com/en-us/library/esew7y1w.aspx

私はVS 2010およびCUDA 4を設定するステップバイステップガイドを書きました。ここで0

http://www.ademiller.com/blogs/tech/2011/03/using-cuda-and-thrust-with-visual-studio-2010/

ところで:CUDAコードのタイミングより良い方法は、イベントのAPIです。

cudaEvent_t start, stop; 
float time; 
cudaEventCreate(&start); 
cudaEventCreate(&stop); 
cudaEventRecord(start, 0); 
kernel<<<grid,threads>>> (d_odata, d_idata, size_x, size_y, NUM_REPS); 
cudaEventRecord(stop, 0); 
cudaEventSynchronize(stop); 
cudaEventElapsedTime(&time, start, stop); 
cudaEventDestroy(start); 
cudaEventDestroy(stop); 
+0

ええ、正解を投稿する前に、ちょっと待ってみました(下記参照)!これはコンパイルされ、残っているものは次のような多数の警告です: '警告警告C4251: 'std :: _ Locinfo :: _ Days':class 'std :: basic_string <_Elem、_Traits、_Ax>'はdllを持つ必要があります - クラス 'std :: _ Locinfo'のクライアントによって使用されるインターフェイス\t C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xlocinfo \t 193年 –

+0

@ade:あなたのブログ記事であなたはcuda SD 3.2。私は今日cuda sdk 4.0をダウンロードしましたが、vs2010のサポートはまだ提供されていないようですが、nvidiaはそれを持っていると主張しています:(あなたはすでにその間にcuda sdk 4.0を試していますか? –

+0

大丈夫 - /www.ademiller.com/blogs/tech/2011/06/cuda-4-0-and-vs-2010-samples-updated-for-4-0-release/。明日それを試してみよう。 –

0

私は.cuファイルを直接含んでいました。もちろん、それは.cppファイルのCUDAコードを含んでいるので、エラー!

+0

はい、参照してください上記のブログは、2010年にCUDAを取得するために投稿しています。もしParallel NSightで動作する4.0 RCを入手できたら、誰にでも教えてください。 –

関連する問題