日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > AdriftCoreFPGA芯研社

1簡(jiǎn)介

MATLAB 提供了強(qiáng)大的 GPU 加速功能,允許用戶利用圖形處理單元(GPU)來加速計(jì)算密集型任務(wù)。通過 GPU 加速,許多數(shù)值計(jì)算和數(shù)據(jù)處理任務(wù)可以顯著提升性能,尤其是在處理大型數(shù)據(jù)集和復(fù)雜的數(shù)學(xué)運(yùn)算時(shí)。

2Parallel Computing Toolbox

MATLAB 的 GPU 加速依賴于 Parallel Computing Toolbox ,該工具箱提供了多種函數(shù)和工具,用于在 GPU 上運(yùn)行 MATLAB 代碼。主要特點(diǎn)包括:

  • 高性能計(jì)算:利用 GPU 的并行處理能力,顯著加速數(shù)值計(jì)算。

  • 易于使用:只需對(duì)現(xiàn)有代碼進(jìn)行少量修改即可利用 GPU 加速。

  • 支持多種操作:線性代數(shù)、FFT、插值、圖像處理等。

關(guān)于GPU加速可以在MATLAB官網(wǎng)查閱 Parallel Computing Toolbox 文檔中的GPU Computing 來了解更多詳細(xì)的內(nèi)容。

3查看主機(jī)GPU設(shè)備

使用 gpuDevice 函數(shù)確認(rèn)系統(tǒng)是否有兼容的 GPU,并安裝了合適的驅(qū)動(dòng)程序。目前 Parallel Computing Toolbox 只支持N卡(英偉達(dá))。如果你的MATLAB GPU庫沒有被編譯的話,可能需要等待幾分鐘直至編譯完成,才能顯示GPU的信息。

以下是對(duì)于GPU設(shè)備信息的一些解釋:

Name: 'NVIDIA GeForce RTX 3060 Ti' ,GPU 的名稱或型號(hào)。

Index: 1 ,設(shè)備索引號(hào),用于標(biāo)識(shí)當(dāng)前選擇的 GPU 設(shè)備。在多 GPU 系統(tǒng)中,每個(gè) GPU 都有一個(gè)唯一的索引號(hào)。

ComputeCapability: '8.6,計(jì)算能力,表示 GPU 的架構(gòu)版本。不同的計(jì)算能力支持不同的功能和性能特性。CUDA 計(jì)算能力 8.6 對(duì)應(yīng) Ampere 架構(gòu)。

SupportsDouble: 1,是否支持雙精度浮點(diǎn)運(yùn)算。1 表示支持,0 表示不支持。

DriverVersion: 12.2000,安裝的 CUDA 驅(qū)動(dòng)程序版本。

ToolkitVersion: 10,安裝的 CUDA 工具包版本。

MaxThreadsPerBlock: 1024,每個(gè)塊(block)最大允許的線程數(shù)。

MaxShmemPerBlock: 49152,每個(gè)塊可用的最大共享內(nèi)存(以字節(jié)為單位)。

MaxThreadBlockSize: [1024 1024 64],一個(gè)線程塊的最大尺寸(X, Y, Z 方向)

MaxGridSize: [2.1475e+09 65535 65535],網(wǎng)格(grid)在各個(gè)維度的最大尺寸(X, Y, Z 方向)。

SIMDWidth: 32,每個(gè)線程束(warp)的寬度(即每個(gè)束中的線程數(shù))。

TotalMemory: 8.5894e+09,GPU 上的總內(nèi)存(以字節(jié)為單位)。8.5894e+09 字節(jié)約等于 8 GB。

AvailableMemory: 7.3321e+09,當(dāng)前可用的內(nèi)存(以字節(jié)為單位)。表示在當(dāng)前使用狀態(tài)下可用的 GPU 內(nèi)存量。

MultiprocessorCount: 38,GPU 上的多處理器數(shù)量。多處理器的數(shù)量影響并行處理能力。

ClockRateKHz: 1755000,GPU 的時(shí)鐘速率(以千赫茲為單位)。1755000 千赫茲即 1.755 GHz。

ComputeMode: 'Default',GPU 的計(jì)算模式。常見的計(jì)算模式有默認(rèn)模式(Default)、獨(dú)占模式(Exclusive)、并行模式(Prohibited)等。

GPUOverlapsTransfers: 1,是否支持 GPU 計(jì)算與數(shù)據(jù)傳輸?shù)闹丿B執(zhí)行。1 表示支持,0 表示不支持。

