RESOURCE_GROUPS

在版本 3.16 中添加。

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

RESOURCE_GROUPS 属性是组描述的以分号分隔的列表。每个条目由使用描述的分组可选数量以及针对这些组的一系列资源需求组成。这些要求(以及分组数量)由逗号分隔。资源需求由资源类型名称、冒号和指定给定类型单个资源所需槽位的无符号整数组成。

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 是一个更高级的属性,它允许多个测试同时使用多个同类型资源,而且还能细粒度地指定它们的各项要求。