CUDA C编程指南:Version 3.2更新说明

需积分: 9 2 下载量 173 浏览量 更新于2024-07-25 收藏 3.21MB PDF 举报
"CUDA_C_Programming_Guide,NVIDIA CUDA™ 编程指南,版本3.2,更新了包括16位浮点纹理、纹理与表面内存一致性、流同步等功能" CUDA C编程指南是NVIDIA发布的一份详细文档,旨在帮助开发者理解和利用CUDA架构进行并行计算。该指南的第3.2版主要关注CUDA C编程语言的各个方面,并在3.1.1版本的基础上进行了多项改进和增强。 1. **简化cuParamSetv()代码示例**: 在新版本中,由于`CUdeviceptr`现在与`void*`具有相同的大小和对齐方式,因此不再需要通过内部的`void*`变量来设置内核参数。这简化了使用`cuParamSetv()`函数的代码,使程序更易读和维护。 2. **16位浮点纹理(Section 3.2.4.1.4)**: 添加了关于16位浮点纹理的新章节,说明如何处理和使用这种轻量级数据类型进行纹理采样,以提高存储效率和计算性能。 3. **纹理与表面内存一致性(Section 3.2.4.4)**: 更新了这部分内容,详细阐述了纹理内存和表面内存的读写一致性问题,这对于理解和优化GPU访问全局内存的行为至关重要。 4. **表面内存访问(Section 3.2.4.2)**: 对表面内存的访问得到了更多细节的补充,帮助开发者更好地理解和利用表面内存进行高效的数据交换。 5. **流同步(Section 3.2.6.5)**: 引入了新的流同步函数`cudaStreamSynchronize()`,这使得多任务管理更加灵活,可以精确控制不同计算任务间的依赖关系。 6. **处理使用NVIDIA SLI AFR模式的设备的API调用**: 在3.2.7.2、3.3.10.2和4.3节中提到了处理使用NVIDIA Scalable Link Interface (SLI)的交替帧渲染(AFR)模式下设备的新API,这扩展了CUDA在多GPU系统中的应用。 7. **调用堆栈(Sections 3.2.9 and 3.3.12)**: 新增了关于调用堆栈的章节,帮助开发者理解和调试CUDA程序的执行流程,尤其是在涉及递归或复杂函数调用时。 8. **内存分配函数cuMemAllocPitch()的签名变更**: 第3.3.4节的第二个代码示例中,将pitch变量的类型从`unsigned int`改为`size_t`,以匹配`cuMemAllocPitch()`函数的更新签名,确保内存分配的正确性。 9. **内存分配函数cuMemAllocPitch()的最后代码示例**: 同样在3.3.4节,将最后一个代码示例中`bytes`变量的类型从`unsigned`改为`size_t`,以保持与函数接口的一致性。 这些更新和改进旨在提升CUDA编程的效率和灵活性,同时帮助开发者充分利用GPU的并行计算能力,实现高性能计算的应用。通过深入学习和应用这些知识点,开发者可以构建出更高效、更优化的CUDA程序。

解释:if(CUDA_FOUND) message(STATUS "Found CUDA Toolkit v${CUDA_VERSION_STRING}") enable_language(CUDA) set(HAVE_CUDA TRUE) if (CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA") if(${CUDA_VERSION_STRING} VERSION_GREATER_EQUAL "11.1") execute_process(COMMAND ${CMAKE_CUDA_COMPILER} --list-gpu-code RESULT_VARIABLE EXIT_CODE OUTPUT_VARIABLE OUTPUT_VAL) if(EXIT_CODE EQUAL 0) #Remove sm_ string(REPLACE "sm_" "" OUTPUT_VAL ${OUTPUT_VAL}) #Convert to list string(REPLACE "\n" ";" __CUDA_ARCH_BIN ${OUTPUT_VAL}) #Remove last empty entry list(REMOVE_AT __CUDA_ARCH_BIN -1) else() message(FATAL_ERROR "Failed to run NVCC to get list of GPU codes: ${EXIT_CODE}") endif() elseif(${CUDA_VERSION_STRING} VERSION_GREATER_EQUAL "11.0") set(__CUDA_ARCH_BIN "35;37;50;52;53;60;61;62;70;72;75;80") elseif(${CUDA_VERSION_STRING} VERSION_GREATER_EQUAL "10.0") set(__CUDA_ARCH_BIN "30;32;35;37;50;52;53;60;61;62;70;72;75") elseif(${CUDA_VERSION_STRING} VERSION_GREATER_EQUAL "9.1") set(__CUDA_ARCH_BIN "30;32;35;37;50;52;53;60;61;62;70;72") else() set(__CUDA_ARCH_BIN "30;32;35;37;50;52;53;60;61;62;70") endif() else() message(FATAL_ERROR "Unsupported CUDA compiler ${CMAKE_CUDA_COMPILER_ID}.") endif() set(CUDA_ARCH_BIN ${__CUDA_ARCH_BIN} CACHE STRING "Specify 'real' GPU architectures to build binaries for") if(POLICY CMP0104) cmake_policy(SET CMP0104 NEW) set(CMAKE_CUDA_ARCHITECTURES ${CUDA_ARCH_BIN}) message(STATUS "CMAKE_CUDA_ARCHITECTURES: ${CMAKE_CUDA_ARCHITECTURES}") #Add empty project as its not required with newer CMake add_library(pcl_cuda INTERFACE) else() # Generate SASS set(CMAKE_CUDA_ARCHITECTURES ${CUDA_ARCH_BIN}) # Generate PTX for last architecture list(GET CUDA_ARCH_BIN -1 ver) set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -gencode arch=compute_${ver},code=compute_${ver}") message(STATUS "CMAKE_CUDA_FLAGS: ${CMAKE_CUDA_FLAGS}") add_library(pcl_cuda INTERFACE) target_include_directories(pcl_cuda INTERFACE ${CUDA_TOOLKIT_INCLUDE}) endif () endif()

2023-05-30 上传