On Thu, May 15, 2025 at 03:41:52PM +0200, PIERRE AUGIER via NumPy-Discussion 
wrote:
> ========== PyPy HPy univ / CPy native (time ratio, smaller is better) 
> ==========
> TestModule::test_noargs                       0.50
> TestModule::test_onearg_None                  0.60
> TestModule::test_onearg_int                   0.65
> TestModule::test_varargs                      0.93
> TestModule::test_call_with_tuple              2.21
> TestModule::test_call_with_tuple_and_dict     1.50
> TestModule::test_allocate_int                 0.67
> TestModule::test_allocate_tuple               6.33
> TestType::test_allocate_obj                   5.89
> TestType::test_method_lookup                  0.05
> TestType::test_noargs                         0.85
> TestType::test_onearg_None                    0.95
> TestType::test_onearg_int                     0.97
> TestType::test_varargs                        1.18
> TestType::test_len                            0.48
> TestType::test_getitem                        0.73
> TestHeapType::test_allocate_obj_and_survive   5.11
> TestHeapType::test_allocate_obj_and_die       4.07
> TestHeapType::test_method_lookup              0.05
> TestHeapType::test_noargs                     0.84
> TestHeapType::test_onearg_None                0.93
> TestHeapType::test_onearg_int                 0.96
> TestHeapType::test_varargs                    1.20
> TestHeapType::test_len                        0.50
> TestHeapType::test_getitem                    0.78
 
Thanks, that does look encouraging except for object creation times. I think hpy
could benefit from smaller benchmark examples. For example, I didn't find one
with PyNumberMethods except in numpy-hpy, which does some numpy-specific dark
magic.


This is the benchmark I tried to achieve but gave up after 30 min:

===================================================================================
#
# Fake should be an immutable object that uses tp_new but not tp_init and 
# has one nb_add number method. The method can cheat and just return a new
# Fake() without doing anything. The point of the benchmark is to test the
# speed of nb_add and object creation.
#

from fake import Fake

a = Fake()
b = Fake()

for _ in range(10000000):
    x = a + b
    y = b + x
    a = x
    b = y

print(y) # In case optimizing compilers have gotten smart and eliminate the 
loop.
===================================================================================


Stefan Krah



_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to