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で質問しましょう!
似たような質問が見つかりました
- その他(SNS・コミュニケーションサービス) ゲームでボイスチャットを使いたいんですが、親にどう説明したらいいですか 2 2022/08/03 14:07
- 物理学 Va=1/4πε × (q1/a + q2/b + q3/c) Vc=1/4πε × (q1+q2+ 2 2023/04/16 14:08
- C言語・C++・C# アセンブラ指令 3 2023/06/17 14:47
- 工学 非対称三相交流について 2 2022/07/06 00:36
- 画像編集・動画編集・音楽編集 AfterEffectでのシャターの挙動がおかしい 1 2023/05/07 00:38
- iPhone(アイフォーン) 構成プロファイルが削除出来ない 2 2022/06/30 01:29
- 一眼レフカメラ 新品の標準レンズ 画角の中央当たりにゴミ?が写る。対処法は? 9 2022/09/12 08:27
- オンラインゲーム VCしながらゲームしたい… 2 2022/06/11 16:04
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- iPhone(アイフォーン) au→docomoのahamoへ キャリアメール引き継ぎたいです。 myauからアドレス持ち運びサー 1 2023/06/03 10:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
このアセンブラの意味を教えて...
-
アセンブラからC言語に変換する...
-
8080用のクロスコンパイラは、...
-
アセンプラ16ビット8086
-
実行ファイルからソースはみれる?
-
GCCの.cfi_系について
-
ライン数とステップ数の違いは?
-
PC-9801でマシン語を学習するに...
-
素数を求めるプログラム(アセン...
-
CASIOのポケコンZ-1GRのアセン...
-
[C言語→アセンブリ言語]はどう...
-
アセンブリ言語について。
-
アセンブラエディタ
-
SHの命令の意味について
-
エクセルVBAのIf,Then 構...
-
0xffffとは?
-
ビットシフトってどんな時使うの?
-
8ビットのデータの、先頭ビット...
-
一般のソフトで画像を扱う場合...
-
符号無し整数xを右にnビット回転
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ライン数とステップ数の違いは?
-
Windowsはオープンソースですか?
-
アセンブラからC言語に変換する...
-
実行ファイルからソースはみれる?
-
アセンブラ言語がわかりません。
-
アセンブラエディタ
-
PICに書き込むプログラムや変数...
-
SHの命令の意味について
-
このアセンブラの意味を教えて...
-
void __cdeclなど_
-
GCCの.cfi_系について
-
PC-9801でマシン語を学習するに...
-
アセンブラのLA
-
アセンブラで割り算
-
汎用レジスタのワーキングビッ...
-
エンディアンについて。
-
C to 68000アセンブラ
-
PICはアセンブラとC言語のどち...
-
素朴な疑問 (C言語とアセン...
-
アセンブラwordという単位
おすすめ情報