最近開始學習openMP,OpenMP提供對於並行描述的高層抽象降低了並行編程的難度和複雜度,這樣程式員可以把更多的精力投入到並行演算法本身,而非其具體實現細節。
openMP經常與MPI同時提到,這兩個的區別在於openMP針對單機上的多核環境,而MPI主要目的是協調主機間的並行運算,兩者抽象的粒度不同。
初次寫openMP程式,會遇到很多問題,現在我慢慢的整理匯總自己遇到的問題,給自己做個筆記也可以協助其他入門人員儘早解決問題。
開發環境linux ubuntu,編譯環境gcc
1. openMP內建一些庫函數,常用的有omp_get_num_threads, omp_get_thread_num, 這些庫函數存在於 omp.h中
在代碼開始處添加 #include<omp.h> 即可使用這些庫函數
2.使用gcc編譯openMP檔案
gcc -o XXX YYY.c -fopenmp
gcc -o 選項 將輸入的檔案yyy.c編譯成一個名為xxx的二進位可執行程式
-fopen 參數用來識別openmp檔案
3.運行產生的可執行程式 使用命令 ./ ,跟運行shell指令碼一樣
4.使用#pragma omp parall sections 可以指定不同的部分運行於不同的核,每套sections佔用全部的核去分配
eg.
#pragma omp parallel sections
{
#pragma omp section
{printf("1 threadID=%d\n", omp_get_thread_num());}
#pragma omp section
{printf("2 threadID=%d\n", omp_get_thread_num());}
#pragma omp section
{printf("3 threadID=%d\n", omp_get_thread_num());}
#pragma omp section
{printf("4 threadID=%d\n", omp_get_thread_num());}
}