Saya memiliki proyek visual c++ yang membuat dll. Untuk proyek ini saya memiliki CMakeLists.txt yang berfungsi.
Sekarang saya membuat dua file sumber cuda yang menyelesaikan proyek dan dengan visual studio build berfungsi dengan baik. Saya ingin menambahkan perintah yang cocok ke file cmake saya. Adakah yang bisa memberi tahu saya perintah dasar yang perlu saya tambahkan?
Saya mencoba membangun perpustakaan dll tempat saya menggunakan file .cu dan .cpp.... Bagian penting dari file cmake saya terlihat seperti:
# ----------------------------------------------------------------------------
# Set Cuda properties
# ----------------------------------------------------------------------------
enable_language(CUDA)
set(CUDA_SEPARABLE_COMPILATION ON)
set(CUDA_PROPAGATE_HOST_FLAGS OFF)
if (CMAKE_SIZEOF_VOID_P MATCHES 8)
set(CUDA_64_BIT_DEVICE_CODE_DEFAULT ON)
endif()
set(CUDA_NVCC_FLAGS "-gencode arch=compute_50,code=sm_50;-rdc=true;-use_fast_math")
message(STATUS "CUDA_PROPAGATE_HOST_FLAGS: ${CUDA_PROPAGATE_HOST_FLAGS}")
message(STATUS "CUDA_HOST_COMPILER: ${CUDA_HOST_COMPILER}")
message(STATUS "CUDA_NVCC_FLAGS: ${CUDA_NVCC_FLAGS}")
# ----------------------------------------------------------------------------
# Create shared library project
# ----------------------------------------------------------------------------
add_library(${LIB_NAME} SHARED ${HEADERS} ${SOURCES} ${CUDA_SOURCES})
set(CUDA_LIBRARIES "cudadevrt.lib;cudart.lib")
target_link_libraries(${LIB_NAME} ${CUDA_LIBRARIES})
Tapi itu tidak mengkompilasi file cuda dengan flag yang tepat. Juga di visual studio, definisi praprosesor juga ada di bagian cuda properti....ada saran?
find_package(CUDA)
. Sekarang CUDA didukung oleh CMake sebagai bahasa (sama sepertiC
,CXX
atauFortran
), sehingga tanda terima diubah. Sampai pertanyaan yang direferensikan mendapatkan jawaban di CMake baru, saya memilih untuk tidak menjadikannya sebagai duplikat. Sayangnya saya tidak terlalu mengenal CUDA sehingga tidak bisa mempersiapkan jawaban tersebut. - person Tsyvarev   schedule 11.04.2018enable_language(CUDA)
di proyek saya. Namun, saya tetap menyarankan menggunakan fungsi/variabel serifind_package(CUDA)
, karena tampaknya sulit untuk menemukan dokumen apa pun tentang cara menautkan/menyertakan perpustakaan/header cuda lain seperti npp, curand, dll. - person halfelf   schedule 11.04.2018find_package(CUDA)
, pertama saya tidak memerlukanCMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES
untuk header, dan saya juga tidak memerlukanfind_library()
untuk setiap cuda lib, karena sudah ditetapkan sebagai variabelCUDA_xxx_LIBRARY
. Bagi saya, fitur baru ini terasa sedikit lebih rumit daripadafind_package(cuda)
yang lama, atau mungkin saya ketinggalan? - person halfelf   schedule 11.04.2018.cu
, hanya jika Anda memanggil CUDA runtime API dari file.c
/.cpp
. Untuk perpustakaan, itu benar, mereka belum menetapkannya sebelumnya, tetapi Anda selalu dapat membuat skrip pembungkus kecil untuk itu, dan memasukkannya ke dalam semua proyek Anda. - person gflegar   schedule 12.04.2018findCUDA
yang sudah tidak digunakan lagi atau dukungan bawaan?CUDA_NVCC_FLAGS
adalah variabel yang digunakan olehfindCUDA
, dukungan CUDA bawaan menggunakanCMAKE_CUDA_FLAGS
sebagai gantinya. Ya, memiliki dua pilihan memang sangat membingungkan, jadi Anda harus berhati-hati dalam melakukannya. - person gflegar   schedule 14.04.2018