⑴ 如何利用VS的代碼優化和openmp並行計算提高程序運行速度

以前利用多線程為擁有較大量計算的程序提速過,但也深知多線程的同步和程序的調試是一大坑,最近為實驗室的項目學習了一點VS下優化代碼的設置以及利用openmp加速運算,都是些很基本的提升程序速度的方法,只要稍微修改下代碼和設置,就可使程序加速。配合多線程,經過clock()函數驗證,我的程序運行可提高60%的速度,詳細如下:
代碼優化:
屬性->配置屬性->C/C++->代碼生成:啟用增強指令集,可選用 流式處理 SIMD 擴展 2 (/arch:SSE2) (/arch:SSE2)、流式處理 SIMD 擴展 2 (/arch:SSE2) (/arch:SSE2) 進行加速浮點模型,可選用 快速 (/fp:fast) 進行浮點數據運算的加速
屬性->配置屬性->C/C++->優化:可選用 使速度最大化 (/O2) 進行優化。全程序優化選擇是(/GL),在debug版本下不能這樣設置,必須在release版本
openmp並行計算:
在vs2012下,項目屬性-》C/C++-》語言,openmp支持,選是,包含頭文件「omp.h」,對基於數據分集的多線程程序設計,OpenMP是一個很好的選擇。

OpenMP常用指令
parallel:用在一個代碼段之前,表示這段代碼將被多個線程並行執行
for:用於for循環之前,將循環分配到多個線程中並行執行,必須保證每次循環之間無相關性
parallel for:parallel 和 for語句的結合,也是用在一個for循環之前,表示for循環的代碼將被多個線程並行執行
sections:用在可能會被並行執行的代碼段之前
parallel sections:parallel和sections兩個語句的結合
critical:用在一段代碼臨界區之前
single:用在一段只被單個線程執行的代碼段之前,表示後面的代碼段將被單線程執行
barrier:用於並行區內代碼的線程同步,所有線程執行到barrier時要停止,直到所有線程都執行到barrier時才繼續往下執行
atomic:用於指定一塊內存區域被制動更新
master:用於指定一段代碼塊由主線程執行
ordered:用於指定並行區域的循環按順序執行
threadprivate:用於指定一個變數是線程私有的
OpenMP除上述指令外,還有一些庫函數,下面列出幾個常用的庫函數:
omp_get_num_procs:返回運行本線程的多處理機的處理器個數
omp_get_num_threads:返回當前並行區域中的活動線程個數
omp_get_thread_num:返回線程號
omp_set_num_threads:設置並行執行代碼時的線程個數
omp_init_lock:初始化一個簡單鎖
omp_set_lock:上鎖操作
omp_unset_lock:解鎖操作,要和omp_set_lock函數配對使用
omp_destroy_lock:omp_init_lock函數的配對操作函數,關閉一個鎖

⑵ openMP與pthread並行計算誰速度更高一些

代碼優化:
屬性->配置屬性->C/C++->代碼生成:啟用增強指令集,可選用 流式處理 SIMD 擴展 2 (/arch:SSE2) (/arch:SSE2)、流式處理 SIMD 擴展 2 (/arch:SSE2) (/arch:SSE2) 進行加速浮點模型,可選用 快速 (/fp:fast) 進行浮點數據運算的加速
屬性->配置屬性->C/C++->優化:可選用 使速度最大化 (/O2) 進行優化。全程序優化選擇是(/GL),在debug版本下不能這樣設置,必須在release版本

⑶ 有哪些經典的演算法或者輕量應用適合並行化

