[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 18:27 / Filesize : 201 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

GCCについて part7



1 名前:デフォルトの名無しさん [2006/04/18(火) 19:57:04 ]
史上最強かもしれないツール、GCC(GNU Compiler Collection)について語るスレ。

GNU本家のGCCページ
gcc.gnu.org/

Binutils - Collection of binary utilities ←これも必要だぞ。
www.gnu.org/directory/GNU/binutils.html

GNU Binutils
sources.redhat.com/binutils/

GCC online documentation
gcc.gnu.org/onlinedocs/

Installing GCC
gcc.gnu.org/install/

GCC Timeline
gcc.gnu.org/releases.html#timeline

Calendar
gcc.gnu.org/develop.html#timeline


856 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 09:40:30 ]
>>854
言語にはライセンス/コピーライトがありません。

857 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 09:41:48 ]
マジレス禁

858 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 09:42:35 ]
やけに伸びてるな、というときは期待できない
と予め思いつつ見たけど、やっぱりウゼェ……
なんでこういうのにだけは以上に喰い付きがいいんだ

859 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 10:49:09 ]
マジで言ってるわけじゃないだろw

860 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 13:11:54 ]
ぐくっ

861 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 14:19:13 ]
>>856
言語の仕様書がGFDLなんだろう、たぶん。

862 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 17:02:05 ]
ADAスレがもう織田信長スレしか無い件

863 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 17:02:58 ]
違った武田信玄だったけどもう落ちてるオワタ

864 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 17:16:05 ]
英語は発音大事と言ってはいるものの、実際に
インペろぅベド(imperoved)とか言われるとムカッと来るからな。



865 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 17:17:55 ]
グロゥバロゥとかヴァアミアンとかね

866 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 01:22:29 ]
織田信長って言語まじであるの?

867 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:28:47 ]
>>864
そんな英単語は無い

868 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 11:11:33 ]
いまgdbのバグ?みたいなものを追いかけてて、再現条件が

・ある64bitローカル変数(long long)が
・最適化によってもoptimized outされずに
・スタックに取られずレジスタに直接アサインされる

というあたりにあるのではないかと考えてます。この時 (gdb) p var の
出力での sign bit のハンドリングが違うような感じ>gdbのバグ?

で、これの再現コードを作ろうとしているのですが、

・レジスタに乗せる方向に誘導 -> register
・最適化させない -> volatile?

にすると、register は無視で普通にメモリに乗ってしまってうまく
いきません。で、

volatile register int64_t max asm("%edi:%esi");

でそんな風にならないかと試し中なのですが、↑はレジスタ1つ(32bit)なら
いけるものの、2つで64bit変数を表したい時の書き方がわかりません。

どなたか教えてくださいませ・・・


869 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 12:47:51 ]
アセンブリ手で書けばいいじゃん

870 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 14:00:44 ]
デバッガから見える変数にバインドされるレジスタを、どうやって
アセンブリ手書きで設定するのか、正直わかりません。

シンボルデバッグ情報に変数<->レジスタ・メモリアドレスマッピングは
入っていると思うんですが、これも手書きできるということ?もしかして
インラインアセンブラではなく、フルアセンブラで書くという話なら
それはちょっと自分の能力を越えてるような・・・

871 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 14:05:42 ]
>>870
こんな関数でもコンパイルしてみりゃ何をすればいいか判るんじゃね?
--
long long func(long long foo)
{
return foo;
}


872 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 18:20:08 ]
>>971
それって .debug_* セクションを自分で作れとやっぱり言ってる?
info gdb-int してみたけど、激しくハードル高い・・・

873 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 18:37:11 ]
>>872
戻り値は64bitのレジスタ変数と同じ状態になるわけだが。
ついでに、gcc -S-gすればデバッグ情報が漏れなく埋め込まれるわけだが。
もしかして、その程度の知識もないのにデバッガを疑っちゃってるわけ?

874 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 19:19:00 ]
>>873
gdbが黒だとは言ってなくて、ただgdbからの見え方がその条件差で
必ず違うので、もっと詳しく見たいと思ってます。

そのコードだとgdbからは変数はレジスタにバインドされて見えないので
別の方法をまだ考えてますが、-Sのダンプでデバッグ情報埋め込み方法を
調べられるという考えは頭から抜けてました。やってみます。




875 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 09:32:01 ]
もっと謙虚になって出直せ。

876 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 20:52:19 ]
gdb のソース読めばいいのでは?

