Hello World程序
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
void Hello(void);
int main(int argc,char* argv[])
{
int thread_count=10;
# pragma omp parallel num_threads(thread_count)
Hello();
return 0;
}
void Hello(void)
{
int my_rank=omp_get_thread_num();
int thread_count=omp_get_num_threads();
printf("this is from %d of %d\n",my_rank,thread_count);
}
從這個小程序來看
-
# pragma omp parallel num_threads(thread_count)
就是意味著它下面的內容要并行,并行的線程數為thread_count
。和pthreads不同,開發者不需要在這里手動為線程分配內存并依次啟動線程了,方便很多。
OpenMP并不會確保你能分配這么多線程,但是現在的計算機基本都可以滿足你想要的線程數。
- 在并行函數內部,
omp_get_thread_num();
可以獲得當前線程是哪一條線程 - 在并行函數內部,
omp_get_num_threads();
可以獲取當前所有線程的數目
#pragma omp parallel for num_threads(THREAD_NUM) schedule(static, CHUNK_SIZE)
#pragma omp parallel for num_threads(THREAD_NUM) schedule(dynamic, CHUNK_SIZE)
#pragma omp parallel for num_threads(THREAD_NUM) schedule(guided, CHUNK_SIZE)
默認的情況下,是使用static,chunk_size為1
其中guided與dynamic的區別在于guided的chunk_size會指數級下降,而dynamic的chunk_size是不變的