私はこの1つの答えを探しているのインターネットを精練しているが、いずれかを見つけることができませんでした。私はCUDA 3.2 SDK(と、ちょうど今、CUDA 4.0 RC)をインストールしたすべては、ディレクトリ、NSight、およびすべての残りの部分を含んで浮気の長い時間後に正常に動作するようです。この1つのことを除いて、<<< >>>
オペレータを間違いとして強調表示し続けます。 VS2010のみ - VS2008ではありません。CUDA&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上で稼動させていますが、上記のようないくつかの警告が表示されます。あなたがこれを行うことはできません
CUDA 4.0 RCはVS 2010で動作しますか? –
部分的に、私は上記のように。私は3.2で動作するはずの同じ手順に従いましたが、ソリューションに.cppファイルがないとコンパイルされます。それ以外の場合は上記の問題が発生します。特にCUDA 3.2(CUDA 4.0の問題ではない)で同じことが起こるので、私は賢明なところです。 –
foo <<<...>を>> main.cppから呼び出していますか? NVCCコンパイラだけがこの構文を理解しているので、これは(今までどおり)動作するとは思いません。 –