KernelExecutionTimeout: 1,內(nèi)核執(zhí)行超時(shí)設(shè)置。1 表示啟用超時(shí),0 表示禁用。

CanMapHostMemory: 1,是否支持映射主機(jī)內(nèi)存到設(shè)備。1 表示支持,0 表示不支持。

DeviceSupported: 1,MATLAB 是否支持該設(shè)備。1 表示支持,0 表示不支持。

DeviceSelected: 1,該設(shè)備是否被 MATLAB 選擇為當(dāng)前 GPU 設(shè)備。1 表示已選擇,0 表示未選擇。

4GPU基本操作方法

使用 gpuArray 函數(shù)將數(shù)據(jù)從 CPU 內(nèi)存?zhèn)鬏數(shù)?GPU 內(nèi)存。

A = rand(1000, 'single'); % 創(chuàng)建一個(gè)單精度的隨機(jī)矩陣A_gpu = gpuArray(A); % 將矩陣傳輸?shù)?GPU 

使用支持 GPU 計(jì)算的 MATLAB 函數(shù)進(jìn)行運(yùn)算。這些函數(shù)在后臺(tái)自動(dòng)使用 GPU 資源。使用 fft 函數(shù)進(jìn)行快速傅里葉變換。

B_gpu = fft(A_gpu); % 在 GPU 上進(jìn)行快速傅里葉變換

大多數(shù)情況下,MATLAB 的圖形和顯示功能、文件 I/O 操作以及某些特定的函數(shù)只支持在 CPU 上運(yùn)行。因此,即使計(jì)算在 GPU 上進(jìn)行,結(jié)果通常需要傳回 CPU 以進(jìn)行進(jìn)一步處理或顯示。使用 gather 函數(shù)將數(shù)據(jù)從 GPU 傳回 CPU。

B = gather(B_gpu); % 將結(jié)果傳回 CPU

5GPU計(jì)算與CPU計(jì)算對(duì)比

gpu計(jì)算FFT:

clearT = tic();%添加計(jì)時(shí)點(diǎn)A_gpu = gpuArray.rand(1000, 'single');%生成1000x1000隨機(jī)單精度浮點(diǎn)矩陣B_gpu = fft(A_gpu); % 在 GPU 上進(jìn)行快速傅里葉變換toc(T);%顯示時(shí)間

cpu計(jì)算FFT:

clearT = tic();%添加計(jì)時(shí)點(diǎn)A_cpu = rand(1000, 'single');%生成1000x1000隨機(jī)單精度浮點(diǎn)矩陣B_cpu = fft(A_cpu); % 在 CPU 上進(jìn)行快速傅里葉變換toc(T);%顯示時(shí)間

可以看到GPU計(jì)算FFT遠(yuǎn)遠(yuǎn)快于CPU。通常情況下GPU計(jì)算更快,但是也有例外情況,如:小規(guī)模數(shù)據(jù)或簡(jiǎn)單計(jì)算,GPU 的并行處理能力在處理大量數(shù)據(jù)和復(fù)雜計(jì)算時(shí)才能顯現(xiàn)其優(yōu)勢(shì)。如果數(shù)據(jù)規(guī)模較小或計(jì)算非常簡(jiǎn)單,啟動(dòng) GPU 所需的開銷(如數(shù)據(jù)傳輸和內(nèi)核啟動(dòng)時(shí)間)可能會(huì)使整體計(jì)算時(shí)間比在 CPU 上更長(zhǎng)。數(shù)據(jù)傳輸開銷,將數(shù)據(jù)從 CPU 內(nèi)存?zhèn)鬏數(shù)?GPU 內(nèi)存,以及將結(jié)果傳回 CPU,這些數(shù)據(jù)傳輸操作本身可能需要顯著的時(shí)間,特別是當(dāng)數(shù)據(jù)量較大時(shí)。如果計(jì)算時(shí)間相對(duì)較短,數(shù)據(jù)傳輸時(shí)間可能會(huì)占主導(dǎo)地位,導(dǎo)致總體性能下降。內(nèi)存限制,GPU 通常具有較少的內(nèi)存資源,與 CPU 相比,GPU 內(nèi)存可能不足以處理非常大的數(shù)據(jù)集。如果 GPU 內(nèi)存不足,程序需要進(jìn)行內(nèi)存交換或分塊處理,這會(huì)顯著降低性能。適合并行計(jì)算的任務(wù),某些任務(wù)天生不適合并行計(jì)算,比如高度串行化的任務(wù)、具有強(qiáng)依賴性的計(jì)算、或者需要頻繁同步的操作。在這些情況下,CPU 的串行執(zhí)行可能比 GPU 的并行執(zhí)行更有效。 帶寬限制 ,雖然 GPU 在計(jì)算能力方面比 CPU 更強(qiáng),但它們的內(nèi)存帶寬可能成為瓶頸,尤其是在需要頻繁訪問內(nèi)存的任務(wù)中。GPU 的內(nèi)存訪問延遲較高,因此在頻繁的內(nèi)存讀寫操作下,GPU 性能可能會(huì)下降。

