date: 2016-02-22
author: kagula
environment:
[1]core i7-4790k
[2]win10-64bits
[3]vs2013 update5
[4]gcc 4.4.7(centos 6.5自帶)
prologue:
openmp適合單機多核cpu,使用非常方便。 多種主流編譯器中vs2013支援的openmp版本最低,
雖然vs只支援到2.0,不過已經能滿足需要。
乙個「#pragma omp」statement指示隨後的乙個code block由openmp管理。
第乙個openmp程式
第一步:
[s1]
新建新的win32 console project with empty。
[s2]修改編譯器選項
[property pages dialog box]->[configuration properties]->[c/c++]->
[language property page]->[openmp support]
[s3]源**清單
#include #include using namespace std;
int main()
std::cout << "press any key to continue show next demo." << std::endl;
cin.get();
int sum = 0;
int a[10] = ;
//對for**塊中的sum變數進行執行緒保護
#pragma omp parallel for reduction(+:sum)
for (int i = 0; i < 10; i++)
std::cout << "sum: " << sum << std::endl;
cin.get();
return 0;
}
第二個openmp程式
對**塊進行執行緒保護
源**清單如下:
#include using namespace std;
int main();
#pragma omp parallel for
for (int i = 0; i < 10; i++) }
cout << "max: " << max << std::endl;
cin.get();
return 0;
}
第三個openmp程式
omp block中有「並行、序列、並行...」。
源**清單如下
#include #include using namespace std;
int main()
cout << endl << endl;
for (i = 0; i < 5;i++)
cin.get();
}
第四個openmp程式
多個不同內容的**段同時執行
#include #include using namespace std;
int main()
#pragma omp section
#pragma omp section
#pragma omp section
}cin.get();
return 0;
}
在centos下編譯和執行
g++-fopenmpmain.cpp
./a.out
參考資料
[1]openmp compilers支援情況
[2]openmp in visual c++
openmp學習筆記
pragma omp parallel僅在您指定了 fopenmp編譯器選項後才會發揮作用。在編譯期間,gcc 會根據硬體和作業系統配置在執行時生成 建立盡可能多的執行緒。每個執行緒的起始例程為 塊中位於指令之後的 這種行為是 隱式的並行化 而 openmp 本質上由一組功能強大的編譯指示組成,幫您...
OpenMP程式設計學習筆記九
openmp的execution model主要是幾個執行緒通過同時執行,從而完成乙個任務。與單核上的多執行緒併發執行是不同的,因為併發執行 實際上是執行緒在不同的時間段占有cpu。而openmp的執行緒,是在各自的cpu上執行,不存在各個執行緒在同乙個cpu上的排程。雖然有 多個cpu,但是記憶體...
OpenMP程式設計學習筆記五
critical 使用 如果 段只需要乙個thread執行,可以使用single標明。如果 段需要id為0的thread執行,使用master標明。那麼,如果 段需要各個cpu互斥執行,也就是要求每個cpu都執行一次,但任何時候只用乙個cpu在執行。這種 情況可以使用critical。從巨集觀上看,...