まだそんなことやってんの?

技術系備忘録ブログがメイン

OpencvにおけるCUDA

CUDAをOpencvで利用するためには、CMakeを用いてOpencvを自分でビルドする必要がある。 OpencvGithubのページからソースコードをダウンロードし、CMakeでソリューションをジェネレートする。 その際Opencv_WITH_CMake(だったかな?)をONにするのを忘れない。(これ結構時間かかる。2〜5時間くらい)

そうするとcv空間に新たにcuda空間を利用することができる。 GPUを用いたコードを書く際まずGPUの情報を確認するために、cuda空間内のgetCudaEnabledDeviceCount()を呼ぶ 'cv::cuda::getCudaEnabledDeviceCount()' この関数は返り値に利用できるGPUの個数を返す。

これを利用してGPUの情報を得ようとしたが、返り値がなぜか0になってしまう。ハマった...

これは原因は詳しく調べていないが、どうやら'opencv_world310d.lib'(Releaseなら'opencv_310.lib')を併用することによるものらしい。 そこでこのライブラリを削除して見たところうまくいった。 以下はGPUの情報を得るソースコード

int gpuInfo(){
    int cudaDevices = cv::cuda::getCudaEnabledDeviceCount();
    if (cudaDevices > 0){
        cout << 
            "[CUDA Device 0]" << endl <<
            "name: " << info.name() << endl <<
            "majorVersion: " << info.majorVersion() << endl <<
            "minorVersion: " << info.minorVersion() << endl <<
            "multiProcessorCount: " <<info.multiProcessorCount() << endl <<
            "sharedMemPerBlock: " << info.sharedMemPerBlock() << endl <<
            "freeMemory: " << info.freeMemory() << endl <<
            "totalMemory: " << info.totalMemory() << endl << 
            "isCompatible: " << info.isCompatible() << endl;
        return 0;
    }else{
        cout << "nothing" << endl;
        return -1;
    }
}