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

    私的良スレ書庫

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

    元スレcellプログラミングしちゃいなよ3

    cell スレッド一覧へ / cell とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    801 : 579 - 2009/01/23(金) 21:43:31 (+43,-30,+0)
    ORIGNAL: sum=26842941, 20235458 ticks
    MINE: sum=26842941, 296432 ticks
    ORIGNAL: sum=ff298dc7, 29209150 ticks
    MINE: sum=ff298dc7, 416484 ticks
    ORIGNAL: sum=e41976b4, 21287451 ticks
    MINE: sum=e41976b4, 359310 ticks
    ORIGNAL: sum=1d20a3cf, 19895914 ticks
    MINE: sum=1d20a3cf, 271577 ticks
    ORIGNAL: sum=7ab6f153, 1012083 ticks
    MINE: sum=7ab6f153, 80442 ticks
    ORIGNAL: sum=d528faae, 14662211 ticks
    MINE: sum=d528faae, 226395 ticks
    ORIGNAL: sum=f2e9b16f, 20421921 ticks
    MINE: sum=f2e9b16f, 285473 ticks
    ORIGNAL: sum=c38c3ffb, 17745083 ticks
    MINE: sum=c38c3ffb, 312869 ticks
    ORIGNAL: sum=4a476dd4, 17155127 ticks
    MINE: sum=4a476dd4, 268986 ticks
    ORIGNAL: sum=817388cd, 412802 ticks
    MINE: sum=817388cd, 60522 ticks

    課題アナル(仮称)間違えていたよ orz

    ところで、いつまでも仮称だとアナルが可愛そうなので、正式名称を
    ハックtheアナルに決めたよ。ついでに処理系と実装も変えたけど。
    802 : 579 - 2009/01/23(金) 21:44:09 (+36,-30,+0)
    $ diff mt19937ar.sep/mt19937ar.c~ mt19937ar.sep/mt19937ar.c
    52c52
    < #define MATRIX_A 0x9908b0dfUL /* constant vector a */
    ---
    > #define MATRIX_A 0x9908b0cfUL /* constant vector a */

    $ uname -mrsv
    Linux 2.6.18-6-powerpc64 #1 SMP Fri Dec 12 23:54:31 UTC 2008 ppc64

    $ cat /proc/cpuinfo
    processor : 0
    cpu : PPC970FX, altivec supported
    clock : 2700.000000MHz
    revision : 3.1 (pvr 003c 0301)

    processor : 1
    cpu : PPC970FX, altivec supported
    clock : 2700.000000MHz
    revision : 3.1 (pvr 003c 0301)

    timebase : 33333333
    platform : PowerMac
    machine : PowerMac7,3
    motherboard : PowerMac7,3 MacRISC4 Power Macintosh
    detected as : 336 (PowerMac G5)
    pmac flags : 00000000
    L2 cache : 512K unified
    pmac-generation : NewWorld

    ですが、何か?
    803 : 579 - 2009/01/23(金) 21:45:05 (+104,+29,-266)
    ちなみに、実装は C99 な。本当の意味でのな。altivec も使っていない。
    32bit ビットスライスwでこの程度。端数の処理はまったく最適化していない。

    SIMD 化したらもっと早くなるかなぁ(棒

    >>720
    >突っ込みどころのデパート。詭弁の集大成。
    で、
    >>729
    >だからTempering前の値をいくら「加算」しても無意味なんだ。
    言いたいことはそれだけ?

    >>579
    >tempering 前の「とある値」を集計する。GF(2)の中で。
    >すると、tempering (相当の操作)は一回で済む。
    誰も tempering 前の値を「そのまま」加算するとは言っていないぜ?
    加算するとも言っていない。首尾一貫してるだろ?

    >>730
    >彼は全然役に立たないことしか言ってない。
    オマエモナー

    >>771
    そんなに俺のアナル大きい?

    >>781=202
    俺?優勝する可能性?ないよ。出ないしw
    804 : デフォルトの名無 - 2009/01/23(金) 21:56:21 (+61,+29,-24)
    >>801
    おいORIGANALが本来のターゲットより一桁以上速いぞw
    でも、多項式取り違えてたとはいえ、すげえ伸び率だね。
    805 : ,,・´∀`・, - 2009/01/23(金) 22:05:25 (+81,+19,-8)
    よくできた捏造だな
    でもターゲットはPowerPCじゃなくて「SPU」
    806 : デフォルトの名無 - 2009/01/23(金) 22:08:25 (+51,+28,-7)
    よ、よく出来てるのか?w
    807 : デフォルトの名無 - 2009/01/23(金) 22:09:26 (+57,+29,-16)
    > 俺?優勝する可能性?ないよ。出ないしw
    これを書くのはもうちょっとあとの方が面白かったかなw
    808 : デフォルトの名無 - 2009/01/23(金) 22:09:33 (+73,+29,-4)
    >>805
    たしかに>>732より、よくできてるのは間違いないな
    809 : ,,・´∀`・, - 2009/01/23(金) 22:11:27 (+52,+29,-3)
    ゲハ板で発狂してるアスペル君が勝手に勘違いしただけだろそれ

    810 : デフォルトの名無 - 2009/01/23(金) 22:12:40 (+61,+29,-5)
    さすがに俺もそう思う。団子はウザイけど >>732 は無罪。
    811 : 808 - 2009/01/23(金) 22:15:00 (+52,+29,-1)
    そうだったのか。団子ごめん
    812 : ,,・´∀`・, - 2009/01/23(金) 22:16:23 (+62,+29,-83)
    PPUとSPUが同じコードシーケンスで実行できるとかアホなこと言いやがんだもん
    PPUに18issueの命令帯域が必要になるぞって言ったら、十分とかいいやがるし

    しまいには、SSEがx86のフォーマットとはかけ離れてるとかwww
    あの命令フォーマットがx86でなくてなんなんだよ
    813 : デフォルトの名無 - 2009/01/23(金) 22:37:38 (+63,+30,-45)
    大丈夫だよ。あのコピペで団子は間違ってないってみんな分かってるから。

    団子が間違いを認めなくてウザい事もかなりあるがな。
    あと接頭辞のように付いてくる「知り合いに誰々がいる」って下りもウザい。
    知り合いが有名なだけで、別にスネ夫が偉いわけじゃないだろう。
    814 : デフォルトの名無 - 2009/01/23(金) 22:38:02 (+94,+29,-59)
    「サマリだけ求めるショートサーキット禁止」
    とか胴元が慌てて言い出したら爽快だな。
    つか出題者があたまわるいってことになるが。
    815 : ,,・´∀`・, - 2009/01/23(金) 22:45:01 (+75,+29,-77)
    俺もそろそろトランザム(笑)発動しちゃおうかな
    そろそろ勘のいい人は愚直な方法がいくらばかばかしいことに気づいてるかも知れない頃だし

    >>814
    関数抜ける前にMTの配列に書き戻しさえすれば等価な実装でもかまわないのでは?
    816 : デフォルトの名無 - 2009/01/23(金) 22:59:23 (+94,+29,-19)
    ルールを根本変更されると正直悲しい。そしてキツい。
    単なるチキンレースなら降りる。
    817 : ,,・´∀`・, - 2009/01/23(金) 23:18:26 (+62,+29,-87)
    課題見直しで延期とかになったら面白い。

    MTの配列を毎回舐める必要がない前提ならトランザム(笑)可能なことは気づいてた。
    それをやるとアルゴリズムが根本から変わるけど

    コアループ抜けてからMT配列に書き戻せばちゃんと再実行も可能。
    818 : デフォルトの名無 - 2009/01/23(金) 23:32:24 (+66,+29,+0)
    >>734の言うとおりになったな
    819 : ,,・´∀`・, - 2009/01/23(金) 23:39:57 (+95,+29,-57)
    俺もロジックジェネレータ改造したそろそろ走らせようかな
    テキトーに当たり付けたパターンを再帰で全部試す馬鹿な方法使ってるから最適に近い方法見つけるのに1ヶ月くらいかかる。
    俺の試算だと
    820 : 202 - 2009/01/24(土) 00:00:50 (+178,+30,-135)
    ごめん、もうプログラムは書かないから、言わせてくれ。

    >>816
    そもそも、課題は乱数生成を最適化しろというもので、最初からどこまでサイクル数を
    減らせるかというチキンレースなんだぞ?

    >>579の方法はただのチートで、ルールが「チェックサム合ってれば乱数生成しなくても良い」
    ってなったらそれこそ根本的なルール変更だ。

    俺はHack the Cellに参加したんだ。単なる数学コンテストなら降りる。
    821 : デフォルトの名無 - 2009/01/24(土) 00:18:10 (+94,+29,-10)
    様々な分野に対する知見が求められる、それだけのことじゃないか?
    822 : 202 - 2009/01/24(土) 00:22:59 (+75,+29,-78)
    >>821
    課題を100回読んでよ。 つhttp://cell.fixstars.com/challenge/challenge.html
    どこに「乱数のチェックサムを計算してください」って書いてある?

    「課題は、メルセンヌ・ツイスタの最適化です。」
    「メルセンヌ・ツイスタの実装 mt19937ar.c と同じ乱数列を生成してください。」
    823 : デフォルトの名無 - 2009/01/24(土) 00:25:25 (+57,+29,-50)
    しかしCellって本当に早い?使ったことないけど
    フィクターのサイトにあるパフォーマス例と同じ処理をXeonで組んでみたら
    10倍速いのできたんだが・・・
    824 : デフォルトの名無 - 2009/01/24(土) 00:29:55 (+87,+29,-23)
    >>693だけど
    なんか裏で本気出してる間にお通夜モードになっとる
    とりあえず12.0まではきた
    まだ0.3位は詰めれるかもしれない
    で、大会中止とかルール変更とかなったらおれはどうすればいいんだ
    825 : ,,・´∀`・, - 2009/01/24(土) 00:30:33 (+147,+30,+0)
    >>820
    おちつけ

    > ルールが「チェックサム合ってれば乱数生成しなくても良い」

    乱数なんて所詮擬似的なモノです。
    mt[]の配列以外のワークメモリを別に確保して、その上で乱数生成もやる
    それが認められるなら高速化はいくらでもやりようがある。

    CUDAの1SMあたりのレジスタ本数は32ビット×8192=32KB
    配列の要素を全部レジスタに割り当てて計算し、あとでメモリ上のmt[]に書き戻した方が効率がいい。
    mt[]の配列をレジスタに割り当てて計算したらMT互換ではないのか?決してそんなことではない。
    レジスタに余裕があるアーキテクチャでは、最適化の過程でそんなことは自動でやってくれる
    処理系も存在する。

    【というわけで】
    mt[]を舐めることさえやめれば、いくらかは高速化の余地があるよ。

    たとえば、コアループの内側でmt[]のいくつかレジスタに割り当ててしまって、
    全部レジスタ上でこね回すとすれば、128ビット×156本のレジスタが必要になり、SPUの128本本数では足りない。
    そんなことをSPUで実際やれば56本固定で食っちまう。せいぜいロード・ストア回数が減るくらいしか実用性はないし
    アンロールに使えるワークレジスタが実質的に減ってしまって逆に性能低下になりかねない。

    そこでだ、レジスタを節約しつつ、スループットを稼げるように、データのレイアウトそのものを弄ってしまえばいいんじゃないかと。
    ワークメモリはレジスタに割当て続ける必要はなく、LS上の空きにスワップしていい。
    もちろん、これはさんすうやではなく、計算機屋としての理屈だ。


    どこまでが王道でどこからが邪道なのか、無用な線引きを脳内で作ってしまっても「勝ち」はないわけで
    とりあえず中の人に明確化してもらいたいところだ。
    俺はgcc43って指定してあるのにアセンブラ使用可になった時点で最早ルールなんてないもんだと思ったが。
    826 : ,,・´∀`・, - 2009/01/24(土) 00:33:09 (+50,+22,-14)
    ごめん文が微妙に抜けてた

    ×そんなことをSPUで実際やれば56本固定で食っちまう。
    ○224要素くらいまでを割り当てるにしても、そんなことをSPUで実際やれば56本固定で食っちまう。
    827 : 202 - 2009/01/24(土) 00:38:54 (+124,+29,-79)
    >>825
    別に、mt[] をいじるなとは言ってないし、一部の計算をメモリ上じゃなくてレジスタ上で
    やるのは俺もやってる。

    だが、>>579はそもそもMT擬似乱数の生成自体全くやってないように思えた。
    mt[]を変形してMT擬似乱数を生成しているだけなら俺の勘違いだ。噛み付いてスマン。
    828 : ,,・´∀`・, - 2009/01/24(土) 00:41:37 (+70,-29,-163)
    ネタばらししちゃうけど13切った奴はみんな部分的に8並列とか16並列とかやってるだろ?
    spu_shuffle使ってパック・アンパックしてやってるだろ?
    それがアリなら何でもアリだよ。

    たとえばさ、32ビットの疑似乱数の上位16ビットと下位16ビットが別々のレジスタ上に分かれてたら、乱数じゃないの?
    んで、上下が分かれた状態で別々に合計値の計算してもいいよね?

    それが速いかどうかは別にして(っていうかcarryの計算が増える分速くない)
    829 : 202 - 2009/01/24(土) 00:46:45 (+62,+29,-50)
    >>828
    ごめん、それ気づかなかったわwwww

    てか、コンテスト参加者でまだ13cycle切ってない、これから頑張る人も居るんだから、
    ネタばらしは止めようぜ。
    830 : 202 - 2009/01/24(土) 00:51:07 (+115,+29,-105)
    俺は、 >>598>>601 でいってるとおり、まじめに genrand_int32() の戻り値を
    計算した上でチェックサムをとってる。

    乱数を複数のレジスタに分割するのはどうなんだろうな?
    たまたま場所が離れているだけで、ビット単位では元の乱数を生成しているんだし、
    別にいい気もするが、、、グレーだな。
    831 : ,,・´∀`・, - 2009/01/24(土) 00:58:17 (+3,-29,-77)
    じゃあそのグレーな方法を使わせてもらうよ。

    x86で64ビット整数をどうやって扱ってるか知ってる?
    下位32ビットがeax、上位がedxだ。

    整数を扱うのは2進でなくともたとえばBCDでもイイと思うわけ
    浮動小数の仮数部で23ビットを表現してもいい。

    なあに、genrand_int32()の形式で要素を抽出するAPIを別途用意すれば問題ない
    832 : 227 ◆eZQ - 2009/01/24(土) 01:26:29 (+14,-30,-62)
    とりあえずストール地獄からの脱出に成功。
    明日も出勤だけど>>824目指して頑張る。

    ところで、
    for (int i = 0; i < num_rand; i+=2) {
    sum += genrand_int32();
    sum -= genrand_int32();
    }
    とかやってみたらチート対策になったりしないのかな?かな?
    833 : ,,・´∀`・, - 2009/01/24(土) 01:27:20 (+52,+29,-16)
    俺はチートはしないよ
    834 : デフォルトの名無 - 2009/01/24(土) 01:56:42 (+24,-30,-62)
    init_genrand_mine を変更するなとは書いてあるけど、
    init_genrand_mine で初期化されたベクタでテストするとは
    書いてないわけだが。
    835 : ,,・´∀`・, - 2009/01/24(土) 02:00:54 (+3,-24,-30)
    トランザム=通常の3倍の性能
    あとはわかるな?
    836 : デフォルトの名無 - 2009/01/24(土) 02:00:58 (+67,+29,-43)
    だんごいい加減ネタばれひどいだろ
    13は切ってるけど、>>828の方法は使ってない
    あんたが天才なのは結構だけど、コンテスト終わってからにしろよ
    837 : ,,・´∀`・, - 2009/01/24(土) 02:04:33 (+94,+29,-15)
    残念だがその方法には芽は無いようだ。
    散々罵倒したけど彼には感謝しないといけない。

    なあに、単純な理屈だったよ。
    838 : デフォルトの名無 - 2009/01/24(土) 02:25:51 (+34,-30,-18)
    Hack the Cell と見せ掛けて Hack the spu-gcc43、
    と思ったら Hack the MT だったでござる。
    839 : デフォルトの名無 - 2009/01/24(土) 02:32:37 (+42,+24,-2)
    ツンデレ?
    840 : ,,・´∀`・, - 2009/01/24(土) 02:34:18 (+44,+26,+0)
    おう
    841 : ,,・´∀`・, - 2009/01/24(土) 02:46:25 (+62,+29,-90)
    このブレイクスルーは、ある意味でCellの特性を最大限生かしたものになる。
    もちろんMTの互換性・再実行性も保障できる。

    つまり、アセンブラなんて最初から必要なかったんだよ。

    いや、それでも詰めるには必要だけど
    842 : デフォルトの名無 - 2009/01/24(土) 02:48:32 (+52,+29,-18)
    実装するのと極めるのは別物だからな
    843 : ,,・´∀`・, - 2009/01/24(土) 03:01:18 (+57,+29,-3)
    いいや、最後にはSIMDerだからこそできるテクニックがものを言うと思うよ。
    844 : デフォルトの名無 - 2009/01/24(土) 03:28:16 (+70,+29,-5)
    なんか色々台無しだね。>>321 の予想通りという事かね。
    845 : ,,・´∀`・, - 2009/01/24(土) 03:44:22 (+37,-29,-50)
    どのみち最速で無い(愚直にmt[]を舐めるだけ)の方法は近々俺の日記で公開してやろうと思っている。

    Fixstarsはなんでmt[]をvec_uint4との共用体にしといてくれなかったのか?
    実はそこに答えがあったのだ。
    846 : デフォルトの名無 - 2009/01/24(土) 03:49:22 (+62,+29,-3)
    >>845
    既に気付いてる人間からしたら、滅茶苦茶迷惑なんですけど。
    847 : デフォルトの名無 - 2009/01/24(土) 03:50:25 (+94,+29,-19)
    おいおい
    あんまりいらんことするな
    12サイクルに到達してない人間の努力は全否定か
    ついでに10倍速で参加賞出さなきゃいけないFixstersの身にもなれと
    848 : ,,・´∀`・, - 2009/01/24(土) 03:55:15 (+148,+30,-98)
    >>847
    10倍到達した人が多い場合は上位からってルールがあったはず
    どのみち優勝不可能なコードなんだから文句無いだろ?

    俺がやらなきゃどうせ上位者(BSDライセンスでソース公開)はアセンブラばっかしのコードになるんだろ?
    アセンブラのコードなんて公開されてもソースの再利用性という面では意味が無いんだよ。
    高速化のテクニックを、アイディアを再利用性の高い形で世に出す必要がある。
    俺は俺の信念で、アセンブラ許可したFixstarsをこき下ろす
    849 : デフォルトの名無 - 2009/01/24(土) 05:55:21 (+57,+29,-26)
    アセンブラ無しなら自分が最速で、もっとも優れたテクニックやアイディアを持ってると思ってるあたりが痛いよな……
    850 : ,,・´∀`・, - 2009/01/24(土) 06:14:29 (-1,-29,-32)
    新しいコードだとTempering相当処理は0.5命令/Word切った。
    別のところが増えちゃってるんですけどね。

    言ったろ?トランザム発動するって。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / cell スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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