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

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

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;
    }
}

CUDAでのビルド

CUDA8.0、visualstudio2015で開発中ハマったのでメモ

簡略化のために、CUDAのサンプル(C:¥ProgramData¥NVIDIA Corporation¥CUDA Samples¥v8.0¥0_Simple¥template)を用いて環境を作り、自分のソースコードを作ってビルドしたところ、MSB3721のエラーが発生。

「NCIDIA CUDA Toolkit5.5 Release Notes」29ページ「1.11.4.1CUDA Compiler」によると CUDA compiler(nvcc)はpathにユニコード文字を許していないようである。

今回、プロジェクトのpathにたまたま日本語を含んでいたため、別のディレクトリに移動するとエラーは解決。

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