複数のライブラリ (DLL) が作成されている既存のプロジェクトに CUDA を統合しようとしています。内積を計算する非常に単純なカーネルから始めました。
// dotProd_kernel.cu
__global__ void dotProd( double* result, double* vec1, double* vec2)
{
int i = threadIdx.x;
result[i] = vec1[i] * vec2[i];
}
このカーネルは、ホスト スクリプトによって呼び出されます。
// doProd.cu
#include <cutil_inline.h>
#include <dotProd_kernel.cu>
extern "C" double CUDA_dot(THTensor *vec1, THTensor *vec2);
double CUDA_dot(THTensor *vec1, THTensor *vec2)
{
// [content skipped]
// execute the kernel
dotProd<<< 1, nbThreads >>>(device_vec1, device_vec2, device_result_array);
// [content skipped]
return sum;
}
cmake を使用してビルド ファイルを生成し、Visual Studio 2008 Pro を使用してコンパイルします。カーネルを呼び出さない foobar 関数で .cu ファイルを単純に使用すると、正常に実行されます。しかし、上記のコードでは、次のエラーが発生します。
c:\cuda\include\math_functions.h(3459) : error C2491: 'log1p' : definition of dllimport function not allowed
CUDA コードを呼び出す結果のコードは、DLL としてエクスポートされます。これは問題ですか?