OpenMP学习笔记

Hello World程序

#include 
#include 
#include 

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

你可能感兴趣的:(OpenMP学习笔记)