877 名前:868 mailto:sage [2007/09/16(日) 22:08:28 ]
すみません、>>875 の通り、私ごときのレベルでしていい話ではなかったと
痛感しているので、全部なかったことにして下さい。このスレに書いていいと
認めてもらえる程度になるまでROMってます。

878 名前:デフォルトの名無しさん [2007/09/18(火) 13:32:01 ]
i686環境で例えばPPC用に何らかのアプリなどをクロスコンパイリンゲすると
本当にPPC環境で動くもんなの???

玄箱HGでも買おうかと思うのだが、さすがに玄箱でビルドとかすると、
PPC266MHzじゃつからろうなあ、と思って、
できれば速いi686環境でPPCにガチガチに最適化してから玄箱に転送できれば。

879 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 13:49:25 ]
何をビルドするの?
ほとんどバイナリパッケージが揃っているけど? > 玄箱debian
「ガチガチに最適化」とかヲタ臭いことがやりたいなら、
ソースからバイナリパッケージを再ビルドすれば?

880 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 13:49:31 ]
>>878
簡単なテストプログラム書いて、動くかどうかやってみればいいんじゃないの?

881 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 13:59:31 ]
>>880
まだ買ってないだろw

882 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 14:01:16 ]
>>881
linuxじゃないけど、クロス環境でやったことあるけど...

883 名前:デフォルトの名無しさん [2007/09/18(火) 14:28:24 ]
クロス・ダァイッチュラント

884 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 14:29:50 ]
kurohako遅いよ



885 名前:デフォルトの名無しさん [2007/09/18(火) 14:58:58 ]
ゲーツェーツェーを来んあぴるするのに4時間くらいかかりそうだな
Pentium3 500MHzでさえ4時間かかったのだから

886 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 15:04:49 ]
コンパイルを4時間とか考えられないし見たことも無い俺は素人

887 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 15:24:52 ]
X68kでgcc1.3のコンパイルに一晩かかった時代もありました

888 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 15:32:21 ]
動画のエンコードをやるようになると、4時間というのは大した時間に思えなくなる。
2passで47時間とかあるからな。

889 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 16:31:48 ]
それはさすがにPCごと買い替えとか考えるべき時間のかかりようだと思う。

890 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:06:07 ]
24時間ビーテレだから

1時間2時間コンテンツでそれだけかかったらアレだが。

891 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:06:17 ]
>>885
もっとかかったような気もするが…
寝る前にmakeしておくと、起きるまでには終わってるくらい。


892 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:13:12 ]
起きたらエラーで止まってたとか?

893 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:59:15 ]
昔は X11 をコンパイルするのに12時間とか普通やったよねぇ…

894 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 19:19:35 ]
今はOpenOfficeが身近で最もヤヴァいヤツだと思うんだがどうよ?



895 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 19:22:28 ]
Qtのビルドはまいったな。ホントに一晩かかってしまった。

896 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 22:04:58 ]
時間かけたくないから、クロスコンパイルするって話じゃないのか?

897 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 09:59:48 ]
今でもクロスコンパイルが難しいアプリもあるけどね。
コンパイル時に実行ファイルを生成して利用するような奴。
昔Linux Zaurusで結構苦労した。

898 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 10:18:38 ]
ちゃんとしたプロジェクトなら
configure等でhostとtargetを指定できる

899 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 15:15:18 ]
そもそも、クロスと名の付く奴はどれもこれもむずかしい。
「クロスカウンター」狙ってできる奴などいないであろうほど難しい。
「クロスコンパイル」やり方がまず難しいし、それでいいのかどうかの判断も難しい。
「マクロス」ガンダムのパクリなのか何なのか、評価の付け方が難しい。
「セクロス」難しい。




900 名前:デフォルトの名無しさん [2007/09/19(水) 15:25:33 ]
GCC5になって3系で作ったときのバイナリの実行速度と4系の新機能がついに統合される夢を見たこともある。

901 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 15:33:37 ]
ia32の最適化は限界なんだろ?
世の流れは爆速、爆熱CPUを求めてるみたいだね?

902 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 16:31:06 ]
流れは爆数コア、爆並列だ。

903 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 16:31:48 ]
え、OSがついていけてないような?

904 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 16:44:53 ]
時代はオプテロン



905 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 16:55:13 ]
>>903
そこで仮想化ですよ

906 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 17:48:48 ]
いきなり豆知識 「殺菌灯」

