打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
GPU中的并行运算,加速你的Matlab程序

Matlab本就擅长矩阵计算,其借助CUDA工具箱调用Nvidia GPU加速并行运算,可以起到如虎添翼的效果。今天给大家介绍一下CUDA的基础知识以及如何快速在Matlab中调用工具箱对程序进行加速。

CUDA,Compute Unified Device Architecture 统一计算设备架构

CUDA编程模型是将CPU作为主机,GPU作为协处理器或者叫设备,一般情况下,CPU负责进行逻辑性强的事务处理和串行计算,GPU则专注于执行高度线程化的并行处理任务。各自拥有相互独立的存储地址空间,也就是主机端的内存和设备端的显存。


操作显存需要调用CUDA API中的存储器管理函数,操作包括开辟、释放、初始化显存空间等,在主机端和设备端之间进行数据传输等。运行在GPU上的CUDA并行计算函数称为Kernel(内核函数),一个kernel函数并不是一个完整的程序,而是整个程序中的一个可以被并行执行的步骤,一个完整的CUDA程序是有一系列的设备端Kernel函数并行步骤和主机端的串行处理步骤共同完成。


Matlab目前仅支持Nvidia显卡,想知道自己的电脑有没有这个能力,在Matlab中运行 gpuDevice即可,这是在笔记本的Matlab2018b中运行的结果。可以看出显卡是“GeForce MX150”,其计算能力为6.1。计算能力的小数点前的第一位表示设备核心架构,小数点后的一位表示更加细微的进步,包括对核心架构的改进和功能的完善。

除了反映计算架构版本的计算能力,还有这些涉及到资源总量的参数也实实在在影响到GPU的计算性能。Kernel以线程网格(Grid)的形式组织,每个Grid由若干个线程块(block)组成,每个block由若干个线程(thread)组成。

Kernel以block为单位执行,Grid只是用来表示一系列可以被并行执行的block集合,而block间无法通信,没有执行顺序。本机中相关资源的数量介绍:

MaxThreadsPerBlock: 1024,每个block最大的线程数;

MaxShmemPerBlock: 49152,每个block可用的最大共享内存大小;

MaxThreadBlockSize: [1024 1024 64],三个维度各自最大的线程数量;

MaxGridSize: [2.1475e+09 65535 65535],三个维度各自最大的Grid数量;

TotalMemory: 2.1475e+09,AvailableMemory: 1.6579e+09,显存2G,实际可用1.6G。

在Matlab中最简单的调用方法是使用gpuArray()函数数据放到GPU上运算,再用gather()函数将结果取回。下面的简单示例说明工作区的变量a通过gpuArray函数被放到了GPU中,在GPU中完成了取绝对值的计算,并通过gather函数将结果取回。


你也可以直接在GPU中产生数据进行运算,例如上图中的变量e。这只是一个简单的示例,更多的内容还需要你根据自己的需求去应用。下图显示的是Matlab自带的并行计算工具箱。


对于一些复杂的无法用matlab内部函数进行GPU加速的代码,Matlab还提供了一个更强大的工具,就是调用.cu文件。matlab+c混合编程把.c,.cc,.cpp等文件编译为能够使用的mex文件。对于CUDA程序.cu,matlab也提供了一套方法来调用,最终编译成.ptx文件。需要了解的请自行搜索查找方法。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
如何使用CUDA编程?
MATLAB_编程_GPU
科学网—[转载]高效使用matlab之三:在matlab中使用GPU加速
(总结篇)使用 MATLAB GPU 加速计算|MATLAB 并行计算与分布式服务器|MATLAB技术论坛
如何使用matlab
CUDA编程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服