CMake Notes

从来没见过语法像CMake这么烂的DSL,构建项目的时候总是要去查文档,但是查了文档还是不知道该怎么办💢,这里记一下自己常用的一些写法。

有用的Tutorial

cmake cook book

都塞到lib里吧!

如果我们希望生成的lib能够在制定的目录出现,那么我们需要在最顶层的CMakeList里加上:

1
SET (LIBRARY_OUTPUT_PATH_ROOT ${PROJECT_SOURCE_DIR}/lib)

这样,我们在项目中生成的lib文件就会自动的生成到项目主目录下的lib目录了,如下:

image-20220211145901447

如果在Cmake里进行了lib的创建:

1
2
3
4
add_library(${PROJECT_NAME} SHARED
src/Interface.cpp
src/tools.cpp
src/Parser.cpp)

则该lib文件会在lib目录下产生。

创建cmake目录

一些项目的主目录下会有cmake这个目录,具体来讲里面会存放一些cmake文件,大概存放的内容一般有:

  1. 一些cmake的指令文件,例如一般来讲检查环境来设置变量的check.cmake,用来引入外部库的xxx.cmake,使用的方法也很简单,直接include绝对路径即可

    1
    2
    # Do check list
    include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/check.cmake")

    或者提前制定好cmake的module path,这样可以直接用文件名完成任务:

    1
    2
    set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
    include(lexy)
  2. 另外一种很常见的是在这个目录下再放一个module文件夹,里面存放的是一些查找Pakcage的Find脚本,例如FindCUDNN.cmake之类的,在CMakeList里通过FIND_PACKAGE(CUDNN REQUIRED)就会自动的调用FindCUDNN来找到CUDNN并设置XXX_FOUND、XXX_INCLUDE等变量。

    1
    2
    find_package(Threads)
    target_link_libraries(calc-cpu-flops fpkernel ${CMAKE_THREAD_LIBS_INIT})

用变量表示目录下的一堆文件

1
2
file(GLOB LIB_SOURCE "${CMAKE_CURRENT_LIST_DIR}/cpufp_kernel_*.s")
add_library(fpkernel ${LIB_SOURCE})

添加header目录

1
2
3
4
include_directories(${PROJECT_SOURCE_DIR})
include_directories(
${PROJECT_SOURCE_DIR}/include
)

Find Libs

openmpi

1
2
3
4
5
6
7
find_package(MPI REQUIRED)
add_executable(hello-mpi hello-mpi.cpp)

target_link_libraries(hello-mpi
PUBLIC
MPI::MPI_CXX
)

openmp

1
2
3
4
5
6
7
8
find_package(OpenMP REQUIRED)

if (OPENMP_FOUND)
include_directories("${OPENMP_INCLUDES}")
link_directories("${OPENMP_LIBRARIES}")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif(OPENMP_FOUND)

function 缩减工作量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function(add_mma_test_executable name)
add_executable(${name} ${name}.cu)
set_target_properties(${name} PROPERTIES CUDA_ARCHITECTURES "86")
set_target_properties(${name} PROPERTIES
CUDA_SEPARABLE_COMPILATION ON)
target_link_libraries(${name} PRIVATE ${CUDA_LIBRARIES})
endfunction()

add_mma_test_executable(mma_m8n8k4_fp16)

add_mma_test_executable(mma_m8n8k16_int8)

add_mma_test_executable(mma_m8n8k16_int8_ldmatrix)

add_mma_test_executable(mma_int8_64x64x16)

add_mma_test_executable(mma_int8_64x64x64)

add_mma_test_executable(mma_int8_128x256x64)

一些小问题

  1. Remote SSH的时候,可能有时候会出现环境配置没有问题,但是头文件在clion里就是找不到,会出现红色的下划线

    解决:Tools | Resync with Remote Hosts

在MacBook Pro 2019上优化GEMM 摄影小记

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×