0

私は非常に高速でなければならないプログラムを開発しています。

私は C++ で作成しますが、XOR、AND、または 2 進数の 1 の数を数えるなどの多くの論理演算を実行する必要があるため_asm{}、コードの一部で使用することをお勧めします。それらの操作をより速く行うため。それらは時には何百万回も実行されます。

しかし、それが本当に違いを生み、努力する価値があるかどうかはわかりません。

この件に関するあなたの知識に本当に感謝します。

どうもありがとう。

4

4 に答える 4

4

プロセッサ クロックが毎秒数十億の場合、100 万回の操作はたいてい大したことではありません。

したがって、単純な C/C++ でコーディングします。試して。プロファイリングします。本当に遅すぎて、プロファイルがホット スポットを示している場合は、そのスポットの最適化を最大にして、もう一度テストしてください。それでも遅すぎる場合は、最適化されたコードを逆アセンブルして、コンパイラよりも優れていると思うかどうかを確認してください。そう思うなら、どうぞ挿入してください_asm {}。この慎重に手作りされたコードの実行速度が遅くなることに備えてください。それはたくさん起こります。必要なスピードアップを実現する場合、アセンブラーを#ifdefs に入れて、次のプロセッサー・リビジョンが発行されたときにチャックできるようにします。読む: アセンブリ コードは、記述と保守に非常にコストがかかるため、ほとんどの場合、お勧めできません。

于 2012-07-03T02:00:46.897 に答える
1

私の経験では、小さなアセンブラーを実行することは、SSE 機能を使用できる場合、または実際に popcount や crc などの特定の新しい命令を使用できる場合にのみ役立ちます。

私が昇格したプロジェクトから、読みにくくなりました。

normal code to ASM =  10% faster, 50 times more unreadable code
suited code to SSE = 500% faster, 75 times more unreadable code

したがって、最初にアプリケーションを作成し、実際に何が遅いかを調べ、他のすべてが失敗した場合にのみ、いくつかの asm/sse を試すことをお勧めします。

于 2012-07-03T12:36:02.260 に答える
0

それは良い考えではありません。速度が大幅に向上するわけではありませんが、X64 プロセッサ用に直接コンパイルする能力が失われパフォーマンスが低下します。本当に Asm を使いたい場合は、x86/x64 をサポートするAsmjitを調べてください。

于 2012-07-03T01:50:18.567 に答える
0

最新のコンパイラは、C++ コードを、コンパイル対象のマシン向けのかなり簡潔なアセンブリ命令に縮小します。

ほとんどのプログラムでは、純粋にパフォーマンスの観点から投資する価値はないと思います。

基礎となるハードウェアをより深く理解するための良い学習機会になる可能性があります!

于 2012-07-03T01:52:18.330 に答える