Demostración de TAKT: indicadores ADX, ATR y PSAR (adaptación de ta de Python)
Un mismo benchmark en cuatro niveles: la compilación original, el nivel 0 (ajuste de la compilación), el nivel 1 (optimización automática con corrección demostrada) y el nivel 2 (un ingeniero). La salida de los cuatro programas es idéntica bit a bit. Aquí encontrará los programas listos para cada nivel, el código fuente de la versión original, el generador de datos, la salida esperada y las mediciones.
Qué calcula el benchmark
Un barrido de parámetros sobre una misma historia de 1 M de barras: ATR, ADX, +DI y −DI para las
ventanas 7, 10, 14, 20 y 28, y Parabolic SAR en cuatro configuraciones. Para cada serie se imprime
una suma de comprobación de todos sus valores. La adaptación reproduce ta 0.11.0 bit a bit,
incluido el orden de suma de numpy (tools/ta_reference_check.py).
Medición (banco de TAKT)
AMD Threadripper PRO 5975WX (Zen 3), ciclos en modo usuario (vPMU) en una VM aislada sobre un núcleo dedicado, 9 rondas intercaladas, mediana. Se midieron exactamente estos archivos.
| Nivel | Compilación | Ciclos, M | Aceleración | Tiempo, ms | vs. nivel 0: ciclos · tiempo |
|---|---|---|---|---|---|
| Línea base | cargo build --release |
1.376,9 | 1,00× | 503 | — |
| Nivel 0 | LTO, codegen-units 1, target-cpu x86-64-v3 | 1.248,6 | 1,10× | 463 | 1,00× · 1,00× |
| Nivel 1 | receta + transformación automática con corrección demostrada | 791,4 | 1,74× | 342 | 1,58× · 1,35× |
| Nivel 2 | receta + trabajo de un ingeniero | 143,3 | 9,61× | 81 | 8,72× · 5,73× |
Como comparación, en el mismo núcleo: ta de Python tarda unos 208 s por cada 1 M de barras; el
mismo algoritmo en Numba (también bit a bit) tarda 0,335 s de cálculo más 0,201 s de
pandas.read_csv; el nivel 2 tarda 0,018 s de cálculo y 0,020 s de análisis del CSV. Los detalles
están en measurements.json.
Ejecución
python3 tools/gen_ohlc.py 1000000 data/ohlc.csv # los mismos datos que en la medición (crea data/)
TAKT_INPUTS=data bin/ta-bench-level2 > out.txt
cmp out.txt expected_stdout.txt # idénticos byte a byte
for l in base level0 level1 level2; do TAKT_INPUTS=data bin/ta-bench-$l | sha256sum; done
Linux x86-64 (glibc). Los niveles 0–2 están compilados para x86-64-v3 (AVX2, FMA, BMI2: Intel Haswell y posteriores, AMD Zen y posteriores); FMA no se usa en el cálculo.
Equivalencia
La salida de los cuatro programas coincide con la entrada anterior y con 60 conjuntos generados de
otras formas, tamaños y formatos CSV, incluidas las entradas con las que el programa termina en
pánico. La versión original coincide con ta de Python bit a bit:
tools/ta_reference_check.py data/ohlc.csv bin/ta-dump-base out/ (requiere pandas, numpy,
ta).
Contenido
bin/: los programas de cada nivel yta-dump-basepara la verificación cruzada contade Python;source/: el código fuente de la versión original (la adaptación deta), a partir del cual se compilan la línea base y el nivel 0;tools/: el generador de datos, la verificación cruzada contay una versión en Numba para comparar;expected_stdout.txt,measurements.json,SHA256SUMS,LICENSE;README.<language>.md: este texto en otros idiomas.
El código fuente de los niveles 1 y 2 no se publica: entregamos compilaciones.