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 是一個更進階的屬性,它允許多個測試同時使用相同類型的多個資源,並以精細的方式指定它們的需求。