Openmp入门(2)(for + sections)

来源:互联网 发布:分级阅读 知乎 编辑:程序博客网 时间:2024/06/08 13:12

1. parallel for

for的并行执行code: (c++)
#include <iostream>#include <omp.h>using namesapce std;int main(){    printf("parallel begin: \n");    #pragma omp parallel for    {        for(int i = 0; i < 10; ++i)            printf("i = %d, threadID = %d", i, omp_get_thread_num());    }    return 0;}
result:

这里写图片描述

系统一共开了四个线程, 对于每个线程的本身是串行的, 对于不同的线程是并行的。notice:        1. for 语句来分摊是由系统自动进行,只要每次循环间没有时间上的差距,那么分摊是很均匀的.

2. parallel sections

section 的并行执行code: (c++)
#include <iostream>#include <omp.h>using namespace std;void main(){    #pragma omp parallel sections {        #pragma omp section            printf(“section 1 ID = %d\n”, omp_get_thread_num());        #pragma omp section            printf(“section 2 ID = %d\n”, omp_get_thread_num());        #pragma omp section            printf(“section 3 ID = %d\n”, omp_get_thread_num());        #pragma omp section            printf(“section 4 ID = %d\n”, omp_get_thread_num());    }}
resule:

这里写图片描述

notice:        1. section 语句是用在 sections 语句里用来将 sections 语句里的代码划分成几个不同的段, 每段都并行执行.        2. 使用 section 语句时, 需要注意的是这种方式需要保证各个 section 里的代码执行时间相差不大,否则某个 section 执行时间比其他 section 过长就达不到并行执行的效果了.        3. 使用 section 来划分线程是一种手工划分线程.