← 返回案例展示

TAKT 案例展示:ADX、ATR 和 PSAR 指标(Python ta 的移植版)

同一个基准测试的四个级别:原始构建、0 级(构建调优)、1 级(经证明正确的自动优化)和 2 级(工程师人工优化)。四个程序的输出逐位一致。本包提供各级别的可执行程序、原始版本的源代码、数据生成器、预期输出和测量数据。

基准测试计算的内容

在同一段 100 万根 K 线的历史数据上进行参数扫描:窗口 7、10、14、20、28 下的 ATR、ADX、+DI、−DI,以及四种配置的 Parabolic SAR。每个序列输出其全部值的校验和。该移植版与 ta 0.11.0 逐位一致,包括 numpy 的求和顺序(tools/ta_reference_check.py)。

测量(TAKT 测试台)

AMD Threadripper PRO 5975WX(Zen 3),在专用核心上的隔离虚拟机中采集用户态时钟周期(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 万根 K 线约需 208 s;同一算法的 Numba 实现(同样逐位一致)计算耗时 0.335 s,另加 pandas.read_csv 的 0.201 s;2 级计算耗时 0.018 s,CSV 解析 0.020 s。详见 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。

等价性

在上述输入以及另外 60 组不同形态、规模和 CSV 格式的生成数据上,四个程序的输出均一致,其中包括会让程序以 panic 退出的输入。原始版本与 Python ta 逐位一致:tools/ta_reference_check.py data/ohlc.csv bin/ta-dump-base out/(需要 pandas、numpy、ta)。

包内容

1 级和 2 级的源代码不公开:我们交付的是构建产物。

原文: README.zh.md

Telegram