Matlab 应用GPU加速
由于GPU近几年地迅速发展,GPU在多线程计算等方面逐渐超越CPU成为计算的主力军。而Matlab是常用的数学应用软件,现在讲解一下如何在Matlab中使用GPU加速计算
文章目录
- 0. 必要条件
- 1.给GPU传输数据
- 1.1 CPU的数据复制到GPU
- 1.2 直接在GPU上设置数据:
- 2.数据在GPU上运算
- 3.GPU数据回传
- 4.使用技巧
- 4.1 如果没有并行计算不建议使用GPU
- 4.2 如果没有Nvidia显卡或者显卡驱动
- 4.3 双精度尽量转换为单精度
- 附录
0. 必要条件
要想在Matlab中使用GPU加速有两个必须的条件
- 计算机上安装了NVIDIA显卡,目前AMD与Intel显示是暂不支持的;
- 安装NVIDIA显卡驱动。
1.给GPU传输数据
1.1 CPU的数据复制到GPU
在使用GPU计算的时候,只需要将CPU的数据复制到GPU中即可。
G = gpuArray(M);
上边是对数据的名称做了修改,也可以直接进行重新赋值。
M = gpuArray(M);
1.2 直接在GPU上设置数据:
A = zeros(10, 'gpuArray');
可以对0矩阵以及1矩阵直接进行复制,但是在程序后边需要标注使用gpuArray。
r = gpuArray.rand(1, 100) % 一行,一百列
随机矩阵的产生。
2.数据在GPU上运算
在GPU可以正常运行基本的运算,与正常矩阵计算方法相同
A=abs(A);
具体的可以运行的运算可以使用命令
methods(gpuArray)
进行查看,Matlab可以在GPU运行的具体运算可以查看附录,附录中是Matlab给出的结果。
3.GPU数据回传
B = gather (A);
直接使用上边的命令就能够将GPU中的数据回传给CPU。
4.使用技巧
4.1 如果没有并行计算不建议使用GPU
index = 0;
index = gpuArray(index);
for i = 1 : 10000ticfor j = 1 : 100000index = index + 1;endtoc
end
disp(index)
通过上边程序第二行程序就可以在GPU上运行,注释掉就会在CPU上运行。在我的电脑上运行时间如下表所示。
设备 | CPU | GPU |
---|---|---|
时间 | 0.00010 s | 1.973017 s |
由此可以看出,单个线程运行程序还是建议在CPU上运行,CPU的主频还是高一点,GPU主要是支持多个线程同时运行。
4.2 如果没有Nvidia显卡或者显卡驱动
如果没有Nvidia显卡或者显卡驱动,会显示下边的提示。
4.3 双精度尽量转换为单精度
在条件允许的情况下,尽量将计算过程中双精度转换为单精度。因为在GPU中单精度的计算速度明显优于双精度,在时间上会有很大的缩减。
附:单精度与上精度区别
数据类型 | 大小(字节) | 取值范围 | 保留有效位数 |
---|---|---|---|
单精度 | 4个字节(32位) | 3.4E-38~3.4E+38 | 7位 |
双精度 | 8个字节(64位) | 1.7E-308~1.7E+308 | 16位 |
参考:
Measuring GPU Performance - MATLAB & Simulink Example - MathWorks 中国
MATLAB上的GPU加速计算——学习笔记 - CSDN博客
附录
>> methods(gpuArray)Methods for class gpuArray:abs eq ipermute quiver3
accumarray erf iradon rad2deg
acos erfc isaUnderlying radon
acosd erfcinv isbanded rdivide
acosh erfcx isdiag real
acot erfinv isempty reallog
acotd errorbar isequal realpow
acoth existsOnGPU isequaln realsqrt
acsc exp isequalwithequalnans reducepatch
acscd expint isfinite reducevolume
acsch expm isfloat regionprops
all expm1 ishermitian rem
and eye isinf repelem
angle ezcontour isinteger repmat
any ezcontourf islogical reshape
applylut ezgraph3 ismember rgb2gray
area ezmesh ismembertol rgb2hsv
arrayfun ezmeshc isnan rgb2ycbcr
asec ezplot isnumeric ribbon
asecd ezplot3 isocaps roots
asech ezpolar isocolors rose
asin ezsurf isonormals rot90
asind ezsurfc isosurface round
asinh factorial isreal scatter
assert false issorted scatter3
atan feather issparse sec
atan2 fft issymmetric secd
atan2d fft2 istril sech
atand fftfilt istriu semilogx
atanh fftn kmeans semilogy
bandwidth fill knnsearch setdiff
bar fill3 ldivide setxor
bar3 filter le shiftdim
bar3h filter2 legendre shrinkfaces
barh find length sign
besselj fix line sin
bessely flip linspace sind
beta flipdim log single
betainc fliplr log10 sinh
betaincinv flipud log1p size
betaln floor log2 slice
bicg fplot logical smooth3
bicgstab fprintf loglog sort
bicgstabl full logspace sortrows
bitand gamma lsqr sparse
bitcmp gammainc lt spfun
bitget gammaincinv lu spones
bitor gammaln mat2gray sprand
bitset gather mat2str sprandn
bitshift ge max sprandsym
bitxor gmres mean sprintf
bsxfun gop medfilt2 spy
bwdist gpuArray mesh sqrt
bwlabel gradient meshc stairs
bwlookup gt meshgrid std2
bwmorph head meshz stdfilt
cast hist min stem
cat histc minres stem3
cconv histcounts minus stream2
cdf2rdf histeq mldivide stream3
ceil histogram mod streamline
cgs horzcat mode streamparticles
chol hsv2rgb movmean streamribbon
circshift hypot movstd streamslice
clabel idivide movsum streamtube
classUnderlying ifft movvar stretchlim
comet ifft2 mpower sub2ind
comet3 ifftn mrdivide subsasgn
compass im2double mtimes subsindex
complex im2int16 nan subspace
cond im2single ndgrid subsref
coneplot im2uint16 ndims subvolume
conj im2uint8 ne sum
contour imabsdiff nextpow2 superiorfloat
contour3 imadjust nnz surf
contourc imag nonzeros surfc
contourf image norm surfl
contourslice imagesc normest svd
conv imbothat normxcorr2 svds
conv2 imclose not swapbytes
convn imcomplement nthroot symmlq
corr2 imdilate null tail
corrcoef imerode num2str tan
cos imfill numel tand
cosd imfilter nzmax tanh
cosh imgaussfilt ones tfqmr
cot imgaussfilt3 or times
cotd imgradient padarray transpose
coth imgradientxy pagefun trapz
cov imhist pareto tril
csc imlincomb patch trimesh
cscd imnoise pcg trisurf
csch imopen pcolor triu
ctranspose imreconstruct pdist true
cummax imregdemons pdist2 typecast
cummin imregionalmax permute uint16
cumprod imregionalmin pie uint32
cumsum imresize pie3 uint64
curl imrotate planerot uint8
deg2rad imrotate_old plot uminus
del2 imshow plot3 union
det imtophat plotmatrix unique
detectFASTFeatures ind2sub plotyy uniquetol
detectHarrisFeatures inf plus unwrap
detrend inpolygon polar uplus
diag int16 poly var
diff int2str polyder vertcat
discretize int32 polyfit vissuite
disp int64 polyval volumebounds
display int8 polyvalm voronoi
divergence interp1 pow2 waterfall
dot interp2 power xcorr
double interp3 prod xor
edge interpn psi ycbcr2rgb
eig interpstreamspeed qmr zeros
end intersect qr
eps inv quiver Static methods:colon rand randperm
freqspace randi speye
loadobj randn
Matlab 应用GPU加速相关推荐
- Matlab之GPU加速方法
Matlab之GPU加速方法 Matlab之GPU加速方法 一般代码加速方法 GPU设备确认 GPU和CPU之间数据传递 复杂代码加速方法 一般代码加速方法 Matlab目前只支持Nvidia的显卡. ...
- Matlab的Gpu加速(CUDA cudnn)
多CUDA版本的切换,及Matlab版本对应的CUDA版本 学习笔记–Matlab的Gpu加速 安装CUDA和cudnn时,踩了不少坑,总结如下几个经验: 1.显卡驱动的版本与CUDA是一对多的关系, ...
- Matlab 使用GPU加速 转载
在matlab中使用GPU加速,来加速矩阵运算. 首先如前面所说,并不是所有GPU都能在maltab中进行加速的,貌似只有NVDIA的显卡可以吧. 硬件:GeForce GTX 980 软件:Matl ...
- matlab win10 gpu加速,win10怎么开启gpu加速有用吗 GPU硬件加速设置方法介绍
win10怎么开启gpu加速有用吗 GPU硬件加速设置方法介绍 作为Windows 10的一项重要功能,微软在分享了GPU硬件加速细节后,现在还为大家送上了开启它的技巧,对于中低端设备来说,提升效果还 ...
- MATLAB使用GPU加速计算
先上结论 1.对于特征值运算eig()函数来说,GPU的加速效果是很明显的 2.如果要求精度不高,采用单精度计算,加速效果更加明显 首先查看自己的电脑是不是支持GPU计算 在matlab的终端中输入: ...
- matlab win10 gpu加速,win10的Edge浏览器设置GPU硬件加速,大幅度提升浏览器性能
不知道大家对于GPU硬件加速是否有了解,这是现在的浏览器必备的功能,开启后能大幅度提升浏览器的性能,给我们更加顺滑的浏览体验.GPU硬件加速能够利用GPU的图形性能,加速渲染网页中的图像信息. 如果我 ...
- matlab win10 gpu加速,大师讲解win10硬件加速gpu计划开启方法的详尽处理方式
要是你在用系统的时候遇到了win10硬件加速gpu计划开启方法的情况你会怎么办呢?我们通过调查发现不少用户都碰到了win10硬件加速gpu计划开启方法的问题,我们来看看怎么解决win10硬件加速gpu ...
- MATLAB上的GPU加速计算——学习笔记
MATLAB目前只支持Nvidia的显卡.如果你的显卡是AMD的或者是Intel的,就得考虑另寻它路了. MATLAB可谓工程计算中的神器,一方面它自带丰富的函数库,另一方面它所有的数据都是内建的矩阵 ...
- matlab 中使用 GPU 加速运算
为了提高大规模数据处理的能力,matlab 的 GPU 并行计算,本质上是在 cuda 的基础上开发的 wrapper,也就是说 matlab 目前只支持 NVIDIA 的显卡. 1. GPU 硬件支 ...
最新文章
- 软件版本中 release stable alpha beta pre snapshot 区别
- 创建分区表+分区表的分类+创建散列分区表+查看散列分区表分区中的数据+创建列表分区表+查看列表分区表分区中的数据...
- Git 之一 起源、安装、配置
- java 程序迁移后oracle 数字溢出_Spring Boot 应用迁移到 Java 11
- BDI Agent模型结构
- [转载] PGPool介绍和安装经验
- 我年薪百万,孩子教育花掉一半
- java获取动态天气api,java调用中国天气网api获得天气预报信息
- javascript/jquery给动态加载的元素添加click事件
- Spring Data JPA整合Redis缓存的配置
- 选择JSF不选Struts的十大理由
- 解读四大应用场景,神策分析云之 LTV 分析模型抢先体验
- 【数据结构】NOJ016—计算二叉树叶子结点数目
- [论文阅读笔记29]生物医学文本摘要(Biomedical Text Summarization)
- tfidf算法 python_Python TFIDF计算文本相似度
- Python爬取虎扑NBA球员信息
- 机器视觉:高动态范围图像
- 【字符集五】c++标准库<locale>
- 小手一敲,让JS Map现原形
- Mysql update from 使用