952 :
大槻 :2007/10/06(土) 19:00:47
すべてはpragmaのせいです。
953 :
デフォルトの名無しさん :2007/10/07(日) 00:18:12
ストールマンって今何してんの? まだemacsでオナニーしてんの?
秀○やSAKURAでオナニーするよりよっぽど良いべ。
少なくとも人の役にたってるオナニーだからいいじゃねぇか
公開オナニーてっこと?
あるデバッグオプションを有効にしてコンパイルすると、 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 :2007/10/08(月) 02:39:57
>>959 catchsegvか・・・ オッケー、刻んだ!
PCがわかれば addr2line -e a.out pc で行番号わかるよ。
$ gcc -g foo.c $ gdb --batch -ex 'run あれば引数' ./a.out
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 のままにしておきたいんです。
トゥーチャノー(英語は発音大事)での、話のループを抑制したい。 こればっかりは、流れ石のGCC様の-Oも効かんでのう〜ゴホゴホッ(持病の癪が)
>>964 癪は胸部腹部の痛みの総称なので、癪で咳き込む人はいない
ボケ殺し……
967 :
デフォルトの名無しさん :2007/10/09(火) 21:19:18
GCC 4.2.2 リリース age
>>963 4.1.2で色々やってみたけど抑制できなかった
そこだけソース別けて-O2でコンパイルするとか...
>>967 了解。今から長いコンパイルを開始します。
971 :
963 :2007/10/10(水) 00:53:43
>>968 どもです。お手数おかけしてます。やっぱり地味に難しいんでしょうか。
>>969 避けてしまうのはどうにでもできるんですが、ほしいのは
「このコードをこういう条件でコンパイルするとこういう結果になります」という
コード評価でして。コードの一部だけ最適化条件を変えるのは
できるだけしたくない、という事情です。
ただ、ここで詰まっていてもしょうがないので、
適当なところで見切りをつけますけどね。全体を-O2にしてしまうとか。
4.1.2のmanを調べたら「-O3は-O2に-finline-functions -funswitch-loops
-fgcse-after-reloadを足したもの」と書いてあったのですが、
-O2にこれらを足しても-O3と等しくはなりませんでした。うーむ。
-O3 -fno-unroll-loops でいいんでないの?
>>971 manは結構いいかげんなのでソースを当たるべし。
さんざん既出だが、 自分で細かくコントロールしたければ、 -O3, -O2などを使ってはいけない。
975 :
868 :2007/10/10(水) 11:29:11
逆に考えて -O2 に -O3 で追加されるような -fhogehoge 追加してけば?
976 :
私立ミンミンゼミ :2007/10/10(水) 12:24:09
きっと、-fhogehogeって名前のフラグがあると思ってるんだと推測。
>>978-979 >>971 に既にその方法でやってるが、manでは正確ではないようだ
という話が出てるのに
>>975 を敢えて書くってのは自爆ギャグとか
かと考えないと、辻褄が合いそうにない。
ま、ギャグだとしても全然面白くないけど。
てか、おまえらも注意力散漫なんだな。
GNU製品のmanなんて宛てにしないでソースで正確なの調べろよ。
982 :
デフォルトの名無しさん :2007/10/10(水) 18:33:46
GNU製品のmanなんて信用せずに素直にinfo見ろよな
GNU製かどうかは関係ない。 ソースから生成してるのでもないかぎり文書は不正確なもの。
いや、info見ろよ。
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.
>>983 でもさ、それって実装であって設計じゃないよね
ソフトウェア工学的にはうんこだよな
>>986 いまだにMDAとか言ってる位に仕様書からの実装合成はhype気味なんだから
一介のフリーソフトがそこまでできてなくてもしょうがないだろう。だって人間だもの(みつを
>>975 -O2使ったとたんに他の指定は上書きされるのが現実です。
個別に設定しても必ずその通りになるものではないし。
最適化技法間の制約があるので。
暗黙に無効、有効にする時に、Warningも出しません。
ソース読むしかないんです。
どの最適化をするかくらいならすぐ読めるよね
990 :
963 :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 ヒントありがとうございます。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" でも軽く眺めてみましたが、フラグではなく最適化レベルの数値を
最適化の適用条件にしている箇所はそれなりに珍しいようです。
> optimize >= 3 ワラ イヤだねー
将来を見据えた設計なのでは?
>>987 いや、ストールマンって趣味ならとても楽しくやりそうだけど
絶対に一緒に仕事やりたくない人種だよな
次スレ建てられなかった 誰か頼む
1000 :
デフォルトの名無しさん :2007/10/13(土) 00:37:18
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。