- ベストアンサー
アセンブラの実行速度
高速なオセロの終盤ソルバーを作りたいと思い、調べていると あるソルバーのソースにインラインアセンブラが使われていました。 やはり高速なプログラムを作るにはアセンブラを使うほうが高速なのでしょうか 最近のコンパイラは最適化が向上していると聞きます。 アセンブラを使うとどれくらい高速化の効果がありますか? C++はある程度わかるのですが、アセンブラはさっぱりで学ぼうか迷っています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こういう場合の開発方法は、 (1)アルゴリズムを考える。 (2)高級言語でアルゴリズムの有効性を確かめる。 (3)アセンブラで書くと高速化できる部分をアセンブラに置き換える。 てな感じだと思うのですが、(3)の部分は命令のクロック数まで計算して無駄な部分を削らないと意味がないでしょう。 これからアセンブラを勉強してそのレベルに到達するまでの時間を考えると、マルチコア/マルチスレッドの恩恵を得られる高級言語を使い並列計算するというアプローチの方が現実的で、かつアセンブラを使うよりも高速にできるのではないかと思います。
その他の回答 (1)
- saijyo_739
- ベストアンサー率53% (119/222)
インラインアセンブラで作られていた部分もアセンブラで作られたわけではないのでは。 高級言語で作ったけど、アセンブラ出力してみたらアセンブリ言語による少しの手直しで高速化できそうなコードを出力していたから入れ替えたとか、プロファイリングしてみて時間かかってたから考えて変更したとかじゃないかな。 アセンブリ言語使って書いたら速いなんて事はないと思いますよ。 CPUとコンパイラを良く知っている方が書けば速くも書けるでしょうけど。 ただし、より細かく書く事になるので手順は増え複雑化し時間も掛かる。 通常、アセンブラで書かざるを得ない部分なんてほとんどないだろうし、アセンブリ言語で書こうとはしないのでは。 高級言語で作ってアセンブリ言語を出力させ、アセンブリ言語で細工すれば簡単に高速化できそうなコードを出力していたり、動作解析して高速化が必要でアセンブラ使えば高速化可能そうな場合などに使うと思いますよ。 実際、一部(全部ではない)がアセンブリ言語だったわけですし。
お礼
回答ありがとうございます。 アセンブラレベルでの高速化をするにはやはり相当勉強が必要そうですね。
お礼
回答ありがとうございます。 確かに並列計算のほうが高速にできそうですね。 アセンブラは気が向いたら学んでみたいと思います。