К README · Указатель документации
Цена функции до прогона
Сколько шагов сделает функция, сколько памяти возьмёт и сколько это секунд на этой машине — печатается до прогона, многочленом от размеров входа. Решение и его границы — ADR-0083.
Цена функции
bootstrap/flang run-script cost docs/examples/web/orders-api.flang \
--function 'Обработать запрос' --sizes '|хвостадреса|=132' \
--profile scripts/cost/profiles/dev.profile
| ключ | что делает | ||
|---|---|---|---|
--function «Имя» | функция, цену которой печатать | ||
--all | цена каждой функции файла, по строке на функцию | ||
| `--sizes 'н=20, | xs | =100'` | подставить размеры и напечатать числа; без него — только многочлены |
--profile <файл> | перевести шаги в секунды и байты по профилю машины | ||
--promise 'многочлен' | отказать кодом 1, если обещанная цена меньше выведенной | ||
--no-printed | не печатать программу в C (без границы напечатанного C) |
Размеры называются так: н — значение числа н; |s| — байты строки s; |xs| — длина списка xs; |xs[]| — размер его элемента.
Вывод говорит, откуда каждое число: «выведена из устройства функции» — без допущений; «ОЦЕНЕНО» — с допущением, оно напечатано; «оценки нет» — с причиной. Граница — сверху: настоящий прогон не дороже, но может быть намного дешевле.
Цена одного прогона
flang run --cost печатает в поток ошибок, сколько стоил прогон:
цена прогона: шагов 595213, пик памяти 179953664 байт, секунд 2.947812
Шаги — тот же счётчик, что ограничивает --max-steps. Секунды и память включают старт толкователя (разбор и проверку программы).
Напечатанный прогонщик (flang emit --target c --cli) отвечает на запрос с полем "cost":"1" полями "steps", "handed", "reserved", "depth" и "seconds".
Профиль машины
bootstrap/flang run-script cost:calibrate
печатает профиль этой машины: секунды на шаг толкователя и напечатанного C (нижнюю и верхнюю), секунды на единицу длины, байты на байт оценки, имя машины, ядра и загрузку. Сохраните вывод в scripts/cost/profiles/<машина>.profile. Профиль снимают на той машине, где программа будет работать.
Сверка и подлог
bootstrap/flang run-script cost:validate— 21 функция на нескольких размерах: граница против измеренного, толкователем и напечатанным C.bootstrap/flang run-script cost:forgery— заниженное обещание и заниженный--max-stepsдолжны быть отвергнуты; ответ «подлог пойман: коды 1 0 0 1».