# Vitrine TAKT: indicadores ADX, ATR e PSAR (um port do `ta` do Python) Um mesmo benchmark em quatro níveis: o build original, o nível 0 (ajuste do build), o nível 1 (otimização automática comprovada) e o nível 2 (um engenheiro). A saída dos quatro programas é idêntica até o último bit. Aqui você encontra os programas prontos de todos os níveis, o código-fonte da versão original, o gerador de dados, a saída esperada e as medições. ## O que o benchmark calcula Uma varredura de parâmetros sobre um único histórico de 1 mi de barras: ATR, ADX, +DI, −DI para as janelas 7, 10, 14, 20, 28 e o Parabolic SAR em quatro configurações. Para cada série, é impresso um checksum de todos os valores. O port reproduz o `ta` 0.11.0 bit a bit, inclusive a ordem de soma do numpy (`tools/ta_reference_check.py`). ## Medição (bancada TAKT) AMD Threadripper PRO 5975WX (Zen 3), ciclos em modo usuário (vPMU) em uma VM isolada, em um núcleo dedicado, 9 rodadas intercaladas, mediana. Foram medidos exatamente estes arquivos. | Nível | Build | Ciclos, mi | Aceleração | Tempo, ms | vs nível 0: ciclos · tempo | |---|---|---:|---:|---:|---:| | Linha de base | `cargo build --release` | 1.376,9 | 1,00× | 503 | — | | Nível 0 | LTO, codegen-units 1, target-cpu x86-64-v3 | 1.248,6 | 1,10× | 463 | 1,00× · 1,00× | | Nível 1 | receita + transformação automática comprovada | 791,4 | 1,74× | 342 | 1,58× · 1,35× | | Nível 2 | receita + trabalho de um engenheiro | 143,3 | 9,61× | 81 | 8,72× · 5,73× | Para comparação, no mesmo núcleo: o `ta` em Python leva cerca de 208 s por 1 mi de barras; o mesmo algoritmo em Numba (também bit a bit) leva 0,335 s de cálculo mais 0,201 s de `pandas.read_csv`; o nível 2 leva 0,018 s de cálculo e 0,020 s de parsing do CSV. Os detalhes estão em `measurements.json`. ## Execução ```sh python3 tools/gen_ohlc.py 1000000 data/ohlc.csv # os mesmos dados da medição (cria data/) TAKT_INPUTS=data bin/ta-bench-level2 > out.txt cmp out.txt expected_stdout.txt # idêntico byte a byte for l in base level0 level1 level2; do TAKT_INPUTS=data bin/ta-bench-$l | sha256sum; done ``` Linux x86-64 (glibc). Os níveis 0–2 são compilados para x86-64-v3 (AVX2, FMA, BMI2: Intel Haswell e mais recentes, AMD Zen e mais recentes); FMA não é usado no cálculo. ## Equivalência A saída dos quatro programas coincide na entrada acima e em 60 conjuntos gerados com outras formas, tamanhos e formatos de CSV, inclusive entradas em que o programa termina com panic. A versão original coincide com o `ta` em Python bit a bit: `tools/ta_reference_check.py data/ohlc.csv bin/ta-dump-base out/` (requer `pandas`, `numpy`, `ta`). ## Conteúdo - `bin/`: programas de todos os níveis e `ta-dump-base` para a verificação cruzada com o `ta` em Python; - `source/`: o código-fonte da versão original (o port do `ta`), a partir do qual são compilados a linha de base e o nível 0; - `tools/`: o gerador de dados, a verificação cruzada com o `ta` e uma versão em Numba para comparação; - `expected_stdout.txt`, `measurements.json`, `SHA256SUMS`, `LICENSE`; - `README..md`: este texto em outros idiomas. O código-fonte dos níveis 1 e 2 não é publicado: entregamos builds.