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

    元スレGCCについて part9

    gcc覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - std:map + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    301 = :

    それはそのライブラリ関数を使う側にとっての関心事項。
    >>285のは他プロセスないしカーネルにとっての関心事項。
    別の話だね。

    302 = :

    他プロセスがmallocおよびその下請システムコールを呼ぶ場合の話でしょ?

    303 = :

    >>300
    OSじゃなく処理系だろ

    305 = :

    RDTSC

    306 = :

    プリプロセッサの処理中にメッセージを表示したいのですが、
    gccでも可能でしょうか?
    Visual C++ では #pragma message("msg") などと書けばできたのですが。

    307 = :

    >>306
    http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas
    によると、
    #pragma message "Compiling " __FILE__ "..."
    とか出来るっぽいぜ

    308 = :

    >>305
    今はだめだろ。CPUいっぱいあるから。

    309 = :

    ついでにいうとCPU, OSの組み合わせによってはRDTSCがエミュになってしまい
    数百クロックを要する。
    だがそのような環境では逆に全コアでタイマカウンタが一貫してたりする。

    310 = :

    >>307
    ありがとうございます。しかし試してみたところダメでした。
    -Wunknown-pragmasでコンパイルしたら「無視しました」みたいなメッセージが出ました。
    gccのバージョンによるんですかね。4.3.2でした。

    311 = :

    >>307
    #warningで出来るかなと思ったら引数のマクロ展開はしないとか
    ふざけた事を抜かしているのであまり使えないな。 この程度は
    出来るけど。

    #warning Message

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

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

    312 = :

    俺もそれは浮かんだが、-Werrorを入れてる環境だと止まるので完全ではないわな

    313 = :

    Xeon 5500って、最適化オプションの名前って何ですか?

    nocona?
    core2?

    315 = :

    最適化してもあまり変わらないんだけどな
    SSE2を使うだけで十分だと思う

    318 = :

    GCC4.4.1は-msse・最大最適化でコンパイルすると、float演算はSSE命令により
    自動ベクトル化されるが、整数演算はベクトル化されない。整数移動はベクトル化
    されるが、float用SSE命令が使われていた。GCCはMMXや3DNOWコードを吐かないの?

    320 = :

    MMXは基本的にshort以下の整数に使うもんだし
    飽和演算とか利用してこそだし
    あまり自動最適化には向かないんじゃない

    321 = :

    MMXは切替えなくちゃ使えないから使わないみたいなのを読んだような気がする

    322 = :

    SSEの整数命令使えばいいんじゃない

    323 = :

    整数はベクタ化の恩恵を受けにくいからじゃないかな。
    単なるコピーならfloat32でも同じことだし。

    324 = :

    -mmmxとか-m3dnowじゃないと使わないんじゃない
    SSEで全部まかなえるわけだし

    327 = :

    普通のSSEじゃないだろ最初のSSEだろ

    328 = :

    Pen4あたりから入り始めたんだっけ?

    331 = :

    GCC4が登場した頃には整数SIMDができるSSE2の登場から数年経過しており、MMXに
    よる整数SIMDの需要が少なかったからか?さらに、GCC4登場初期はスマートフォンや
    PDAにiwmmxtが搭載されていたが、そもそも当時はスマートフォンが普及しておらず
    MMX系の需要は少なかったからか。で、今ではスマートフォンが普及しgccに
    armの128bit自動ベクトル化が搭載されたが、既に時代遅れのiwmmxtは対象外
    という事か。

    332 = :

    gccは商用コンパイラにどれくらい負けますか?

    333 = :

    MMXはintに大体適用できないから
    一生懸命対応するメリットが少ないんじゃないの

    334 = :

    >>332
    あらゆるCPUに同じコアで対応しているから、乗算結果の上位の取り出しや飽和演算で
    最適コードを吐かない、MMXのように切り替えが必要な処理は実装されないんじゃね?
    >>333
    iwmmxtならそもそもfpu搭載していないので切り替え不要だし、加減算やshort乗算には効果あるよ

    335 = :

    gcc4って最初かなりすごかったのに、後からどんどん遅くbuggyになってるよね
    プロプライエタリの工作員が本気出し始めたのかな

    338 = :

    ポインタ渡しの関数内で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 = :

    十分簡単だろ。

    340 = :

    >>338
    マクロ使えよ

    341 = :

    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 = :

    >>341
    Start 2 ~のように戻り値と同じ型のローカル変数を return した場合、
    C++ の規格でコピーの省略が許されている。 (ISO C++ 12.8 p15)

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

    コピーの省略が許されているだけなので、実際にコピーされるかどうかは
    コンパイラやコンパイルオプションやコードの複雑さなどで変わる可能性がある。

    343 = :

    >>342
    コピーの省略が認められているとは知りませんでした
    大変勉強になりました
    どうもありがとうございます

    344 = :

    >>341
    http://en.wikipedia.org/wiki/Return_value_optimization

    345 = :

    >>341
    g++ の場合、それで困るようなら -fno-elide-constructors を使うという手がある。
    http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/C_002b_002b-Dialect-Options.html

    347 = :

    頭にno-が付いてるおぷそんは嫌やな
    じゃあyea-があるのか?と思ったらないし

    348 = :

    >>344-345
    ご親切にありがとうございます

    350 = :

    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 + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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