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是不变的