《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 8791|回复: 10
收起左侧

[提问] 请问各位大大,用GPU加速的时候出现这种问题怎么办?

[复制链接]
发表于 2015-12-22 17:45:27 | 显示全部楼层 |阅读模式
菜鸟一枚,最近想要尝试MATLAB+GPU加速计算,出现如下所示情况,以至于无法使用gpuArray等函数,请问应该怎么办?
我是Win10系统64位,matlab2014a,i7-4790kCPU,GTX960显卡
电脑装了cuda相关驱动和toolkit,Python下GPU正常,使用cuda编程.cu文件也可以正常编译运行。。。

>> gpuDevice

ans =

  CUDADevice (带属性):

                      Name: 'GeForce GTX 960'
                     Index: 1
         ComputeCapability: '5.2'
            SupportsDouble: 1
             DriverVersion: 7.5000
            ToolkitVersion: 5.5000
        MaxThreadsPerBlock: 1024
          MaxShmemPerBlock: 49152
        MaxThreadBlockSize: [1024 1024 64]
               MaxGridSize: [2.1475e+09 65535 65535]
                 SIMDWidth: 32
               TotalMemory: 4.2950e+09
                FreeMemory: NaN
       MultiprocessorCount: 8
              ClockRateKHz: 1278500
               ComputeMode: 'Default'
      GPUOverlapsTransfers: 1
    KernelExecutionTimeout: 1
          CanMapHostMemory: 1
           DeviceSupported: 1
            DeviceSelected: 0

>> gpuDevice(1)
错误使用 gpuDevice (line 26)
An unexpected error occurred during CUDA execution. The CUDA error was:
all CUDA-capable devices are busy or unavailable


>> gpuDeviceCount

ans =

     1
发表于 2015-12-23 08:32:27 | 显示全部楼层
本帖最后由 蓝云风翼 于 2015-12-23 08:50 编辑

1.试试reset(gpuDevice(0)),或者重启matlab 试试,
2. 重装cuda 驱动以及toolkit
3.如果还不行建议换成matlab2015
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-23 10:11:09 | 显示全部楼层
蓝云风翼 发表于 2015-12-23 08:32
1.试试reset(gpuDevice(0)),或者重启matlab 试试,
2. 重装cuda 驱动以及toolkit
3.如果还不行建议换成m ...

多谢!我试一下~
还有就是matlab中编号不是都是从1开始的吗?这里的deviceSelected:0是说选中的是0号然后后面判断中判断成了未选中还是说根本就没有选中呢?Python中选中的是0号,注册表显卡中有0和1两个键值应该是对应两块显卡(集显和GTX960)这里会不会有影响呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-23 10:14:04 | 显示全部楼层
蓝云风翼 发表于 2015-12-23 08:32
1.试试reset(gpuDevice(0)),或者重启matlab 试试,
2. 重装cuda 驱动以及toolkit
3.如果还不行建议换成m ...

>> reset(gpuDevice(0))
错误使用 gpuDevice (line 26)
The input argument must be a positive integer or [].
回复 支持 反对

使用道具 举报

发表于 2015-12-23 13:02:13 | 显示全部楼层
xkbb3144 发表于 2015-12-23 10:11
多谢!我试一下~
还有就是matlab中编号不是都是从1开始的吗?这里的deviceSelected:0是说选中的是0号然 ...

cuda GPU都是从0开始的DeviceSelected: 0表示选中第一块GPU Name: 'GeForce GTX 960'
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-23 23:54:00 | 显示全部楼层
蓝云风翼 发表于 2015-12-23 13:02
cuda GPU都是从0开始的DeviceSelected: 0表示选中第一块GPU Name: 'GeForce GTX 960'

可是这和matlab里面矛盾啊。。。看别人的也都是1,没有selected是0的。。
回复 支持 反对

使用道具 举报

发表于 2015-12-24 08:28:49 | 显示全部楼层
xkbb3144 发表于 2015-12-23 23:54
可是这和matlab里面矛盾啊。。。看别人的也都是1,没有selected是0的。。

不好意思,你说的对0是C/C++的索引
MATLAB是从1开始索引的
  CUDADevice CUDA GPU device object
    DEV = parallel.gpu.GPUDevice.getDevice(IDX) returns a CUDADevice
    representing the device with index IDX.

    DEV = parallel.gpu.GPUDevice.current() returns the currently selected
    CUDADevice.

    The CUDADevice has various properties describing the capabilities of the
    underlying device.

    parallel.gpu.CUDADevice methods:
       reset - Reset GPU device
       wait  - Wait for the GPU device to complete execution

    parallel.gpu.CUDADevice properties:
       Name                   - Name of the CUDA Device
       Index                  - Index of the CUDA Device
       ComputeCapability      - CUDA Compute Capability
       SupportsDouble         - Does the device support double precision data
       DriverVersion          - the CUDA driver version
       ToolkitVersion         - the CUDA toolkit version
       MaxThreadsPerBlock     - maximum supported thread block size
       MaxShmemPerBlock       - maximum amount of shared memory per block
       MaxThreadBlockSize     - maximum size in each dimension for thread block
       MaxGridSize            - maximum size of grid of thread blocks
       SIMDWidth              - number of simultaneously executing threads
       TotalMemory            - total available memory in bytes on the device
       AvailableMemory        - available memory in bytes on the device
       MultiprocessorCount    - the number of vector processors present
       ClockRateKHz           - the peak clock rate of the GPU in KHz
       ComputeMode            - the compute mode of the device
       GPUOverlapsTransfers   - whether the device supports overlapped transfers
       KernelExecutionTimeout - if true, the device may abort long-running kernels
       CanMapHostMemory       - if true, the device supports mapping host memory into the
       DeviceSupported        - can this device be used
       DeviceSelected         - is this the currently selected device

FreeMemory显示NAN以及DeviceSelected:0 CUDA初始化失败了,所以应该是reset(gpuDevice(1))
或者更新一下CUDA驱动试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-28 14:15:03 | 显示全部楼层
蓝云风翼 发表于 2015-12-24 08:28
不好意思,你说的对0是C/C++的索引
MATLAB是从1开始索引的
  CUDADevice CUDA GPU device object

谢谢您的回复!重新安装了cuda驱动、toolkit等,然而matlab中依然是和原来一样的问题。
在python下使用cudamat、gnumpy测试,gpu加速效果还是很明显的,计算矩阵乘法加速2000倍左右(不计传输时间)。说明cuda的安装应该没有问题了。
最近还是在折腾这个事儿,想麻烦问一下,matlab在win10系统下可以这样直接调用gpu加速的这个工具箱吗?是不是只有在linux下才能用?
回复 支持 反对

使用道具 举报

发表于 2015-12-28 17:26:07 | 显示全部楼层
xkbb3144 发表于 2015-12-28 14:15
谢谢您的回复!重新安装了cuda驱动、toolkit等,然而matlab中依然是和原来一样的问题。
在python下使用c ...

可以在win10下调用GPU工具箱
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-30 10:36:00 | 显示全部楼层
蓝云风翼 发表于 2015-12-28 17:26
可以在win10下调用GPU工具箱

重新装了Matlab2015a,再次调用gpuDevice就正常了,其中toolkitVersion从原来的5.5变成了现在的6.5
可能是cuda7.5和matlab2014配合不好吧
再次谢谢您!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2020-4-2 23:58 , Processed in 0.046823 second(s), 8 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表