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 是一个更高级的属性,它允许多个测试同时使用同一类型的多个资源,并以精细的方式指定它们的需求。