使用Openmp並行化

2022-09-08 20:39:17 字數 1910 閱讀 9651

執行命令:g++ -fopenmp xx.cpp -lgomp -lpthread -o xx.out

用例一:

#include

#include

#include

void test (int n)

printf("%d, ", n);

}int main(int argc,char* ar**)

用例二**):

#include

#include

#include

using namespace std;

void test_omp(int times);

int main()

void test_omp(int times)

printf( "hello from thread: no.%d \n", omp_get_thread_num());

for (int j = 0; j < 1000000; j++)

}clock_t end = clock();

printf("%d threads para use time: %fs\n", times, double((end - start)) / clocks_per_sec);

}openmp的環境變數:

環境變數

描述示例

omp_schedule

控制for迴圈任務分配結構的排程

omp_schedule="guided,2"

omp_num_threads

設定預設執行緒的個數

omp_schedule=4

openmp的庫函式

函式名稱

描述

int omp_get_num_threads(void)

返回當前使用的執行緒個數,如果在並行區域外則返回1

int omp_set_num_threads(int i)

設定要使用的執行緒個數,它可以覆蓋omp_num_threads

int omp_get_thread_num(void)

返回當前執行緒號,0代表主線程

int omp_get_num_procs(void)

返回可用的處理核(處理器)個數,對於支援超執行緒技術的處理器被算作兩個處理核

openmp的排程方案

排程型別

描述static

將所有迴圈迭代劃分成相等大小的塊

dynamic

使用乙個內部佇列,當某執行緒可用時,為其分配由塊大小所制定的一定數量的迴圈迭代

guided

與dynamic策略類似,但是塊大小開始較大,後來逐步減小。可選引數chunk指定塊大小的最小值,預設為1

runtime

執行時由omp_schedule決定使用上面三種的哪種策略

openmp的編譯

平台和編譯器

命令windows平台 intel c++編譯器

icl /qopenmp

linux平台 intel c++編譯器

icl -openmp

gccgcc -fopenmp

_openmp巨集可以用來判斷openmp是否被支援,通過它可以寫出任何c語言編譯器(即使不支援openmp)都可以編譯的**。**如下所示:

#ifdef _openmp

#include

#else

#define omp_get_thread_num() 0

#endif

OpenMP並行程式設計(一)

openmp並行程式設計 一 openmp是乙個支援共享儲存並行設計的庫,特別適宜多核cpu上的並行程式設計。今天在雙核cpu機器上試了一下openmp並行程式設計,發現效率方面超出想象,因此寫出來分享給大家。在vc8.0中專案的屬性對話方塊中,左邊框裡的 配置屬性 下的 c c 下的 語言 頁裡,...

OpenMP並行程式設計(一)

openmp並行程式設計 一 openmp是乙個支援共享儲存並行設計的庫,特別適宜多核cpu上的並行程式設計。今天在雙核cpu機器上試了一下openmp並行程式設計,發現效率方面超出想象,因此寫出來分享給大家。在vc8.0中專案的屬性對話方塊中,左邊框裡的 配置屬性 下的 c c 下的 語言 頁裡,...

OpenMP並行程式設計(一)

openmp並行程式設計 一 openmp是乙個支援共享儲存並行設計的庫,特別適宜多核cpu上的並行程式設計。今天在雙核cpu機器上試了一下openmp並行程式設計,發現效率方面超出想象,因此寫出來分享給大家。在vc8.0中專案的屬性對話方塊中,左邊框裡的 配置屬性 下的 c c 下的 語言 頁裡,...