Example 5.2: Molli XT Benchmark

Hardware Specification for Rerun

Desktop workstation with 2x (AMD EPYC 7702 64-Core) with total of 128 physical and 256 logical cores, 1024 GB DDR4 with Ubuntu 22.04 LTS operating system.

[1]:
import molli as ml
import molli_xt
from scipy.spatial.distance import cdist
import numpy as np
import timeit

arr1 = np.random.rand(100, 30, 3).astype("f4")
test_arrs = {
    size: np.random.rand(size, 3).astype("f4") for size in (10, 100, 1000, 10000, 20000)
}
[2]:
# Comparison for euclidean distance
print("Distance (Euclidean) calculation with scipy.cdist:")
for size, arr2 in test_arrs.items():
    times_scipy = timeit.Timer(
        """[cdist(x, arr2, "sqeuclidean") for x in arr1]""",
        globals=globals(),
    ).repeat(5, 10)

    times_molli = timeit.Timer(
        """molli_xt.cdist32f_eu2(arr1, arr2)""",
        globals=globals(),
    ).repeat(5, 10)

    t_sp = min(times_scipy)
    t_ml = min(times_molli)

    print(f"{size=}: {t_sp/t_ml=:3f} molli={t_ml:4f} scipy={t_sp:4f}")

Distance (Euclidean) calculation with scipy.cdist:
size=10: t_sp/t_ml=9.535875 molli=0.001277 scipy=0.012177
size=100: t_sp/t_ml=3.079132 molli=0.006536 scipy=0.020125
size=1000: t_sp/t_ml=4.997022 molli=0.065151 scipy=0.325563
size=10000: t_sp/t_ml=2.504050 molli=0.744849 scipy=1.865138
size=20000: t_sp/t_ml=1.908507 molli=1.464665 scipy=2.795323