- 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
- 248 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 03:13:31 ]
- >>231=>>234=>>245=>>247だとすると、
何のプラットフォームでどんなものを作ってるのか、大体予想つくな
- 249 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 21:20:29 ]
- >>248
こういう発言ってついったの方が楽しいのにね
- 250 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 07:09:00 ]
- 笑われてるだけでしょ
- 251 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 14:34:01 ]
- >>250
笑うなよ
- 252 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 18:55:54 ]
- gccスレでぐっちてる時点で...
- 253 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 16:26:44 ]
- >233
ARM固有の最適化部分のメインコミッターのほとんどはARM社からお金もらっている人々だよ 最適化で、いつまでたってもARM純正に勝てないのはARM社がコントロールしてるから ARMのプラットホーム使わないといけない人のほとんどは、gccの中身なんて弄ってる余裕が無いよ ARMを使ったPCが普及すれば、変わると思うけど
- 254 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 22:12:55 ]
- 昔、玄箱スレでgccはARMよりPPCのが効率よいコード吐くって話があったけど、
状況変わらず? ARMの命令セットがやや特殊なせいなのかな
- 255 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 22:21:04 ]
- >>254
自社のコンパイラより効率的なバイナリを 生成するコンパイラは、排除するって明言しているから どうにもならないよ。
- 256 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 07:57:43 ]
- gccの文字列処理おせーんだよ
なんでgcc3.4でSSE4.2に対応してねーんだよバカ
- 257 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 08:01:10 ]
- おそい書き方したお前が悪い
- 258 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 12:45:50 ]
- >>256
gcc4使えばいいじゃん。
- 259 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 02:57:51 ]
- pc1:
2.95.3 3.3.6 pc2: 4.3.4 4.4.3 二つずつ入れてて計4つ >>256 使い分けりゃいいじゃん。
- 260 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 14:06:45 ]
- gccの文字列処理ってどこを指すの?
- 261 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 16:41:37 ]
- さあ、ビルトイン関数のことかも
- 262 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 10:12:29 ]
- >>260
printfの警告とか。
- 263 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 13:27:36 ]
- ストリーミング命令使ったstr系関数の変態最適化ってやってるんだっけ
- 264 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 00:17:34 ]
- gccは
char buf[256] = {0};って記述しても 0に初期化されることはない 腐ってやがる
- 265 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 00:31:09 ]
- >264
バージョンはいくつですか
- 266 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 03:05:21 ]
- >>264 んなこたーない
- 267 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 04:30:31 ]
- 起動時にbssをクリアしてないとか
- 268 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:19:47 ]
- >>264
いつの時代のgcc?
- 269 名前:デフォルトの名無しさん [2010/03/10(水) 18:20:46 ]
- char buf[256] = {0};
で、後ろの255バイトも自動的にゼロクリアされるのは Cの仕様?それともgccのやさしさ?
- 270 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 19:20:51 ]
- >>269
Cの仕様
- 271 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 22:41:05 ]
- >>269
{1}のケースもどうなるか理解しといた方がいいよ。 > the remainder of the aggregate shall be initialized implicitly > the same as objects that have static storage duration.
- 272 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 05:07:16 ]
- binutils 2.20.1
- 273 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 07:47:11 ]
- binutils-2.16.1
- 274 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:40:41 ]
- mallocだと0フィルされる保証はない?
- 275 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:53:06 ]
- 普通、確保されるだけじゃないの?
callocなら0フィルされると思うけど
- 276 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:53:09 ]
- 今時gcc使ってるやつは莫迦
- 277 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:21:50 ]
- >276
は、何を使ってるのよ
- 278 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:00:29 ]
- sourceforge.jp/projects/freshmeat_ack/
かな?
- 279 名前:デフォルトの名無しさん [2010/03/15(月) 00:17:30 ]
- codesourceryのg++ってdo_global_ctorsとかstartup関連がないみたいなんですけど、
自分で実装するとき、.init_arrのグローバルコンストラクタを呼び出す以外にやることありますかね? あと、libc(newlib)の初期化とかもやらないといけなさそうですが、方法がわからない。 codesourceryでstl使ったプログラムかけた人いたら教えてください。
- 280 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 10:56:04 ]
- >>274
無い。 セキュリティホールになるってんでゼロ梅してた時期もあったけど。
- 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
ご親切にありがとうございます
|

|