flang компилятор доказывает, что программа не зациклится 0.7.29 GitHub English

К 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. Профиль снимают на той машине, где программа будет работать.

Сверка и подлог