Matlab编程的GPU加速

来源:互联网 发布:windows无权访问 编辑:程序博客网 时间:2024/05/18 02:54

如果当前matlab支持GPU,可直接在命令行输入 gpuDevice 查看GPU信息, methods('gpuArray')可查询支持GPU操作的函数,这里的GPU目前必须是N卡即nvidia的GPU ,需要提前安装GPU 驱动。

1.使用GPU 运算的数据必须为GPU数据类型(除非GPU函数另有说明)
2.标量,常数一般没有转移的必要
3.只要GPU支持的函数使用GPU数据计算后的结果还保存在GPU上,(除非使用gather函数返回CPU)max正好是GPU支持的函数,所以不需要在CPU上求max。


从Matlab2013版本开始,matlab将可以直接调用gpu进行并行计算,而不再需要安装GPUmat库。这一改动的好处是原有的matlab内置函数都可以直接运用,只要数据格式是gpuArray格式的,那么计算过程会自动的调用GPU进行计算,不可谓不方便。

具体操作起来,只要知道下面几个函数就可以像编写简单的m文件一样,进行matlab的GPU编程:
1.GPU设备确认函数
1)n=gpuDeviceCount  %返回设备上的GPU数目
2)gpuDevice         %选择GPU设备
   D=gpuDevice or gpuDevice(): 如果当前还未设置选择的GPU,则选择默认的GPU,D是返回对象;如果已经设    置了GPU,则返回设置的GPU对象。
   D=gpuDevice(IDX): 表示选择IDX对应的GPU设置,D是返回对象
   %PS: 目前的GPU设置一般至少包含两个GPU,分别用1和2表示对应的IDX。
3)reset(gpudev) %清空gpu的内存,类似matlab的clear的功能。其中gpudev是gpuDevice所返回的对象。

2.GPU以CPU之间的交互
1)gpuArray(CPU-->GPU)
   主要有两个功能:
   I) 将CPU内存数据传导到GPU内存中
   例子-1:
   X=rand(10,'single'); %定义在CPU上的一个10x10的随机初始化数组
   GX=gpuArray(X);      %在GPU开始数组GX,并且将X的值赋给GX
   GX2=GX.*GX;         %GPU上执行数组对应位置的点乘
   II)在GPU内存中随机初始化一些内存数据。
   例子-2:
   GX=rand(10,'gpuArray'); %直接在GPU设备上随机初始化一个10x10的数组
   %%PS:常用的随机初始化函数有:eye, ones, zeros, rand, randi, randn.
2)gather(GPU-->CPU)
   主要是将GPU内存中的数据拷贝回CPU内存中。
   继续例子-1
   X2=gather(GX2)       %将GPU内存中的数组GX2赋值给CPU中的X2
3)TF=existOnGPU(DATA)
   用于判断DATA是否存在于GPU内存中。如果不存在则返回false。

3.计算效率统计
  t=gputimeit(F,N)     %返回执行F操作N次所需的时间,当N=1时可以缺省