首页 文章

使用Nvidia GPU计算工具包和Cygwin与Eclipse编译错误

提问于
浏览
0

我在Windows 7 x64上使用Nvidia GPU计算工具包和64位Cygwin包和Eclipse . (我使用内部构建工具,因为GNU make在Windows路径中不会冒冒险 . )我的代码:

这是相当基本的代码:#include #include using namespace std;

int main() {
    cl_int error = 42;
    cl_platform_id platform;

    error = clGetPlatformIDs(1, &platform, NULL);

    return 0;
}

C代码编译并运行正常,我可以使用OpenCL头和 cl_intcl_device_id ,但是 clGetPlatformID 我得到以下编译错误:

relocation truncated to fit: R_X86_64_32 against symbol 
'__imp_clGetPlatformIDs' defined in .idata$5 section in 
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\lib
\x64/OpenCL.lib(OpenCL.dll.b)

我尝试过以下方法:

  • 卸载/重新安装Cygwin工具

  • 在Nvidia GPU Computing工具包中卸载/重新安装32位和64位库

  • 卸载/重新安装Eclipse并检查大多数设置

  • 通过添加"-mcmodel=medium"或"-mcmodel=large"避免32位内存限制 . (根据搜索,在某些时候,32位和64位二进制文件正在混合 . )

  • 确认我只使用64位Nvidia库和Cygwin工具 .

我的猜测是内部构建器应该受到责备,但使用它是导致构建失败的另一个问题的解决方案 .

2 回答

  • 1

    我有同样的错误,最后我解决了这个问题,我最近做的是:

    1)在cygwin中安装名称中包含 opencl 的所有包 .

    2)接下来,在 ...\cygwin\etc\OpenCL\vendors\ (我在那里找到了pocl.icd)创建 nvidia.icd 并在那里放置一个字符串"/cygdrive/c/Windows/System32/nvopencl.dll" . 可以为英特尔OpenCL驱动程序执行类似的操作 .

    3)最后不要在CMake文件中犯错误(就像我一样) . 工作代码示例:

    cmake_minimum_required(VERSION 3.6)
    
    set(MODULE_NAME opencl-test)
    
    project(${MODULE_NAME})
    
    set(CMAKE_CXX_STANDARD 14)
    
    find_package(OpenCL)
    
    # set include directories
    include_directories(${OpenCL_INCLUDE_DIRS})
    
    # set source files
    set(SOURCE_FILES main.cpp)
    add_executable(${MODULE_NAME} ${SOURCE_FILES})
    
    # linking
    target_link_libraries(${MODULE_NAME} ${OpenCL_LIBRARY})
    
  • 1

    我对此有一些更新:

    几乎所有东西都被擦拭和重新安装(CUDA工具包,Cygwin,Eclipse),即使使用适当的标志(我在Captain Obvious链接到帖子暗示之前使用它),它仍然给我同样的错误 .

    我所取得的进步是,我可能已经把问题归结为问题所在 . 使用相对路径解决了GNU的问题,使得无法处理路径中的冒号 . 这基本上清除了Eclipse内部构建器 . 但是,我在另一台机器上的设置几乎完全相同,不同之处在于此设置有AMD卡,因此使用AMD App SDK而不是Nvidia的OpenCL工具包 .

    我怀疑这可能是最近发布的CUDA工具包6.0版本带来的错误,因为它引入了一些非常重要的升级,如统一内存,如果没有NSight Visual Studio插件,它们可能没有进行过如此好的测试 . 毕竟他们建议您使用Visual Studio与该插件一起开发,而我现在没有(合法)访问Visual Studio .

    编辑:我现在已经非常确认了...在Nvidia GPU机器上安装了AMD App SDK并且运行完美,所以看起来Nvidia实际上已经在CUDA工具包的第6版中搞砸了OpenCL . 你知道他们正在与OpenCL通过CUDA竞争,我几乎没有发现这令人惊讶 .

相关问题