--- tags: OpenMP, instructions --- # OpenMP 指令筆記 ## 目錄 [TOC] ## 程式背景準備 ### #include “omp.h” * 加入涵式庫 ## Instructions ## omp_get_thread_num(); return thread id which is runing. ## omp_set_num_threads(THREAD_NUM); set number thread in runtime. 設置為全域 ## omp_lock_t lck; omp_init_lock(&lck); omp_unset_lock(&lck); omp_destroy_lock(&lck);  ## omp_set_dynamic(0); Disable dynamic adjustment of the number of threads. ## omp_set_num_threads(omp_num_procs()); Request as many threads as you have processors. 不用這樣設置default 就是如此。 ## #pragma omp parallel 用{}括起來的區域使用default 數量的thread 平行執行。 ## #pragma omp parallel num_threads(THREAD_NUM) 指定thread 數量平行執行。 ## #pragma omp critical 只允許一個thread 在其中執行,在裡面的線程沒出來之前其他線程必須等待。 ## #pragma omp atomic 速度會比critical 快,但是critical 裡面只能有 x++, x--, ++x, --x, x+=, ......這類操作 ## #pragma omp for 自動拆分for 迴圈內容平行處理,while, do while 不能使用這個指令。 外圈需搭配# pragma omp parallel ## #pragma omp parallel for 等價於上面的兩者結合的操作 ## #pragma omp parallel for collapse(LOOP_LAYERS) 使用於 LOOP_LAYERS 層迴圈。 ## #pragma omp parallel for reduction (+: VARIABLE) // example: double ave=0.0, A[MAX]; int i; #pragma omp parallel for reduction (+:ave) for (i=0; i<MAX; i++) { ave += A[i]; } ave = ave/MAX; ## #pragma omp parallel sections 可以讓各個section 平行執行,example  ## #pragma omp barrier 等待,直到所有的執行緒都執行到 barrier。用來同步化。 ## #pragma omp for ordered reduction(+:res) ordered 指定接下來 for 要依序執行。 ## #pragma omp parallel for private(VARIABLE) private 內的變數在每個thread 的初始值都不同,而且是隨機的。 ## #pragma omp parallel for firstprivate(VARIABLE) Variable 在thread 讀入變數時會初始化他變成外層變數的數字, ## #pragma omp parallel for lastprivate(VARIABLE) Variable 在thread 離開{}內層時,會把在{}內計算完的VARIABLE 傳出去給主線程取代他的變數。 ## #pragma omp master 該區段指定主線程執行。 ## #pragma omp single 指定該區段一個線程執行,不一定要主線程。 ## #pragma omp task https://www.coder.work/article/1558923
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up