← к витрине

Витрина 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).

Состав

Исходники уровней 1 и 2 не публикуются: мы поставляем сборки.

Исходный текст: README.ru.md

Telegram