代码之家  ›  专栏  ›  技术社区  ›  Wookai

CUDA:错误C2491:“log1p”:不允许定义dllimport函数

  •  0
  • Wookai  · 技术社区  · 16 年前

    我试图将CUDA集成到一个现有的项目中,在这个项目中创建了几个libs(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。这是问题吗?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Francis Upton IV    16 年前

    我甚至不知道cuda是什么,但我会看看有编译器错误的代码(math ou functions.h),然后看看第3459行,看看它要做什么,然后从那里开始。这似乎与您在发布的代码中尝试执行的操作无关。

        2
  •  1
  •   Tom    16 年前

    顺便说一下,如果你使用的是CUDA 2.3(或者,最好是3.0),那么你应该能够去掉外部的“c”。

        3
  •  0
  •   Wookai    16 年前

    实际上,CUDA库定义了log1p函数,所以我要添加CUDA的代码中有一个模糊的部分。因此,两者之间存在某种冲突。我在代码中简单地重命名了这个函数,它工作了!