Налаштування пропускної здатності та глибини черги
| Поле | Значення |
|---|---|
| Категорія | Графи та конвеєри |
| Складність | Просунутий |
| Орієнтовний час читання | 15-20 minutes |
| Мітки | performance, tuning, async, queues |
Налаштування продуктивності дає позитивний результат лише тоді, коли ваша базова модель коректності є стабільною; у цій главі ми припускаємо, що це так, і переходимо до налаштувань, які визначають, як працює асинхронний конвеєр, коли обсяг роботи перевищує швидкість його обробки. Ви встановите глибину черги, визначите, що відбуватиметься, коли черга заповниться, передасте детерміновану серію кадрів у неблокуючому режимі, обробите р езультати та переглянете звіт про вимірювання, який покаже, чи були втрачені дані та скільки часу знадобилося для обробки кожного кадру.
У результаті ви отримаєте робочу систему для вимірювання асинхронного виконання в умовах обмеженої пропускної здатності: кількість елементів у черзі, кількість втрачених елементів, кількість отриманих результатів, середню затримку та вартість передачі. Той самий цикл є основою для налаштування реального конвеєра відповідно до евристик, описаних у На практиці.
Покроковий огляд
Налаштуйте параметри виконання
RunOptions визначає, як реалізується асинхронна поведінка під навантаженням. Ми встановлюємо queue_depth (кількість зразків, які може прийняти середовище виконання), overflow_policy (що відбувається, коли черга заповнюється — Block, KeepLatest або DropIncoming), output_memory = Owned (повернені тензори зберігають свої дані, тому вони залишаються доступними після отримання). Потім ми build() граф у Async режимі, що забезпечує виконання з незалежними сторонами виробника та споживача.
Політику обробки переповнення аналізують з --drop у simaai::neat::OverflowPolicy::{Block,KeepLatest,DropIncoming}; graph.build(input, opt) повертає дескриптор виконання.
simaai::neat::RunOptions opt;
opt.queue_depth = queue_depth;
opt.overflow_policy = parse_drop_policy(argc, argv);
opt.output_memory = simaai::neat::OutputMemory::Owned;
auto run = graph.build(std::vector<cv::Mat>{rgb}, opt);