RESOURCE_GROUPS

3.16 版新增。

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

RESOURCE_GROUPS 属性是一个由分号分隔的列表,包含多个组描述。每个条目由可选的组数量(使用该描述)和随后的一系列资源需求组成。这些需求(以及组数量)用逗号分隔。资源需求由资源类型名称、冒号以及指定在该类型资源上所需槽位(slots)数量的无符号整数组成。

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")

在这种情况下,单个资源组表示它需要 4 个 GPU 槽位,所有这些槽位可能来自不同的 GPU(尽管不一定非要如此;CTest 仍可能分配来自同一 GPU 的槽位)。

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

RESOURCE_GROUPSRESOURCE_LOCK 属性目的相似,但它们是独特且正交的。由 RESOURCE_GROUPS 指定的资源不会影响 RESOURCE_LOCK,反之亦然。虽然 RESOURCE_LOCK 是一种用于锁定单个全局资源的更简单的属性,但 RESOURCE_GROUPS 是一种更高级的属性,允许多个测试同时使用同一类型的多种资源,并以细粒度的方式指定它们的需求。