反對,不會顯示你的姓名
知乎用戶 計算機博士生,做生物信息
6 人贊同
挖個坑,說幾個生物信息領域的經典演算法吧。 1. Smith-Waterman 和 Needleman-Wunsch,倆生物信息最經典的動態規劃演算法, 並行演算法的論文不知道發了多少篇了,Xeon,Xeon Phi, CUDA,SIMD的,一般並行先從這個演算法開始講 2. 基因組拼接的演算法 de brijin Gra… 顯示全部
挖個坑,說幾個生物信息領域的經典演算法吧。
1. Smith-Waterman 和 Needleman-Wunsch,倆生物信息最經典的動態規劃演算法, 並行演算法的論文不知道發了多少篇了,Xeon,Xeon Phi, CUDA,SIMD的,一般並行先從這個演算法開始講

2. 基因組拼接的演算法 de brijin Graph 的構建和查詢的並行演算法

3. 序列比對,BWT 構建的並行演算法

以後慢慢補充

最後來一發,之前給物理學裡面的QMC演算法(一種MCMC演算法,用來計算分子結構的)做Xeon Phi上並行的優化,題主有興趣可以看看,已經有現成的軟體包QMCPACK,可以支持Xeon和GPU並行了。

⑷ 如何利用VS的代碼優化和openmp並行計算提高

代碼優化:
屬性->配置屬性->C/C++->代碼生成:啟用增強指令集,可選用 流式處理內 SIMD 擴展 2 (/arch:SSE2) (/arch:SSE2)、流式處理 SIMD 擴展 2 (/arch:SSE2) (/arch:SSE2) 進行加速浮容點模型,可選用 快速 (/fp:fast) 進行浮點數據運算的加速
屬性->配置屬性->C/C++->優化:可選用 使速度最大化 (/O2) 進行優化。全程序優化選擇是(/GL),在debug版本下不能這樣設置,必須在release版本

⑸ matlab優化加快速度 求幫忙並行計算

matlab在矩陣運算和數組運算上可說比C還要快,但重復用的多了會慢幾百倍都有可能,因此說matlab里盡量少用for,能把數據組織成數組的形式後來用數組去計算是最好的。假如非要用重復,要注意把重復次數少的盡量放到外層,重復次數比較多的放到內層,這也會快一點。還有多個基本的運算,假如求和,排序啥的盡量用matlab自帶的函數,不要自己去實現,自帶的一般都有性能優化的。 你說的「把其中的兩三個重復寫成函數文檔,計算的時候再被調出使用」這不太會加快速度,反而多了1個函數調出使用的開銷,反而會變慢。不太會處理問題的

⑹ matlab並行計算 對腳本有默認優化嗎

你能否把問題說的再詳細一點。按我的理解是否這樣,將設備測得的實測值用MATLAB擬合其函數模型,通過函數計算得到的值與理論解接近,誤差小於10^-4。

⑺ CUDA並行計算技術是啥意思,此技術意義何在 [硬體]

