Spec-Zone.ru › CMake 3.21

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 группы, каждая из которых требует 2 слота с одного GPU. Содержимое второго описания — gpus:4,crypto_chips:2. Это описание не определяет количество групп, поэтому предполагается значение по умолчанию 1. Эта единственная группа требует 4 слота с одного GPU и 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 справа. Например, в примере выше две группы в первом описании будут иметь идентификаторы 0 и 1, а единственная группа во втором описании будет иметь идентификатор 2.

И свойства RESOURCE_GROUPS и RESOURCE_LOCK служат похожим целям, но они различны и ортогональны. Ресурсы, указанные в RESOURCE_GROUPS, не влияют на RESOURCE_LOCK, и наоборот. В то время как RESOURCE_LOCK — это более простое свойство, используемое для блокировки одного глобального ресурса, RESOURCE_GROUPS — более продвинутое свойство, которое позволяет нескольким тестам одновременно использовать несколько ресурсов одного типа, точно задавая их потребности.

© 2000–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.21/prop_test/RESOURCE_GROUPS.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API