ディパートメントゥストゥア(英語は発音大事だがこのように書くと非常にムカつくので注意が必要)などでよくある殺菌灯は
何か特別なものだと思い込んでいるのもいるが、あれは蛍光灯と同じである。
蛍光灯というのは水銀蒸気を封入し、そこに電荷をかけることで強力なUV-Cと呼ばれる紫外線を発生させる。
(封入されているのは水銀蒸気であるから、割れた蛍光管のそばにいるのは危険である)

蛍光灯と殺菌等の違いは、この紫外線をどう利用するかによって異なり、
蛍光物質で紫外線を吸収して可視光線に変換するのが蛍光灯
そういうことをせず、直にUV-Cを出すのが殺菌灯

というわけだ。
UV-C領域の紫外線は殺菌性に優れるが、皮膚に深く浸透して細胞まで害を及ぼすため
直視してはいけないのである。

907 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 17:50:44 ]
GCCとどういった関係が

908 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:09:59 ]
>>907
>水銀蒸気で殺菌する

まで読んだ

909 名前:デフォルトの名無しさん [2007/09/19(水) 21:35:13 ]
↓で誘導されますた
マルチスレッドプログラミング相談室 その6
pc11.2ch.net/test/read.cgi/tech/1187008532/

【OS】
Debian Etch Linux kernel 2.6.18
【言語】
C pthread
【実行環境】
GNU gdb 6.4.90-debian
gcc (GCC) 4.1.2

gdbでのマルチスレッドのデバッグ中、任意のスレッドでステップ実行をしていると
とつぜんカレントスレッドが切り替わり、
ステップ実行していたスレッドの実行位置が失われる現象に遭遇します。
デバッグ対象のプログラムは、動作確認がとれているオープンソースのプログラムです。
原因、回避法等ご存知のかた、ご教示いただけないでしょうか

910 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:59:00 ]
>>909
裏のブレークも引っかかった

911 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 22:12:45 ]
>>910
仮に別スレッドのブレークポイントでスレッドが切り替わったとしても
threadコマンドで元スレッドにもどれますよね?
切り替わった時点でステップ実行していたスレッドの現在位置が??() (こんな表示)
になって元に戻れなくなってしまいます。

912 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:39:25 ]
GCC4.2.2を使ってました。このスレを読んでいたら4.1か4.3にした方が良いような気がしてきたので
4.3をコンパイルしたらエラーもなく終わったのでインストール。
しかし。。。カーネルのコンパイルが出来ません(TT)
getnstimeofdayとかudivdi3とかのエラー関係がでます。おとなしく4.1系に戻そう・・

913 名前:デフォルトの名無しさん [2007/09/22(土) 23:26:06 ]
Linux(x86,32bit)で下記プロセサを使っている場合、-mXXX や -mcpu=XXX や -march=XXX には何を書くのが良いのでしょうか?

processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 15
model           : 47
model name      : AMD Athlon(tm) 64 Processor 3200+
stepping        : 2
cpu MHz         : 999.876
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 1
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt lm 3dnowext 3dnow up pni lahf_lm ts fid vid ttp tm stc
bogomips        : 3537.29
clflush size    : 64


914 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 23:46:49 ]
-march=athlon



915 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 00:26:42 ]
-march=athlon64

916 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 00:59:43 ]
>>913
ゲントとかいうLinuxのサイトからですが
gentoo-wiki.com/Safe_Cflags

917 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 01:33:38 ]
じぇんつー

918 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 22:39:33 ]
>>913
-march=k8 -msse3

919 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 23:43:46 ]
頼むからmarchを「マーチ」ちゅうのやめてくれと。


920 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 23:47:09 ]
マーチです

921 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 01:23:18 ]
ですマーチ

922 名前:920 mailto:sage [2007/09/24(月) 01:34:19 ]
予想通り

923 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 01:59:33 ]
さりげな・く〜♪

924 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 10:05:21 BE:23579377-2BP(1)]
>>913
-march=native



925 名前:デフォルトの名無しさん [2007/09/24(月) 18:27:32 ]
gcc -Wp,hogehoge の-Wpって何をするオプションですか?

926 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 18:38:12 ]
そんなんも知らんのか バカじゃねぇのw

927 名前:デフォルトの名無しさん [2007/09/24(月) 18:42:32 ]
質問を変えよう。

Fedoraのrpmのspecファイルを見ていると、CFLAGSに-Wp,-DXXX=YYYという指定をしている例がみられるの
だけど、単に-DXXX=YYYとしない理由は何か考えられますか?

