【GPGPU】くだすれCUDAスレ part8【NVIDIA】 [無断転載禁止]©2ch.net (407レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
374
(4): デフォルトの名無しさん [sage] 2023/06/10(土) 08:16:47.35 ID:gJM3u8Zc(1/3) AAS
cudaDeviceSynchronizeはこんなときに使う. Ki=1024, Mi = Ki*Ki, Gi = Ki*Miとでもして
__global__ void
cuda_main(){
 double *idata = new [Mi];  double *odata1 = new [Mi];  double *odata2 = new [Mi];

 body1<<< Ki, Ki >>> ( idata, odata1 ); //マルチスレッド実体
 cudaDeviceSynchronize();
 body2<<< Ki, Ki >>> ( odata1, odara2 ); //マルチスレッド実体
 cudaDeviceSynchronize(); 
 for( int i = 0; i < Mi; i++ ){
  cudaDeviceSynchronize(); // *** こいつは毎回要ったと思う
  printf(" %d %e\n", i, odata2[i]); //計算結果表示
 }
 cudaDeviceSynchronize(); // 上の***だけで こいつはなくても構わなかったと思う

 delete[] odata2;  delete[] odata1;  delete[] idata;
}

main(){
 //cuda 内newで確保するメモリが8MBを超える場合は設定要
 cudaDeviceSetLimit(cudaLimitMallocHeapSize, size_t(Gi + Gi));
 //printf fifoを16Miにしてみた
 cudaDeviceSetLimit(cudaLimitPrintfFifoSize, 16 * Mi); 
 
 cuda_main<<<1、1>>>();
}
375: デフォルトの名無しさん [sage] 2023/06/10(土) 08:17:55.93 ID:gJM3u8Zc(2/3) AAS
つづき
ホスト側からcuda用のエントリポイント cuda_main()を一つ起動して
そこで計算に必要なgpuメモリをnew/mallocで確保
delete/freeもしくはデストラクタでメモリ解放してほとんどふつーのC++プログラム作成
エントリポイントとなるcuda_mainスレッドを一つ起動するだけでほぼgpu側だけで閉じたふつーのc++コードになる

gpuが計算した結果をどー出力するか?ってのはあるんだが、
__global__関数内のprintfが標準出力にちゃーんと出力してくれる
つまり、 リダイレクトでファイルに落とせる
コマンドラインから
> cuda_program.exe >> file.dat
て感じ
376: デフォルトの名無しさん [sage] 2023/06/10(土) 08:20:34.56 ID:gJM3u8Zc(3/3) AAS
つづき
こういうコードスタイルにすることでcudamallocで確保するgpuメモリはホスト<->gpuのインターフェースに使う最低限のメモリに限定することができて
コーディングが格段に楽になる ほぼふつーのC++プログラムと変わらん

この書き方で問題なのは__global__内でunique_ptrが使えないことなんだが、
数値計算でunique_ptr使えなくて困る場合ってどんな場合か逆に聞きたいわ.
それより
ホスト側でgpu内部処理にしか使わないメモリまで確保して、そいつをcuda::unique_ptrなんか作って管理するよりよほど楽だと思うが?
こういうのはディレクトリの外からディレクトリ操作するのに似た感覚でとても耐えられんし、
cuda Dynamic Parallelismと__global__関数内でnew/deleteを書けるようになってるお陰でふつーのC++コードが書けるようになってるんだわ.

んで肝心の cudaDeviceSynchronize() だが
マルチスレッド実態は body1、 body2だがbody2の実行と計算結果odata2の表示はbody1とbody2の計算完了が前提としてる
それらの待ち合わせ処理としてを使うんだが、
ここで cudaDeviceSynchronize() がないと dynamic Parallelismがあっても上のようなコードは書けない
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.013s