-1

私はトレーディング ソフトウェアを作成しており、1 マイクロ秒ごとの速度が必要です。私に何ができる?私は使用することを考えていましngenたが、ウィキペディアはJITがさらに良いかもしれないと言っています. 何をチューニングできますか? Xeon E5どういうわけか命令を使用するように強制できますか? Windows の優先度を最高に変更すると、常に最高の優先度でプログラムを実行する方法を教えてください。このプログラムを「信頼済み」に追加して、.NET がセキュリティなどをチェックしないようにします。

つまり、hardware/software/.net の構成の完全なリストと、プログラムの実行に影響を与えて実行を高速化するアクション (ngen の実行など) が必要です。

4

3 に答える 3

9

推測をやめて、問題が実際にどこにあるかを見つける時が来ました。EQATEC 無料パフォーマンス アナライザーを使用して、ボトルネックを特定し、修正します。

NGENアプリケーションの起動時間を短縮するのに役立ちますが、それは間違いなくその問題の黄金の鍵ではありません. アプリのプロファイリングで修正する可能性が最も高いです。

実行時の最適化についてはどうですか:

  • DB アクセス (存在する場合) をチェックアウトし、クエリを最適化し、取得するデータを本当に必要な量に最小化します。

  • ディスクアクセス操作を見てください

  • CPU消費を見てください。プロファイリング後、プロセス エクスプローラーを使用して、アプリケーションの動作の観点から CPU とメモリの消費を確認できます。

  • プロファイリング後、行った不要または重い反復 (ある場合) を特定し、O(1) アクセスに辞書 (単なる例) を使用します。

... もっと...

パフォーマンスに関する文献のように、IT 業界で最も優れたパフォーマンス スペシャリストの 1 人であるRico Mariani の Performance Tidbitsのモンスター ブログが間違いなく示唆されます。

お役に立てれば。

于 2012-06-19T17:52:36.427 に答える
0

GCを排除します!

人々が使用するもう1つの「トリック」は、トレーディングシステムで、ガベージコレクトを行わないC#コードを作成することです。ガベージコレクションを完全に削除することは明らかに不可能ですが、プログラムの実行後にGCを最小化または排除することができます。アプリのセットアップ、コンポーネントの初期化などのすべての作業を初期化フェーズで行い、ここですべてのGCを許可します。ただし、セットアップして実行する準備ができたら、コードがガベージを生成せず、ボックス化/アンボックス化を実行しないことを確認します。(「GCを避ける」のようにSOで検索すると、いくつかの有用な情報が見つかります)。

「取引システム」という用語は、無数の異なるものを包含することができます。.NETでアルゴを書くことについて話しているのですか?または、あなたのアルゴリズムは他の何かで書かれていて、それをホストしている.NETフレームワークがありますか?UIについて話しているだけですか?あなたの取引システムは分散していますか?あなたはあなたのプログラムがどれくらい速くなければならないか知っていますか?高周波モデルを取引していない場合、「十分に速い」とは何ですか?トレーディング戦略で必要のない場合は、1〜2ミリ秒のスケールで動作する必要があるものをプッシュするだけではいけません。

そして重要なのは、実績のある信頼できるOOの原則を捨てないことです。場合によってはルールを曲げることができますが、SOLIDは引き続きトレーディングシステムに適用されます。パフォーマンスが必要なものを特定し、それを最適化することを確認してください。すべてを最適化する必要があるとは思わないでください。すべてをベンチマークして測定し、何をどれだけ高速化する必要があるかを把握してください。

そしてそれをシンプルにしてください!取引システムは複雑である必要はありません。

于 2012-06-19T18:06:37.657 に答える
0
  1. Windows ではなく、よりリアルタイムに重点を置いた OS を選択します。速度にはいくつかの要素があるため、一貫した速度または可能な限り最高の速度ですか?

  2. コードをチューニングすることは素晴らしいことですが、常にそうする必要はありません。コード レビューを試してみてください。大きな論理エラーや余分な作業を修正することは、低レベルのチューニングよりもはるかに有益です。

  3. すべてのマイクロ秒が重要であることを理解してください。ただし、CPU とロジックは最速の部分であり、ネットワーク、ディスク、ページングなどはおそらく本当の敵です。したがって、正しいことに焦点を合わせていることを確認してください。不要な I/O はすべて停止する必要があります。

  4. 特定のドライバー、ネットワーク カードなどは、他よりも高速です。

  5. ライブラリの使用を確認し、パフォーマンスの側面を理解していることを確認してください。実行時間の多くはライブラリ内などにあります。

確かに.NET中心の回答と具体的な回答は他にもありますが、質問の背後にある質問に回答してみました。

于 2012-06-19T18:02:42.193 に答える