Я пытаюсь изучить основы параллельных вычислений, но я столкнулся с проблемой на своем компьютере. Взгляните на мой код ниже. В принципе, я хочу распечатать строку «Hello World!». для каждого ядра моего компьютера. Мой компьютер имеет четыре ядра, поэтому он должен распечатать эту строку четыре раза. Если бы я использовал используемую прокомментированную строку 'cout' вместо строки 'printf', выход был бы все перепутан. Это происходит потому, что команда «\ n» escape выполняется отдельно от «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;
}
Чтобы показать, что я говорю, вот выход из когда я побежал выше код на моем компьютере:
Здравствуйте Wo
Hello World!
rld!
Hello World!
Я только что пробовал с 'cout', и он работал безупречно: http://ideone.com/dPPQeO –
Возможно, часть' endl' может быть источником ваших проблем, поскольку она очищает выходной буфер. –
Это в значительной степени то, что вы должны ожидать, когда вы запускаете вещи параллельно. Ничего не мешает работе printf от Core 1 в середине Core 2. Это связано с тем, что параллельное программирование сложно. – immibis