CUDA Kernel Academy 代码风格指南

本文档定义 CUDA Kernel Academy 项目的代码风格和技术标准。

C++/CUDA 标准

模块 最低标准 推荐标准
01-sgemm-tutorial C++17 C++17
02-tensorcraft-core C++17 C++20
03-hpc-advanced C++20 C++20
04-inference-engine C++17 C++17
set(CMAKE_CUDA_STANDARD 17)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)

命名规范

文件命名

cuda_check.hpp    # C++ 头文件 (.hpp)
gemm.cuh          # CUDA 头文件 (.cuh)
inference_engine.cpp  # C++ 源文件 (.cpp)
tiled_gemm.cu     # CUDA 源文件 (.cu)
test_gemm.cpp     # 测试文件 (test_ 前缀)

代码命名

// 命名空间: snake_case
namespace tensorcraft { }
namespace mini_inference { }
namespace hpc { }

// 类/结构体: PascalCase
class InferenceEngine { };
struct GemmConfig { };

// 函数: snake_case
void launch_gemm(...);
float compute_gflops(...);

// 变量: snake_case
int block_size;
float* device_ptr;

// 常量: kPascalCase 或 UPPER_SNAKE_CASE
constexpr int kBlockSize = 32;
constexpr int TILE_SIZE = 16;

// 宏: UPPER_SNAKE_CASE
#define TC_CUDA_CHECK(call) ...

// 私有成员: trailing underscore
class MyClass {
private:
    int value_;
    float* data_;
};

模块命名空间

namespace sgemm { }           // 01-sgemm-tutorial
namespace tensorcraft { }     // 02-tensorcraft-core
namespace hpc { }             // 03-hpc-advanced
namespace mini_inference { }  // 04-inference-engine

CUDA 错误处理

使用 common/include/cuda_academy/ 中的共享宏:

#include "cuda_academy/cuda_academy.hpp"

CUDA_CHECK(cudaMalloc(&ptr, size));
kernel<<<grid, block>>>(args);
CUDA_CHECK(cudaGetLastError());
CUDA_CHECK(cudaDeviceSynchronize());

CMake 规范

# C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# CUDA 标准
set(CMAKE_CUDA_STANDARD 17)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)

# CUDA 架构 (Volta 到 Hopper)
set(CMAKE_CUDA_ARCHITECTURES "70;75;80;86;89;90" CACHE STRING "CUDA architectures")

# 编译选项
add_compile_options(
    $<$<COMPILE_LANGUAGE:CXX>:-Wall -Wextra -Wpedantic>
    $<$<COMPILE_LANGUAGE:CUDA>:--expt-relaxed-constexpr --extended-lambda>
)

代码格式化

项目使用 .clang-format.editorconfig 定义格式化规则。

# 格式化单个文件
clang-format -i src/gemm.cu

# 运行 pre-commit 检查
pre-commit run --all-files

提交前检查清单

  • [ ] 代码通过编译,无警告
  • [ ] 遵循命名规范
  • [ ] 使用 RAII 管理资源
  • [ ] 添加 CUDA 错误检查
  • [ ] 运行 pre-commit run --all-files
  • [ ] 添加单元测试

results matching ""

    No results matching ""