6GPU計(jì)算函數(shù)介紹

基本數(shù)組操作

  • 創(chuàng)建和轉(zhuǎn)換

gpuArray: 將數(shù)據(jù)從 CPU 轉(zhuǎn)換到 GPU 上。

gather: 將數(shù)據(jù)從 GPU 轉(zhuǎn)回 CPU。

ones, zeros, rand, randn, eye: 在 GPU 上創(chuàng)建數(shù)組。

A = gpuArray(rand(1000)); % 在 GPU 上創(chuàng)建一個(gè)隨機(jī)數(shù)組B = gather(A); % 將數(shù)組從 GPU 轉(zhuǎn)回 CPU

數(shù)學(xué)運(yùn)算

  • 基本算術(shù)運(yùn)算

plus, minus, times, rdivide, power: 基本的加減乘除和冪運(yùn)算。

C = A + B; % 在 GPU 上進(jìn)行數(shù)組相加
  • 線性代數(shù)

mtimes, mldivide, mrdivide, inv, pinv, svd, eig: 矩陣乘法、矩陣求逆、特征值分解、奇異值分解等。

D = A * B; % 在 GPU 上進(jìn)行矩陣乘法
  • 求和與統(tǒng)計(jì)

sum, mean, std, var, median, mode, max, min: 統(tǒng)計(jì)運(yùn)算。

total = sum(A(:)); % 計(jì)算 GPU 上數(shù)組元素的總和
  • 傅里葉變換

fft, ifft, fft2, ifft2, fftn, ifftn: 快速傅里葉變換及其逆變換。

F = fft(A); % 在 GPU 上進(jìn)行快速傅里葉變換

插值與擬合

  • 插值

interp1, interp2, interp3, interpn: 一維、二維、三維和多維插值。

x = gpuArray(linspace(0, 10, 100));y = sin(x);xi = gpuArray(linspace(0, 10, 200));yi = interp1(x, y, xi, 'spline'); % 在 GPU 上進(jìn)行插值
  • 多項(xiàng)式擬合

polyfit, polyval: 多項(xiàng)式擬合和評(píng)估。

p = polyfit(x, y, 3); % 在 GPU 上進(jìn)行三次多項(xiàng)式擬合y_fit = polyval(p, x); % 評(píng)估擬合的多項(xiàng)式

圖像處理

  • 基本操作

imresize, imrotate, imcrop, rgb2gray, gray2rgb: 圖像縮放、旋轉(zhuǎn)、裁剪和顏色空間轉(zhuǎn)換。

I = gpuArray(imread('peppers.png'));I_gray = rgb2gray(I); % 在 GPU 上將彩色圖像轉(zhuǎn)換為灰度圖像
  • 濾波

imfilter, conv2: 圖像濾波和卷積。

h = gpuArray(fspecial('gaussian', [11, 11], 4));I_blurred = imfilter(I, h); % 在 GPU 上進(jìn)行高斯濾波

其他操作

  • 排序和索引

sort, find, unique, diff: 排序、查找、唯一值和差分。

sorted_A = sort(A); % 在 GPU 上對(duì)數(shù)組排序
  • 邏輯運(yùn)算

and, or, not, xor: 邏輯操作。

mask = A > 0.5;

7舉例


% 矩陣運(yùn)算示例n = 1000;A = gpuArray(rand(n)); % 在 GPU 上創(chuàng)建一個(gè)隨機(jī)矩陣B = gpuArray(rand(n));C = A * B; % 在 GPU 上進(jìn)行矩陣乘法C_cpu = gather(C); % 將結(jié)果從 GPU 轉(zhuǎn)回 CPU % 圖像處理示例I = gpuArray(imread('peppers.png')); % 將圖像讀取到 GPUI_gray = rgb2gray(I); % 在 GPU 上進(jìn)行灰度轉(zhuǎn)換h = gpuArray(fspecial('gaussian', [11, 11], 4));I_blurred = imfilter(I_gray, h); % 在 GPU 上進(jìn)行高斯濾波I_result = gather(I_blurred); % 將處理后的圖像傳回 CPUimshow(I_result); % 顯示結(jié)果圖像


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