gcc-4.1.2のinfoだと、-Wpはなるべく使うなと書かれているのだが...。
よろしくおねがいします。

928 名前:デフォルトの名無しさん [2007/09/24(月) 18:43:53 ]
>>926 よろしく。

929 名前:デフォルトの名無しさん [2007/09/24(月) 21:57:37 ]
天才926降臨期待age

930 名前:デフォルトの名無しさん [2007/09/26(水) 12:27:49 ]
MinGWの中の人がいつかきっとGCC3.4.6 for MinGWをリリースしてくれると信じてる。

931 名前:デフォルトの名無しさん [2007/09/27(木) 00:33:49 ]
MinGW

ゴールデンウィークが最小限なこと。
休みが一日しかないに違いない。

932 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 00:49:16 ]
ゴールデンウィークなんて死語だぜ

933 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 00:50:02 ]
ゴールデンウィークなんて(毎年)仕事だぜ

934 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 12:48:27 ]
GCC online docs

ジーシーシー オンライン ドクス

なんだよドクスって
ドクスとか言うな!!



935 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 13:04:36 ]
>>931
2008年や2014年の
 5月3日 = 土曜日
 5月4日 = 日曜日
 5月5日 = 月曜日
のことかー!!!

# でも4月29日の昭和の日が火曜日だから、4/26(土)・27(日)・28(月)・29(火)の連休もとりやすいんだよねw

936 名前:935 mailto:sage [2007/09/27(木) 13:06:58 ]
# やべっ、忘れてた。法改正されたから、2008年や2014年は5月6日が振替休日!

937 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 14:59:21 ]
掴もうぜ
ゴールデンボール

938 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 15:55:44 ]
gcc4.2.2rcが先月末にあがってたので入れてみた。
マーチネイチブ、エムチュンネイチブ、何気にいいですね。なんかアプリの動きが早くなった。


939 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 16:05:31 ]
>>938
>なんかアプリの動きが早くなった。
たぶん気のせいだよw

940 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 16:28:39 ]
>>939
気のせいかなwww
4.2が正式リリースされてすぐに入れた時は逆に遅くなったような気がしたけど、今度のはいい感じなんだけど
なあ。mplayerなんかではgcc関連の値をセットしなくてもconfigureかけるとアプリが勝手に-mtune=nativeに
設定してくるね。

941 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 12:21:41 ]
>>938
mtuneをエムチュンと読むのにmarchがマーチと読む心は?

942 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 22:06:39 ]
>>941
エムアーチ

943 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 22:21:24 ]
えむつね/えむあーち

944 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 23:02:36 ]
むちゅーん
むあーき



945 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 23:41:23 ]
むとーね
まるは

946 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 00:47:05 ]
まーくエッチ

947 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 01:21:57 ]
こうして日々GCCは進化していくのであった

948 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 17:34:00 ]
エムアークゥィティクチュワ!

949 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 18:45:18 ]
ウィキピィーディア

950 名前:デフォルトの名無しさん [2007/10/06(土) 18:25:57 ]
gccの--paramって、gcc4から使えるオプションだっけ?
あと、paramってコマンドラインでしか指定できないの?#pragmaで指定できると嬉しいのだが。

951 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 18:32:43 ]
>>950 3でも使える。pragmaの件は知らん。

952 名前:大槻 [2007/10/06(土) 19:00:47 ]
すべてはpragmaのせいです。

953 名前:デフォルトの名無しさん [2007/10/07(日) 00:18:12 ]
ストールマンって今何してんの?
まだemacsでオナニーしてんの?

954 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 08:52:40 ]
秀○やSAKURAでオナニーするよりよっぽど良いべ。



955 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 09:15:57 ]
少なくとも人の役にたってるオナニーだからいいじゃねぇか

956 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 09:38:54 ]
公開オナニーてっこと?

957 名前:デフォルトの名無しさん mailto:sega [2007/10/08(月) 01:29:18 ]
あるデバッグオプションを有効にしてコンパイルすると、
Segmentation faultで落ちたときにソースのファイル名と
行番号を表示するという機能があるらしいんですが
どのオプションでしょうか

958 名前:デフォルトの名無しさん [2007/10/08(月) 01:39:02 ]
>>957
OSがわからんからLinuxだとエスパー。

行番号情報をバイナリに埋めるには、gcc -g だ。できあがったバイナリをstripしないこと。
% file ./your_broken_software して、not stripped と表示されることを確認。

