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_GROUPS
和 RESOURCE_LOCK
属性都服务于类似的目的,但它们是不同的且正交的。RESOURCE_GROUPS
指定的资源不影响 RESOURCE_LOCK
,反之亦然。 RESOURCE_LOCK
是一个更简单的属性,用于锁定一个全局资源,而 RESOURCE_GROUPS
是一个更高级的属性,允许多个测试同时使用同一类型的多个资源,以细粒度的方式指定其需求。