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をご覧ください。
実行方法
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/:全レベルのプログラムと、Pythontaとの照合用のta-dump-basesource/:オリジナル版(taの移植)のソースコード。ベースラインとレベル0はここからビルドしますtools/:データ生成ツール、taとの照合スクリプト、比較用のNumba版expected_stdout.txt、measurements.json、SHA256SUMS、LICENSEREADME.<language>.md:このテキストの他言語版
レベル1と2のソースコードは公開していません。当社が納品するのはビルドです。