OpenMP部分和单个

问题描述 投票:1回答:1

嗨:)我的代码有问题。在Linux上工作正常,但在Visual Studio上:

未使用变量a,b,c进行初始化。

//#include "pch.h"
#include <omp.h>
#include <iostream>
using namespace std;

int fun1(int a) { return a * a; };
int fun2(int a) { return a + a; };
int fun3(int a) { return a + a + a; };
void printFun(int a, int b, int c) { cout << "\na: " << a << " b: " << b << " c: " << c; };

int main()
{
    omp_set_num_threads(4);

#pragma omp parallel
    {
        int a, b, c;
        #pragma omp sections
        {
            #pragma omp section
            a = fun1(3);
            #pragma omp section
            b = fun2(2);
            #pragma omp section
            c = fun3(4);
        }

        #pragma omp single //master
        printFun(a, b, c);
    }
}

[当我将“单”更改为“主”时,一切正常,但是我不明白为什么我不能像使用“ for”而不是“ sections”那样使用“ single”。

感谢您的帮助

sfmbe

c++ openmp
1个回答
0
投票

我认为代码根本不应该工作,MSVC编译器实际上正在做“正确的事情”。

© www.soinside.com 2019 - 2024. All rights reserved.