免费看aⅴ,天天插天天干天天射,呦女网,入逼逼

您現(xiàn)在的位置:智能制造網(wǎng)>技術(shù)中心>漢振分享 | 算法的工程優(yōu)化技術(shù)

直播推薦

更多>

企業(yè)動態(tài)

更多>

推薦展會

更多>

漢振分享 | 算法的工程優(yōu)化技術(shù)

2020年07月07日 16:32:11人氣:705來源:浙江漢振智能技術(shù)有限公司

當一個算法實現(xiàn)之后,需要集成到產(chǎn)品中去,這時就要面臨性能問題。在實際工程應用中,除采用降低算法的復雜度去解決性能問題外,通常也會選擇優(yōu)化代碼以及良好運用硬件等方式。接下來將針對在不改動算法情況下,對純工程方面做性能優(yōu)化的技術(shù)作一個介紹。

1. 流程優(yōu)化

對初始算法進行流程優(yōu)化主要有:

A.避免算法執(zhí)行過程中的重復操作及冗余計算。

B.避免算法中循環(huán)語句內(nèi)部有過多依賴和跳轉(zhuǎn)。

C.定點化:定點化的思想是將浮點型運算轉(zhuǎn)換為整型運算,具體做法是將數(shù)據(jù)乘上一個很大的數(shù)后,將所有運算轉(zhuǎn)為整型計算,例如某個乘法只關(guān)心小數(shù)點后3位,那把數(shù)據(jù)都乘上10000后,進行整型運算的結(jié)果也就滿足所需的精度。

D.以空間換時間:空間換時間(zui)經(jīng)典的就是查找表,某些計算相當耗時,但其自變量的值域是比較有限的,這樣的情況可以預先計算好每個自變量對應的函數(shù)值,存在一個表格中,每次根據(jù)自變量的值去索引對應的函數(shù)值即可。

E.預先分配內(nèi)存:把握算法整個執(zhí)行過程中內(nèi)存的使用,提前分配好內(nèi)存,避免內(nèi)存不斷開辟與釋放而產(chǎn)生的耗時。

2. 指令優(yōu)化

SIMD(Single Instruction Multiple Data),單指令多數(shù)據(jù)流,是CPU中能夠復制多個操作數(shù),并把它們打包在大型寄存器的一組指令集。

目前PCI-n-t-e-l指令集有SSE、AVX等,SSE/AVX是對其X86體系的SIMD擴展指令集,它基于SIMD向量化技術(shù),提高X86硬件的計算性能,增強了X86多核向量處理器的圖像和視頻處理能力。SSE/AVX指令支持向量化數(shù)據(jù)并行,一個指令可以同時對多個操作數(shù)進行操作,同時操作的數(shù)據(jù)個數(shù)由向量寄存器的長度和數(shù)據(jù)類型共同決定。

SIMD屬于細粒度的并行,對于圖像算法中利用SIMD技術(shù)優(yōu)化,可以一次性對多個像素進行處理,性能提升明顯,大部分情況下都有3-4倍的提升。

3. 多線程優(yōu)化

當系統(tǒng)有多個線程/進程時,CPU會按一定的調(diào)度策略,把它們盡可能放在不同的核上執(zhí)行,多線程優(yōu)化就是把算法拆成多個子任務,跑在不同的線程上,利用CPU多個核的能力,并行執(zhí)行算法。

比較有名的框架就是OpenMP,OpenMP是一種共享內(nèi)存并行系統(tǒng)的多線程程序設計方案,支持的編程語言包括C、C++PythonOpenMP提供了對并行算法的高層抽象描述,特別適合在多核CPU機器上的并行程序設計。編譯器根據(jù)程序中添加的pragma指令,自動將程序并行處理,使用OpenMP簡化了并行程序設計。OpenMP采用fork-join的執(zhí)行模式,開始的時候只存在一個主線程,當需要并行計算的時候,派生出若干個分支線程來執(zhí)行并行任務。當并行代碼執(zhí)行完成之后,分支線程匯合,并把控制流程交給單獨的主線程。一個典型的fork-join執(zhí)行模型如圖1所示。

 圖1. fork-join執(zhí)行模型示意圖

