直播推薦
更多>企業(yè)動(dòng)態(tài)
更多>- Vector:無處不在的igus易格斯創(chuàng)新拖鏈應(yīng)用
- 綠色創(chuàng)新 共筑未來|安科瑞受邀出席寧波市建筑電氣2024年年會(huì)
- 2024年埃及開羅國際汽車零部件及售后展覽會(huì)
- 邁爾微視獲“2023-2024雙年度移動(dòng)機(jī)器人行業(yè)優(yōu)質(zhì)供應(yīng)鏈”獎(jiǎng)
- “筋斗云”高速?zèng)_壓發(fā)動(dòng)機(jī)完成空中試飛
- 廣東惠州大型高低溫交變濕熱試驗(yàn)箱已完成驗(yàn)收并投入使用
- 聚焦ICCAD:探索大模型技術(shù)如何引領(lǐng)半導(dǎo)體智造的創(chuàng)新與變革
- 助推新能源產(chǎn)業(yè)高質(zhì)量發(fā)展,上海兆越一直在行動(dòng)
推薦展會(huì)
更多>當(dāng)一個(gè)算法實(shí)現(xiàn)之后,需要集成到產(chǎn)品中去,這時(shí)就要面臨性能問題。在實(shí)際工程應(yīng)用中,除采用降低算法的復(fù)雜度去解決性能問題外,通常也會(huì)選擇優(yōu)化代碼以及良好運(yùn)用硬件等方式。接下來將針對在不改動(dòng)算法情況下,對純工程方面做性能優(yōu)化的技術(shù)作一個(gè)介紹。
1. 流程優(yōu)化
對初始算法進(jìn)行流程優(yōu)化主要有:
A.避免算法執(zhí)行過程中的重復(fù)操作及冗余計(jì)算。
B.避免算法中循環(huán)語句內(nèi)部有過多依賴和跳轉(zhuǎn)。
C.定點(diǎn)化:定點(diǎn)化的思想是將浮點(diǎn)型運(yùn)算轉(zhuǎn)換為整型運(yùn)算,具體做法是將數(shù)據(jù)乘上一個(gè)很大的數(shù)后,將所有運(yùn)算轉(zhuǎn)為整型計(jì)算,例如某個(gè)乘法只關(guān)心小數(shù)點(diǎn)后3位,那把數(shù)據(jù)都乘上10000后,進(jìn)行整型運(yùn)算的結(jié)果也就滿足所需的精度。
D.以空間換時(shí)間:空間換時(shí)間(zui)經(jīng)典的就是查找表,某些計(jì)算相當(dāng)耗時(shí),但其自變量的值域是比較有限的,這樣的情況可以預(yù)先計(jì)算好每個(gè)自變量對應(yīng)的函數(shù)值,存在一個(gè)表格中,每次根據(jù)自變量的值去索引對應(yīng)的函數(shù)值即可。
E.預(yù)先分配內(nèi)存:把握算法整個(gè)執(zhí)行過程中內(nèi)存的使用,提前分配好內(nèi)存,避免內(nèi)存不斷開辟與釋放而產(chǎn)生的耗時(shí)。
2. 指令優(yōu)化
SIMD即(Single Instruction Multiple Data),單指令多數(shù)據(jù)流,是CPU中能夠復(fù)制多個(gè)操作數(shù),并把它們打包在大型寄存器的一組指令集。
目前PC上I-n-t-e-l指令集有SSE、AVX等,SSE/AVX是對其X86體系的SIMD擴(kuò)展指令集,它基于SIMD向量化技術(shù),提高X86硬件的計(jì)算性能,增強(qiáng)了X86多核向量處理器的圖像和視頻處理能力。SSE/AVX指令支持向量化數(shù)據(jù)并行,一個(gè)指令可以同時(shí)對多個(gè)操作數(shù)進(jìn)行操作,同時(shí)操作的數(shù)據(jù)個(gè)數(shù)由向量寄存器的長度和數(shù)據(jù)類型共同決定。
SIMD屬于細(xì)粒度的并行,對于圖像算法中利用SIMD技術(shù)優(yōu)化,可以一次性對多個(gè)像素進(jìn)行處理,性能提升明顯,大部分情況下都有3-4倍的提升。
3. 多線程優(yōu)化
當(dāng)系統(tǒng)有多個(gè)線程/進(jìn)程時(shí),CPU會(huì)按一定的調(diào)度策略,把它們盡可能放在不同的核上執(zhí)行,多線程優(yōu)化就是把算法拆成多個(gè)子任務(wù),跑在不同的線程上,利用CPU多個(gè)核的能力,并行執(zhí)行算法。
比較有名的框架就是OpenMP,OpenMP是一種共享內(nèi)存并行系統(tǒng)的多線程程序設(shè)計(jì)方案,支持的編程語言包括C、C++和Python。OpenMP提供了對并行算法的高層抽象描述,特別適合在多核CPU機(jī)器上的并行程序設(shè)計(jì)。編譯器根據(jù)程序中添加的pragma指令,自動(dòng)將程序并行處理,使用OpenMP簡化了并行程序設(shè)計(jì)。OpenMP采用fork-join的執(zhí)行模式,開始的時(shí)候只存在一個(gè)主線程,當(dāng)需要并行計(jì)算的時(shí)候,派生出若干個(gè)分支線程來執(zhí)行并行任務(wù)。當(dāng)并行代碼執(zhí)行完成之后,分支線程匯合,并把控制流程交給單獨(dú)的主線程。一個(gè)典型的fork-join執(zhí)行模型如圖1所示。
圖1. fork-join執(zhí)行模型示意圖
4. GPU加速
GPU即(Graphic Processing Unit),圖形處理器。如圖2所示,CPU功能模塊很多,能適應(yīng)復(fù)雜運(yùn)算環(huán)境;GPU構(gòu)成則相對簡單,目前流處理器和顯存控制器占據(jù)了絕大部分晶體管。CPU中大部分晶體管主要用于構(gòu)建控制電路(比如分支預(yù)測等)和Cache,只有少部分的晶體管來完成實(shí)際的運(yùn)算工作。而GPU的控制相對簡單,且對Cache的需求小,所以大部分晶體管可以組成各類電路、多條流水線,使得GPU的計(jì)算速度有了突破性的飛躍,擁有了更強(qiáng)大的處理浮點(diǎn)運(yùn)算的能力。
圖2. GPU和CPU架構(gòu)
要使用GPU進(jìn)行通用計(jì)算,需要基于一個(gè)框架,目前的框架主要有CUDA和OpenCL。
CUDA是一種由NVIDIA推出的通用并行計(jì)算架構(gòu),該架構(gòu)使GPU能夠解決復(fù)雜的計(jì)算問題。 它包含了CUDA指令集架構(gòu)(ISA)以及GPU內(nèi)部的并行計(jì)算引擎。這個(gè)架構(gòu)只能在裝配了NVIDIA顯卡的機(jī)器上使用。
OpenCL是一個(gè)為異構(gòu)平臺(tái)編寫程序的框架,此異構(gòu)平臺(tái)可由CPU,GPU或其他類型的處理器組成。OpenCL由一門用于編寫kernels(在OpenCL設(shè)備上運(yùn)行的函數(shù))的語言(基于C99)和一組用于定義并控制平臺(tái)的API組成。OpenCL提供了基于任務(wù)分割和數(shù)據(jù)分割的并行計(jì)算機(jī)制。
免責(zé)聲明
- 凡本網(wǎng)注明"來源:智能制造網(wǎng)"的所有作品,版權(quán)均屬于智能制造網(wǎng),轉(zhuǎn)載請必須注明智能制造網(wǎng),http://towegas.com。違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
- 企業(yè)發(fā)布的公司新聞、技術(shù)文章、資料下載等內(nèi)容,如涉及侵權(quán)、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔(dān)責(zé)任,本網(wǎng)有權(quán)刪除內(nèi)容并追溯責(zé)任。
- 本網(wǎng)轉(zhuǎn)載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品來源,并自負(fù)版權(quán)等法律責(zé)任。
- 如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
2025成都國際無人系統(tǒng)(機(jī))技術(shù)及設(shè)備展覽會(huì)
展會(huì)城市:成都市展會(huì)時(shí)間:2025-10-10