Benchmarks
This page contains benchmark methodology and representative results.
Definition: speedup_x = ezc3d / sqzc3d (higher is better for sqzc3d, including the memory ratio).
Note: these numbers are snapshots. Re-run the commands below to get results for your machine and your versions.
What is measured
Chunk materialize: build a compact, contiguous
doublebuffer[frame][point][3](+ valid mask).Access patterns: copy/extract frame & window outputs, marker-trajectory access, reorder (frame-major -> point-major).
Peak memory: avoid a full object graph; keep only needed arrays.
Bench method: fully load a C3D file, then measure access patterns on each library’s native loaded representation.
For sqzc3d, the native representation is the chunk’s contiguous frame-major array; for ezc3d, it is
ezc3d::c3d’s in-memory frame/point containers.
Notes:
Both
bench_sqzc3dandbench_ezc3dfully parse a C3D (points + analogs if present). The access-pattern microbench focuses on point arrays; analog arrays are loaded but not accessed. The example files shown here have no analog channels, so analog materialization does not affect the reported numbers.
Reproduce
# C++ (build with -DSQZC3D_BUILD_EXAMPLES=ON)
<build_dir>/bench_sqzc3d <file.c3d> <repeat>
<build_dir>/bench_ezc3d <file.c3d> <repeat>
# Streaming (sqzc3d-only)
<build_dir>/bench_sqzc3d_stream <file.c3d> 1
# Python
python samples/bench/bench_python.py <file.c3d> --lib sqzc3d --repeat <repeat>
python samples/bench/bench_python.py <file.c3d> --lib ezc3d --repeat <repeat>
On multi-config generators (Visual Studio), binaries may be under <build_dir>/Release/.
Materialize mode
C++
PFERD (117.96 MB, frames=55,844, points=132, repeat=1):
Metric |
sqzc3d |
ezc3d |
|
|---|---|---|---|
|
218.023 |
2481.406 |
11.4x |
|
0.100 |
2.204 |
22.0x |
|
10.375 |
154.118 |
14.9x |
|
182.398 |
1011.125 |
5.5x |
Small (DOG, 4.23 MB, frames=4,634, points=57, repeat=10):
Metric |
sqzc3d |
ezc3d |
|
|---|---|---|---|
|
10.979 |
98.711 |
9.0x |
|
0.013 |
0.743 |
57.2x |
|
2.544 |
54.254 |
21.3x |
|
12.031 |
42.070 |
3.5x |
Python
PFERD (117.96 MB, frames=55,844, points=132, repeat=1):
Metric |
sqzc3d |
ezc3d |
|
|---|---|---|---|
|
197.913 |
2924.975 |
14.8x |
|
1.234 |
4.594 |
3.7x |
|
13.070 |
159.610 |
12.2x |
|
209.617 |
1373.492 |
6.6x |
Small (DOG, 4.23 MB, frames=4,634, points=57, repeat=5):
Metric |
sqzc3d |
ezc3d |
|
|---|---|---|---|
|
8.975 |
116.915 |
13.0x |
|
0.809 |
1.504 |
1.9x |
|
3.983 |
42.041 |
10.6x |
|
44.789 |
130.855 |
2.9x |
Streaming mode
This is sqzc3d-only and optimized for low memory.
Example (PFERD, repeat=1):
Metric |
sqzc3d stream |
|---|---|
|
1.289 |
|
2.762 |
|
0.532 |
|
0.889 |