でも、SEGV食らったときに自動で落ちた場所を表示するコードを埋める機能はgccには無いよ。
一部のLinuxには、catchsegvというコマンドがついてるからそれ使え。

% catchsegv ./your_broken_software


959 名前:デフォルトの名無しさん [2007/10/08(月) 01:46:54 ]
うそだ、ごめん。catchsegvだと、PCの値とかバックトレースはでるけど、行番号は出ないね。
素直にgdb上で実行するのがよいと思うが?



960 名前:957 mailto:sage [2007/10/08(月) 02:39:57 ]
>>959
catchsegvか・・・ オッケー、刻んだ!

961 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 03:56:23 ]
PCがわかれば addr2line -e a.out pc で行番号わかるよ。

962 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 09:29:06 ]
$ gcc -g foo.c
$ gdb --batch -ex 'run あれば引数' ./a.out


963 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 11:05:30 ]
gccのループ展開の抑制について質問させてください。

コードサイズの評価をしようとして、常用している -O3 に
ループ展開の抑制だけを加えて -O3 -fno-unroll-loops -fno-peel-loops と
したんですが、ループ展開を止めてくれません。どうやればいいんでしょう?

gccのバージョンは4.1.2(tarballから展開・パッチなし)、
実行環境はi686-pc-linux-gnuとpowerpc-linuxです(どちらでも現象は同じ)。

問題のコードを直接晒せないので、再現コードを書きます:

 #define N 5

 int foo(int a[])
 {
  int t = 0, i;
  for (i = 0; i < N; i++) t += a[i];
  return t;
 }

上のように定数回の小ループがあって、ループ回数が少ないと展開するようです。
展開した場合は、ループ構造は削除され、中身が回数分反復されます。

-O2 とすればループ展開を行わなくなります。
でも、ループ展開以外の最適化は -O3 のままにしておきたいんです。


964 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 11:47:28 ]
トゥーチャノー(英語は発音大事)での、話のループを抑制したい。
こればっかりは、流れ石のGCC様の-Oも効かんでのう〜ゴホゴホッ(持病の癪が)



965 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 12:06:44 ]
>>964
癪は胸部腹部の痛みの総称なので、癪で咳き込む人はいない

966 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 12:38:41 ]
ボケ殺し……

967 名前:デフォルトの名無しさん [2007/10/09(火) 21:19:18 ]
GCC 4.2.2 リリース age

968 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 21:51:46 ]
>>963
4.1.2で色々やってみたけど抑制できなかった

969 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 22:02:20 ]
そこだけソース別けて-O2でコンパイルするとか...

970 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 23:04:35 ]
>>967
了解。今から長いコンパイルを開始します。

971 名前:963 mailto:sage [2007/10/10(水) 00:53:43 ]
>>968
どもです。お手数おかけしてます。やっぱり地味に難しいんでしょうか。

>>969
避けてしまうのはどうにでもできるんですが、ほしいのは
「このコードをこういう条件でコンパイルするとこういう結果になります」という
コード評価でして。コードの一部だけ最適化条件を変えるのは
できるだけしたくない、という事情です。
ただ、ここで詰まっていてもしょうがないので、
適当なところで見切りをつけますけどね。全体を-O2にしてしまうとか。

4.1.2のmanを調べたら「-O3は-O2に-finline-functions -funswitch-loops
-fgcse-after-reloadを足したもの」と書いてあったのですが、
-O2にこれらを足しても-O3と等しくはなりませんでした。うーむ。

972 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 02:02:49 ]
-O3 -fno-unroll-loops でいいんでないの?

973 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 04:53:20 ]
>>971
manは結構いいかげんなのでソースを当たるべし。

974 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 08:52:16 ]
さんざん既出だが、
自分で細かくコントロールしたければ、
-O3, -O2などを使ってはいけない。



975 名前:868 mailto:sage [2007/10/10(水) 11:29:11 ]
逆に考えて -O2 に -O3 で追加されるような -fhogehoge 追加してけば?

976 名前:私立ミンミンゼミ [2007/10/10(水) 12:24:09 ]
 

977 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 15:01:37 ]
念のため聞くけど、>>972とか>>975はギャグだよね……??

978 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 15:18:43 ]
>>975の何がおかしいのかわからない。

979 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 15:22:26 ]
きっと、-fhogehogeって名前のフラグがあると思ってるんだと推測。

