__ ldg() 内置仅适用于计算能力3.5(或更高版本)架构。
这意味着:
- 必须在计算3.5(或更新版本)GPU上运行
- 必须针对计算3.5(或更新版本)的GPU进行编译
- 不能为旧体系结构编译。
解决方式修改cmake:
set(CUDA_ARCH "-arch=sm_50" CACHE STRING "Value of the NVCC -arch option.")
if(DEFINED AUTO_DETECT_ARCH AND "${AUTO_DETECT_ARCH}")
CUDA_SELECT_NVCC_ARCH_FLAGS(ARCH_FLAGS "Auto")
set(CUDA_ARCH "${ARCH_FLAGS}" CACHE STRING "Value of the NVCC -arch option." FORCE)
endif()
message(STATUS "CUDA_ARCH: \"${CUDA_ARCH}\"")
if (CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "-O3 -Wall")
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11")
endif()
SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} ${CUDA_ARCH}")
本文介绍了解决在计算能力低于3.5架构上使用__ldg()内置函数时遇到的问题的方法。必须在计算3.5或更高版本的GPU上运行,并且编译目标也应与此相匹配。通过修改cmake设置,如使用-sm_50或自动检测架构,可以解决此问题。
1096

被折叠的 条评论
为什么被折叠?



