【问题标题】:gpuDevice() toolkit version always 5.5gpuDevice() 工具包版本始终为 5.5
【发布时间】:2014-08-05 14:04:31
【问题描述】:

无论我如何重新安装 CUDA 驱动和工具包,当输入 gpuDevice() 时,它总是显示 s:

CUDADevice with properties:

                      Name: 'Quadro K2000M'
                     Index: 1
         ComputeCapability: '3.0'
            SupportsDouble: 1
             DriverVersion: 6.5000
            ToolkitVersion: 5.5000
        MaxThreadsPerBlock: 1024
          MaxShmemPerBlock: 49152
        MaxThreadBlockSize: [1024 1024 64]
               MaxGridSize: [2.1475e+09 65535 65535]
                 SIMDWidth: 32
               TotalMemory: 2.1475e+09
                FreeMemory: 2.0431e+09
       MultiprocessorCount: 2
              ClockRateKHz: 745000
               ComputeMode: 'Default'
      GPUOverlapsTransfers: 1
    KernelExecutionTimeout: 0
          CanMapHostMemory: 1
           DeviceSupported: 1
            DeviceSelected: 1

我不明白。为什么工具包版本总是5.5?我可以升级到 6.5 吗?

【问题讨论】:

  • CUDA 工具包是程序编译时所针对的版本,因此如果您有一个针对 5.5 编译的程序,那么它的 cuda 工具包版本是 5.5。 “升级”的唯一方法是要求 MATLAB 使用较新的/更新 matlab(请注意,它类似于 msvcrt 或许多其他库的行为方式 - 用户无法将程序从 msvcrt80“更新”到 msvcrt90,但两个运行时可以并且确实可以共存单一系统,因此您可以运行使用 msvcrt80 的程序和使用 msvcrt90 的程序)。
  • 好的。因此,如果我安装了 6.5,并且我想编译包含 cuda 代码的 mex 文件,那会有问题吗?因为似乎我必须安装 5.5 才能使其编译?
  • 我不这么认为。你也可以看看this的帖子。
  • 根据mathworksexample“您必须使用与GPUDevice对象的ToolkitVersion属性一致的NVIDIA编译器(nvcc)版本。”

标签: matlab cuda gpu


【解决方案1】:

我不明白为什么这个问题会被否决。这是我尝试在 MEX 中使用 CUDA 时想到的第一个问题。

正如@Robert 提到的,您必须使用相同的 cuda 版本,但如果您使用简单的技巧则不一定(我使用的是 CUDA 6.0,MATLAB CUDA 版本是 5.0)。为了让它工作,你不需要复杂的过程,也不需要mex来编译所有.cu文件并将xml文件(如Link)复制到目录中进行编译。只需在 matlab 命令中键入以下两行,

!nvcc -O3 -DNDEBUG -c mexGPUExample.cu -Xcompiler -fPIC -I/MATLAB_ROOT/extern/include -I/MATLAB_ROOT/toolbox/distcomp/gpu/extern/include;
mex mexGPUExample.o -L/usr/local/cuda-6.0/lib64 -L/MATLAB_ROOT/bin/glnxa64 -lcudart -lcufft -lmwgpu

即使您的 ToolkitVersion 不匹配,它也会神奇地工作。 (将 /MATLAB_ROOT 更改为您的 matlab 根路径)


为什么 MATLAB CUDA Toolkit 版本与 System CUDA 版本不同?

关于您的问题,安装的 CUDA 版本与 MATLAB 使用的 CUDA 不同。

如果你去

/matlabroot/bin/maci64  (OS X)
/matlabroot/bin/glnxa64 (unix variant)

取决于您的操作系统, 可以看到【动态链接库、共享库】

libcudart.5.5.[dylib, so]
libcublas.5.5.[dylib, so]
libcufft.5.5.[dylib, so]

这些是 MATLAB 使用的库。要使 matlab 使用系统库,请按照以下说明进行操作。 (仅限 MAC)

总之,

  1. 安装的 cuda 版本与 MATLAB cuda 不同,因为它们有自己的库
  2. 要欺骗它加载新库,您可能需要使用 install_name_tool 更改库链接
  3. 反正你不需要它有相同的版本。

编辑:如何让 MATLAB 使用 System CUDA Library (OS X)

使 MATLAB 使用 System CUDA 库,默认的 MATLAB CUDA 库版本为 5.5,如果您想使用最新的库,请阅读以下内容

  1. 转到/Applications/MATLAB_R2014a.app/bin/maci64(MAC) 或MATLAB_ROOT/bin/glxna64(LINUX)
  2. 查看libmwgpu.[dylib, so]的库依赖这是你使用CUDA时加载的入口库

    结果会是这样的

    dnab404675:maci64 用户$ otool -L libmwgpu.dylib libmwgpu.dylib: @rpath/libmwgpu.dylib(兼容版本0.0.0,当前版本0.0.0)

    ....一些库

    @rpath/libcublas.5.5.dylib(兼容版本 5.5.0,当前版本 5.5.20) @rpath/libcudart.5.5.dylib(兼容版本 5.5.0,当前版本 5.5.20) @rpath/libcufft.5.5.dylib(兼容版本5.5.0,当前版本5.5.20)

    ...还有更多

    我们的目标是将cublascudartcufft的库依赖修改为

    /usr/local/cuda/lib/libcublas.dylib(兼容版本 5.5.0,当前版本 5.5.20) /usr/local/cuda/lib/libcudart.dylib(兼容版本 5.5.0,当前版本 5.5.20) /usr/local/cuda/lib/libcufft.dylib(兼容版本5.5.0,当前版本5.5.20)

    请注意,如果您键入 gpuDevice,它仍会显示为工具包版本 5。但它会加载新版本。那我们怎么做呢?

  3. 简单输入

    sudo install_name_tool -change @rpath/libcufft.5.5.dylib /usr/local/cuda/lib/libcufft.dylib libmwgpu.dylib

    sudo install_name_tool -change @rpath/libcudart.5.5.dylib /usr/local/cuda/lib/libcudart.dylib libmwgpu.dylib

    sudo install_name_tool -change @rpath/libcublas.5.5.dylib /usr/local/cuda/lib/libcublas.dylib libmwgpu.dylib

我仍然不知道如何更改 Linux 中的共享库路径。大概要使用十六进制编辑器比如HT From Stackoverflow Answer

【讨论】:

  • 非常感谢您的解释。似乎最好的方法是同时安装 CUDA 5.5,这样就不会使情况进一步复杂化。
  • 当然,但目前我使用的是 cuda 6.0,而 MATLAB cuda 版本是 5.0,但它运行良好。您需要做的就是输入我在第一部分中解释过的 matlab 命令 !nvcc ...mex ...
  • 在 Linux 上,也许 LD_PRELOAD 技巧可能会起作用,例如以LD_PRELOAD=libcufft.so:libcudart.so:libcublas.so matlab 启动 matlab(更改为系统 CUDA 库的正确路径)通常会强制链接器将系统库与 matlab 一起使用。但问题是 Matlab 的 GPU 支持是否适用于较新的 CUDA...
【解决方案2】:

您还可以在 Windows 下将 CUDA 6.5 与 matlab 一起使用。棘手的部分是,您需要在 Visual Studio 下而不是在 matlab 中编译 mex 文件。 VS下如何编译mex的教程很多,这里不再赘述。只需创建一个以.cu为源的NVIDIA cuda项目,按照标准程序编译mex即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    相关资源
    最近更新 更多