VC6で処理の遅い部分をアセンブラで置き換えたところ、逆に遅くなりました。(^^;
Cの元の部分と見比べたいので、ソースのここからここまでの間のコンパイルしたアセンブラを吐くというのは、可能でしょうか?
あと、VC6のプロファイルが未だにわかっていません。
メニュー - プロジェクト - 設定 にあるリンクタブの
プロファイラを使うというチェックボックスをつけても、後で見たらチェックが外れているし、C/C++タブのプロジェクトオプションに /profileを追加しても、無視されます。
私のVC6のコンパイラがおかしいのでしょうか?
OSはWindows2000で、SP4で VisualStudioのSPは5です。
No.4ベストアンサー
- 回答日時:
アセンブラコードみました。
気をつけることは、
・push,popは(メモリアクセス)なので極力使わない。キャッシュでたぶん遅くなっていないと思うけど。
・レジスタ間転送ならmovを使う。
・jmp回数が非効率的に多い。極力jmp回数が減るプログラムを心がける。ここは確実に遅くなっているはず。
・mul使ったほうが早いと思う。多くても15命令ぐらいの時間(実際にはパイプラインで隠蔽されてもっと短くなる)で計算できます。edxは壊れるけど。これも遅い原因のだと思われる。
でも、どうがんばってもコンパイラと同等ぐらいの速度かな?
もともと、この処理はメモリにアクセスが多いので高速化に向かない。
高速化するとすれば、ハイパースレッドやマルチコアCPU限定だけどスレッド化してST1側とST2側を同時に別スレッド(別CPU毎)でチェックさせた方が良い。
No.3
- 回答日時:
ANo.1です
一部訂正 m(__)m
># ソース行プロファイルの手順はMSDNの手順どおりでは
># うまくいかないようです
># 『プログラムデータベースを使う』をチェックすると
># 『プロファイルを行う』のチェックが外れてしまいます
># MSDNにコマンドラインから実行する方法もあるのでそちらを
># 参照してみてください
の手順の"『プログラムデータベースを使う』をチェックすると"
部分は C++タブの設定でした リンクタブの設定ではないので注意が必要です
No.2
- 回答日時:
アセンブラでの高速化について。
アセンブラ化したら高速化できるというのは幻想です。即今のコンパイラは並みの人間より最適化が得意なので、勝つのはなかなか困難です。
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
最後に高速化してみたい部分のソースコードを見せてもらえると何らかのアドバイスが可能かと思います。
この回答への補足
以下のサイトで、そのソースがあります。
コンパイル・実行可能です。
結局Cの方が早いです (悲しい) - tobasu
http://bbs5.fc2.com/php/e.php/csam/
No.1
- 回答日時:
プロファイル用の設定は分かりにくいですよね
まず 設定 > リンクタブのカテゴリで『カスタマイズ』を選択
ここで『インクリメンタル リンクを行う』『プログラムデータベースを使用』の2つのチェックを外し『OK』をクリック
ファイルメニューの『すべて保存』を実行してワークスペースごと保存します
もう一度 設定ダイアログを開いて リンクタブ選択
カテゴリを『一般』にして『プロファイルを行う』にチェック
OKを押します
設定が有効でない場合はOK押す際によーく注意してみていると『プロファイルを行う』の部分が『インクリメンタルリンクを行う』に一瞬だけ変化します ... もっともすぐ消えてしますので見逃しますけど
これで 関数プロファイルの準備ができたので リビルドしてプロファイル用のEXEを作成
# ソース行プロファイルの手順はMSDNの手順どおりでは
# うまくいかないようです
# 『プログラムデータベースを使う』をチェックすると
# 『プロファイルを行う』のチェックが外れてしまいます
# MSDNにコマンドラインから実行する方法もあるのでそちらを
# 参照してみてください
リスティングファイルはファイル単位になってしまうと思います
設定のダイアログの左ペインでリスティングしたいファイルを選択
C++タブのカテゴリを『リスティングファイル』にしてご希望の『リスティングファイルタイプ』を選択してからコンパイルしてみましょう
このオプションで出力されるファイルは コンパイルが成功した場合しか生成されません
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ライン数とステップ数の違いは?
-
アセンブラからC言語に変換する...
-
バイナリの実行ファイルをgccを...
-
アセンブラのコマンドについて
-
実行ファイルからソースはみれる?
-
【PICマイコン】一般製品にPIC...
-
アセンブラwordという単位
-
void __cdeclなど_
-
VC6でIDEでソース部分のアセン...
-
最初のアセンブラ
-
汎用レジスタのワーキングビッ...
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
エクセルVBAのIf,Then 構...
-
一般のソフトで画像を扱う場合...
-
ビットシフトってどんな時使うの?
-
レジスタの数
-
C++ のDLLがdelphiで読めない
-
シーケンス制御についての質問...
-
情報科学の飽和演算、ラップア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ライン数とステップ数の違いは?
-
アセンブラからC言語に変換する...
-
アセンブラ言語がわかりません。
-
PC-9801でマシン語を学習するに...
-
バイナリの実行ファイルをgccを...
-
ニーモニックコードを使って割...
-
[C言語→アセンブリ言語]はどう...
-
アセンブラで割り算
-
実行ファイルからソースはみれる?
-
PDP-11のアセンブラ課題
-
PICはアセンブラとC言語のどち...
-
void __cdeclなど_
-
アセンブラのLA
-
MASMの擬似命令「ASSUME」について
-
アセンブラの数値比較
-
パソコンについて。
-
アセンブリ言語について。
-
PICに書き込むプログラムや変数...
-
アセンブラエディタ
-
SHの命令の意味について
おすすめ情報