【GPGPU】くだすれCUDAスレ pert2【NVIDIA】at TECH
【GPGPU】くだすれCUDAスレ pert2【NVIDIA】 - 暇つぶし2ch329:323
09/12/08 17:35:58
>>327
>CUDA_SAFE_CALL(cudaMalloc((void**)&mat_d,size));
>
>for(i=0;i<num;i++){
>CUDA_SAFE_CALL(cudaMalloc((void**)&mat_d[i],size/a));
>a*=2;
>}
考えてみるとここも問題があって、cudaMallocということはデバイス側でポインタ列を確保しているんだけど、
そうすると&mat_d[i]というアドレスは、デバイス側にはバッファがあるが、
ホスト側には存在しないから、ここで例外になりそう。
やるならこんな感じかな?↓(未検証)

float** mat_d; // GPU側に確保する(ポインタ列用)バッファ
CUDA_SAFE_CALL(cudaMalloc((void**)&mat_d, count * sizeof(float*));
float** mat_d_tmp=(float**)malloc(count * sizeof(float*)); // ホスト側に確保する。内容はGPU側ポインタ列
for(i=0;i<num;i++){
// GPU側データバッファのポインタを格納
CUDA_SAFE_CALL(cudaMalloc((void**)&mat_d_tmp[i],size/a));
a*=2;
}
// GPU側ポインタ列をGPUに転送
CUDA_SAFE_CALL(cudaMemcpy(mat_d,mat_d_tmp,count * sizeof(float*),cudaMemcpyHostToDevice));
free(mat_d_tmp);
てやっておいて、mat_dをカーネル呼び出しの引数にしてやるとか。

ここまで、バッファ作りしかしてないので、データ転送は別途必要。
たぶん>>322の最後4行のとおりで構わない。

ただデータ転送回数多いと多少とも時間かかるから、>>328の言うように
固めたほうがベターではある。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch