Matlab 使用GPU加速 转载

在matlab中使用GPU加速,来加速矩阵运算。

首先如前面所说,并不是所有GPU都能在maltab中进行加速的,貌似只有NVDIA的显卡可以吧。

硬件:GeForce GTX 980

软件:Matlab 2015a  (Matlab 2012以后的版本才带有GPU加速的工具箱)

下面开始介绍怎么玩GPU加速

第一步:在matlab命令窗口,运行gpuDevice,查看自己的显卡是否具备GPU加速功能

gpuDevice

正常情况下matlab会输出如下结果代表具备GPU加速功能:

  CUDADevice with properties:Name: 'GeForce GTX 980'Index: 1ComputeCapability: '5.2'SupportsDouble: 1DriverVersion: 7.5000ToolkitVersion: 6.5000MaxThreadsPerBlock: 1024MaxShmemPerBlock: 49152MaxThreadBlockSize: [1024 1024 64]MaxGridSize: [2.1475e+09 65535 65535]SIMDWidth: 32TotalMemory: 4.2950e+09AvailableMemory: 3.3203e+09MultiprocessorCount: 16ClockRateKHz: 1380000ComputeMode: 'Default'GPUOverlapsTransfers: 1KernelExecutionTimeout: 1CanMapHostMemory: 1DeviceSupported: 1DeviceSelected: 1

第二步:CPU和GPU之间的数据交换,大致有如下几个函数和功能:

          (1)、将数据从CPU中搬入GPU,函数:gpuArray,用法 M = gpuArray(M);

          (2)、在GPU中计算完成后,将数据搬出到CPU存储,函数:gather,用法M=gather(M)。

下面给大家看看最简单的用法以及处理同样矩阵运算时的时间对比:

复制代码
clear all
clc
M = rand(2000,2000);            % 生成一个随机矩阵
tic
[A1,B1] = eig(M);               % 求该随机矩阵的特征值和特征向量
t1=toc tic M = gpuArray(M); % 将数据从CPU中搬到GPU [A2,B2] = eig(M); % 求特征值和特征向量 A2 = gather(A2); % 将数据从GPU中搬到CPU t2 = toc
复制代码

输出结果(运行时间对比):

t1 = 14.1483
t2 =  9.1567

总结:虽然加速不是特别明显,不过还是非常给力的,需要说明的是,一般的GPU对于单精度型的数据运算加速更明显一点,因此我们在编写代码时,最好能够将数据从double型转换为single型,即M=single(M),然后在使用M=gpuArray(M),将数据搬迁到GPU进行计算,下面看看转换为单精度型后的时间对比:

clear all
clc
M = rand(2000,2000);            % 生成一个随机矩阵
tic
[A1,B1] = eig(M);                    % 求该随机矩阵的特征值和特征向量
t1=toctic
M = single(M);                     % 将数据转换为单精度型
M = gpuArray(M);                % 将数据从CPU中搬到GPU
[A2,B2] = eig(M);                 % 求特征值和特征向量
A2 = gather(A2);                 % 将数据从GPU中搬到CPU
t2 = toc

运行结果:

t1 =  14.8332
t2 =   5.0963

GPU对eig和svd进行加速,和cpu运行时间对比

clear all
A = rand(2000,2000);
tic
A1 = gpuArray(single(A));
[U,S,V] = svd(A1,'econ');
A2 = U*S*V';
A3 = gather(A2);
t = toc
tic
[U1,S1,V1] = svd(A,'econ');
A4 = U1*S1*V1';
t2 = tocerror = norm(A3-A4,'fro')tic
A1 = gpuArray(single(A));
[vv,dd] = eig(A1);
t3 = toc

结果:

t =    3.1564
t2 =    7.1644
error =    0.0032
t3 =    5.2244
t4 =   17.6389

  

 

是不是加速更明显了呢?  

注:1、单精度型初始化矩阵函数例:X=rand(10,'single');  %定义在CPU上的一个10x10的随机初始化数组 

      2、直接在GPU中初始化矩阵例:GX=rand(10,'gpuArray');   %直接在GPU设备上随机初始化一个10x10的数组 

  3、判断数据DATA是否存在于GPU内存中例:TF=existOnGPU(DATA)

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

转载于:https://www.cnblogs.com/phyzrx/p/7475201.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字后端——可制造性设计

随着集成电路制造工艺技术的迅速发展,集成电路集成度迅速攀升,制造流程及工艺步骤日趋复杂,工艺尺寸也在不断缩小。集成电路可制造性设计(Design For Manufacturability,DFM) 以直接提升集成电路芯片的良品率及降低芯片…

Cloudstack安装(二)

Cloudstack安装 官方文档参考: http://docs.cloudstack.apache.org/projects/cloudstack-installation/en/4.9/qig.html#environment Cloudstack主要分Management和Agent两部分。 系统版本:CentOS 6.8 Management: cpu1,ram 2048M…

Pycharm 输出中文或打印中文乱码现象的解决办法

转载地址:https://www.cnblogs.com/Bro-Young/p/5920884.html 1. 确保文件开头加上以下代码: 1 # -*- coding:utf-8 -*- 还可以加上 1 import sys 2 reload(sys) 3 sys.setdefaultencoding(utf-8) 确保以下。 如果还是没有解决中文乱码,那么进…

计算机系统结构——概述

计算机的实现包括两个方面:组成和硬件。组成一词包含了计算机设计的高阶内容,例如存储器系统,存储器互连,设计内部处理器 CPU (中央处理器——算术、逻辑、分支和数据传送功能都在内部实现)。有时也用微体系…

全景图像拼接——基本流程

图像拼接技术是数字图像处理技术一个重要的研究方向,它即是将两幅或多幅相互有部分重叠的场景照片拼接成具有超宽视角、与原始图像接近且失真小、没有明显缝合线的高分辨率图像。可以很好地解决广角镜、鱼眼镜头等全景图获取设备的不足。如下图: 图像拼接产生的图像不…

WPF 带CheckBox、图标的TreeView

WPF 带CheckBox、图标的TreeView 在WPF实际项目开发的时候,经常会用到带CheckBox的TreeView,虽然微软在WPF的TreeView中没有提供该功能,但是微软在WPF中提供强大的ItemTemplate模板功能和自定义样式,那我们可以自己写一个这样的控…

win32框架,GDI图形编程写一个HelloWorld游戏_c语言

1.如图,实现功能: Hello World!字符串跟随鼠标移动鼠标左击Hello World!颜色为红色鼠标右击Hello World!颜色为蓝色鼠标滚轮滚动改变Hello World!颜色的RGB中的G值 2.实现工具: vs20133.实现步骤: 新建一个win32项目 如图,看到HelloWorldGame.cpp中 _tWinMain()的函…

全景图像拼接——图像融合

图像融合技术就是将配准过后的图像融合成一幅宽视角、大场景的图像。但由于图像采集过程中各种因素的影响,例如光照、角度、距离等,从而导致图像间的光照不均匀、颜色上不连续。 经过配准以后,参考图像和输入图像已经在同一个坐标系下,如果只是取某一幅图像的信息或者简单地…

极详细的ECC讲解 -OOB与ECC

http://blog.csdn.net/dongzhichen/article/details/8249228 详细的ECC讲解 -OOB与ECC 在网络编程中 OOB(out of band)带外数据 在MTD设备中 OOB 如下所示: http://www.cnblogs.com/bcxx_qin/archive/2009/06/11/1501271.html 极详细的ECC…

前端进阶(8) - 前端开发需要了解的工具集合:webpack, eslint, prettier, ...

前端开发需要了解的工具集合:webpack, eslint, prettier, ... 前端开发需要了解的一些工具,这些工具能够帮助你在项目开发中事半功倍。 1. nrm: npm registry 管理器 registry: npm 远程仓库的地址。 由于众所周知的原因,npm 官方仓库在国内特…

CMOS图像传感器——TOF 图像传感器

一、3D成像技术概述 图像传感器一直以来都是人类研究的热点。但随着当代科学技术发展, 人类对于传统的 2D 图像传感器的要求越来高,不仅期望着更高分辨率,更快速度,更大的动态范围,人类加希望能够获得物体深信息,但是 2D 成 像技术现在已经不能满足人类的需求,所以应运…

AndroidStudio创建jinLibs文件夹

在文件中的buildTypes节点下添加 sourceSets.main { jniLibs.srcDir libs } 如图 转载于:https://www.cnblogs.com/kim-liu/p/7479360.html

内嵌Tomcat的Connector对象的静态代码块

在排查问题的过程中发现Connector对象有一个静态代码块: static {replacements.put("acceptCount", "backlog");replacements.put("connectionLinger", "soLinger");replacements.put("connectionTimeout", &quo…

【Python爬虫学习笔记1】网络协议及请求基础

http协议与https协议 HTTP协议(全称为HyperText Transfer Protocol,超文本传输协议),是发布和接收HTML页面的方法,其服务端口号为80。 HTTPS协议为HTTP协议的加密版本,其在HTTP下加入了SSL层,服务端口号为443。 URL结构…

快速上手SpyGlass——基本流程

SpyGlass,这是一个很强大的RTL验证级工具。它不仅仅能检查sdc的错误,还能做以下各种检查:Low Power, DFT,CDC(Cross Domain Check)。 一、基本概念 1、方法学相关 Rule: 是SpyGlass 进行RTL分析的最小单…

快速上手SpyGlass——CDC检查

随着技术的发展,数字电路的集成度越来越高,设计也越来越复杂。很少有系统会只工作在同一个时钟频率。一个系统中往往会存在多个时钟,这些时钟之间有可能是同步的,也有可能是异步的。如果一个系统中,异步时钟之间存在信…

数字后端——低功耗单元库

在之前的文章中,介绍了低功耗设计物理实施的方案: 数字后端——低功耗设计物理实施_沧海一升的博客-CSDN博客_低功耗设计低功耗设计方案所涉及到的物理实施相关内容https://blog.csdn.net/qq_21842097/article/details/119918312 为了实现例如门…

NandFlash详述

1. 硬件特性: 【Flash的硬件实现机制】 Flash全名叫做Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device)。这类设备,除了Flash,还有其他比较常见…

史上最全的MySQL高性能优化实战总结!

1.1 前言 MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰。在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器…

低功耗设计——基于UPF进行设计

UPF, 统一电源格式UPF(Unified Power Format)是新思(Synopsys)公司通用的电源格式,是一组标准的类Tcl 语言的集合,用来描述芯片设计中的低功耗意图(Low-Power Design Intent)。 使用UPF 的语言,可以描述供电…