私は並列コンピューティングの基礎を学びたいと思っていますが、私は自分のコンピュータ上で問題に遭遇しています。以下のコードを見てください。基本的には、「Hello World!」という行を印刷したいと思います。私のコンピュータにはすべてのコアがあります。私のコンピュータは4つのコアを持っているので、その行を4回印刷するべきです。 'printf'行の代わりにコメントアウトされた 'cout'行を使用すると、出力がすべて混乱することになります。これは、 '\ n'エスケープコマンドが「Hello World!」とは別に実行されるため、新しい行出力がランダムに発生するためです。 'printf'行はこの問題の解決策です。なぜなら、行はすべて一度に実行されるからです( 'cout'行のように分割されないため)。しかし、私が 'printf'を使うと、私の出力はまるで私が 'cout'を使ったかのように混乱します。なぜそれがこれを行うのか分かりません。私は別のコンピュータで全く同じコードを試してみましたが、完全に動作します。それは 'printf'で出力をつまずくだけの私のコンピュータです。 CS教授にメールを送りました。私のCS教授にメールを送りました。私のCS教授に私のコンピュータでこれをやっている理由が分かりません。私は自分のコンピュータにOpenMPを正しくセットアップしたことを知っています。並列コンピューティングの経験を持つ人は、なぜこれが私のコンピュータ上で乱れているのかを知っていますか?パラレルコンピューティング - 混乱した出力?
こんにちは
Hello Worldの臥:
#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; }
私が話しているかを示すために、ここで私は自分のコンピュータ上で上記のコードを実行したときの出力があります!
rld!
こんにちは!
私はちょうど 'cout'で試してみましたが、完璧に動作しました:http://ideone.com/dPPQeO –
出力バッファをフラッシュする際、' endl'の部分があなたの問題の原因かもしれません。 –
これは、あなたが物事を並行して実行するときに起こると思われるものです。コア2の途中でコア1のprintfが実行されるのを妨げるものは何もありません。この種のことが、並列プログラミングが難しい理由です。 – immibis