gpu处理信号_GPU中的并行运算,加速你的Matlab程序

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

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

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

7d918eb4c879c73cbeef94f305213052.png

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

37018803bf9c28739b7cb591211658b8.png

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

be35cdcd04989504b5c40cfaf25692d8.png

除了反映计算架构版本的计算能力,还有这些涉及到资源总量的参数也实实在在影响到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函数将结果取回。

dee7526f760669a06f31f45b1fecbc5d.png

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

6e4322d830dfecf0d5126536df3561f3.png

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

ec9a0413304c9017b8d68237d130c9ff.png

对在Matlab中进行GPU编程感兴趣的给我们“雷达通信电子战”微信公众号发送“190206”可获得相关参考资料进行深入学习。

453d2097eb37b89b5c178720692ee964.png

24289f156c4f4e44863a02df36737cc4.png

ced22d5018beb9ab145f118e78fbcc20.png

  1. 加速Matlab程序的1001个“小技巧”

  2. FPGA/DSP/GPU,加速雷达信号处理

  3. 雷达信号处理实现,选择FPGA还是GPU?

  4. 《全场通用》服务说明

9f1128df434aebd20d9c0f1ccd37e1d7.png

阅读原文,更多精彩等着你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值