RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1206454
Accepted
Leskhan Muratuly
Leskhan Muratuly
Asked:2021-11-18 22:40:17 +0000 UTC2021-11-18 22:40:17 +0000 UTC 2021-11-18 22:40:17 +0000 UTC

使用 OpenMP 时如何解决 C++ 中的 C6993 问题?

  • 772

大家好。我想用

#pragma omp for

但是在编写代码时,我不断收到此错误。

在此处输入图像描述

由于这个错误,我的程序无法正常工作。如何解决这个问题呢?我在谷歌上找不到明确的答案。请帮帮我。完整代码如下:

#include <iostream>
#include <omp.h>
#include <iomanip>

#define N 1000000

int main()
{
    setlocale(LC_ALL, "Russian");

    long long number;
    std::cout << "Введите число: ";
    std::cin >> number;

    long double count = 0;
    while (number > 0)
    {
        number /= 10;
        count++;
    }

    long double numberPi = 0;
    long double temp;

#pragma omp parallel num_threads(8)
    {
#pragma omp for
        for (long long i = 0; i < N; i++)
        {
            temp = (i + 0.5) * (1.0 / N);
            numberPi += 4.0 / (1.0 + temp * temp);
        }
    }
    std::cout.precision(count - 1);
    std::cout << "number Pi: " << numberPi * (1.0 / (N)) << std::endl;
    std::cout << "count: " << count << std::endl;
    
    return 0;
}
c++
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Vladimir
    2021-11-18T23:24:32Z2021-11-18T23:24:32Z

    由于您编写错误,该程序无法正常运行。在这里,您在并行部分执行以下操作:numberPi += 4.0 / (1.0 + temp * temp);- 编译器应该如何理解这一点?您是否希望每个线程在循环体中创建自己的变量副本numberPi?正确的值应该存储在哪个线程中?答案肯定是没有。你必须告诉编译器这个变量是用来对所有线程的数据求和的。为此,OpenMP 有一个reduction指示操作的关键字:#pragma omp parallel num_threads(8) reduction(+:numberPi). 你可以在这里指定,你可以在pragma中用循环的描述。结果应该是这样的:

    #include <iostream>
    #include <omp.h>
    #include <iomanip>
    
    #define N 1000000
    
    int main()
    {
        setlocale(LC_ALL, "Russian");
    
        long long number;
        std::cout << "Введите число: ";
        std::cin >> number;
    
        long double count = 0;
        while (number > 0)
        {
            number /= 10;
            count++;
        }
    
        long double numberPi = 0;
        long double temp;
    
    #pragma omp parallel num_threads(8)  reduction(+:numberPi)
        {
    #pragma omp for 
            for (long long i = 0; i < N; i++)
            {
                temp = (i + 0.5) * (1.0 / N);
                numberPi += 4.0 / (1.0 + temp * temp);
            }
        }
        std::cout.precision(count - 1);
        std::cout << "number Pi: " << numberPi * (1.0 / (N)) << std::endl;
        std::cout << "count: " << count << std::endl;
        
        return 0;
    }
    

    在这种形式下,当在 Mingw-w64 中编译时,程序可以正常工作,因为它pi在小数点分隔符后打印具有指定位数的数字。

    • 1

相关问题

  • 编译器和模板处理

  • 指针。找到最小数量

  • C++,关于枚举类对象初始化的问题

  • 函数中的二维数组

  • 无法使用默认构造函数创建类对象

  • C++ 和循环依赖

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5