ホームページ >バックエンド開発 >C++ >モンテカルロ シミュレーションを再最適化してインテル Sandybridge パイプラインのボトルネックを明らかにするにはどうすればよいでしょうか?

モンテカルロ シミュレーションを再最適化してインテル Sandybridge パイプラインのボトルネックを明らかにするにはどうすればよいでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-09 00:48:10435ブラウズ

How Can We Deoptimize a Monte Carlo Simulation to Expose Intel Sandybridge Pipeline Bottlenecks?

Intel Sandybridge ファミリ CPU のパイプライン用プログラムの逆最適化

この割り当ての目標は、指定されたプログラムを変更して、それを実現することです。同じアルゴリズムを維持しながら、実行速度が遅くなります。これは、インテル i7 パイプラインがどのように動作するか、また命令パスがどのように並べ替えられて危険が生じるかをより深く理解するためのものです。

プログラムの概要

プログラムは次のとおりです。ヨーロッパの標準的なコールおよびプット オプションの価格を計算するモンテカルロ シミュレーション。 Box-Muller アルゴリズムを使用してガウス乱数を生成し、オプション価格を推定するために多数のシミュレーションを実行します。

悪魔のような無能

目的は、意図的にプログラムの実行を遅くする無能なコードを作成します。このアプローチを「悪魔のような無能さ」で正当化するいくつかのアイデアを次に示します。

フォールス シェアリング

  • 複数のスレッドによってアクセスされる共有データ構造を作成します。正しく同期されていません。これにより、キャッシュラインのピンポンやメモリ順序の誤った推測パイプラインのクリアが発生する可能性があります。

ストア転送ストール

  • の使用を避ける浮動小数点変数の「-」演算子。代わりに、上位バイトと 0x80 の XOR を行って符号ビットを反転し、ストア転送のストールを引き起こします。

過剰な時間測定

  • 各反復の時間を計測するCPUID/RDTSC などの負荷の高い操作を伴うメイン ループ。これにより、命令がシリアル化され、 Pipeline.

好ましくない数学演算

  • 定数による乗算をその逆数による除算に置き換えます (「読みやすくするため」)。除算は遅く、完全にパイプライン化されていません。

非効率なベクトル化

  • AVX を使用して乗算/sqrt 演算をベクトル化しますが、呼び出す前に vzeroupper を使用できません。スカラー数学ライブラリ関数、AVX

データ構造

  • RNG 出力を、リンクされたリストまたは順不同で走査される配列に格納します。各反復の結果に対して同じことを行い、最後に合計します。これにより、ポインタ追跡ロードが発生し、キャッシュの局所性が失われます。

マルチスレッドの誤用

  • プログラムをマルチスレッドにするが、両方のスレッドを強制的に共有する同じループ カウンタ (アトミック インクリメントあり) を使用して、偽の共有と競合を作成します。これにより、アトミック操作による不要なオーバーヘッドも発生します。

その他の提案

  • 予測ミスやパイプライン フラッシュを引き起こす予測不可能な分岐を導入します。
  • 悪魔のような無能な正当化を使用して、ループに含まれる依存関係チェーンの長さを増やします。
  • 不連続なメモリ アクセス パターンを導入します。キャッシュ使用率を最小限に抑えるため。
  • 追加分Credit: 課題で提供された平方根アルゴリズムを置き換える独自の平方根アルゴリズムを作成します。

変更の影響

これらの変更は大幅な影響を受けることが予想されますパイプラインのストール、キャッシュミス、その他のパフォーマンスのボトルネックを引き起こし、プログラムの実行速度を低下させます。この課題は、創造性と、元のアルゴリズムを維持しながらコードを悲観化するさまざまな方法を探求する意欲を促進します。

以上がモンテカルロ シミュレーションを再最適化してインテル Sandybridge パイプラインのボトルネックを明らかにするにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。