のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,837人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレGCCについて part9

    gcc スレッド一覧へ / gcc とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - std:map + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    301 : デフォルトの名無 - 2010/03/18(木) 09:48:55 (+74,+29,-33)
    それはそのライブラリ関数を使う側にとっての関心事項。
    >>285のは他プロセスないしカーネルにとっての関心事項。
    別の話だね。
    302 : デフォルトの名無 - 2010/03/18(木) 10:28:13 (+2,-25,-21)
    他プロセスがmallocおよびその下請システムコールを呼ぶ場合の話でしょ?
    303 : デフォルトの名無 - 2010/03/19(金) 07:04:48 (+17,-11,-2)
    >>300
    OSじゃなく処理系だろ
    304 : デフォルトの名無 - 2010/03/20(土) 09:55:19 (-1,-29,-36)
    CPU Frequencyをリアルタイムで取得するgoodな方法を教えてくれ
    305 : デフォルトの名無 - 2010/03/20(土) 10:10:30 (+23,-28,+0)
    RDTSC
    306 : デフォルトの名無 - 2010/03/23(火) 22:46:45 (+12,-30,-59)
    プリプロセッサの処理中にメッセージを表示したいのですが、
    gccでも可能でしょうか?
    Visual C++ では #pragma message("msg") などと書けばできたのですが。
    307 : デフォルトの名無 - 2010/03/24(水) 00:12:02 (+11,-30,-43)
    >>306
    http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas
    によると、
    #pragma message "Compiling " __FILE__ "..."
    とか出来るっぽいぜ
    308 : デフォルトの名無 - 2010/03/24(水) 17:22:22 (+60,+29,-1)
    >>305
    今はだめだろ。CPUいっぱいあるから。
    309 : デフォルトの名無 - 2010/03/24(水) 19:57:17 (+12,-15,-45)
    ついでにいうとCPU, OSの組み合わせによってはRDTSCがエミュになってしまい
    数百クロックを要する。
    だがそのような環境では逆に全コアでタイマカウンタが一貫してたりする。
    310 : 306 - 2010/03/25(木) 21:44:47 (+3,-29,-33)
    >>307
    ありがとうございます。しかし試してみたところダメでした。
    -Wunknown-pragmasでコンパイルしたら「無視しました」みたいなメッセージが出ました。
    gccのバージョンによるんですかね。4.3.2でした。
    311 : デフォルトの名無 - 2010/03/27(土) 00:23:57 (+4,-30,-148)
    >>307
    #warningで出来るかなと思ったら引数のマクロ展開はしないとか
    ふざけた事を抜かしているのであまり使えないな。 この程度は
    出来るけど。

    #warning Message

    $ gcc -c source.c
    source.c:1:2: warning: #warning Message

    waring:#warning が冗長で醜いなあw

    312 : デフォルトの名無 - 2010/03/27(土) 09:37:53 (+24,-3,-7)
    俺もそれは浮かんだが、-Werrorを入れてる環境だと止まるので完全ではないわな
    313 : デフォルトの名無 - 2010/04/01(木) 23:33:33 (+2,-29,-41)
    Xeon 5500って、最適化オプションの名前って何ですか?

    nocona?
    core2?
    314 : デフォルトの名無 - 2010/04/02(金) 07:35:10 (-1,-29,-17)
    >>313
    たしか~

    nehalem-exかNorthwood
    315 : デフォルトの名無 - 2010/04/02(金) 10:42:05 (+57,+29,-19)
    最適化してもあまり変わらないんだけどな
    SSE2を使うだけで十分だと思う
    316 : デフォルトの名無 - 2010/04/02(金) 21:31:49 (-6,-29,+0)
    nativeでいいよ
    317 : デフォルトの名無 - 2010/04/07(水) 10:20:40 (-6,-29,-2)
    4.5.0-RC-20100406
    318 : デフォルトの名無 - 2010/04/14(水) 15:49:00 (+3,-30,-102)
    GCC4.4.1は-msse・最大最適化でコンパイルすると、float演算はSSE命令により
    自動ベクトル化されるが、整数演算はベクトル化されない。整数移動はベクトル化
    されるが、float用SSE命令が使われていた。GCCはMMXや3DNOWコードを吐かないの?
    319 : デフォルトの名無 - 2010/04/14(水) 21:08:15 (-6,-29,+0)
    GCC 4.5.0 release
    320 : デフォルトの名無 - 2010/04/14(水) 21:43:24 (+31,+3,-55)
    MMXは基本的にshort以下の整数に使うもんだし
    飽和演算とか利用してこそだし
    あまり自動最適化には向かないんじゃない
    321 : デフォルトの名無 - 2010/04/15(木) 01:44:02 (+57,+29,-9)
    MMXは切替えなくちゃ使えないから使わないみたいなのを読んだような気がする
    322 : デフォルトの名無 - 2010/04/15(木) 07:15:21 (+42,+14,-15)
    SSEの整数命令使えばいいんじゃない
    323 : デフォルトの名無 - 2010/04/15(木) 12:53:50 (+46,+18,-23)
    整数はベクタ化の恩恵を受けにくいからじゃないかな。
    単なるコピーならfloat32でも同じことだし。
    324 : デフォルトの名無 - 2010/04/15(木) 22:23:12 (+2,-29,-24)
    -mmmxとか-m3dnowじゃないと使わないんじゃない
    SSEで全部まかなえるわけだし
    325 : デフォルトの名無 - 2010/04/15(木) 23:35:38 (-1,-29,-53)
    >>324
    普通のSSEには整数命令入っていないよ
    -mmmxや-m3dnowでもMMXレジスタは使っていなかった。
    326 : デフォルトの名無 - 2010/04/15(木) 23:52:09 (-1,-29,-28)
    alignmentしてないと速くなんないからじゃね?
    327 : デフォルトの名無 - 2010/04/16(金) 00:02:00 (+17,-10,-18)
    普通のSSEじゃないだろ最初のSSEだろ
    328 : デフォルトの名無 - 2010/04/16(金) 20:29:37 (+22,-5,-5)
    Pen4あたりから入り始めたんだっけ?
    329 : デフォルトの名無 - 2010/04/17(土) 19:38:11 (-1,-29,-16)
    何が? 最初のSSEはPenIIIだよ。
    330 : デフォルトの名無 - 2010/04/18(日) 01:19:50 (-6,-29,-19)
    pen3のsseは整数演算できない
    331 : デフォルトの名無 - 2010/04/18(日) 02:33:27 (+3,-30,-137)
    GCC4が登場した頃には整数SIMDができるSSE2の登場から数年経過しており、MMXに
    よる整数SIMDの需要が少なかったからか?さらに、GCC4登場初期はスマートフォンや
    PDAにiwmmxtが搭載されていたが、そもそも当時はスマートフォンが普及しておらず
    MMX系の需要は少なかったからか。で、今ではスマートフォンが普及しgccに
    armの128bit自動ベクトル化が搭載されたが、既に時代遅れのiwmmxtは対象外
    という事か。
    332 : デフォルトの名無 - 2010/04/18(日) 14:05:30 (+35,+1,-6)
    gccは商用コンパイラにどれくらい負けますか?
    333 : デフォルトの名無 - 2010/04/18(日) 14:06:59 (+5,-29,-9)
    MMXはintに大体適用できないから
    一生懸命対応するメリットが少ないんじゃないの
    334 : デフォルトの名無 - 2010/04/19(月) 03:58:34 (+6,-29,-88)
    >>332
    あらゆるCPUに同じコアで対応しているから、乗算結果の上位の取り出しや飽和演算で
    最適コードを吐かない、MMXのように切り替えが必要な処理は実装されないんじゃね?
    >>333
    iwmmxtならそもそもfpu搭載していないので切り替え不要だし、加減算やshort乗算には効果あるよ
    335 : デフォルトの名無 - 2010/04/19(月) 17:17:45 (+64,+29,-7)
    gcc4って最初かなりすごかったのに、後からどんどん遅くbuggyになってるよね
    プロプライエタリの工作員が本気出し始めたのかな
    336 : デフォルトの名無 - 2010/04/19(月) 17:19:45 (-1,-29,-8)
    4.5からbackendをplugin化出来るようになったからいつでもllvmに逃げられるようになったけどね
    337 : デフォルトの名無 - 2010/04/19(月) 21:03:17 (-2,-30,-19)
    Benchmarks Of GCC 4.5.0 Compiler Performance
    http://www.phoronix.com/scan.php?page=article&item=gcc_45_benchmarks
    338 : デフォルトの名無 - 2010/04/21(水) 02:45:57 (+37,-30,+0)
    ポインタ渡しの関数内で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 : デフォルトの名無 - 2010/04/21(水) 09:15:33 (+45,+27,-2)
    十分簡単だろ。
    340 : デフォルトの名無 - 2010/04/21(水) 10:53:16 (+46,+18,-12)
    >>338
    マクロ使えよ
    341 : デフォルトの名無 - 2010/04/21(水) 11:15:06 (+52,-30,-92)
    http://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 : デフォルトの名無 - 2010/04/21(水) 11:33:58 (+38,-29,-109)
    >>341
    Start 2 ~のように戻り値と同じ型のローカル変数を return した場合、
    C++ の規格でコピーの省略が許されている。 (ISO C++ 12.8 p15)

    これに対して Start 1 ~のほうで必要になる、既存の変数から関数引数への
    コピーは省略できない。

    コピーの省略が許されているだけなので、実際にコピーされるかどうかは
    コンパイラやコンパイルオプションやコードの複雑さなどで変わる可能性がある。
    343 : デフォルトの名無 - 2010/04/21(水) 11:38:09 (+63,+29,-24)
    >>342
    コピーの省略が認められているとは知りませんでした
    大変勉強になりました
    どうもありがとうございます
    344 : デフォルトの名無 - 2010/04/21(水) 11:44:51 (+87,+30,+0)
    345 : デフォルトの名無 - 2010/04/21(水) 12:09:15 (+7,-30,-21)
    >>341
    g++ の場合、それで困るようなら -fno-elide-constructors を使うという手がある。
    http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/C_002b_002b-Dialect-Options.html
    346 : デフォルトの名無 - 2010/04/21(水) 15:53:02 (+0,-29,-6)
    >>345
    分かりにくいオプション名だなあ。
    RVO(Return Value Optimization)を使うべきだよね。
    347 : デフォルトの名無 - 2010/04/21(水) 16:03:12 (+57,+29,-7)
    頭にno-が付いてるおぷそんは嫌やな
    じゃあyea-があるのか?と思ったらないし
    348 : 341 - 2010/04/21(水) 16:09:23 (+69,+29,-1)
    >>344-345
    ご親切にありがとうございます
    349 : デフォルトの名無 - 2010/04/21(水) 21:33:42 (-2,-30,-29)
    Benchmarking LLVM & Clang Against GCC 4.5
    http://www.phoronix.com/scan.php?page=article&item=gcc_llvm_clang
    350 : デフォルトの名無 - 2010/04/26(月) 19:48:31 (+7,-30,-137)
    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;}としなければならない。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / gcc スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - std:map + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について