簡體   English   中英

CUDA:錯誤C2491:'log1p':不允許定義dllimport函數

[英]CUDA : error C2491: 'log1p' : definition of dllimport function not allowed

我試圖將CUDA集成到現有項目中,在該項目中創建了多個庫(DLL)。 我從一個非常簡單的內核開始計算點積:

// 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對其進行編譯。 如果我僅將.cu文件與不調用內核的foobar函數一起使用,它將執行良好。 但是使用上面的代碼,我得到以下錯誤:

c:\cuda\include\math_functions.h(3459) : error C2491: 'log1p' : definition of dllimport function not allowed

調用CUDA代碼的結果代碼將導出為DLL。 這是問題嗎?

我什至不知道CUDA是什么,但是我將看一下具有編譯器錯誤的代碼(math_functions.h),並看3459行,然后看它要做什么並從那里開始。 似乎與您發布的代碼中的嘗試無關。

順便說一句,如果您使用的是CUDA 2.3(最好是3.0),那么您應該可以擺脫外部的“ C”。

實際上,CUDA庫定義了log1p函數,因此我試圖向其中添加CUDA的代碼中的晦澀部分也是如此。 因此,兩者之間存在某種沖突。 我只是在代碼中重命名了該函數,所以它起作用了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM