cellプログラミングしちゃいなよ4

このエントリーをはてなブックマークに追加
932デフォルトの名無しさん:2009/04/20(月) 12:47:21
>>930
SPEはネットワークでグリッドするのも一役狙ってたんだが、肝心のソフトが出てこないね。
933デフォルトの名無しさん:2009/04/20(月) 12:51:47
SPEってどっちだよ
934デフォルトの名無しさん:2009/04/20(月) 13:12:12
SPUだった。そーりー。
935,,・´∀`・,,)っ-○○○:2009/04/20(月) 20:03:44
ソニーピクチャーズ
936デフォルトの名無しさん:2009/04/22(水) 18:14:33
>>930
PSEDGEでエンコってできるの?
937デフォルトの名無しさん:2009/04/22(水) 19:30:12
>>936
それって3Dライブラリじゃないの?良く知らんが。
Cellでエンコするなら別のコード書くんじゃない?
938デフォルトの名無しさん:2009/04/27(月) 19:47:01
ミスタエッジ
.
940デフォルトの名無しさん:2009/04/28(火) 00:24:59
長い実行時間のJOB を流しながら短い時間のプログラムのデバッグを
していたら長い方のJOBが引っかかって停止(ループ)したようなんですが
そんな経験ありますか。
941デフォルトの名無しさん:2009/04/28(火) 00:31:24
と言うか、タスク切替えの時にSPUの情報は退避されないとかの仕様ですか。
>>940
あります

>>941
普通のコアならレジスタさえ退避しておけばメモリ勝手に流れるけど、
SPEは独立メモリだからそういう細工が出来ない模様
943デフォルトの名無しさん:2009/04/28(火) 09:14:43
それがネックになってCELLの評価キットでの開発が頓挫した経験ならあります。
要は、SPEを使うようなプログラムを複数動かさなければいいんだろうけどねぇ。
944デフォルトの名無しさん:2009/04/28(火) 09:21:39
まさかの団子の低脳レス
945デフォルトの名無しさん:2009/04/28(火) 10:34:17
回答ありがとうございます。思い切った仕様ですね。

あれから実験してみまして表と裏で流すSPEの数の合計が6を越えなければ
避けて実行してくれるみたいなんでしばらくそういう形でいきたいとおもいます。
946デフォルトの名無しさん:2009/04/28(火) 19:53:07
SDK3.2まだー
947デフォルトの名無しさん:2009/04/29(水) 15:48:36
Xserver を SPE 使って書いたりできないってことですよね。
948デフォルトの名無しさん:2009/04/30(木) 09:12:48
>>947
いいえ、どんなプログラムであろうともSPEを使うように書くことはできます。
SPEを使ってXServerプログラムを書くことも、難しいかもしれませんができないことではないと思います。

どちらにしても、意味がないだけで。
949デフォルトの名無しさん:2009/05/01(金) 04:55:02
spuでls内の数kバイト連続したベクタデータを何回もコピーする必要があるのですが、memcpyでコピーするよりも、DMAでコピーしたほうが速いですか?
memcpyだと3GB/sec位しかでませんでした。
ちなみに、ベタでループで代入する方法で、-funroll-loopsオプションをつけたら、memcpyよりも高速でした。

これは、memcpyが1バイトごとにコピーしているのに対してベタなのはベクタデータでレジスタ沢山使ってコピーしているからですかね。
memcpy意外で、賢いやり方はありませんか?
DMAだと、レイテンシが馬鹿にならないので。
950デフォルトの名無しさん:2009/05/01(金) 11:58:47
ループ代入でコピーする方法では25.6GB/sec近くのコピー速度になるとは思いますが
それでも不満でしたらコピーしないですむ方法や同時計算を考えるしかないと思います。

どんな処理をするのかはわかりませんが
例えば、コピーした後何らかのデータ更新をするというなら
コピー元からロードして、更新したらコピー先にそのままストアするといった具合にです。
951デフォルトの名無しさん:2009/05/01(金) 23:54:28
>>950
ここで仰る25.6G/sというのはDMA転送のことなのでしょうか?
それとも、LS内部でのことでしょうか?

やりたいことは例えばベクタ配列A[1000]とB[1000]があって、
下記の様な処理を行いたいと考えています。
(DMA転送部分は簡略化しています。)
for(i=0;i<1000;i++){
DMAGET(A, MainMem_Addr+i*addr, 1000*sizeof(vector float));
for(j=0;j<1000;j++){
A[j] = A[j] + B[j];
}
B[0] = A[j-1];
memcpy(&B[1], &A[0], 999*sizeof(vector float));
DMAPUT(A, MainMem_Addr1+i*addr 1000*sizeof(vector float));
}

ここで、memcpyを行うよりもDMAの方が高速であればそれでよいのですが、
このような処理が各SPUで行うので、帯域が足りなくなり、そこがボトルネックになります。
極力DMA転送を減らしたいと思ってこのような方法を考えたのですが、
memcpyが思ったよりも速度がでないのでは、DMAでやった方がいいのですかね。

952デフォルトの名無しさん:2009/05/02(土) 08:24:52
Aと同じ大きさのバッファをもう一つ持ってダブルバッファリングして、
Bはなくしてしまえばいい。memcpyが不要になる。

vector float A[2][1000];
int idx = 0;
int offset = 0;

A[1](旧B)の初期化処理
for(i=0;i<1000;i++){
DMAGET(A[idx], MainMem_Addr+i*addr, 1000*sizeof(vector float));
vector float *temp_0 = A[idx];
vector float *temp_1 = A[idx^1][1000-offset];
for(j=0;j<offset;j++){
temp_0[j] = temp_0[j] + temp_1[j];
}
vector float *temp_2 = A[idx][offset];
vector float *temp_3 = A[idx^1][0];
for(j=0;j<1000-offset;j++){
temp_2[j] = temp_2[j] + temp_3[j];
}
DMAPUT(A[idx], MainMem_Addr1+i*addr 1000*sizeof(vector float));
idx ^= 1;
}
ちゃんと確認してないから間違いはあるかも。
トリプルバッファ使ったりすればDMA転送の時間も一部隠蔽できるけどね。(余裕があれば試してみればいい)
953デフォルトの名無しさん:2009/05/02(土) 08:28:22
>>952が難しければ16byte単位でコピーするmemcpyを自作して置き換えるだけでも少し早くなるよ。
LSに余裕があるなら、ここに特化した999のvector floatをループ無しでコピーする専用の処理を作るのもありだw
954,,・´∀`・,,)っ-○○○:2009/05/02(土) 09:54:23
「笑えよベジータ」←いまここ
955デフォルトの名無しさん:2009/05/02(土) 13:34:30
なにこの癒されbar
956デフォルトの名無しさん:2009/05/02(土) 14:57:48
/opt/cell/sdk/src/demos/FFT16M

