Skip to content

Commit

Permalink
pythongh-125985: Fix cmodule_function() scaling benchmark (python#1…
Browse files Browse the repository at this point in the history
…28460)

Add a separate benchmark that measures the effect of
`_PyObject_LookupSpecial()` on scaling.

In the process of cleaning up the scaling benchmarks for inclusion, I
unintentionally changed the "cmodule_function" benchmark to pass an
`int` to `math.floor()` instead of a `float`, which causes it to use the
`_PyObject_LookupSpecial()` code path. `_PyObject_LookupSpecial()` has
its own scaling issues that we want to measure separately from calling a
function on a C module.
  • Loading branch information
colesbury authored Jan 3, 2025
1 parent b75ed95 commit f157485
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions Tools/ftscalingbench/ftscalingbench.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,16 @@ def object_cfunction():

@register_benchmark
def cmodule_function():
for i in range(1000 * WORK_SCALE):
math.floor(i * i)
N = 1000 * WORK_SCALE
for i in range(N):
math.cos(i / N)

@register_benchmark
def object_lookup_special():
# round() uses `_PyObject_LookupSpecial()` internally.
N = 1000 * WORK_SCALE
for i in range(N):
round(i / N)

@register_benchmark
def mult_constant():
Expand Down Expand Up @@ -206,7 +214,7 @@ def benchmark(func):
color = "\x1b[33m" # yellow
reset_color = "\x1b[0m"

print(f"{color}{func.__name__:<18} {round(factor, 1):>4}x {direction}{reset_color}")
print(f"{color}{func.__name__:<25} {round(factor, 1):>4}x {direction}{reset_color}")

def determine_num_threads_and_affinity():
if sys.platform != "linux":
Expand Down

0 comments on commit f157485

Please sign in to comment.