RESOURCE_GROUPS
Укажите ресурсы, необходимые для тестирования, сгруппированные таким образом, чтобы это имело смысл для тестирования. См. распределение ресурсов для получения дополнительной информации о том, как эта свойство интегрируется в функцию распределения ресурсов 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 слота с одного графического процессора. Содержимое второго описания - gpus:4,crypto_chips:2. Это описание не указывает количество групп, поэтому предполагается значение по умолчанию 1. Эта единственная группа требует 4 слота с одного графического процессора и 2 слота с одного криптографического чипа. В общей сложности для этого теста указано 3 группы ресурсов, каждая со своими уникальными требованиями.
Обратите внимание, что количество слотов после типа ресурса указывает на слоты с одного единичного экземпляра ресурса. Если группа ресурсов может допускать получение слотов из разных экземпляров одного и того же ресурса, она может указать это, разделив спецификацию на несколько требований по одному слоту. Например:
add_test(NAME MyTest COMMAND MyExe) set_property(TEST MyTest PROPERTY RESOURCE_GROUPS "gpus:1,gpus:1,gpus:1,gpus:1")
В этом случае единственная группа ресурсов указывает, что ей необходимо четыре слота графического процессора, все из которых могут поступать с разных графических процессоров (хотя это не обязательно; CTest может все же назначить слоты с одного и того же графического процессора.)
Когда CTest устанавливает переменные среды для теста, он назначает номер группы на основе описания группы, начиная с 0 слева и заканчивая номером групп минус 1 справа. Например, в примере выше две группы в первом описании будут иметь идентификаторы 0 и 1, а единственная группа во втором описании будет иметь идентификатор 2.
Обе свойства RESOURCE_GROUPS и RESOURCE_LOCK служат схожим целям, но они разные и ортогональные. Ресурсы, указанные в RESOURCE_GROUPS, не влияют на RESOURCE_LOCK, и наоборот. В то время как RESOURCE_LOCK — это более простое свойство, используемое для блокировки одного глобального ресурса, RESOURCE_GROUPS — это более продвинутое свойство, которое позволяет нескольким тестам одновременно использовать несколько ресурсов одного типа, указывая их требования в мельчайших деталях.
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.16/prop_test/RESOURCE_GROUPS.html