Commit 1aaf2b1
authored
array_filter: Remove unnecessary refcounting (php#17538)
This syncs the implementation with the updated implementation of `array_find()`
in php#17536. For the following test script:
<?php
$array = range(1, 8000);
$result = 0;
for ($i = 0; $i < 4000; $i++) {
$result += count(array_filter($array, static function ($item) {
return $item <= 4000;
}));
}
var_dump($result);
This change results in:
Benchmark 1: /tmp/before array_filter.php
Time (mean ± σ): 696.9 ms ± 16.3 ms [User: 692.9 ms, System: 3.5 ms]
Range (min … max): 681.6 ms … 731.5 ms 10 runs
Benchmark 2: /tmp/after array_filter.php
Time (mean ± σ): 637.5 ms ± 5.6 ms [User: 633.6 ms, System: 3.8 ms]
Range (min … max): 630.2 ms … 648.6 ms 10 runs
Summary
/tmp/after array_filter.php ran
1.09 ± 0.03 times faster than /tmp/before array_filter.php
Or as reported by perf:
# Samples: 2K of event 'cpu_core/cycles/'
# Event count (approx.): 2567197440
#
# Overhead Command Shared Object Symbol
# ........ ....... .................... ........................................................
#
37.02% before before [.] zend_call_function
15.50% before before [.] execute_ex
10.60% before before [.] zif_array_filter
9.43% before before [.] zend_hash_index_add_new
9.13% before before [.] ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER
8.46% before before [.] zend_init_func_execute_data
3.78% before before [.] zval_add_ref
3.47% before before [.] zval_ptr_dtor
1.17% before before [.] zend_is_true
vs
# Samples: 2K of event 'cpu_core/cycles/'
# Event count (approx.): 2390202140
#
# Overhead Command Shared Object Symbol
# ........ ....... .................... ........................................................
#
36.87% after after [.] zend_call_function
20.46% after after [.] execute_ex
8.22% after after [.] zend_init_func_execute_data
7.94% after after [.] zend_hash_index_add_new
7.89% after after [.] zif_array_filter
6.28% after after [.] ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER
3.95% after after [.] zval_add_ref
2.23% after after [.] zend_is_true1 parent c39d112 commit 1aaf2b1
1 file changed
+12
-19
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6556 | 6556 | | |
6557 | 6557 | | |
6558 | 6558 | | |
6559 | | - | |
| 6559 | + | |
6560 | 6560 | | |
6561 | 6561 | | |
6562 | 6562 | | |
6563 | | - | |
| 6563 | + | |
6564 | 6564 | | |
6565 | 6565 | | |
6566 | 6566 | | |
6567 | | - | |
6568 | | - | |
| 6567 | + | |
| 6568 | + | |
6569 | 6569 | | |
6570 | | - | |
6571 | | - | |
6572 | | - | |
6573 | | - | |
6574 | | - | |
6575 | | - | |
6576 | | - | |
6577 | | - | |
6578 | | - | |
6579 | | - | |
6580 | | - | |
6581 | | - | |
6582 | | - | |
6583 | | - | |
6584 | | - | |
| 6570 | + | |
| 6571 | + | |
| 6572 | + | |
| 6573 | + | |
| 6574 | + | |
| 6575 | + | |
| 6576 | + | |
| 6577 | + | |
6585 | 6578 | | |
6586 | 6579 | | |
6587 | 6580 | | |
| |||
0 commit comments