1 名前:デフォルトの名無しさん [2009/06/27(土) 08:34:50 ] 史上最強かもしれないツール、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 前スレ GCCについて part8 pc12.2ch.net/test/read.cgi/tech/1192201659/l50
281 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 11:08:15 ] セキュリティホールってより、暴走の原因とか
282 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 11:37:41 ] >>281 それはない。 それはただのバグだ。
283 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:31:56 ] 不定値前提で安定したプログラム作れないほうがよっぽど
284 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 18:48:52 ] 0クリアするくらいならdeadbeefで埋めたほうがまし
285 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:00:57 ] 新規割り当てメモリを初期化しない場合のセキュリティーホールというのは 上位権限のプロセスが開放したメモリにある情報を読めるかもしれないとい問題
286 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:01:25 ] フフフフフフフフフフフフフフフ
287 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:06:26 ] oppai
288 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:09:27 ] >>285 そりゃライブラリ側の仕事でなくOSの仕事だろう
289 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 19:14:24 ] malloc(3)の話だから、OSの仕事も含むのは普通。
290 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 00:23:13 ] char buf[256] = {0}; ってやるとgccだとmemset関数を呼び出す 糞実装になってるw アホだろw
291 名前:デフォルトの名無しさん [2010/03/17(水) 00:24:54 ] そこでmemsetを呼び出さない処理系を教えてくれ
292 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 00:29:33 ] gcc糞だからなぁ
293 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 01:22:05 ] >>291 gcc-4.3は呼び出さない
294 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 01:33:32 ] -minline-all-stringopsって使っていいの?
295 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 01:51:04 ] >>290 どうしてほしいの?rep stosdにでもしてほしいとか?
296 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 03:38:41 ] >>289 含まねーよ。物事を区別して考えられないバカっているんだねえ。
297 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 07:31:27 ] >>284 いい悪いってか、用途によるでしょ。 バイナリはでかくなるよ
298 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 07:33:10 ] ちょっとタンマ >>297 の答えに自信ない
299 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 14:11:14 ] 1kbも増えんだろ
300 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 15:57:20 ] >>296 あるライブラリ関数について、 C標準では定義されてないことを、 OSの方で定義していることは良くあること。 たとえばスレッドセーフかどうか。
301 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 09:48:55 ] それはそのライブラリ関数を使う側にとっての関心事項。 >>285 のは他プロセスないしカーネルにとっての関心事項。 別の話だね。
302 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 10:28:13 ] 他プロセスがmallocおよびその下請システムコールを呼ぶ場合の話でしょ?
303 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 07:04:48 ] >>300 OSじゃなく処理系だろ
304 名前:デフォルトの名無しさん [2010/03/20(土) 09:55:19 ] CPU Frequencyをリアルタイムで取得するgoodな方法を教えてくれ
305 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 10:10:30 ] RDTSC
306 名前:デフォルトの名無しさん [2010/03/23(火) 22:46:45 ] プリプロセッサの処理中にメッセージを表示したいのですが、 gccでも可能でしょうか? Visual C++ では #pragma message("msg") などと書けばできたのですが。
307 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 00:12:02 ] >>306 gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas によると、 #pragma message "Compiling " __FILE__ "..." とか出来るっぽいぜ
308 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 17:22:22 ] >>305 今はだめだろ。CPUいっぱいあるから。
309 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 19:57:17 ] ついでにいうとCPU, OSの組み合わせによってはRDTSCがエミュになってしまい 数百クロックを要する。 だがそのような環境では逆に全コアでタイマカウンタが一貫してたりする。
310 名前:306 mailto:sage [2010/03/25(木) 21:44:47 ] >>307 ありがとうございます。しかし試してみたところダメでした。 -Wunknown-pragmasでコンパイルしたら「無視しました」みたいなメッセージが出ました。 gccのバージョンによるんですかね。4.3.2でした。
311 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 00:23:57 ] >>307 #warningで出来るかなと思ったら引数のマクロ展開はしないとか ふざけた事を抜かしているのであまり使えないな。 この程度は 出来るけど。 #warning Message $ gcc -c source.c source.c:1:2: warning: #warning Message waring:#warning が冗長で醜いなあw
312 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 09:37:53 ] 俺もそれは浮かんだが、-Werrorを入れてる環境だと止まるので完全ではないわな
313 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 23:33:33 ] Xeon 5500って、最適化オプションの名前って何ですか? nocona? core2?
314 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 07:35:10 ] >>313 たしか〜 nehalem-exかNorthwood
315 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 10:42:05 ] 最適化してもあまり変わらないんだけどな SSE2を使うだけで十分だと思う
316 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 21:31:49 ] nativeでいいよ
317 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 10:20:40 ] 4.5.0-RC-20100406
318 名前:デフォルトの名無しさん [2010/04/14(水) 15:49:00 ] GCC4.4.1は-msse・最大最適化でコンパイルすると、float演算はSSE命令により 自動ベクトル化されるが、整数演算はベクトル化されない。整数移動はベクトル化 されるが、float用SSE命令が使われていた。GCCはMMXや3DNOWコードを吐かないの?
319 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 21:08:15 ] GCC 4.5.0 release
320 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 21:43:24 ] MMXは基本的にshort以下の整数に使うもんだし 飽和演算とか利用してこそだし あまり自動最適化には向かないんじゃない
321 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 01:44:02 ] MMXは切替えなくちゃ使えないから使わないみたいなのを読んだような気がする
322 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 07:15:21 ] SSEの整数命令使えばいいんじゃない
323 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 12:53:50 ] 整数はベクタ化の恩恵を受けにくいからじゃないかな。 単なるコピーならfloat32でも同じことだし。
324 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 22:23:12 ] -mmmxとか-m3dnowじゃないと使わないんじゃない SSEで全部まかなえるわけだし
325 名前:デフォルトの名無しさん [2010/04/15(木) 23:35:38 ] >>324 普通のSSEには整数命令入っていないよ -mmmxや-m3dnowでもMMXレジスタは使っていなかった。
326 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:52:09 ] alignmentしてないと速くなんないからじゃね?
327 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 00:02:00 ] 普通のSSEじゃないだろ最初のSSEだろ
328 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 20:29:37 ] Pen4あたりから入り始めたんだっけ?
329 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 19:38:11 ] 何が? 最初のSSEはPenIIIだよ。
330 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 01:19:50 ] pen3のsseは整数演算できない
331 名前:デフォルトの名無しさん [2010/04/18(日) 02:33:27 ] GCC4が登場した頃には整数SIMDができるSSE2の登場から数年経過しており、MMXに よる整数SIMDの需要が少なかったからか?さらに、GCC4登場初期はスマートフォンや PDAにiwmmxtが搭載されていたが、そもそも当時はスマートフォンが普及しておらず MMX系の需要は少なかったからか。で、今ではスマートフォンが普及しgccに armの128bit自動ベクトル化が搭載されたが、既に時代遅れのiwmmxtは対象外 という事か。
332 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 14:05:30 ] gccは商用コンパイラにどれくらい負けますか?
333 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 14:06:59 ] MMXはintに大体適用できないから 一生懸命対応するメリットが少ないんじゃないの
334 名前:デフォルトの名無しさん [2010/04/19(月) 03:58:34 ] >>332 あらゆるCPUに同じコアで対応しているから、乗算結果の上位の取り出しや飽和演算で 最適コードを吐かない、MMXのように切り替えが必要な処理は実装されないんじゃね? >>333 iwmmxtならそもそもfpu搭載していないので切り替え不要だし、加減算やshort乗算には効果あるよ
335 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 17:17:45 ] gcc4って最初かなりすごかったのに、後からどんどん遅くbuggyになってるよね プロプライエタリの工作員が本気出し始めたのかな
336 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 17:19:45 ] 4.5からbackendをplugin化出来るようになったからいつでもllvmに逃げられるようになったけどね
337 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 21:03:17 ] Benchmarks Of GCC 4.5.0 Compiler Performance www.phoronix.com/scan.php?page=article&item=gcc_45_benchmarks
338 名前:デフォルトの名無しさん [2010/04/21(水) 02:45:57 ] ポインタ渡しの関数内でSIMDを使いたい場合、仮引数をstruct{long __attribute__((aligned(16))) a[2][8];}*aのようにして、a->a[i][j]でアクセスしないとアライメントデータとして扱われない。 ソース冒頭で構造体型定義を使っても可。もっと簡単にポインタがアライメントされて いる事をgccに分からせる方法はないの? また、func(struct{long __attribute__((aligned(16))) a[2][32];}*__restrict a, struct{long __attribute__((aligned(16))) a[2][32];}*__restrict b, int *__restrict c){ int i;for (i=0;i<8;i++){a->a[0][*c*4+i]=b->a[0][i];a->a[1][*c*4+i]=b->a[1][i];} } のように二次元配列を2つ受け取り、ポインタ渡しで指定されたオフセット分ずらして 転送する関数を書くと、versioning for alias requiredとなり非SIMDコードも生成 されるが、[*c*4+i]を[(*c+=0)*4+i]とすると非SIMDコードは生成されない。 >>335 OSSへの破壊工作ってあるの?
339 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 09:15:33 ] 十分簡単だろ。
340 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 10:53:16 ] >>338 マクロ使えよ
341 名前:デフォルトの名無しさん [2010/04/21(水) 11:15:06 ] codepad.org/AKWhbBiV のコードを g++ 4.3.2 で最適化なしコンパイルして実行したら, --Start 1-- Destructor Destructor --End 1-- --Start 2-- Destructor --End 2-- Destructor という結果になった. (Start 2 と End 2 の間にもう1つの"Destructor"があることを期待していた) G++ だと,返されるオブジェクトが関数のローカル変数の場合は, 戻り値用の一時オブジェクトは作成されない仕様なの?
342 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 11:33:58 ] >>341 Start 2 〜のように戻り値と同じ型のローカル変数を return した場合、 C++ の規格でコピーの省略が許されている。 (ISO C++ 12.8 p15) これに対して Start 1 〜のほうで必要になる、既存の変数から関数引数への コピーは省略できない。 コピーの省略が許されているだけなので、実際にコピーされるかどうかは コンパイラやコンパイルオプションやコードの複雑さなどで変わる可能性がある。
343 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 11:38:09 ] >>342 コピーの省略が認められているとは知りませんでした 大変勉強になりました どうもありがとうございます
344 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 11:44:51 ] >>341 en.wikipedia.org/wiki/Return_value_optimization
345 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 12:09:15 ] >>341 g++ の場合、それで困るようなら -fno-elide-constructors を使うという手がある。 gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/C_002b_002b-Dialect-Options.html
346 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 15:53:02 ] >>345 分かりにくいオプション名だなあ。 RVO(Return Value Optimization)を使うべきだよね。
347 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 16:03:12 ] 頭にno-が付いてるおぷそんは嫌やな じゃあyea-があるのか?と思ったらないし
348 名前:341 mailto:sage [2010/04/21(水) 16:09:23 ] >>344-345 ご親切にありがとうございます
349 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 21:33:42 ] Benchmarking LLVM & Clang Against GCC 4.5 www.phoronix.com/scan.php?page=article&item=gcc_llvm_clang
350 名前:デフォルトの名無しさん [2010/04/26(月) 19:48:31 ] for (i=0;i<128;i++)c[i]=a[127-i]*b[127-i];のように配列に乗算して順番を 反転するコードもSIMD化されない。a[i]やb[i]への書き込みが禁止されているのなら、 for (i=0;i<128;i++)c[i]=a[i]*b[i];for (i=0;i<64;i++){buf=c[i];c[i]=c[127-i]; c[127-i]=buf;}としなければならない。
351 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 20:02:49 ] どんなコードを吐いてるの?
352 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 20:10:51 ] >>350 マジ? swap処理なんて最悪に遅いのだけど。sizeof(* c)が判らないからなんとも言えないけれど、 a*bを別に保存しておいて転送した方が速い希ガス。
353 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 20:30:01 ] 最適化オプションを知らないとか?
354 名前:デフォルトの名無しさん [2010/04/29(木) 02:14:24 ] MakefileでCPUの種類を判別してコンパイルオプションを変更したいのですが、 どのようにすればよいのでしょうか?
355 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 02:24:37 ] CPUの種類からコンパイルオプションを生成するコマンドを作ればいいんじゃない
356 名前:デフォルトの名無しさん [2010/04/29(木) 05:05:38 ] kwsk
357 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 05:20:55 ] configure書けば
358 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 13:00:52 ] CPUの種類が自分でわからないのに、コンパイラがわかるわけがない
359 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 16:38:25 ] MakefileでCPUの種類を判別するプログラムを実行すりゃいいだろ アホか
360 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 16:42:38 ] どこにあるんだよ
361 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 16:47:11 ] CPUの種類を判別する でググれ
362 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 16:56:36 ] 組み込み向けとかも判別してくれるのかよ x86用で個別にtuneしてもあんまりかわらんだろ
363 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 17:24:23 ] クレクレ言うな 自分で「やれ」
364 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 17:46:22 ] 探しているものは、たいてい見つかる 必死で探せばな
365 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 17:54:58 ] すべてを網羅するようなものはないみたいだ。
366 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 18:19:12 ] >>365 ある程度までならあるってことだ。 判別不能な分はunknownでいいだろ。 細かいところはあとでなんとかしろ。
367 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 20:44:54 ] 最適化してもデバッグ出来そうにないから、オプションつけても無駄のような
368 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 21:35:41 ] march=nativeで十分だって
369 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 00:09:29 ] >>366 でも90MHz Pentium で受け入れられるのに 550MHz K6-3 で蹴られるのは悲しい。
370 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 11:32:43 ] あむどはふりむかない
371 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 11:51:08 ] あむどは最適化しなくても早いって、言ってなかったけ
372 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 05:50:20 ] 4.4.4
373 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 07:21:14 ] >>371 Intel みたいに gcc にコミットできないから、 最適化できないのだよ。 Windows 以外では、gcc を1割最適化できれば、 クロックを1割早くするのと同じなのにな。
374 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 11:57:23 ] つってもなー、CPUの内部アーキテクチャ変わったらまた最適化変えなきゃだろ?
375 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 18:24:01 ] これまでのAMDのCPUはフル機能命令デコーダただ並べてたりクセの少ないアーキだから (Intelはフル機能と機能限定の組み合わせで省電力&面積削減の分キャッシュ増量可能に振ってる) x86一般最適化がしてあればそれ以上は大して高速化しないと思われ
376 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 19:18:08 ] いくらあむど贔屓に作ってもgccが1割最適化するなら 印р1割早くなる気がする
377 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 12:40:22 ] >>376 Intelへの最適化は結構進んでるよ。 もちろん icc ほどじゃないが。
378 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 02:52:03 ] あむどは各板でバカにされててかわいそうでつ gccぐらい夢みさせてあげてえ
379 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 16:00:40 ] て
380 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 18:05:00 ] >>378 もっさり、じゃないぶんましではないかと。
381 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 18:16:27 ] MinGW64_x64で手持ちのアプリを片っ端から64ビット化してるんだが __fastcall の指定で大量のワーニングが出たのでびっくりして調べてみたら x64は基本レジスタ渡しで __fastcall とかは指定しても意味がないということを初めて知った レジスタ渡しの方法がVC++と非互換らしいけどいつかどっちかに統一されるんだろうか