使用CUDA加速MATLAB程序
2018-01-25 17:38
330 查看
MATLAB十分擅长矩阵计算,如能借助CUDA工具箱调用NVIDIA GPU加速并行运算,能起到如虎添翼的效果。
最简单的调用方法是使用gpuArray()函数数据放到GPU上运算,再用gather()函数将结果取回(前提是运算支持gpuArray类型的变量,目前尝试过的矩阵乘法、求逆、pdist、pdist2函数均支持,可惜进行二次规划的quadprog并不支持。)。
不过,我最初在windows版MATLAB下调用gather()函数经常报错,然后便无法再MATLAB中调用GPU,使用reset(gpuDevice(1)))也还是报错。百度一番之后发现原来是windows系统的显卡超时检测和恢复(TDR)功能惹的祸。关闭TDR的方法是在HKLM\System\CurrentControlSet\Control\GraphicsDrivers下创建Dword值TdrLevel,并赋值为0
(https://answers.microsoft.com/zh-hans/windows/forum/windows_7-hardware/win7%E4%B8%AD%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE/69384e71-5075-4afe-a437-372425c0a3bb?auth=1)
用常用的pdist2函数进行测试:
结果:
最简单的调用方法是使用gpuArray()函数数据放到GPU上运算,再用gather()函数将结果取回(前提是运算支持gpuArray类型的变量,目前尝试过的矩阵乘法、求逆、pdist、pdist2函数均支持,可惜进行二次规划的quadprog并不支持。)。
不过,我最初在windows版MATLAB下调用gather()函数经常报错,然后便无法再MATLAB中调用GPU,使用reset(gpuDevice(1)))也还是报错。百度一番之后发现原来是windows系统的显卡超时检测和恢复(TDR)功能惹的祸。关闭TDR的方法是在HKLM\System\CurrentControlSet\Control\GraphicsDrivers下创建Dword值TdrLevel,并赋值为0
(https://answers.microsoft.com/zh-hans/windows/forum/windows_7-hardware/win7%E4%B8%AD%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE/69384e71-5075-4afe-a437-372425c0a3bb?auth=1)
用常用的pdist2函数进行测试:
gpuDevice(1) A=rand(10000,10000); B=rand(8000,10000); tic; C = (pdist2((A),(B))); toc tic; D = gather(pdist2(gpuArray(A),gpuArray(B))); toc;
结果:
ans = CUDADevice - 属性: Name: 'GeForce GTX 1050' Index: 1 ComputeCapability: '6.1' SupportsDouble: 1 DriverVersion: 9.1000 ToolkitVersion: 8 MaxThreadsPerBlock: 1024 MaxShmemPerBlock: 49152 MaxThreadBlockSize: [1024 1024 64] MaxGridSize: [2.1475e+09 65535 65535] SIMDWidth: 32 TotalMemory: 4.2950e+09 AvailableMemory: 3.4824e+09 MultiprocessorCount: 5 ClockRateKHz: 1493000 ComputeMode: 'Default' GPUOverlapsTransfers: 1 KernelExecutionTimeout: 0 CanMapHostMemory: 1 DeviceSupported: 1 DeviceSelected: 1 时间已过 161.138259 秒。 时间已过 41.843864 秒。可见GPU执行pdist2这种高度并行化的运算效率高出不少。
相关文章推荐
- matlab中使用CUDA kernel GPU加速
- 如何使用CUDA达到加速程序
- 利用cuda加速MATLAB程序
- 自己所开发的彩票程序使用cuda加速后所获得的加速比
- [转载]高效使用matlab之四:一个加速matlab程序的例子
- matlab程序 使用mex和omp加速程序
- Windows下mex程序的调试 使用Matlab调试mex程序
- 程序中使用MATLAB编译产生的DLL (VS2005, MATLAB7.5, mwArray)
- [教程] 程序中使用MATLAB编译产生的DLL (VC6.0, MATLAB R2010b, mwArray)
- 对话框程序中使用加速键
- 使用psyco来加速python程序
- Nginx初步-6:使用CUDA为PHP加速
- 使用 Watir 加速面向 Web 应用的自动化测试程序的开发
- 使用MATLAB的MCC命令生成C/C 程序
- 使用CUDA显卡加速SDK实现 H264编码
- 使用MATLAB的MCC命令生成C/C++程序
- 使用 Watir 加速面向 Web 应用的自动化测试程序的开发
- QQ游戏启动加速程序使用说明图文教程
- [转载]使用MATLAB设计小波变换程序中的若干问题
- VC++中使用MATLAB的C++数学库和MCC生成的程序(转)