[pypy-dev] Micro benchmarks on i386 and ppc

Jacob Hallén jacob at openend.se
Sun Feb 24 21:51:01 CET 2008


Using the outputs of Leonardo's test run on i386 and a run of the same 
revision on Tuatara (ppc), I have calculated the speed ratios between the two 
architectures. For each ratio, there are 4 numbers that can vary:
- The speed of CPython for the test on ppc
- The speed of CPython for the test on i386
- The speed of PyPy for the test on ppc
- The speed of PyPy for the test on i386

In the list below, the first number is the ratio, with smaller numbers meaning 
that PyPy is doing better on i386 and larger meaning that PyPy is relatively 
better on ppc. The first number in parenthesis after the name of the test is 
relative performance to CPython on i386, the second number in parenthesis is 
relative performance on ppc.

I'm a bit surprised that some tests have a huge difference in relative 
performance on the two platforms. Maybe something worth looking into.

0.41 test_unicode.test_bad_case_python2_5() (0.11), (0.27)
0.47 test_unicode.test_find_worstcase() (0.58), (1.24)
0.47 test_unicode.test_find_pattern1() (0.37), (0.79)
0.53 test_unicode.test_count_worstcase() (0.48), (0.90)
0.70 test_unicode.test_find_pattern8() (0.80), (1.14)
0.71 test_unicode.test_find_pattern2() (0.80), (1.13)
0.71 test_unicode.test_find_pattern4() (0.80), (1.13)
0.71 test_unicode.test_find_pattern16() (0.81), (1.14)
0.76 test_dict.test_dict_instance_setattr_instance_dict() (1.96), (2.59)
0.76 test_exception.test_reraise() (1.24), (1.63)
0.79 test_list.test_list_setitem() (2.06), (2.61)
0.79 test_dict.test_dict_setitem1() (3.43), (4.32)
0.83 test_exception.test_raise_builtin_exception() (1.91), (2.31)
0.84 test_count1.test_call_nested_function() (1.80), (2.15)
0.84 test_exception.test_raise_user_exception() (1.91), (2.27)
0.84 test_bltn.test_call_sin() (1.24), (1.47)
0.86 test_count1.test_count_in_attr() (1.70), (1.97)
0.87 test_count1.test_call_nested_function_other_count() (1.86), (2.15)
0.87 test_formatting.test_dict_formatting() (2.12), (2.45)
0.87 test_formatting.test_simple_formatting() (0.60), (0.69)
0.87 test_count1.test_count_in_slot() (2.37), (2.72)
0.87 test_create1.test_simple_loop_with_old_style_class_creation() (2.72), 
(3.12)
0.88 test_count1.test_call_nested_function_many_args() (1.77), (2.02)
0.88 test_count1.test_call_function() (1.88), (2.13)
0.88 test_dict.test_dict_setitem2() (2.34), (2.65)
0.88 test_count1.test_call_function_with_arguments_in_cellvars() (1.29), 
(1.46)
0.89 test_count1.test_call_function_without_arguments_in_cellvars() (1.47), 
(1.66)
0.90 test_formatting.test_format_long() (0.43), (0.48)
0.90 test_create1.test_simple_loop_with_new_style_class_creation() (3.54), 
(3.93)
0.90 test_exception.test_except_specific_builtin_exception() (1.79), (1.98)
0.90 test_exception.test_except_specific_user_exception() (1.89), (2.09)
0.90 test_dict.test_dict_instance_setnewattr_instance_dict() (2.00), (2.21)
0.92 test_bltn.test_call_fabs() (1.33), (1.44)
0.93 test_create1.test_simple_loop_with_new_style_class_new() (1.89), (2.03)
0.93 test_dict.test_dict_creation_mode1() (1.93), (2.07)
0.94 test_dict.test_dict_instance_getattr_instance_dict() (2.18), (2.33)
0.95 test_exception.test_except_multiple_user_exception() (3.01), (3.17)
0.95 test_bltn.test_isinstance3() (1.60), (1.68)
0.95 test_count1.test_call_method_of_new_style_class() (1.62), (1.70)
0.95 test_count1.test_loop_unrolled() (1.25), (1.31)
0.97 test_exception.test_except_multiple_builtin_exception() (2.67), (2.76)
0.98 test_count1.test_loop() (1.93), (1.96)
0.99 test_exception.test_try_except_else() (2.24), (2.27)
0.99 test_create1.test_simple_loop() (2.60), (2.63)
1.00 test_count1.test_loop_other_count() (2.16), (2.17)
1.00 test_count1.test_count_in_dict() (2.06), (2.06)
1.00 test_exception.test_try_except_finally() (2.14), (2.13)
1.01 test_exception.test_try_except() (2.27), (2.25)
1.01 test_bltn.test_isinstance1() (1.36), (1.34)
1.02 test_bltn.test_isinstance2() (1.34), (1.32)
1.02 test_dict.test_dict_class_dict_getmethod() (1.58), (1.55)
1.03 test_dict.test_dict_creation_mode2() (2.02), (1.96)
1.05 test_count1.test_call_method_of_old_style_class() (1.59), (1.51)
1.06 test_exception.test_instantiate_builtin_exception() (1.11), (1.05)
1.06 test_list.test_list_getitem() (3.12), (2.95)
1.06 test_list.test_list_append() (2.39), (2.25)
1.07 test_dict.test_dict_getitem() (2.45), (2.29)
1.10 test_exception.test_instantiate_user_exception() (1.34), (1.22)
1.12 test_formatting.test_format_unicode() (0.45), (0.40)
1.15 test_list.test_list_slice() (2.80), (2.44)
1.16 test_dict.test_dict_raw_range() (1.68), (1.45)
1.17 test_count1.test_count_in_global2() (2.14), (1.83)
1.17 test_count1.test_count_in_global() (2.13), (1.82)
1.21 test_formatting.test_number_formatting() (1.62), (1.34)
1.23 test_dict.test_dict_creation_mode3() (1.03), (0.84)
1.31 test_formatting.test_repr_formatting() (4.61), (3.53)
1.51 test_list.test_list_extend() (1.40), (0.93)
2.03 test_dispatch.test_dispatch_nop() (1.36), (0.67)


Jacob



More information about the Pypy-dev mailing list