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)
就是意味著它下面的內(nèi)容要并行,并行的線程數(shù)為thread_count
宣决。和pthreads不同沧奴,開發(fā)者不需要在這里手動為線程分配內(nèi)存并依次啟動線程了,方便很多浪耘。
OpenMP并不會確保你能分配這么多線程,但是現(xiàn)在的計算機基本都可以滿足你想要的線程數(shù)。
- 在并行函數(shù)內(nèi)部琅豆,
omp_get_thread_num();
可以獲得當前線程是哪一條線程 - 在并行函數(shù)內(nèi)部,
omp_get_num_threads();
可以獲取當前所有線程的數(shù)目
#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
其中g(shù)uided與dynamic的區(qū)別在于guided的chunk_size會指數(shù)級下降,而dynamic的chunk_size是不變的