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