リアルタイムの速度を維持するために、複数の画像を並行して処理する必要があるアプリケーションがあります。
単一の CUDA デバイス上で OpenCV の GPU 関数をマルチスレッド方式で呼び出すことはできないと理解しています。次のような OpenMP コード構成を試しました。
#pragma omp parallel for
for(int i=0; i<numImages; i++){
for(int j=0; j<numChannels; j++){
for(int k=0; k<pyramidDepth; k++){
cv::gpu::multiply(pyramid[i][j][k], weightmap[i][k], pyramid[i][j][k]);
}
}
}
これは正しくコンパイルおよび実行されるように見えますが、残念ながら同じ CUDA デバイス上で numImages スレッドを連続して実行しているようです。
複数の CUDA デバイスがある場合、複数のスレッドを並行して実行できるはずですよね? 複数の CUDA デバイスを入手するには、複数のビデオ カードが必要ですか?
nVidia GTX 690 デュアルチップ カードが、OpenCV 2.4 以降で 2 つの独立した CUDA デバイスとして機能するかどうかを知っている人はいますか? OpenCL で動作することは確認できましたが、OpenCV に関しては確認できませんでした。