
GCC 4.8.0 リリース 34
ストーリー by headless
最新 部門より
最新 部門より
t-nissie 曰く、
GCC (GNU Compiler Collection) の最新版4.8.0がリリースされた(GCC 4.8 Release Series、変更点、本家/.)。
去年ストーリーになっていたとおり、ソースからGCCをビルドするにはC++コンパイラが必要になった。もちろん、たくさんのバグフィックスや新機能(Go言語1.1のさきどり実装など)も含まれている。ソースはRing Serverなどからダウンロード可能だ。みなさんはどんな用途にGCCをお使いだろうか。タレコミ子はFortranでシミュレーションのプログラムを書いてgfortranでコンパイルしている。OpenMPで並列化できるし、バグもすぐ直してくれるし、コンパイルも実行速度も十分速いし、大満足大感謝である。
バグ修正機能? (スコア:1)
バグもすぐ直してくれる
他がコンパイラの機能, 性質だったため,
最近のコンパイラはシンタックスエラーを暗黙的に直したりするのだと思った.
正しくは「コンパイラのバグを発見したとき, コミュニティが素早くコンパイラを修正してくれる」でOK?
Re: (スコア:0)
Intel Fortran用のライブラリとリンクできたらなぁ
(商用ソルバーのユーザーサブルーチン作るときに
使えれば良いのに)
Typo (スコア:0)
×たくさんのバグフィックッス
○たくさんのバグフィックス
# /.Jでは自動的にはなおりません
Re:Typo (スコア:1)
llvmのコンパイルのため! (スコア:0)
Re: (スコア:0)
実際Clangと比べてどっちが速いの?
#rtlは古い、今はllvmって流れなんだろけどさ
Re:llvmのコンパイルのため! (スコア:1)
ClangではまだOpenMPがサポートされていないので, そっち方面ではgccにかないませんが, それを除けばどっこいどっこい [phoronix.com]って感じみたいです.
Re: (スコア:0)
だめぢゃん
Re: (スコア:0)
2年くらい前に、LTO (Link Time Optimization) を gcc と llvm とで比べてみたときには、gcc の方が速い(コンパイル時間でなくて、生成された executable の実行時間)ような感じでしたが、今はどうですか?
勘違い (スコア:0)
「おー、あの圧縮解凍ソフト、メジャーになってないけどいまだにやってるんだ」
……GCAでした(ノ∀`*)
Re: (スコア:0)
今はどうなんだろ
Re:勘違い (スコア:1)
圧縮解凍ともに遅いし、その割には圧縮率それほどでもないし、
あまり採用の理由が浮かばないなあ。
ちなみに更新は2003/5/31で事実上ストップしているようです。
Re: (スコア:0)
身の回りで考えてみると、互換性・利便性のzipと性能の7zでもう十分だなー。
Re: (スコア:0)
LZHはもう完全に死んだのかなあ。
使用中止の呼びかけからもう2年近く経つけど。
Re: (スコア:0)
「あなたが宇宙GCCだと思うものが宇宙GCC」
バージョンが進んだからって生成されるコードが速くなるとは限らない (スコア:0)
4.7も4.8も、4.6で生成されたバイナリより速くならなかった(例外はあるけど)のが残念。
Re:バージョンが進んだからって生成されるコードが速くなるとは限らない (スコア:1)
gccって昔から生成されるコードの質がウリじゃない気がする。
Re: (スコア:0)
どんな一流のコンパイラでもソースがクソならどうしようもないんです
Re: (スコア:0)
Intelの次世代CPUはクロック向上なしでスタートするみたいだし、シングルスレッドでのIPC向上は以前から限界に近い状況だと言われてたので、
これからの時代はスパコンみたいにコンパイラの性能込みの総合力が求められるようになってきたんでしょうね。
ゲームやマルチメディアでは以前からSSEやAVXが使われてきましたが、新しいCPUの性能を引き出すにはコードの書き換えが必要でした。
これからはGenericなアーキテクチャ向けのバイナリでは性能的に見劣りするようになるんではないでしょうか。
Intelが挑発的な比較広告 [intel.com]打ってましたが、ICCはターゲットCPUに特化した
ベクタ化・並列化性能を生かしているのでしょう。
Re:gccの初物は危なすぎっていうか… (スコア:5, 参考になる)
Re: (スコア:0)
k=++k; を思い出したw
Re:gccの初物は危なすぎっていうか… (スコア:5, 参考になる)
56015 [gnu.org]はよく読んでもらえばわかりますが、
(0.1+0.2i)*i = -0.2+0.1i
が
-0.2-0.2i
になってしまうという正真正銘のバグで、開発者はそれを直してくれました。
また、SPECがお粗末なコード [blogspot.jp]みたいですよ。
それに、日記 [srad.jp]にコメントをもらいましたが、リリース直前に土壇場で修正が入ったそうです。
love && peace && free_software
t-nissie
Re:gccの初物は危なすぎっていうか… (スコア:1)
> # 「gccって-O3 -ffast-mathつけてビルドして結果が変わったらバグ扱いにしてくれるんだってよ」ってGentoo使いに教えてやりたいね(笑)
Gentoo使いだけど、ffast-mathの意味くらいは理解してる人の方が多いかと。
http://en.gentoo-wiki.com/wiki/Safe_Cflags [gentoo-wiki.com]
Re: (スコア:0)
Fortranは規格違反のコード書いたら鼻から悪魔が出てもいいなんて頭おかしい仕様じゃないから(むしろそんなのはC/C++くらいだろ)。
Re: (スコア:0)
そこまで解析して最適化するなら、もうちょっと先まで解析してよとは思いますね
※昔は無意味なループ削除とかやらなかったのに…ストールマン曰く「プログラマーは無意味なループを書かない」、今回の最適化はここからかけ離れてますね
Re:gccの初物は危なすぎっていうか… (スコア:1)
警告出すんだから十分じゃないの、規格違反のコードのために、開発リソースとコンパイル時間を浪費しないといけないのさ。
件のコードなら10秒もあれば修正できるよね。今時縦一行増えても別に困らんし、
Re: (スコア:0)
ループは削除してないし
while (1) {
f();
if (p()) break;
g();
}
みたいなコードで毎回1と0を比べて欲しいのかい
Re: (スコア:0)
ループ削除は例です
現実的にwhile(1)じゃないコードをwhile(1)扱いしてるのが問題なわけで
Re:gccの初物は危なすぎっていうか… (スコア:1)
規格に則っていない以上、どう解釈されても文句は言えないでしょ。
GCCは、配列a[n]のn番目のアクセスしなくていいよう辻褄を合わせただけ。n番目にアクセスしないならi<nの判定式は必要ない。
プログラマーは、別の方法でループを抜ける方法を実装できるわけだし、実際している場合もある、その場合判定は2つも要らない。。
Re: (スコア:0)
フェイルセーフにしなかったって事ですね
まあ仕様の穴をどうにかしろって事なんでしょうが、穴のない仕様を作るも結構たいへんですし
実装者の趣味・趣向が問われるところですね
プログラマが不正なアクセスしない事を把握した上でコードを簡易化するために配列を「1」オーバーするコードを書く場合もあると思いますが
Re: (スコア:0)
文脈がわからず間違ったことを言っていたらすみません。
>仕様の穴をどうにかしろって事
これは、C言語のということでしょうか?
であれば、C言語の仕様として、「不定」であると規定されているので、不定なコードを書いている以上、どのように振る舞っても問題ないと思います。
他の方が引用しているように、 http://www.spec.org/cpu2006/Docs/faq.html#Run.05 [spec.org] SPEC にある
> Although the code pattern does not follow the C99 standard (See section 6.5.6/8), it is at minimum arguable that the code fragment is compliant under the C89 stan
Re: (スコア:0)
>プログラマが不正なアクセスしない事を把握した上でコードを簡易化するために配列を「1」オーバーするコードを書く場合もあると思いますが
ありません。というかどうやって把握するのでしょうか?
Re:gccの初物は危なすぎっていうか… (スコア:1)
プログラマが不正なアクセスしない事を把握した上でコードを簡易化するために配列を「1」オーバーするコードを書く場合もあると思いますが
それは元のコードを見た上で言っているのか?
for文の再初期化式の中で、iをインクリメントするのと同時に配列a[i]を変数に代入するなんてことしているから。
iがn以上になった直後に不正なアクセスが発生する。
当然それをプログラマーが理解していないはずはないから。GCCは無限ループと解釈する
それに勘違いしているみたいだけどさ、未定義動作は単なる仕様の穴ではない、
未定義動作が存在するから、コンパイラは強力に最適化を効かせられる面もある。鼻から悪魔が出て来るってのは、その副作用。
http://blog-ja.intransient.info/2011/05/c-13.html [intransient.info]