cutlass介绍和基本使用方法

1.项目简介

CUTLASS(CUDA Templates for Linear Algebra Subroutines)是 NVIDIA 开发的一个高性能 CUDA C++模板库,专注于实现高效的矩阵乘法(GEMM)及相关计算。它通过 C++模板机制将复杂的线性代数运算分解为可重用的模块化组件,支持多种精度和架构优化。

2.环境准备

在开始使用 CUTLASS 之前,请确保你的开发环境满足以下要求:

• 硬件要求:

  • 支持 CUDA 的 NVIDIA GPU,架构至少为 Volta(计算能力 7.0)及以上。

  • 推荐使用 Ampere(计算能力 8.0)或 Hopper(计算能力 9.0)架构。

• 软件要求:

  • CUDA Toolkit:版本 11.4 及以上。

  • C++编译器:支持 C++17 标准。

  • CMake:版本 3.18 及以上。

3.安装与编译

3.1 克隆项目

通过以下命令克隆 CUTLASS 项目:

git clone https://github.com/NVIDIA/cutlass.git

3.2 创建构建目录

创建一个个人构建目录并进入该目录:

mkdir cutlass_test
cd cutlass_test

3.3 配置项目

可以参考官方文档的readme进行配置和使用,但是个人不是很建议,因为整个编译过程冗长,且涉及到的文件众多,不适合入门学习,需要有一定基础之后使用,下面给出本人在linux下的使用方式

  • 编写CmakeLists.txt
cmake_minimum_required(VERSION 3.18) # 指定最低的 cmake 版本要求

# 项目名称和语言
project(MyCudaProject 
        LANGUAGES CXX CUDA 
    )
set(CUDA_TOOLKIT_ROOT_DIR $ENV{USED_CUDA_PATH})

# 查找 CUDA
find_package(CUDA REQUIRED)

set(CODE_PATH $ENV{PROJECT_PATH}/code)
set(CUDA_PATH $ENV{USED_CUDA_PATH})

# 设置编译选项
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    set(CUDA_NVCC_FLAGS "-gencode arch=compute_89,code=sm_89 --keep -g --ptxas-options=-v -std=c++17 -G -O0")
    message(STATUS "Configuring for Debug build")
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
    set(CUDA_NVCC_FLAGS "-gencode arch=compute_89,code=sm_89 --keep -g --ptxas-options=-v -std=c++17 -O3")
    message(STATUS "Configuring for Debug build")
else()
    message(WARNING "Unknown build type: ${CMAKE_BUILD_TYPE}")
endif()

link_directories(
    # ${CUDA_PATH}/targets/x86_64-linux/lib
)

# 包含 CUDA 头文件目录
include_directories(
    ${CODE_PATH}/../../cutlass/examples/common
    ${CODE_PATH}/../../cutlass/include
    ${CODE_PATH}/../../cutlass/tools/util/include
)

# 定义要编译的 CUDA 源文件
FILE(GLOB_RECURSE files
    ${CODE_PATH}/source/basic_gemm.cu
)

# 添加一个可执行文件
cuda_add_executable(MyCudaExecutable ${files})

以上代码中的运行示例是 basic_gemm.cu,可以在cutlass/examples/00_basic_gemm/basic_gemm.cu 找到

  • 编写build.sh 脚本
#!/bin/bash

if [ $# -eq 0 ]; then
    echo "Usage: $0 [debug][release]"
    exit 1
fi

if [ $1 == "debug" ]; then
    echo "Setting environment for Debug build"
    export CMAKE_BUILD_TYPE="Debug"
elif [ $1 == "release" ]; then
    echo "Setting environment for Release build"
    export CMAKE_BUILD_TYPE="Release"
else
    echo "Invalid argument: $1"
    echo "Usage: $0 [debug][release]"
    exit 1
fi

if [ -d "build" ]; then
    rm -rf build
fi
mkdir build

cd build

BUILD_PATH=$(pwd)

export PROJECT_PATH=$BUILD_PATH/../
export USED_CUDA_PATH=/usr/local/cuda-12.5/

cmake -DCMAKE_CUDA_COMPILER=/usr/local/cuda-12.5/bin/nvcc ..

make -j

echo "finish!"

注意,以上代码中的 CUDA Toolkit 版本和路径需要结合自身环境。

3.4 编译项目

整个项目cutlass_test布局如下所示,cutlass位于和cutlass_test同级目录

.
├── CMakeLists.txt
├── build.sh
└── code
    ├── include
    └── source
        ├── basic_gemm.cu
./build.sh release  # 编译release版本

4.运行示例

CUTLASS 提供了多个示例,可以在 cutlass/examples 目录下找到,帮助你快速了解其功能。如果你按照上文步骤已经编译好了,那么直接运行

./build/MyCudaExecutable

就可以看到运行结果,是 Passed。如果你想添加别的用例或者进行修改,那么需要深入了解cutlass的具体内容,可以仔细阅读 cutlass/media/docs 下的文档,这里就不作展开了。

posted @ 2025-03-15 18:37  Philip1992  阅读(1166)  评论(0)    收藏  举报