gpuDevice()工具包版本总是5.5

时间:2014-08-05 14:04:32

标签: matlab cuda gpu

无论我如何重新安装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吗?

2 个答案:

答案 0 :(得分:7)

我不明白为什么这个问题得到了投票。当我尝试在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. 无论如何,你不需要它有相同的版本。

  4. 编辑:如何使MATLAB使用系统CUDA库(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

    4. 我仍然不知道如何在Linux中更改共享库路径。可能必须使用十六进制编辑器,例如HT来自Stackoverflow Answer

答案 1 :(得分:0)

您也可以在Windows下使用带有matlab的CUDA 6.5。棘手的部分是,您需要在Visual Studio下编译mex文件而不是在matlab中编译。有很多教程介绍如何在VS下编译mex所以不需要在这里重复。您只需要创建一个以.cu作为源的NVIDIA cuda项目,并按照标准程序编译mex。