インストール
https://docs.microsoft.com/en-us/visualstudio/productinfo/installing-an-earlier-release-of-vs2017
でBuild Tools 15.4.5をダウンロード&実行
Visual C++ Build Toolsでデスクトップ用のvc++ 2015.3 v140 ツールセットを選択してインストール
https://developer.nvidia.com/cuda-downloads
で自分の環境に該当するファイルをダウンロードし、インストール
私の場合はWindows10, x86_64
コマンドプロンプト
VS2017用 x64 Native Toolsを実行、Visual Studio 2017 Developer Command Prompt v15.0を確認する。v15.6.4はダメ
ビルド
nvcc -w sample.cu
(-w : 警告を表示しない)
実行
a
OpenCV build with cuda
- cmake-guiでconfigureするとcuda toolkitがinstallされているなら、
cuda関連の変数が自動的にcmake cacheに追加される。 - Build_opencv_worldをチェックするとdllファイルがworldに統合されてlinkするとき便利だが、libの容量が大きくなる。
- ★重要:visual studio 15 (2017)のコンパイラではエラーのため、cudaをコンパイルできないため、
visual studio 14 (2015)のコンパイラをcuda専用のコンパイラとして指定する。
「Visual C++ Build Toolsでデスクトップ用のvc++ 2015.3 v140 ツールセット」をinstallした場合、
C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/cl.exeがあるのでこのpathを
CUDA_HOST_COMPILERに指定するとbuildできる。(MSVC 14.0 -> 2015) - pythonがinstallされている場合、自動的に関連ライブラリーの設定が追加されるので必要ないなら消す。
- OPENCV_EXTRA_MODULES_PATHにopencv_contrib341のmodulesのpathを指定、
たとえば、C:\opencv\opencv_contrib-3.4.1\modules - コンパイル(Release mode)
cmake.exe --build . --config Release --target INSTALL - コンパイル(Debug mode)
cmake.exe --build . --config Debug --target INSTALL - 何かわけ分からないが、朝起きてまだcompileやってたのでビックリ。
buildするのに非常に時間がかかった。大体、Releaseに3時間、Debugに14時間。
Opencv GPU example code (threshold)
example
//https://opencv.org/platforms/cuda.htmlのshort sampleの修正
//元のコードが旧バージョン用なので修正した
# include <iostream>
# include "opencv2/opencv.hpp"
# include "opencv2/cudaarithm.hpp"
int main(int argc, char* argv[])
{
try
{
cv::Mat src_host = cv::imread("lenna.png", CV_LOAD_IMAGE_GRAYSCALE);
cv::cuda::GpuMat dst, src;
//host2device(src_host -> src)
src.upload(src_host);
//devicekernel(src -> dst)
cv::cuda::threshold(src, dst, 128.0, 255.0, CV_THRESH_BINARY);
cv::Mat result_host;
//device2host(dst -> result_host)
dst.download(result_host);
cv::imshow("Result", result_host);
cv::waitKey();
}
catch (const cv::Exception& ex)
{
std::cout << "Error: " << ex.what() << std::endl;
}
return 0;
}
ビルド with OpenCV 例
windows10の環境変数にopencv_world341.dllがあるpathを追加。
command(nvcc)
nvcc -w image.cpp gray.cu opencv_world341.lib -I C:\opencv\build\install\include -L C:\opencv\build\install\x64\vc15\lib
※command(cl)
cl opencvgpu.cpp /I C:\opencv\build\install\include /link C:\opencv\build\install\x64\vc15\lib\opencv_world341.lib