# TAKTショーケース:ADX、ATR、PSAR指標(Python `ta`の移植) 同じベンチマークを4つのレベルで提供します。オリジナルのビルド、レベル0(ビルド設定の調整)、レベル1(証明付きの自動最適化)、レベル2(エンジニアによる最適化)です。4つのプログラムの出力はビット単位で一致します。全レベルのビルド済みプログラム、オリジナル版のソースコード、データ生成ツール、期待される出力、測定結果を収録しています。 ## ベンチマークの計算内容 100万本のバーからなる1つの履歴でパラメータをスイープし、ウィンドウ7、10、14、20、28でATR、ADX、+DI、−DIを、4通りの設定で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を使用していません。 ## 等価性 4つのプログラムの出力は、上記の入力に加え、形状・サイズ・CSV形式の異なる60個の生成データセットでも一致します。プログラムがpanicで終了する入力も含みます。オリジナル版は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のソースコードは公開していません。当社が納品するのはビルドです。