980 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 15:29:25 ]
>>978-979
>>971に既にその方法でやってるが、manでは正確ではないようだ
という話が出てるのに>>975を敢えて書くってのは自爆ギャグとか
かと考えないと、辻褄が合いそうにない。
ま、ギャグだとしても全然面白くないけど。

てか、おまえらも注意力散漫なんだな。

981 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 15:35:05 ]
GNU製品のmanなんて宛てにしないでソースで正確なの調べろよ。

982 名前:デフォルトの名無しさん [2007/10/10(水) 18:33:46 ]
GNU製品のmanなんて信用せずに素直にinfo見ろよな

983 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 18:58:49 ]
GNU製かどうかは関係ない。
ソースから生成してるのでもないかぎり文書は不正確なもの。

984 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 19:45:03 ]
いや、info見ろよ。



985 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 20:57:03 ]
infoもこう書いてあるけど
`-O3'
Optimize yet more. `-O3' turns on all optimizations specified by
`-O2' and also turns on the `-finline-functions',
`-funswitch-loops' and `-fgcse-after-reload' options.

986 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 21:53:56 ]
>>983
でもさ、それって実装であって設計じゃないよね
ソフトウェア工学的にはうんこだよな

987 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 22:31:46 ]
>>986
いまだにMDAとか言ってる位に仕様書からの実装合成はhype気味なんだから
一介のフリーソフトがそこまでできてなくてもしょうがないだろう。だって人間だもの(みつを

988 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 08:03:19 ]
>>975
-O2使ったとたんに他の指定は上書きされるのが現実です。

個別に設定しても必ずその通りになるものではないし。
最適化技法間の制約があるので。

暗黙に無効、有効にする時に、Warningも出しません。
ソース読むしかないんです。

989 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 09:27:31 ]
どの最適化をするかくらいならすぐ読めるよね

990 名前:963 mailto:sage [2007/10/12(金) 00:58:21 ]
ソースを読みました。opts.c の decode_options() に最適化オプション読み込みの
基本部分がありました。大雑把には次のような構造でした。

 for (i = 1; i < argc; i++)
  { /* すべての-Oxオプションを通し読み */ }
 if (optimize >= 1)
  { flag_hoge = 1; ... } /* -O1以上でのフラグ設定を適用 */
 if (optimize >= 2)
  { flag_geho = 1; ... } /* -O2以上でのフラグ設定を適用 */
 ...
 handle_options(argc, argv, ...); /* 各オプションを処理 */

optimize >= 3 では、flag_inline_functions と flag_unswitch_loops と
flag_gcse_after_reload を 1 にしていました。
その箇所だけ読むとmanやinfoの記述は正しいことになるんですが、はて。
結局追いきれませんでした。

それから、>>988の通り、フラグ変数を書き換えてもその情報をどこにも伝えません。
ちょっと不便なような。。。

で、別解なんですが、「-O3 --param max-completely-peeled-insns=0」
と指定してpeelingを止めてしまえば目的を果たせることがわかりました。
この指定で行こうと思います。


991 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 01:22:28 ]
いや、該当するフラグ変数を全ソースで検索しないと。
コンパイル中にフラグの値変ることもあるし。

992 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 02:23:32 ]
>>991
ヒントありがとうございます。flag_unroll_loops と flag_peel_loops に
当たりをつけて探してみました。これだろうな、ってのが出てきました。

tree-ssa-loop.c:
static void
tree_complete_unroll (void)
{
 if (!current_loops)
  return;

 tree_unroll_loops_completely (current_loops,
                flag_unroll_loops
                || flag_peel_loops
                || optimize >= 3);
}

"optimize" でも軽く眺めてみましたが、フラグではなく最適化レベルの数値を
最適化の適用条件にしている箇所はそれなりに珍しいようです。


993 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 08:47:02 ]
> optimize >= 3

ワラ
イヤだねー

994 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 09:03:27 ]
将来を見据えた設計なのでは?



995 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 12:37:26 ]
>>994
断言できる。何も考えてないだけ。

996 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 22:06:08 ]
>>987
いや、ストールマンって趣味ならとても楽しくやりそうだけど
絶対に一緒に仕事やりたくない人種だよな

997 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 22:10:13 ]
次スレ建てられなかった
誰か頼む

998 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 00:08:45 ]
GCCについて part8
pc11.2ch.net/test/read.cgi/tech/1192201659/

999 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 00:36:21 ]
>>998

次スレでもみんなよろしく

1000 名前:デフォルトの名無しさん [2007/10/13(土) 00:37:18 ]
1000

1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<201KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef