Витрина TAKT: индикаторы ADX, ATR и PSAR (порт Python ta)
Один и тот же бенчмарк на четырёх уровнях: исходная сборка, базовый уровень (настройка сборки), уровень 1 (автоматическая доказанная оптимизация) и уровень 2 (инженер). Вывод всех четырёх программ совпадает до бита. Здесь — готовые программы всех уровней, исходник исходной версии, генератор данных, ожидаемый вывод и замеры.
Что считает бенчмарк
Свип параметров на одной истории из 1 млн баров: ATR, ADX, +DI, −DI для окон 7, 10, 14, 20, 28 и
Parabolic SAR в четырёх конфигурациях. Для каждого ряда печатается контрольная сумма всех значений.
Порт повторяет ta 0.11.0 бит в бит, включая порядок суммирования numpy
(tools/ta_reference_check.py).
Замер (стенд TAKT)
AMD Threadripper PRO 5975WX (Zen 3), такты пользовательского режима (vPMU) в изолированной VM на выделенном ядре, 9 чередующихся раундов, медиана. Замерены ровно эти файлы.
| Уровень | Сборка | Такты, млн | Ускорение | Время, мс | к базовому уровню: такты · время |
|---|---|---|---|---|---|
| База | cargo build --release |
1 376,9 | 1,00× | 503 | — |
| Базовый уровень | LTO, codegen-units 1, target-cpu x86-64-v3 | 1 248,6 | 1,10× | 463 | 1,00× · 1,00× |
| Уровень 1 | рецепт + автоматическое доказанное преобразование | 791,4 | 1,74× | 342 | 1,58× · 1,35× |
| Уровень 2 | рецепт + работа инженера | 143,3 | 9,61× | 81 | 8,72× · 5,73× |
Для сравнения на том же ядре: Python ta — около 208 с на 1 млн баров; тот же алгоритм на Numba
(тоже бит в бит) — 0,335 с вычислений плюс 0,201 с pandas.read_csv; уровень 2 — 0,018 с
вычислений и 0,020 с разбора CSV. Подробно — measurements.json.
Запуск
python3 tools/gen_ohlc.py 1000000 data/ohlc.csv # те же данные, что на замере (создаст data/)
TAKT_INPUTS=data bin/ta-bench-level2 > out.txt
cmp out.txt expected_stdout.txt # совпадает до байта
for l in base level0 level1 level2; do TAKT_INPUTS=data bin/ta-bench-$l | sha256sum; done
Linux x86-64 (glibc). Уровни 0–2 собраны для x86-64-v3 (AVX2, FMA, BMI2: Intel Haswell и новее, AMD Zen и новее); FMA в вычислениях не используется.
Эквивалентность
Вывод всех четырёх программ совпадает на входе выше и на 60 сгенерированных наборах других форм,
размеров и форматов CSV, включая входы, на которых программа завершается паникой. Исходная версия
совпадает с Python ta бит в бит: tools/ta_reference_check.py data/ohlc.csv bin/ta-dump-base out/
(нужны pandas, numpy, ta).
Состав
bin/— программы всех уровней иta-dump-baseдля сверки с Pythonta;source/— исходник исходной версии (портta), из него собраны база и базовый уровень;tools/— генератор данных, сверка сta, Numba-версия для сравнения;expected_stdout.txt,measurements.json,SHA256SUMS,LICENSE;README.md— этот текст на английском,README.<язык>.md— на других языках.
Исходники уровней 1 и 2 не публикуются: мы поставляем сборки.