[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 02/21 05:22 / Filesize : 250 KB / Number-of Response : 931
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【GPGPU】くだすれCUDAスレ pert2【NVIDIA】



238 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 06:59:13 ]
>>229
ごめん元のソースが何したいのかよく分からないんだけど、こんなことしたいわけ?
1024ピクセル×1024ピクセルの二つの領域の明るさ平均を取るみたいな?
CPUなら、縦座標が外側ループで1024回×横座標が内側ループで1024回、回ると。

//device側で1MB×3(dest, src1, src2)をアロケートして、hostからsrc1,src2にデータをコピー
//512スレッドを起動するなら、外側ループの回る回数はCPUだと1024、GPUだと1024÷スレッド数512
for (int n = 0; n < 1024 / 512; n ++)
{
 CUDA_Func<<<1, 512, 0>>>(dest, src1, src2, nPos);
}
//deviceからHostへdestをコピー

=====
__global__ static void CUDA_Func(BYTE* pDest, BYTE* pSrc1, BYTE* pSrc2, int nPos)
{
 int i = nPos*512 + threadIdx.x * 1024; //各GPUスレッドが動き出す起点、縦にずれてるわけ
 for (k = 0; k < 1024; k++) //各GPUスレッドは呼ばれると横向きに1024回ループする。内側ループをGPUスレッドで処理。
 {
  pDest[i + k] = ((int)pSrc1[i + k] + (int)pSrc2[i + k]) >> 1;
 }
}
=====

ちなみにこれだといちいちグローバルメモリへのアクセスになるんで、

 //Sharedにスクラッチコピー
 //スクラッチコピー分だけループ処理
 //SharedからGlobalに書き出し

するともっと速くなる






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<250KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef