gpu处理信号_GPU中的并行运算,加速你的Matlab程序
Matlab本就擅長(zhǎng)矩陣計(jì)算,其借助CUDA工具箱調(diào)用Nvidia?GPU加速并行運(yùn)算,可以起到如虎添翼的效果。今天給大家介紹一下CUDA的基礎(chǔ)知識(shí)以及如何快速在Matlab中調(diào)用工具箱對(duì)程序進(jìn)行加速。
CUDA,Compute Unified Device Architecture 統(tǒng)一計(jì)算設(shè)備架構(gòu)
CUDA編程模型是將CPU作為主機(jī),GPU作為協(xié)處理器或者叫設(shè)備,一般情況下,CPU負(fù)責(zé)進(jìn)行邏輯性強(qiáng)的事務(wù)處理和串行計(jì)算,GPU則專注于執(zhí)行高度線程化的并行處理任務(wù)。各自擁有相互獨(dú)立的存儲(chǔ)地址空間,也就是主機(jī)端的內(nèi)存和設(shè)備端的顯存。
操作顯存需要調(diào)用CUDA API中的存儲(chǔ)器管理函數(shù),操作包括開(kāi)辟、釋放、初始化顯存空間等,在主機(jī)端和設(shè)備端之間進(jìn)行數(shù)據(jù)傳輸?shù)取_\(yùn)行在GPU上的CUDA并行計(jì)算函數(shù)稱為Kernel(內(nèi)核函數(shù)),一個(gè)kernel函數(shù)并不是一個(gè)完整的程序,而是整個(gè)程序中的一個(gè)可以被并行執(zhí)行的步驟,一個(gè)完整的CUDA程序是有一系列的設(shè)備端Kernel函數(shù)并行步驟和主機(jī)端的串行處理步驟共同完成。
Matlab目前僅支持Nvidia顯卡,想知道自己的電腦有沒(méi)有這個(gè)能力,在Matlab中運(yùn)行?gpuDevice即可,這是在筆記本的Matlab2018b中運(yùn)行的結(jié)果。可以看出顯卡是“GeForce MX150”,其計(jì)算能力為6.1。計(jì)算能力的小數(shù)點(diǎn)前的第一位表示設(shè)備核心架構(gòu),小數(shù)點(diǎn)后的一位表示更加細(xì)微的進(jìn)步,包括對(duì)核心架構(gòu)的改進(jìn)和功能的完善。
除了反映計(jì)算架構(gòu)版本的計(jì)算能力,還有這些涉及到資源總量的參數(shù)也實(shí)實(shí)在在影響到GPU的計(jì)算性能。Kernel以線程網(wǎng)格(Grid)的形式組織,每個(gè)Grid由若干個(gè)線程塊(block)組成,每個(gè)block由若干個(gè)線程(thread)組成。
Kernel以block為單位執(zhí)行,Grid只是用來(lái)表示一系列可以被并行執(zhí)行的block集合,而block間無(wú)法通信,沒(méi)有執(zhí)行順序。本機(jī)中相關(guān)資源的數(shù)量介紹:
MaxThreadsPerBlock: 1024,每個(gè)block最大的線程數(shù);
MaxShmemPerBlock: 49152,每個(gè)block可用的最大共享內(nèi)存大小;
MaxThreadBlockSize: [1024 1024 64],三個(gè)維度各自最大的線程數(shù)量;
MaxGridSize: [2.1475e+09 65535 65535],三個(gè)維度各自最大的Grid數(shù)量;
TotalMemory: 2.1475e+09,AvailableMemory: 1.6579e+09,顯存2G,實(shí)際可用1.6G。
在Matlab中最簡(jiǎn)單的調(diào)用方法是使用gpuArray()函數(shù)數(shù)據(jù)放到GPU上運(yùn)算,再用gather()函數(shù)將結(jié)果取回。下面的簡(jiǎn)單示例說(shuō)明工作區(qū)的變量a通過(guò)gpuArray函數(shù)被放到了GPU中,在GPU中完成了取絕對(duì)值的計(jì)算,并通過(guò)gather函數(shù)將結(jié)果取回。
你也可以直接在GPU中產(chǎn)生數(shù)據(jù)進(jìn)行運(yùn)算,例如上圖中的變量e。這只是一個(gè)簡(jiǎn)單的示例,更多的內(nèi)容還需要你根據(jù)自己的需求去應(yīng)用。下圖顯示的是Matlab自帶的并行計(jì)算工具箱。
對(duì)于一些復(fù)雜的無(wú)法用matlab內(nèi)部函數(shù)進(jìn)行GPU加速的代碼,Matlab還提供了一個(gè)更強(qiáng)大的工具,就是調(diào)用.cu文件。matlab+c混合編程把.c,.cc,.cpp等文件編譯為能夠使用的mex文件。對(duì)于CUDA程序.cu,matlab也提供了一套方法來(lái)調(diào)用,最終編譯成.ptx文件。需要了解的請(qǐng)自行搜索查找方法。
對(duì)在Matlab中進(jìn)行GPU編程感興趣的給我們“雷達(dá)通信電子戰(zhàn)”微信公眾號(hào)發(fā)送“190206”可獲得相關(guān)參考資料進(jìn)行深入學(xué)習(xí)。
加速M(fèi)atlab程序的1001個(gè)“小技巧”
FPGA/DSP/GPU,加速雷達(dá)信號(hào)處理
雷達(dá)信號(hào)處理實(shí)現(xiàn),選擇FPGA還是GPU?
《全場(chǎng)通用》服務(wù)說(shuō)明
閱讀原文,更多精彩等著你!
總結(jié)
以上是生活随笔為你收集整理的gpu处理信号_GPU中的并行运算,加速你的Matlab程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 特斯拉因种族歧视被判赔偿超300万美元,
- 下一篇: iframe的src怎么携带参数_三种传