OpenMP学习笔记

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容