元スレGCCについて part9
gcc覧 / PC版 /みんなの評価 : ○
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逝きます
みんなの評価 : ○
類似してるかもしれないスレッド
- GCCについて part8 (763) - [95%] - 2009/3/11 8:47 ☆
- GCCについて part10 (538) - [90%] - 2018/7/5 20:30
- 【激遅】AppleGCC【絶望】 (111) - [18446744073709551607%] - 2010/1/15 10:31
トップメニューへ / →のくす牧場書庫について