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
gcc gcc -fopenmp
_OPENMP宏可以用來判斷OpenMP是否被支持,通過它可以寫出任何C語言編譯器(即使不支持OpenMP)都可以編譯的代碼。代碼如下所示:
#ifdef _OPENMP
#include
#else
#define omp_get_thread_num() 0
#endif
Visual C++? 2008對OpenMP的支持
VC++2008根據項目屬性配置的指示進行 /openmp編譯器切換,當配置了OpenMP支持后,編譯器會提供_OPENMP定義,可以使用#ifdef _OPENMP來決定程序使用或者不使用OpenMP。
配置VC++2008項目,在project的property頁面上的C/C++ -> Language 選項卡中將OpenMP Support這項設置為Yes,在需要使用OpenMP函數的cpp文件中引用#include ,這樣設置就完成了。