- ベストアンサー
VC6でIDEでソース部分のアセンブラ表示とプロファイル
VC6で処理の遅い部分をアセンブラで置き換えたところ、逆に遅くなりました。(^^; Cの元の部分と見比べたいので、ソースのここからここまでの間のコンパイルしたアセンブラを吐くというのは、可能でしょうか? あと、VC6のプロファイルが未だにわかっていません。 メニュー - プロジェクト - 設定 にあるリンクタブの プロファイラを使うというチェックボックスをつけても、後で見たらチェックが外れているし、C/C++タブのプロジェクトオプションに /profileを追加しても、無視されます。 私のVC6のコンパイラがおかしいのでしょうか? OSはWindows2000で、SP4で VisualStudioのSPは5です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
アセンブラコードみました。 気をつけることは、 ・push,popは(メモリアクセス)なので極力使わない。キャッシュでたぶん遅くなっていないと思うけど。 ・レジスタ間転送ならmovを使う。 ・jmp回数が非効率的に多い。極力jmp回数が減るプログラムを心がける。ここは確実に遅くなっているはず。 ・mul使ったほうが早いと思う。多くても15命令ぐらいの時間(実際にはパイプラインで隠蔽されてもっと短くなる)で計算できます。edxは壊れるけど。これも遅い原因のだと思われる。 でも、どうがんばってもコンパイラと同等ぐらいの速度かな? もともと、この処理はメモリにアクセスが多いので高速化に向かない。 高速化するとすれば、ハイパースレッドやマルチコアCPU限定だけどスレッド化してST1側とST2側を同時に別スレッド(別CPU毎)でチェックさせた方が良い。
その他の回答 (3)
- redfox63
- ベストアンサー率71% (1325/1856)
ANo.1です 一部訂正 m(__)m ># ソース行プロファイルの手順はMSDNの手順どおりでは ># うまくいかないようです ># 『プログラムデータベースを使う』をチェックすると ># 『プロファイルを行う』のチェックが外れてしまいます ># MSDNにコマンドラインから実行する方法もあるのでそちらを ># 参照してみてください の手順の"『プログラムデータベースを使う』をチェックすると" 部分は C++タブの設定でした リンクタブの設定ではないので注意が必要です
- zwi
- ベストアンサー率56% (730/1282)
アセンブラでの高速化について。 アセンブラ化したら高速化できるというのは幻想です。即今のコンパイラは並みの人間より最適化が得意なので、勝つのはなかなか困難です。 CPUの仕組みの勉強にはなりますので、挑戦自体は悪いことはないと思いますけど。 アセンブラの高速化のコツは、パイプライン、キャッシュを理解しレジスタを高度に活用してメモリアクセスを出来るだけ減らすことです。 CPUの仕組みを理解することから始めてください。 http://www.daw-pc.info/hard/cpu/cpu1.htm http://bkhouse.hp.infoseek.co.jp/Pro5.htm http://hp.vector.co.jp/authors/VA003988/asm.htm 最後に高速化してみたい部分のソースコードを見せてもらえると何らかのアドバイスが可能かと思います。
- redfox63
- ベストアンサー率71% (1325/1856)
プロファイル用の設定は分かりにくいですよね まず 設定 > リンクタブのカテゴリで『カスタマイズ』を選択 ここで『インクリメンタル リンクを行う』『プログラムデータベースを使用』の2つのチェックを外し『OK』をクリック ファイルメニューの『すべて保存』を実行してワークスペースごと保存します もう一度 設定ダイアログを開いて リンクタブ選択 カテゴリを『一般』にして『プロファイルを行う』にチェック OKを押します 設定が有効でない場合はOK押す際によーく注意してみていると『プロファイルを行う』の部分が『インクリメンタルリンクを行う』に一瞬だけ変化します ... もっともすぐ消えてしますので見逃しますけど これで 関数プロファイルの準備ができたので リビルドしてプロファイル用のEXEを作成 # ソース行プロファイルの手順はMSDNの手順どおりでは # うまくいかないようです # 『プログラムデータベースを使う』をチェックすると # 『プロファイルを行う』のチェックが外れてしまいます # MSDNにコマンドラインから実行する方法もあるのでそちらを # 参照してみてください リスティングファイルはファイル単位になってしまうと思います 設定のダイアログの左ペインでリスティングしたいファイルを選択 C++タブのカテゴリを『リスティングファイル』にしてご希望の『リスティングファイルタイプ』を選択してからコンパイルしてみましょう このオプションで出力されるファイルは コンパイルが成功した場合しか生成されません
補足
以下のサイトで、そのソースがあります。 コンパイル・実行可能です。 結局Cの方が早いです (悲しい) - tobasu http://bbs5.fc2.com/php/e.php/csam/