前提・実現したいこと
CUDAのダイナミックパラレリズムを使って、入れ子の関数を作りたいのですが、入れ子先の関数が終了してから入れ子もとに戻るやり方がわかりません。
該当のソースコード
C++
1#include "cuda_runtime.h" 2#include "device_launch_parameters.h" 3#include <stdio.h> 4 5__global__ void kernel2() 6{ 7 printf("kernel2\n"); 8 printf("kernel2\n"); 9 printf("kernel2\n"); 10 printf("kernel2\n"); 11 printf("kernel2\n"); 12 13} 14 15 16__global__ void kernel1() 17{ 18 printf("kernel1\n"); 19 printf("kernel1\n"); 20 printf("kernel1\n"); 21 printf("kernel1\n"); 22 printf("kernel1\n"); 23 kernel2<<<1,1>>>(); 24 __syncthreads(); 25 printf("kernel1\n"); 26 printf("kernel1\n"); 27 printf("kernel1\n"); 28 printf("kernel1\n"); 29 printf("kernel1\n"); 30 31 32} 33 34int main() 35{ 36 kernel1<<<1,1>>>(); 37 return 0; 38}
試したこと
__syncthreads();
を入れてみたりしたのですが、うまくいきません。
期待する動作は、
kernel1 Start kernel2 kernel2 kernel2 kernel2 kernel2 kernel1 End
になってほしいのですが、非同期実行のため、
kernel1 Start kernel1 End kernel2 kernel2 kernel2 kernel2 kernel2
になってしまいます。呼び出し元で、関数が完了するまで待つということができればいいのだと思いますが、思い浮かびません。
補足情報(FW/ツールのバージョンなど)
VS2017 CUDA 9.2 GPU:GTX1060
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/05 06:31
2018/08/05 13:28