OpenMP學習筆記

2021-07-10 02:27:57 字數 2114 閱讀 4099

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。從巨集觀上看,...