当前位置: 代码迷 >> 综合 >> Openmp入门(2)(for + sections)
  详细解决方案

Openmp入门(2)(for + sections)

热度:61   发布时间:2023-11-23 13:04:01.0

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 sectionprintf(“section 1 ID = %d\n”, omp_get_thread_num());#pragma omp sectionprintf(“section 2 ID = %d\n”, omp_get_thread_num());#pragma omp sectionprintf(“section 3 ID = %d\n”, omp_get_thread_num());#pragma omp sectionprintf(“section 4 ID = %d\n”, omp_get_thread_num());}
}
resule:

这里写图片描述

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