OpenMP程式設計學習筆記五

2021-08-25 05:03:27 字數 1624 閱讀 5111

critical 使用:

如果**段只需要乙個thread執行,可以使用single標明。如果**段需要id為0的thread執行,使用master標明。

那麼,如果**段需要各個cpu互斥執行,也就是要求每個cpu都執行一次,但任何時候只用乙個cpu在執行。這種

情況可以使用critical。從巨集觀上看,該**段被依次在各個cpu上被執行,各個cpu在執行該**的時序上沒有重疊。

測試**:

void testcritical()

clock_t t22 = clock();

printf("thread time = %d/n", t22 - t11);}}

clock_t t2 = clock();

printf("total time = %d/n", t2 - t1);}

執行結果:

test openmp

test openmp

test openmp

test openmp

test openmp critical

execute thread id is 0

thread time = 291

test openmp critical

execute thread id is 2

thread time = 290

test openmp critical

execute thread id is 1

thread time = 294

test openmp critical

execute thread id is 3

thread time = 286

total time = 1164

可以看出,整個執行的時間為1164ms,四個thread不是同步執行critical**段,而是依次執行的。

為了對比,注釋掉critical,

void testcritical()

clock_t t22 = clock();

printf("thread time = %d/n", t22 - t11);}}

clock_t t2 = clock();

printf("total time = %d/n", t2 - t1);}

再執行,結果為:

test openmp

test openmp critical

execute thread id is 0

test openmp

test openmp critical

execute thread id is 2

test openmp

test openmp critical

execute thread id is 3

test openmp

test openmp critical

execute thread id is 1

thread time = 224

thread time = 228

thread time = 237

thread time = 248

total time = 250

此時,total time基本上等於乙個thread的執行所耗時間。

OpenMP程式設計學習筆記九

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

OpenMP程式設計學習筆記九

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

openmp學習筆記

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