资源组

在 3.16 版本加入.

指定测试所需的资源,以对测试有意义的方式分组。有关此属性如何集成到 CTest 资源分配功能中的更多信息,请参阅 resource allocation

RESOURCE_GROUPS 属性是:ref:分号分隔的组描述列表 <CMake Language Lists>。每个条目都包含可选数量的组,使用描述后跟这些组的一系列资源要求。这些要求(和组数)以逗号分隔。资源需求包括资源类型的名称,后跟一个冒号,再后跟一个无符号整数,指定给定类型的一种资源所需的槽数。

RESOURCE_GROUPS 属性告诉 CTest 测试期望以对测试有意义的方式分组使用哪些资源。测试本身必须读取 环境变量 以确定已将哪些资源分配给每个组。例如,每个组可能对应于测试将在执行时生成的进程。

考虑以下示例:

add_test(NAME MyTest COMMAND MyExe)
set_property(TEST MyTest PROPERTY RESOURCE_GROUPS
  "2,gpus:2"
  "gpus:4,crypto_chips:2")

在这个例子中,有两个组描述(隐式用分号分隔。)第一个描述的内容是 2,gpus:2。此描述指定 2 个组,每个组需要来自单个 GPU 的 2 个插槽。第二个描述的内容是``gpus:4,crypto_chips:2``。此描述未指定组计数,因此假定默认值为 1。这个单个组需要来自单个 GPU 的 4 个插槽和来自单个加密芯片的 2 个插槽。总共为该测试指定了 3 个资源组,每个资源组都有其独特的要求。

请注意,资源类型后面的插槽数指定来自资源的*单个*实例的插槽。如果资源组可以容忍从同一资源的不同实例接收槽,则可以通过将规范拆分为一个槽的多个要求来表明这一点。例如:

add_test(NAME MyTest COMMAND MyExe)
set_property(TEST MyTest PROPERTY RESOURCE_GROUPS
  "gpus:1,gpus:1,gpus:1,gpus:1")

在这种情况下,单个资源组表明它需要四个 GPU 插槽,所有这些插槽都可能来自不同的 GPU(尽管它们不必如此;CTest 可能仍会从同一 GPU 分配插槽。)

当 CTest 为测试设置 环境变量 时,它会根据组描述分配一个组号,从左侧的 0 开始,左侧的组数减去 1正确的。例如,在上面的示例中,第一个描述中的两个组的 ID 为 0 和 1,而第二个描述中的单个组的 ID 为 2。

RESOURCE_GROUPSRESOURCE_LOCK 属性都有相似的用途,但它们不同且正交。 RESOURCE_GROUPS 指定的资源不会影响 RESOURCE_LOCK,反之亦然。 RESOURCE_LOCK 是一个更简单的属性,用于锁定一个全局资源,RESOURCE_GROUPS 是一个更高级的属性,允许多个测试同时使用多个相同类型的资源,并详细说明它们的要求-粒度方式。