執行命令: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 下的 語言 頁裡,...