のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,899人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレGCCについて part9

    gcc覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - std:map + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    151 = :

    >>149
    そういう最適化はどこで宣言しようと同じだろ

    152 = :

    >>148>>149
    40年くらい前の最適化の話みたいですね。

    153 = :

    変数を宣言する=メモリ上に領域を確保する
    変数に代入する=メモリ上に書き込む

    こんな基本も分かってないようじゃ駄目だろ。

    でも、キャッシュから追い出される前に破棄できるデータ領域は重要だよな。
    1ms以下で終わる関数は終了までキャッシュメモリから追い出されない可能性あると思うし、
    使い終わったらすぐ破棄すれば、その分多くグローバル/スタティックデータをキャッシュで保持できるようになる。


    ところで、CPUロジック的には破棄したデータ領域の変更内容ってメインメモリに反映されるんだっけ?
    キャッシュが破棄されるのって内容が同一のときだけだろ?
    じゃあいくら破棄しても中身書き換えた以上はメインメモリに書き込むんじゃね?

    メインメモリへの書き込みを減らすには、できるだけ同じデータ領域を使いまわすのがいいんじゃないかな。
    ヒープ領域とかなら繰り返し使われるよね。
    でもJavaの場合で最小値が2MBだって。
    優先的に実行されるアプリじゃない限り使い回しは難しいね。

    確実に使いまわせるのはやっぱりスタック領域だよね。
    直近の4kByteが必ず1次キャッシュに入る。

    スタックに確保するには、引数渡ししたデータと普通に宣言した変数だよね。
    少々のデータなら参照渡しするより値渡ししたほうがキャッシュ効率がいい事になる。
    わけないか。
    使った分だけ古いのがキャッシュから追い出されるんだ。
    だから、ループで散らばったデータを使うくらいなら、ループだけを関数宣言してでもデータを一箇所に集めることが重要なのかな。
    あ、そこで書き込みしないデータをループの直前でフォーカス作って変数宣言してコピーしたらいいわけだ。
    結局おんなじか。
    何度もスタックをキャッシュから追い出すくらいなら普通にヒープにまとめて領域取ったほうがいいな。
    変更しなければ書き戻されはしないんだし。
    結局小さいデータはオート変数ででっかいデータはアロケート・・ごく普通だな。

    154 = :

    コンパイラの最適化舐めんなよ

    155 = :

    gccの最適化は糞過ぎる
    ICCを少しは見習えつーんだよ

    156 = :

    >>153
    35年くらい前の知識で停まってるね。
    register宣言が出てきた頃かな?

    157 = :

    ごめんなさい。。。

    158 = :

    ICCがgccより明かに優れているところなんてループ展開とかベクトル化とかだけだろ
    スタックをどういう風に使うかなんて部分では大差ないよ

    159 = :

    記憶だと、gcc 4.4でiccの最適化を越えてる

    160 = :

    それはないから

    161 = :

    GCCをアーキテクチャ決め打ちのICCと比較しようとする時点で
    頭の悪さが丸出しw

    162 = :

    http://multimedia.cx/eggs/last-performance-smackdown-for-awhile/

    163 = :

    やるじゃんgcc

    164 = :

    >>162
    64Bitだと偉い差だ。そうえいばx264なんかもビルドしてバイナリ配ってる人なんか32Bitは
    gcc3.4.6なんだけど64Bitはgcc4.4を使ってる。

    ちょっとgcc4.4.2を落として来るわw ffmpeg自己ビルドなのでw

    165 = :

    gcc4.4系統はバグもあるし
    ライセンス問題もあるから使わないほうがいいぞ

    166 = :

    まあ! なんて素敵なFUDでしょう!!

    167 = :

    とりあえずbinutilの2.20が10/16に新しいの出てたんでまず更新。

    でgcc4.4.2を気合のシステム上書き(現状4.3.4)の--prefix=/usrインスコでコンパイルスタートして
    5分くらい経ってやっぱダメだろって思ってCTL+C押して--prefix=/opt/gcc-4.3 --program-suffix=-4.3
    にしたヘタレです・・・

    今コンパイル中、CPUフェノムなんで--with-tune-32=k8 --with-tune-64=amdfam10こんなのもつけてみました。

    168 = :

    おおお、焦ったww
    --prefix=/opt/gcc-4.4 --program-suffix=-4.4ですねw
    変なとこからコピペしたから4.3になってた。本当に4.3のままconfigしちゃったかと思って自分でビビったわ

    169 = :

    >>164
    グラフの目盛りよく見ろ。そのうえでえらい差って感じたんならいいけどさ。

    170 = :

    >>169
    ああああああああああああああああああああああああぁぁぁぁ

    171 = :

    とか言いながら終わった、しかしグラフには騙された・・・
    $ /opt/gcc-4.4/bin/gcc-4.4 -v
    Using built-in specs.
    Target: x86_64-linux-gnu
    コンフィグオプション: ../configure --prefix=/opt/gcc-4.4 --program-suffix=-4.4 --enable-shared --with-system-zlib
    --without-included-gettext --enable-threads=posix --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug
    --enable-objc-gc --enable-mpfr --with-gmp --with-tune-32=k8 --with-tune-64=amdfam10
    --with-multilib-list=x86_64-linux-gnu,i386-linux-gnu --build=x86_64-linux-gnu --host=x86_64-linux-gnu
    スレッドモデル: posix
    gcc version 4.4.2 (GCC)

    172 = :

    こんな目盛りなら騙して欲しいよな

    175 = :

    cpp はプリプロセッサだろ。 常識的に考えて。
    C++ のコンパイラやコンパイラドライバではない。

    システムによってはコマンドに + の文字が使えないことがあるので、
    便宜上用意されているのが cxx 。
    たぶん、中身は一緒だと思う。

    177 = :

    >>159
    よぉ、AMD使い!

    179 = :

    商用コードは品質が悪いから仕方ない

    180 = :

    最近のGCCは結構すごいよん
    参考http://www.linux-kongress.org/2009/slides/compiler_survey_felix_von_leitner.pdf

    181 = :

    それ読んでgcc 4.4.3で試したけどその通りに最適化してくれないことがままあって困るw

    182 = :

    パーパプー パーパプー パーパプーパーパプーパーパプー
    ピーロピーローリーローリロ
    ででーででーででー
    パスーン

    ピンポロピンポロピンポロピロピロプー



    未だに自作のプログラムでダウボーイを作ってやろうと思っているのにできねえ俺は
    もうだめだ

    183 = :

    gcc(ver4.3.2) のコンパイルオプションで、
    -lXm -lXt -lSM -lICE -lXpm -lXext -lX11 -lm
    とか必要なライブラリ全てを記述しなくても
    -lXm
    だけでOKでした。
    何か指定したライブラリ(この場合 /usr/lib/libXm.so.2.0.1) の依存ライブラリを調べてリンクしてくれるようですが、これって昔からそうだったのでしょうか?
    10年近く前は、一つでも指定を忘れると駄目だったので、よく知らないライブラリも呪文のように指定していたような記憶があるのですが。

    186 = :

    ビルドした時刻をバイナリに埋め込みたいんだけど
    なんかいい方法ある?
    最後にリンクするときに日時がわかるものを埋め込みたい

    187 = :

    コンパイル日時じゃなくてリンク日時?
    前者は__DATE__とか__TIME__とかあるけど

    188 = :

    >>187
    Makefile で、リンクの直前にそれかけるしか無いんじゃないかな。

    189 = :

    __DATE__,__TIME__を初期値にしたグローバル変数だけの
    オブジェクトをリンクごとに生成して埋め込めば?

    190 = :

    ごめん、>187と同じだった。

    191 = :

    質問!
    Linux@i386(IA-32)のgccでC言語とアセンブラを組み合わせて使っています。
    ebx, esi, ediは通常ならcallee-saveですが、
    アセンブラ側の都合でcaller-saveとして扱わなければならない箇所があります。
    今はmanを参考に-fcall-used-~オプションを付け
    プログラム全体でcaller-saveとして扱っています。
    関数ごとにcallee-save, caller-saveを切り替えて速度を稼ぐことは可能ですか?
    可能なら方法を教えてください。

    192 = :

    >>191
    特殊な ABI を要求する部分だけ別モジュールにして、
    そこだけ CFLAGS 切り替えればいいんじゃない?

    昔組み込みでそんな感じにしてたけど。

    196 = :

    すまん、ちょっとよく覚えてない。多分 hook を挟んで
    どうにかしていたと思う。

    ただ 個別に -fcall-used-REG を保守するのも段々面倒
    になってきて、最後は「えいや」で setjmp ばりに保存
    する hook にしちゃった気がする。

    198 = :

    教えてください

    gccでjavaの練習をやろうと思うのですが、
    gcc -vで
    --enable-languagesにjavaが含まれていれば大丈夫でしょうか
    gcj -vだとcommand not foundになります

    199 = :

    どうしても gcj を使わなければならないという理由がないのなら
    Sun の JDK をインストールして勉強しれ。
    # command not found に対処できない人が使えるようなものじゃないから…

    200 = :

    レストン

    もう少しgccを触って駄目だったらJDK逝きます


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / gcc一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - std:map + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について