[issue44953] Add vectorcall on operator.itemgetter and attrgetter objects
Dennis Sweeney
report at bugs.python.org
Thu Aug 19 05:23:49 EDT 2021
New submission from Dennis Sweeney <sweeney.dennis650 at gmail.com>:
## Below are my benchmarks for this change.
from operator import itemgetter, attrgetter
from pyperf import Runner
class MyClass:
__slots__ = "a", "b"
namespace = {'itemgetter': itemgetter,
'attrgetter': attrgetter,
'MyClass': MyClass,
}
runner = Runner()
runner.timeit(
name="itemgetter",
setup="f = itemgetter(1); x = (1, 2, 3)",
stmt="f(x)",
globals=namespace
)
runner.timeit(
name="attrgetter",
setup="f = attrgetter('b'); x = MyClass(); x.a = x.b = 1",
stmt="f(x)",
globals=namespace
)
##### Results #####
# itemgetter: Mean +- std dev: [operator_main] 45.3 ns +- 1.3 ns -> [operator_vec] 29.5 ns +- 0.7 ns: 1.54x faster
# attrgetter: Mean +- std dev: [operator_main] 61.6 ns +- 1.7 ns -> [operator_vec] 43.8 ns +- 0.9 ns: 1.41x faster
----------
components: Library (Lib)
messages: 399900
nosy: Dennis Sweeney
priority: normal
severity: normal
status: open
title: Add vectorcall on operator.itemgetter and attrgetter objects
type: performance
versions: Python 3.11
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue44953>
_______________________________________
More information about the Python-bugs-list
mailing list