Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。174件1お世話になります。MPを使ったときと使わなかった時を比べると、実行速度は若干速くなり、逆に結果の精度は悪くなりました。この原因は何でしょうか?わかる方教えてください。(clangではなくGNUの方です)CPUは2コア4スレッドです。票3疑似乱数生成(メルセンヌ・ツイスター)の並列化とほぼ同じ問題を抱えています。OpenMPの並列ループ内で乱数engineを参照しています。マルチスレッド安全ではない気がします。最善でもスレッド間で同じ乱数値を取得することになりその時点で精度は1スレッド分程度に落ちます。8並列であればN/8回の施行しか意味を持たなくなる。最悪な場合、std::mt19937の内部状態がスレッド間で不適切に更新され、乱数として機能しないもしくは乱数の精度が極端に落ちることも考えられます。ところで、C言語及びC++言語ではBasic風に変数宣言を関数先頭に列挙すべきではありません。C++言語では宣言個所でコンストラクターが動作するため不適切です(更にはデストラクターの実行順が不要になった順ではなく、宣言と逆順に固定される点も不適切)。今回の場合、変数x、yはループ内で並列に更新するわけですから、ループ内で宣言すべきです。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。