2015-01-18 21 views
19

Im sử dụng CMake để tạo giải pháp visual studio 2013. Tiếp theo, hãy thử xây dựng nó, nhưng hãy làm theo lỗi:Xây dựng OpenCV với sự hỗ trợ của CUDA

Building NVCC (Device) object modules/core/CMakeFiles/cuda_compile.dir/src/cuda/Debug/cuda_compile_generated_gpu_mat.cu.obj

nvcc fatal : Unsupported gpu architecture 'compute_11'

Im try phiên bản 2.10 và 3.0 với cuda 6.5 và 7.0. CUDA_ARCH_BIN thiết lập để: 1,1 1,2 1,3 2,0 2,1 (2,0) 3,0 3,5

Trả lời

10

Khi sử dụng cmake để làm cấu hình, thiết lập các tùy chọn CUDA_GENERATION để cụ thể kiến ​​trúc GPU của bạn. Tôi đã chạy qua cùng một lỗi và đã cố gắng khắc phục sự cố này.

10

Theo dõi về câu trả lời Yun (không thể để lại bình luận), điều này làm việc cho tôi và cho thấy một giá trị có thể cho CUDA_GENERATION:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler .. 

(Ubuntu 12.04 và 14.04, GTX Titan, và OpenCV 2.4. 11 và 3.0.0.)

4

Cảm ơn bạn,

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler .. 

này hãy để tôi cài đặt opencv-2.4.9.

Nếu bạn muốn biết thêm detaills kiểm tra này link.

+0

Cảm ơn bạn đã trả lời câu hỏi. Tuy nhiên, đây là câu trả lời chỉ có liên kết; nó sẽ là tốt hơn để bao gồm một mô tả chi tiết hơn trong câu trả lời của bạn với thông tin từ liên kết mà bạn đang đề cập đến. –

17

Tùy chọn khác. Ubuntu 14.04, GTX Titan X, opencv-2.4.10

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_TIFF=ON -D BUILD_EXAMPLES=ON -D CUDA_GENERATION=Auto -D BUILD_NEW_PYTHON_SUPPORT=ON .. 

Tôi cũng áp dụng patch, nhưng tôi không chắc chắn cho dù nó đã kết thúc lên được cần thiết. Tôi đã thử và không có CUDA_GENERATION=Maxwell nhưng Maxwell không được phát hiện. Tôi đã không thử CUDA_GENERATION=Auto trước khi vá, đó là lý do tại sao tôi không biết chắc chắn.

+0

tại sao xây dựng tiff? – user136266

+0

@ user136266 vì một số xử lý tôi làm là với tiffs. Chúng phổ biến cho dữ liệu không gian địa lý, rasters và như vậy. – user1269942

2

Bạn nên thiết lập với cmake những mục CUDA_ARCH_BIN = 3.2CUDA_ARCH_PTX = 3.2

Hy vọng nó giúp.

Kính trọng

2

Điều này là do loại gpu của bạn không khớp.

Bạn phải xác định rõ ràng CUDA_GENERATION.

Về phía tôi, tôi có thể tìm thấy 3 loại CUDA_GENERATION; Tự động, Kepler, Fermi.

Khi tôi đặt CUDA_GENERATION là Kepler, compute_11 đổi thành compute_30 và tạo thành công.

0

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_TIFF=ON -D BUILD_EXAMPLES=ON -D CUDA_GENERATION=Kepler -D BUILD_NEW_PYTHON_SUPPORT=ON ..

làm việc cho tôi cho OpenCV 2.4.11

2

Bạn có thể sử dụng CUDA_GENERATION để xác định tên mã thế hệ tương ứng cho kiến ​​trúc GPU của bạn.

Đây là liên quan opencv cmake code rằng phân tích giá trị CUDA_GENERATION:

set(__cuda_arch_ptx "") 
    if(CUDA_GENERATION STREQUAL "Fermi") 
    set(__cuda_arch_bin "2.0") 
    elseif(CUDA_GENERATION STREQUAL "Kepler") 
    set(__cuda_arch_bin "3.0 3.5 3.7") 
    elseif(CUDA_GENERATION STREQUAL "Maxwell") 
    set(__cuda_arch_bin "5.0 5.2") 
    elseif(CUDA_GENERATION STREQUAL "Pascal") 
    set(__cuda_arch_bin "6.0 6.1") 
    elseif(CUDA_GENERATION STREQUAL "Volta") 
    set(__cuda_arch_bin "7.0") 
    elseif(CUDA_GENERATION STREQUAL "Auto") 
    execute_process(COMMAND "${CUDA_NVCC_EXECUTABLE}" ${CUDA_NVCC_FLAGS} "${OpenCV_SOURCE_DIR}/cmake/checks/OpenCVDetectCudaArch.cu" "--run" 
        WORKING_DIRECTORY "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/" 
        RESULT_VARIABLE _nvcc_res OUTPUT_VARIABLE _nvcc_out 
        ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) 
    if(NOT _nvcc_res EQUAL 0) 
     message(STATUS "Automatic detection of CUDA generation failed. Going to build for all known architectures.") 
    else() 
     set(__cuda_arch_bin "${_nvcc_out}") 
     string(REPLACE "2.1" "2.1(2.0)" __cuda_arch_bin "${__cuda_arch_bin}") 
    endif() 
endif() 

Và trang wikipedia CUDA có một bảng tốt đẹp cho việc lập bản đồ card màn hình của bạn để tên mã vi kiến ​​trúc đúng (xin lỗi, nó quá lớn để tái tạo ở đây):

https://en.wikipedia.org/wiki/CUDA#GPUs_supported

Ví dụ, tôi middling 2012 Macbook Pro có một GeForce GT 650m cổ, mà bảng wikipedia chỉ sử dụng microarch Kepler nó. Vì vậy, tôi sử dụng này trong dòng lệnh cmake tôi:

cmake -D CUDA_GENERATION="Kepler" ...

và kịch bản OpenCV chuyển đến "3,0 3,5 3,7" khi nó sẽ hiển thị tóm tắt cấu hình, và đi trên những lá cờ tương ứng để nvcc.

Trong trường hợp của tôi, trước khi cài đặt đúng cách, tôi gặp lỗi về số compute_70 không được hỗ trợ. Rõ ràng, vẫn còn open issue in the opencv tracker kể từ hôm nay (2017-10-07) về tự động phát hiện không hoạt động đúng cách.

Các vấn đề liên quan