の実行された方いますか。サイズを変えたりとか。
957デフォルトの名無しさん:2009/05/03(日) 01:38:02
DMAって同じLS内にかけられたっけ?
やったことないや。
EAにマップされてるから指定自体はできそう。
DMAかけるとそこは並列に動くのでパフォーマンスあがる可能性はあるかもね。
それよりまず>>951はダブルバッファからだけどw
958デフォルトの名無しさん:2009/05/03(日) 15:46:27
SPE で処理をさせている間に PPE でも処理をさせたいので
PPE で生成した子スレッドで spe_context_run() を呼び出そうと
思うのですが子スレッドがSPEの処理を待っている間は PPE のCPU時間
の半分を使ってしまうのでしょうか。
959デフォルトの名無しさん:2009/05/03(日) 16:05:32
スレッドはブロックされるとのことで CPU 時間はほぼ消費しないようですね。
おさわがせしました。
> リアルSCEIの人

インソムニアックがLarrabeeの調査してるみたいだね。
いろいろ勘繰りたいこともあるんだが、おまいら、本当にそれでいいのか?
961デフォルトの名無しさん:2009/05/04(月) 22:25:14
そりゃ調査させるくらい安いもんだろ
962デフォルトの名無しさん:2009/05/04(月) 22:59:42
LRBは使えないってことで結論でたよ
963,,・´∀`・,,)っ-○○○:2009/05/04(月) 23:22:08
残念、現在進行形
964,,・´∀`・,,)っ-○○○:2009/05/04(月) 23:31:27
産業で大胆仮説いっちゃうよ

