次のようなコードがあります。
for(int i =0; i<2; i++)
{
//initialization of memory and some variables
........
........
RunDll(input image, output image); //function that calls kernel
}
上記のループの各反復は独立しています。それらを同時に実行したい。だから、私はこれを試しました:
for(int i =0; i<num_devices; i++)
{
cudaSetDevice(i);
//initialization of memory and some variables
........
........
RunDll(input image, output image);
{
RunBasicFBP_CUDA(parameters); //function that calls kernel 1
xSegmentMetal(parameters); //CPU function
RunBasicFP_CUDA(parameters); //function that uses output of kernel 1 as input for kernel 2
for (int idx_view = 0; idx_view < param.fbp.num_view; idx_view++)
{
for (int idx_bin = 1; idx_bin < param.fbp.num_bin-1; idx_bin++)
{
sino_diff[idx_view][idx_bin] = sino_org[idx_view][idx_bin] - sino_mask[idx_view][idx_bin];
}
}
RunBasicFP_CUDA(parameters);
if(some condition)
{
xInterpolateSinoLinear(parameters); //CPU function
}
else
{
xInterpolateSinoPoly(parameters); //CPU function
}
RunBasicFBP_CUDA( parameters );
}
}
2 つの GTX 680 を使用しており、これら 2 つのデバイスを同時に使用したいと考えています。上記のコードでは、速度が向上しません。処理時間はシングル GPU で実行した場合とほぼ同じです。
利用可能な 2 つのデバイスで同時実行を実現するにはどうすればよいですか?