关于最小微架构检查的 CMake 习惯语

CMake idiom regarding minimum microarchitecture checking

提问人:einpoklum 提问时间:7/18/2023 最后编辑:einpoklum 更新时间:7/20/2023 访问量:37

问:

假设我有一个 CUDA 项目,我正在编写它的 .CMakeLists.txt

在我的项目中,我有几个带有内核的源文件,每个文件都有它支持的最低 NVIDIA 微架构版本。.cu

在我的 ,我希望能够...CMakeLists.txt

  • 检测或至少能够指定每个文件的最小 uarch(不是要为其构建的 uarchitecture 集 - 可以为其构建目标的最小值)。
  • (也许)计算并打印这些可接受的计算能力范围的交集(因为我只谈到了最小值 - 它是最小值的最大值)。
  • 如果系统上没有支持 uarch 的 GPU,则 CMake 配置失败 (...除非这是交叉构建,在这种情况下,用户指定了目标架构,并且构建系统 GPU 无关紧要)。
  • 能够指定我针对的 GPU,以便仅根据可接受的 uarches/CC 值范围检查其 CC。

在查看文档时,我并没有真正看到任何这些,例如在CUDA_ARCHITECTURES页和CMAKE_CUDA_ARCHITECTURES页。

C++ CMake 惯用语 计算能力

评论

0赞 Marek R 7/18/2023
这是一个奇怪的要求: - 此要求没有意义的示例:在没有所需硬件的持续集成系统中构建应用程序,但随后用于测试。必须限制构建系统是一件坏事。fail if there are no GPUs on the system supporting a uarch in the intersection.
0赞 einpoklum 7/18/2023
@MarekR:这将是交叉构建的一个例子。我会在问题中澄清。
0赞 nega 7/19/2023
在 CMake 之外执行此操作。使用 shell 脚本、python 程序等,通过 CMake 运行它并对其结果进行操作。execute_process()
0赞 einpoklum 7/19/2023
@nega:但 CMake 本身应该支持这一点——这是构建面向 GPU 的 CUDA 代码时最常见的场景之一。当然,我总是可以通过自己编程并运行 execute_process()...
0赞 nega 7/20/2023
要检测您的最小 uarch,您必须“掏空”,或将文件啃入 CMake 字符串,并进行子字符串/正则表达式搜索。要指定最小 UARCH,请使用源文件属性 () 设置相关的编译器标志。您必须滚动自己的函数/宏来计算 CMake 列表的交集(或 Google 列表,或在此处提出单独的问题等)。要检测已安装GPU的功能,您必须“掏钱”。若要指定面向的 GPU,请使用目标属性设置相关的编译器/链接器标志。COMPILE_*

答:

0赞 einpoklum 7/20/2023 #1

显然,CMake 不支持这一点。我已经向 Kitware 提交了一个错误,用于在配置期间通过源文件属性和一些设置算术添加此类支持。