• ベストアンサー

VC6でIDEでソース部分のアセンブラ表示とプロファイル

VC6で処理の遅い部分をアセンブラで置き換えたところ、逆に遅くなりました。(^^; Cの元の部分と見比べたいので、ソースのここからここまでの間のコンパイルしたアセンブラを吐くというのは、可能でしょうか? あと、VC6のプロファイルが未だにわかっていません。 メニュー - プロジェクト - 設定 にあるリンクタブの プロファイラを使うというチェックボックスをつけても、後で見たらチェックが外れているし、C/C++タブのプロジェクトオプションに /profileを追加しても、無視されます。 私のVC6のコンパイラがおかしいのでしょうか? OSはWindows2000で、SP4で VisualStudioのSPは5です。

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.4

アセンブラコードみました。 気をつけることは、 ・push,popは(メモリアクセス)なので極力使わない。キャッシュでたぶん遅くなっていないと思うけど。 ・レジスタ間転送ならmovを使う。 ・jmp回数が非効率的に多い。極力jmp回数が減るプログラムを心がける。ここは確実に遅くなっているはず。 ・mul使ったほうが早いと思う。多くても15命令ぐらいの時間(実際にはパイプラインで隠蔽されてもっと短くなる)で計算できます。edxは壊れるけど。これも遅い原因のだと思われる。 でも、どうがんばってもコンパイラと同等ぐらいの速度かな? もともと、この処理はメモリにアクセスが多いので高速化に向かない。 高速化するとすれば、ハイパースレッドやマルチコアCPU限定だけどスレッド化してST1側とST2側を同時に別スレッド(別CPU毎)でチェックさせた方が良い。

その他の回答 (3)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

ANo.1です 一部訂正 m(__)m ># ソース行プロファイルの手順はMSDNの手順どおりでは ># うまくいかないようです ># 『プログラムデータベースを使う』をチェックすると ># 『プロファイルを行う』のチェックが外れてしまいます ># MSDNにコマンドラインから実行する方法もあるのでそちらを ># 参照してみてください の手順の"『プログラムデータベースを使う』をチェックすると" 部分は C++タブの設定でした リンクタブの設定ではないので注意が必要です

  • zwi
  • ベストアンサー率56% (730/1282)
回答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 最後に高速化してみたい部分のソースコードを見せてもらえると何らかのアドバイスが可能かと思います。

tobasu
質問者

補足

以下のサイトで、そのソースがあります。 コンパイル・実行可能です。 結局Cの方が早いです (悲しい) - tobasu http://bbs5.fc2.com/php/e.php/csam/

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

プロファイル用の設定は分かりにくいですよね まず 設定 > リンクタブのカテゴリで『カスタマイズ』を選択 ここで『インクリメンタル リンクを行う』『プログラムデータベースを使用』の2つのチェックを外し『OK』をクリック ファイルメニューの『すべて保存』を実行してワークスペースごと保存します もう一度 設定ダイアログを開いて リンクタブ選択 カテゴリを『一般』にして『プロファイルを行う』にチェック OKを押します 設定が有効でない場合はOK押す際によーく注意してみていると『プロファイルを行う』の部分が『インクリメンタルリンクを行う』に一瞬だけ変化します ... もっともすぐ消えてしますので見逃しますけど これで 関数プロファイルの準備ができたので リビルドしてプロファイル用のEXEを作成 # ソース行プロファイルの手順はMSDNの手順どおりでは # うまくいかないようです # 『プログラムデータベースを使う』をチェックすると # 『プロファイルを行う』のチェックが外れてしまいます # MSDNにコマンドラインから実行する方法もあるのでそちらを # 参照してみてください リスティングファイルはファイル単位になってしまうと思います 設定のダイアログの左ペインでリスティングしたいファイルを選択 C++タブのカテゴリを『リスティングファイル』にしてご希望の『リスティングファイルタイプ』を選択してからコンパイルしてみましょう このオプションで出力されるファイルは コンパイルが成功した場合しか生成されません

関連するQ&A

  • VisualStudio.netでmemcmp関数が使えない?

    以前VC++6.0で作ったプログラムをVisualStudio.net_pro_ver2003でコンパイルしようと思っています。 VC++の空プロジェクトを作り、既存項目の追加で以前作成したソースファイルを挿入し、 それをコンパイルしました。 すると、初めにmemcmp関数が「'/clr'オプションを持つCコンパイラで完全なプロトタイプ関数が必要です」と表示され、 memcmpのある全ての行に対し、「関数へのポインタを通して実行される呼び出しに対する引数が多過ぎます」いうエラーが出てしまいます。 strings.hもインクルードしておりますし、VC++では問題なくコンパイルが通っていたので原因が良く分かりません。 そもそもVC時代から良く分からずに使っていたので基本が出来ていないようですが、 宜しく御願い致します。

  • VC++で、ソースファイルを追加すると、コンパイルエラーになります。

    こんばんは。 VC++6.0を使い、C言語の勉強をし始めました。新規プロジェクト→Win32 Console Application を作成し、簡単なプログラムを作成しています。 最初からあるソースファイルはコンパイル、実行できます。しかし、後から自分で追加したソースファイルは error C2065: 'printf' : 定義されていない識別子です。 という、エラーが出てしまいます。何かが、関連付けられていないのでしょうか?それとも、新規プロジェクトを作成しなければいけないのでしょうか? 私は、VC++が初めてなので、ぜんぜんわかりません。よろしくお願いします。

  • 8080用のクロスコンパイラは、ないでしょうか。

    8080用のクロスコンパイラは、ないでしょうか。 TK-80シミュレーターにて、プログラム開発をしたいのですが、さすがにアセンブラはきついので、Cコンパイラを探しています。 フリーのソフトで、MS-WindowsかLinuxで動作するクロスコンパイラはないでしょうか。 (8080アセンブラを出力するCコンパイラ) 以前探したときは、(確か)C言語をZ80にコンパイルして、それをさらに8080用アセンブラに変換するのを見つけましたが、うまく動きませんでした。 何か情報をもらえるとありがたいです。 よろしくお願いします。

  • VC++IDEで実行ファイルが生産されない

    Visual C++ 2008 の統合開発環境を使ってプロジェクトをビルドしたのですが、実行ファイルが生産されずに困っています。出力ウィンドウには コンパイルしています... リンクしています... コード生成しています。 コード生成が終了しました。 マニフェストを埋め込んでいます... とでました。しかしパソコン全体を探しても実行ファイルは見つかりません。コマンドラインコンパイルは問題なくできます。ソースコードは何度も見直したので間違いはないと思います。VC++の再インストールも行い、正常にインストールできました、とでたのですが、状況は変わりません。ちなみにパソコンはVistaです。説明不足のところがありましたら追記しますので、どうか回答よろしくお願いします。

  • アセンブリ言語について

    アセンブリ言語の勉強をしたいと思っています。 例えば、CやJava,などはコンパイラを使ってコンパイルをしますよねぇ。同じようにアセンブり言語にもアセンブラというものがあるのでしょうか? フリーでそのようなアセンブラ(コンパイラ?)があるのなら教えてくれないでしょうか?できれば、AT互換のアセンブリ言語の仕様書が書かれているサイトでもあれば教えてください。(できれば、日本語で・・・) それと アセンブラ言語を高水準言語と比較した場合の利点について教えてください。 色々とすいません。どうかよろしくお願いします。

  • FASMのコンパイラオプション

    よろしくお願いいたします。 FASMでアセンブラのソースファイルをコンパイルするとcom形式で出力されます。 これをexe形式で出力する、コンパイラオプションをご存知の方、おられましたらどんなことでも構いませんので、ご教授願います。

  • XP SP2で正しく動作するVC++のコンパイラって

    教えて下さい。 OSがXPのSP2上で正しく動作するプログラムを作るには、.net2003のVisualStudioを使用してコンパイルしないとだめなのでしょうか?ちなみに今は OS XP SP1、VC++6.0 SP6でコンパイルしたものを OS XP SP2上で動作させています。 よろしくお願いします。

  • 素朴な疑問

    情報処理の出題範囲というのを見ていて「アセンブラ言語 CASL II」と記述されているのを見て、あれ?と思いました。 私はアセブリ言語などと記述するのが正しいと思うのですが、なぜアセンブラ言語なのでしょう? たとえば、C 言語をコンパイルするのが C コンパイラで、C コンパイラ言語とは言わないから、アセンブラ言語という言い方も明らかにおかしいです。 情報処理技術者試験センターの公式な文章内にまで現れると、逆に自分の認識が間違っているのかと不安になります。もはや一般化してしまったのでしょうか? ご意見を聞かせていただけたらと思います。

  • VCでコンパイル

    VCでコンパイル VC(2010)でコンパイルしたとき実行ファイルをダンプすると プロジェクトのフォルダ位置 X:\Project\Test\~ とか 各種API名 xmlで書かれた "manifestVersion" などが埋め込まれてしまいます。 この情報を埋め込まない方法を教えてください。 コマンドラインからコンパイルすると、埋め込まれなかった気もしますが コンパイルオプションのどこかを設定すれば削除されるのでしょうか?

  • PICプログラム C言語とアセンブラ言語

    PIC18シリーズを使用して、プログラミングをしています。コンパイラはCCS-Cです。今まではすべてC言語で書いてきたのですが、アセンブラでしか設定ができない部分があり、今までのC言語のソースに加えてアセンブラを組み合わせようと思っているのですが、C言語とアセンブラを組み合わせることは可能なのでしょうか?

専門家に質問してみよう