# TAKT 쇼케이스: ADX, ATR, PSAR 지표 (Python `ta`의 포트) 하나의 벤치마크를 네 가지 빌드로 제공합니다. 원본 빌드, 레벨 0(빌드 튜닝), 레벨 1(정확성이 증명된 자동 최적화), 레벨 2(엔지니어 작업)입니다. 네 프로그램의 출력은 비트 단위로 동일합니다. 이 패키지에는 레벨별 실행 프로그램, 원본 버전의 소스, 데이터 생성기, 기대 출력, 측정 결과가 들어 있습니다. ## 벤치마크가 계산하는 내용 100만 개 바로 이루어진 하나의 히스토리에 대한 파라미터 스윕입니다. 윈도우 7, 10, 14, 20, 28에 대한 ATR, ADX, +DI, −DI와 네 가지 설정의 Parabolic SAR를 계산하고, 시계열마다 모든 값의 체크섬을 출력합니다. 이 포트는 numpy의 합산 순서까지 포함해 `ta` 0.11.0과 비트 단위로 동일한 결과를 재현합니다 (`tools/ta_reference_check.py`). ## 측정 (TAKT 측정 장비) AMD Threadripper PRO 5975WX (Zen 3), 전용 코어에 할당한 격리 VM에서 측정한 사용자 모드 사이클(vPMU), 교차 실행 9라운드의 중앙값입니다. 이 패키지의 파일을 그대로 측정했습니다. | 레벨 | 빌드 | 사이클(백만) | 가속 | 시간(ms) | 레벨 0 대비: 사이클 · 시간 | |---|---|---:|---:|---:|---:| | 기준선 | `cargo build --release` | 1,376.9 | 1.00× | 503 | — | | 레벨 0 | 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`는 100만 개 바당 약 208초가 걸립니다. 같은 알고리즘을 Numba로 구현하면(역시 비트 단위로 동일) 연산 0.335초에 `pandas.read_csv` 0.201초가 더해집니다. 레벨 2는 연산 0.018초, CSV 파싱 0.020초입니다. 자세한 내용은 `measurements.json`에 있습니다. ## 실행 ```sh 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를 사용하지 않습니다. ## 동등성 네 프로그램의 출력은 위 입력뿐 아니라 형태, 크기, CSV 형식이 다른 생성 데이터 세트 60개에서도 일치합니다. 여기에는 프로그램이 패닉으로 종료되는 입력도 포함됩니다. 원본 버전은 Python `ta`와 비트 단위로 동일합니다: `tools/ta_reference_check.py data/ohlc.csv bin/ta-dump-base out/` (`pandas`, `numpy`, `ta` 필요). ## 구성 - `bin/`: 레벨별 프로그램과 Python `ta` 교차 검증용 `ta-dump-base` - `source/`: 원본 버전(`ta` 포트)의 소스. 기준선과 레벨 0은 이 소스로 빌드합니다 - `tools/`: 데이터 생성기, `ta` 교차 검증 스크립트, 비교용 Numba 버전 - `expected_stdout.txt`, `measurements.json`, `SHA256SUMS`, `LICENSE` - `README..md`: 다른 언어로 된 이 문서 레벨 1과 2의 소스는 공개하지 않습니다. 저희는 빌드를 제공합니다.