最近有朋友問我tld感覺執行還是不夠快,問我如何提公升效率,我說用多執行緒,可是感覺很多程式設計人員認為這是個禁區,不敢涉足。但其實大家不用如此害怕,並行程式設計固然涉及很多系統執行機制的問題,搞不好可能會使程式崩潰,但openmp大大降低了並行開發的難度和複雜度。
具體使用也非常簡單,不用安裝任何輔助開發外掛程式,只是在vs開發環境中簡單配置一下,我這裡使用的vs2008的中文版,只需如圖設定,對應英文版應該是projects->properties->c++->language中的/openmp選項開啟即可。
接下來新增標頭檔案#include ,並在對應的並行**前新增#pragma omp parallel for。一般需要並行運算的部分都是大量的迴圈操作。這裡我試驗選用for語句作為並行測試,所以#pragma omp parallel for語句都加在for語句的前面。這樣就ok了,是不是真的很容易,神馬,你還想要個例子,好吧,滿足你,上一小段測試**,測試一下程式的執行速度(由於出差,只能在自己的小本本測試一下,只有雙核,很不給力,如果大家電腦配置夠好,測試結果應該更暴力一些)
[cpp]view plain
copy
print?
#include
#include
#include
#include
using
namespace cv;
void test (int n)
} printf("%d, ", n);
} void main(void)
t = ((double)gettickcount() - t)/gettickfrequency();
printf("time without openmp: %.3fs\n", t);
t = (double)gettickcount();
#pragma omp parallel for
for(int i = 0; i
t = ((double)gettickcount() - t)/gettickfrequency();
printf("time with openmp: %.3fs\n", t);
}
執行結果如圖:
一方面,通過結果可以看到,新增openmp模組之後,程式執行順序不再順序執行,而是拆分成0~4,5~9兩部分分開執行(是由於我只有兩個核的原因麼?如果用實驗室的4核處理是否變成4個執行序分開執行呢,有待出差歸來驗證一下)。執行時間看,也可以輕易看出來,分成兩個執行序執行後,執行時間大概也節約了一半。可見openmp可以簡單實現並行提速哦,大家可以果斷試用,誰用誰知道~~
OpenMP 單執行緒改多執行緒結果出錯
今天踩了乙個很大的坑,覺得很有必要記錄下來。最近都在弄高效能方面的,cpu跟gpu的平行計算我都有在學。今天這個坑是關於openmp的。初始程式用1個執行緒跑一點問題都沒有,改為openmp的多執行緒後,每個pixel的計算結果有的對有的不對,有的還沒有被計算。由於我是移植程式的,基本一模一樣,可這...
OpenMP多執行緒linux下的使用,簡單化
這三篇文章已經講的很好。關鍵語法 inlcude pragma omp parallel for pragma omp for reduction 變數 pragma omp critical 鎖 pragma omp parallel for private x,y 每個執行緒都獨立拷貝x,y變數...
多執行緒開發
本文章 感覺蕭蕭空間分享。前不久寫了乙個專案,其中需要處理大量的資料,這些資料都是記錄型的,對這些資料進行處理是乙個非常耗時的事情,net在處理這些使用的過程中,就好像宕機一樣一動不動。這樣給使用者的感覺非常的不好。例如如下的例子,我們在乙個窗體上放置乙個progressbar,然後對progres...