インソが
ゲイツ(Xbox陣営)に
NTR
965デフォルトの名無しさん:2009/05/04(月) 23:36:22
そのLarrabeeですら現在進行形
まあ、幾つかベンチスコアでっちあげて
お蔵入りになるだろうね。Intelではよくあること。
966,,・´∀`・,,)っ-○○○:2009/05/04(月) 23:46:24
グランツーリスモ5のことですね。よくわかります。
967デフォルトの名無しさん:2009/05/04(月) 23:52:14
次世代XBOXのGPUは継続してAMDって話をきいたが
968,,・´∀`・,,)っ-○○○:2009/05/05(火) 00:21:54
誰に聞いたの?
君のおとうさんの知り合いのインターネットの会社の人?
969デフォルトの名無しさん:2009/05/05(火) 00:42:10
>>968
お前と同じくインターネットの情報だよ。
970,,・´∀`・,,)っ-○○○:2009/05/05(火) 00:59:39
>>960のソースは俺だぞ
検索しても出てこない
971MACオタ:2009/05/05(火) 01:49:59
>>970
ことの顛末は、コレ。
http://pc11.2ch.net/test/read.cgi/jisaku/1238152183/610-614
団子さんをイタい子と見るか、興味深い情報と見るかは自由かと…
972,,・´∀`・,,)っ-○○○:2009/05/05(火) 02:52:14
ついでだからここで君のループアンロールの知識を披露してくれ。
袋叩きにあうから
973デフォルトの名無しさん:2009/05/05(火) 03:34:31
>>952

>>951です。

ありがとうございます。
既にダブルバッファを使っていて、DMAがいっぱいいっぱいになってしまっていて、
SPUが遊んでいて、DMA帯域にを少しでも軽減できればLS内でのmemcpyと思っていました。

>idx ^=1

こんなやり方があったのですね。
idx = (idx+1)%2
とかやっていました。
974,,・´∀`・,,)っ〜[◎〈〈〈] :2009/05/05(火) 15:33:40
こいのぼりやさんだよ
975デフォルトの名無しさん:2009/05/05(火) 17:18:22
今日も団子さんのリファラオナニーが冴えてるな
976,,・´∀`・,,)っ〜[◎〈〈〈] :2009/05/05(火) 17:55:05
うるしあこいのぼりぶつけんぞ
977,,・´∀`・,,)っ〜[◎〈〈〈] :2009/05/07(木) 23:56:24
gatekeeper2.scei.jp

↑ねえこれ新しいサーバ?
978デフォルトの名無しさん:2009/05/08(金) 03:00:20
名乗ってるだけマシ
979デフォルトの名無しさん:2009/05/12(火) 21:22:31
団子さんを毛嫌いしている訳じゃないし、
実力のあるお方だとは思うけど、
その実力以上の口だけ者感は否めなかったなぁ〜

なんだかんだでスレは(前々からの事で)勿論、こないだのコンテストにも貢献してたと思うけど
980デフォルトの名無しさん:2009/05/12(火) 22:40:27
>>977
前からあります
981デフォルトの名無しさん
SPE から呼び出せるLAPACKとかがないとつかいにくいね。