4. GPU加速

GPU(Graphic Processing Unit),圖形處理器。如圖2所示,CPU功能模塊很多,能適應復雜運算環(huán)境;GPU構(gòu)成則相對簡單,目前流處理器和顯存控制器占據(jù)了絕大部分晶體管。CPU中大部分晶體管主要用于構(gòu)建控制電路(比如分支預測等)和Cache,只有少部分的晶體管來完成實際的運算工作。而GPU的控制相對簡單,且對Cache的需求小,所以大部分晶體管可以組成各類電路、多條流水線,使得GPU的計算速度有了突破性的飛躍,擁有了更強大的處理浮點運算的能力。

 圖2. GPU和CPU架構(gòu)

要使用GPU進行通用計算,需要基于一個框架,目前的框架主要有CUDAOpenCL

CUDA是一種由NVIDIA推出的通用并行計算架構(gòu),該架構(gòu)使GPU能夠解決復雜的計算問題。 它包含了CUDA指令集架構(gòu)(ISA)以及GPU內(nèi)部的并行計算引擎。這個架構(gòu)只能在裝配了NVIDIA顯卡的機器上使用。

OpenCL是一個為異構(gòu)平臺編寫程序的框架,此異構(gòu)平臺可由CPUGPU或其他類型的處理器組成。OpenCL由一門用于編寫kernels(在OpenCL設備上運行的函數(shù))的語言(基于C99)和一組用于定義并控制平臺的API組成。OpenCL提供了基于任務分割和數(shù)據(jù)分割的并行計算機制。

關(guān)鍵詞:處理器控制器晶體管
全年征稿/資訊合作 聯(lián)系郵箱:1271141964@qq.com

免責聲明

  • 凡本網(wǎng)注明"來源:智能制造網(wǎng)"的所有作品,版權(quán)均屬于智能制造網(wǎng),轉(zhuǎn)載請必須注明智能制造網(wǎng),http://www.caslcampaign.com。違反者本網(wǎng)將追究相關(guān)法律責任。
  • 企業(yè)發(fā)布的公司新聞、技術(shù)文章、資料下載等內(nèi)容,如涉及侵權(quán)、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔責任,本網(wǎng)有權(quán)刪除內(nèi)容并追溯責任。
  • 本網(wǎng)轉(zhuǎn)載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品來源,并自負版權(quán)等法律責任。
  • 如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

<
更多 >

工控網(wǎng)機器人儀器儀表物聯(lián)網(wǎng)3D打印工業(yè)軟件金屬加工機械包裝機械印刷機械農(nóng)業(yè)機械食品加工設備制藥設備倉儲物流環(huán)保設備造紙機械工程機械紡織機械化工設備電子加工設備水泥設備海洋水利裝備礦冶設備新能源設備服裝機械印染機械制鞋機械玻璃機械陶瓷設備橡塑設備船舶設備電子元器件電氣設備


我要投稿
  • 投稿請發(fā)送郵件至:(郵件標題請備注“投稿”)1271141964.qq.com
  • 聯(lián)系電話0571-89719789
工業(yè)4.0時代智能制造領(lǐng)域“互聯(lián)網(wǎng)+”服務平臺
智能制造網(wǎng)APP

功能豐富 實時交流

智能制造網(wǎng)小程序

訂閱獲取更多服務

微信公眾號

關(guān)注我們

抖音

智能制造網(wǎng)

抖音號:gkzhan

打開抖音 搜索頁掃一掃

視頻號

智能制造網(wǎng)

公眾號:智能制造網(wǎng)

打開微信掃碼關(guān)注視頻號

快手

智能制造網(wǎng)

快手ID:gkzhan2006

打開快手 掃一掃關(guān)注
意見反饋
關(guān)閉
企業(yè)未開通此功能
詳詢客服 : 0571-87858618