CUDA CUDA(Compute Unified Device Architecture),顯卡廠商NVidia推出的運算平台。 隨著顯卡的發展,GPU越來越強大,而且GPU為顯示圖像做了優化。在計算上已經超越了通用的CPU。如此強大的晶元如果只是作為顯卡就太浪費了,因此NVidia推出CUDA,讓顯卡可以用於圖像計算以外的目的。 目前只有G80平台的NVidia顯卡才能使用CUDA,工具集的核心是一個C語言編譯器。G80中擁有128個單獨的ALU,因此非常適合並行計算,而且數值計算的速度遠遠優於CPU。 CUDA的SDK中的編譯器和開發平台支持Windows、Linux系統,可以與Visual Studio2005集成在一起。 目前這項技術處在起步階段,僅支持32位系統,編譯器不支持雙精度數據等問題要在晚些時候解決。Geforce8CUDA(Compute Unified Device Architecture)是一個新的基礎架構,這個架構可以使用GPU來解決商業、工業以及科學方面的復雜計算問題。它是一個完整的GPGPU解決方案,提供了硬體的直接訪問介面,而不必像傳統方式一樣必須依賴圖形API介面來實現GPU的訪問。在架構上採用了一種全新的計算體系結構來使用GPU提供的硬體資源,從而給大規模的數據計算應用提供了一種比CPU更加強大的計算能力。CUDA採用C語言作為編程語言提供大量的高性能計算指令開發能力,使開發者能夠在GPU的強大計算能力的基礎上建立起一種效率更高的密集數據計算解決方案。 從CUDA體系結構的組成來說,包含了三個部分:開發庫、運行期環境和驅動(表2)。 開發庫是基於CUDA技術所提供的應用開發庫。目前CUDA的1.1版提供了兩個標準的數學運算庫——CUFFT(離散快速傅立葉變換)和CUBLAS(離散基本線性計算)的實現。這兩個數學運算庫所解決的是典型的大規模的並行計算問題,也是在密集數據計算中非常常見的計算類型。開發人員在開發庫的基礎上可以快速、方便的建立起自己的計算應用。此外,開發人員也可以在CUDA的技術基礎上實現出更多的開發庫。 運行期環境提供了應用開發介面和運行期組件,包括基本數據類型的定義和各類計算、類型轉換、內存管理、設備訪問和執行調度等函數。基於CUDA開發的程序代碼在實際執行中分為兩種,一種是運行在CPU上的宿主代碼(Host Code),一種是運行在GPU上的設備代碼(Device Code)。不同類型的代碼由於其運行的物理位置不同,能夠訪問到的資源不同,因此對應的運行期組件也分為公共組件、宿主組件和設備組件三個部分,基本上囊括了所有在GPGPU開發中所需要的功能和能夠使用到的資源介面,開發人員可以通過運行期環境的編程介面實現各種類型的計算。
滿意請點贊

⑻ 並行編程演算法與優化實踐 怎麼樣

你可以看看陳國良院士編著的並行計算系列: 《並行演算法實踐》、《並行計算機體系結構》、《並行計算:結構、演算法、編程 》
中科大計算機系的研究生就是上這三本書。

⑼ 如何提高Matlab計算效率,多核處理器並行計算怎麼弄啊

如果CPU利用率低,而計算慢的話,說明你的程序處理的數據量並不大,但是處理流程很復雜,裡面肯定涉及了很多的類似於for循環的語句,使得程序的時間復雜度一下子就上去了。看了下面你的補充回答,好像和多核處理並行計算沒關系的。雖然最新版的matlab支持這種運行方式,但感覺你似乎還用不到這么做。建議你還是優化一下你的演算法。盡量減少for循環的次數,對於矩陣和向量運算,直接可以採用matlab現有的運算方法。

⑽ pso的並行演算法

與大多數隨機優化演算法相似,當適應值評價函數的計算量比較大時,PSO演算法的計算量會很大。為了解決該問題,研究者提出了並行PSO演算法。與並行遺傳演算法類似,並行PSO演算法也可以有三種並行群體模型:主從並行模型、島嶼群體模型和鄰接模型。
Schutte採用同步實現方式,在計算完一代中所有點的適應值之後才進入下一代。這種並行方法雖然實現簡單,但常常會導致並行效率很差。故而有人提出非同步方式的並行演算法,可以在對數值精度影響不大的條件下提高PSO演算法的並行性能。這兩種方式採用的都是主從並行模型,其中非同步方式在求解上耦合性更高,更容易產生通信瓶頸。
Baskar提出一種兩個子種群並行演化的並發PSO演算法,其中一個子種群採用原始的PSO演算法,另一個子種群採用基於適應值距離比的PSO演算法(FDR-PSO);兩個子種群之間頻繁地進行信息交換。而El-Abd研究了在子種群中採用局部鄰域版本的協作PSO演算法,並研究了多種信息交換的方式及其對演算法性能的影響。黃芳提出一種基於島嶼群體模型的並行PSO演算法,並引入一種集中式遷移策略,提高了求解效率,同時改善了早收斂現象。
Li提出延遲交換信息的並行演算法屬於鄰接模型,該演算法可以提高速度,但可能使得解的質量變差。