OpenMP程式設計學習筆記九

2021-05-22 17:41:48 字數 479 閱讀 6955

openmp的execution model主要是幾個執行緒通過同時執行,從而完成乙個任務。與單核上的多執行緒併發執行是不同的,因為併發執行

實際上是執行緒在不同的時間段占有cpu。而openmp的執行緒,是在各自的cpu上執行,不存在各個執行緒在同乙個cpu上的排程。雖然有

多個cpu,但是記憶體空間是共享的。

併發執行緒間經常有臨界變數,所以就不難理解openmp執行緒之間共享變數了。例如乙個迭代求和,共享變數就是sum變數。

併發執行緒中的每個執行緒都有私有的執行緒空間,同樣,openmp執行緒也有自己的執行緒私有空間。flush directive可以保證各個執行緒之間的

共享變數得到同步。

在理解了openmp的execution  與 memory models 之後,就可以學習更多的clause了。如果說directive解決openmp執行緒之間的

時序(同步)問題,那麼clause就是解決每個執行緒如何執行,尤其是執行緒中變數在記憶體中的存放問題。

OpenMP程式設計學習筆記九

openmp的execution model主要是幾個執行緒通過同時執行,從而完成乙個任務。與單核上的多執行緒併發執行是不同的,因為併發執行 實際上是執行緒在不同的時間段占有cpu。而openmp的執行緒,是在各自的cpu上執行,不存在各個執行緒在同乙個cpu上的排程。雖然有 多個cpu,但是記憶體...

OpenMP程式設計學習筆記五

critical 使用 如果 段只需要乙個thread執行,可以使用single標明。如果 段需要id為0的thread執行,使用master標明。那麼,如果 段需要各個cpu互斥執行,也就是要求每個cpu都執行一次,但任何時候只用乙個cpu在執行。這種 情況可以使用critical。從巨集觀上看,...

openmp學習筆記

pragma omp parallel僅在您指定了 fopenmp編譯器選項後才會發揮作用。在編譯期間,gcc 會根據硬體和作業系統配置在執行時生成 建立盡可能多的執行緒。每個執行緒的起始例程為 塊中位於指令之後的 這種行為是 隱式的並行化 而 openmp 本質上由一組功能強大的編譯指示組成,幫您...