ฉันมีโครงการ Visual c++ ซึ่งสร้าง dll สำหรับโปรเจ็กต์นี้ ฉันมี CMakeLists.txt ที่ใช้งานได้
ตอนนี้ฉันสร้างไฟล์ต้นฉบับ cuda สองไฟล์ซึ่งทำให้โปรเจ็กต์เสร็จสมบูรณ์ และด้วย Visual Studio บิลด์ก็ทำงานได้ดี ฉันต้องการเพิ่มคำสั่งที่ตรงกันลงในไฟล์ cmake ของฉัน ใครช่วยบอกคำสั่งพื้นฐานที่ฉันต้องเพิ่มได้ไหม
ฉันพยายามสร้างไลบรารี dll ที่ฉันใช้ไฟล์ .cu และ .cpp.... ส่วนสำคัญของไฟล์ cmake ของฉันดูเหมือนว่า:
# ----------------------------------------------------------------------------
# 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})
แต่มันไม่ได้รวบรวมไฟล์ cuda ด้วยแฟล็กที่ถูกต้อง นอกจากนี้ใน Visual Studio คำจำกัดความของตัวประมวลผลล่วงหน้ายังอยู่ในส่วน cuda ของคุณสมบัติด้วย....ข้อเสนอแนะใด ๆ
find_package(CUDA)
ขณะนี้ CUDA ได้รับการสนับสนุนโดย CMake เป็นภาษา (เหมือนกับC
,CXX
หรือFortran
) ดังนั้นใบเสร็จจึงมีการเปลี่ยนแปลง จนกว่าคำถามที่อ้างอิงจะได้รับคำตอบใน CMake ใหม่ ฉันไม่ต้องการทำให้มันซ้ำกัน น่าเสียดายที่ฉันไม่รู้จัก CUDA มากนัก ดังนั้นจึงไม่สามารถเตรียมคำตอบนั้นได้ - person Tsyvarev   schedule 11.04.2018enable_language(CUDA)
ในโครงการของฉันแล้ว อย่างไรก็ตาม ฉันยังคงแนะนำให้ใช้ฟังก์ชัน/ตัวแปรซีรีส์find_package(CUDA)
เนื่องจากดูเหมือนว่าจะยากที่จะค้นหาเอกสารใด ๆ เกี่ยวกับวิธีลิงก์/รวมไลบรารี/ส่วนหัว cuda อื่น ๆ เช่น npp, curand เป็นต้น - person halfelf   schedule 11.04.2018find_package(CUDA)
ก่อนอื่นฉันไม่ต้องการCMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES
สำหรับส่วนหัว และฉันก็ไม่ต้องการfind_library()
สำหรับแต่ละ cuda lib ด้วย เนื่องจากพวกมันถูกตั้งค่าเป็นตัวแปรCUDA_xxx_LIBRARY
คุณลักษณะใหม่นี้ให้ความรู้สึกซับซ้อนกว่าfind_package(cuda)
แบบเก่าเล็กน้อยสำหรับฉัน หรือบางทีฉันอาจพลาดไป - person halfelf   schedule 11.04.2018.cu
เฉพาะในกรณีที่คุณเรียก CUDA runtime API จากไฟล์.c
/.cpp
นั่นเป็นเรื่องจริงสำหรับไลบรารี พวกเขาไม่ได้กำหนดไว้ล่วงหน้า แต่คุณสามารถสร้างสคริปต์ wrapper เล็กๆ น้อยๆ สำหรับไลบรารีเหล่านั้นได้เสมอ และรวมไว้ในโปรเจ็กต์ทั้งหมดของคุณ - person gflegar   schedule 12.04.2018findCUDA
ที่เลิกใช้แล้วหรือการสนับสนุนในตัวหรือไม่CUDA_NVCC_FLAGS
เป็นตัวแปรที่ใช้โดยfindCUDA
ส่วนรองรับ CUDA ในตัวใช้CMAKE_CUDA_FLAGS
แทน ใช่ การมีสองตัวเลือกนั้นน่าสับสนมาก ดังนั้นคุณต้องระมัดระวังในสิ่งที่คุณทำอยู่ - person gflegar   schedule 14.04.2018