gpt4 book ai didi

c++ - 并行计算——混淆了输出?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:41 25 4
gpt4 key购买 nike

我正在尝试学习并行计算的基础知识,但我在计算机上遇到了问题。看看下面我的代码。基本上,我想打印出“Hello World!”这一行。对于我的计算机的每个核心。我的电脑有四个核心,所以它应该打印四次该行。如果我要使用注释掉的“cout”行而不是“printf”行,输出将全部困惑。这是因为 '\n' 转义命令与“Hello World!”分开执行,所以换行输出会随机出现。 'printf' 行是解决此问题的方法,因为该行是一次性执行的(而不是像 'cout' 行那样拆分成多个部分)。但是,当我使用“printf”时,我的输出仍然像使用“cout”一样困惑。我不知道为什么会这样。我在另一台计算机上尝试了完全相同的代码,它运行良好。只有我的计算机继续使用“printf”混淆输出。我已经给我的 CS 教授发了电子邮件,他不知道为什么它会在我的电脑上这样做。我知道我在计算机上正确设置了 OpenMP。有并行计算经验的人知道为什么这会在我的计算机上出现问题吗?

#include <omp.h>
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
#pragma omp parallel
{
printf("Hello World!\n");
//cout << "Hello World!\n" << endl;
}
return 0;
}

为了说明我在说什么,下面是我在计算机上运行上述代码时的输出:

Hello Wo

Hello World!

rld!

Hello World!

最佳答案

抱歉,您的教授弄错了。您需要利用互斥或其他一些障碍来保证不间断地使用共享资源(在本例中为 STDOUT 输出文件)。

混合输出是潜在的预期行为,与 printf 无关或 std::cout::operator<<() .由于设计不同,您看到的行为差异是每个行为的执行持续时间的细微差异。在任何一种情况下,您都应该预料到这种行为。

I just don't understand why it would be working for everyone else.

不是。成为类(class)的英雄并解释它是如何工作的以及如何解决它。告诉他们 SO 发送他们的爱。 :)

关于c++ - 并行计算——混淆了输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33663123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com