Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:37337 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 27425 invoked from network); 30 Apr 2008 07:13:12 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 30 Apr 2008 07:13:12 -0000 Authentication-Results: pb1.pair.com header.from=dmitry@zend.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=dmitry@zend.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain zend.com designates 212.25.124.162 as permitted sender) X-PHP-List-Original-Sender: dmitry@zend.com X-Host-Fingerprint: 212.25.124.162 mail.zend.com Linux 2.5 (sometimes 2.4) (4) Received: from [212.25.124.162] ([212.25.124.162:4497] helo=mail.zend.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id E1/BE-28930-60C18184 for ; Wed, 30 Apr 2008 03:13:12 -0400 Received: (qmail 18629 invoked from network); 30 Apr 2008 07:13:07 -0000 Received: from cvs.zend.com (HELO ws.home) (10.1.1.1) by mail.zend.net with SMTP; 30 Apr 2008 07:13:07 -0000 Message-ID: <48181C02.3050705@zend.com> Date: Wed, 30 Apr 2008 11:13:06 +0400 User-Agent: Thunderbird 2.0.0.12 (X11/20080226) MIME-Version: 1.0 To: Matt Wilmas CC: internals@lists.php.net, Andi Gutmans References: <014b01c8a6db$57d53ba0$0201a8c0@pc1> In-Reply-To: <014b01c8a6db$57d53ba0$0201a8c0@pc1> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [PHP-DEV] [PATCH] More array filling optimizations From: dmitry@zend.com (Dmitry Stogov) Hi Matt, I've made a review of your patch. At first it has a bug at least in array_psplice() that makes several tests to fail. So I removed the whole ext/standard part and tested only Zend Engine changes. Although the idea is interesting and implementation is perfect, the patch doesn't make any speed improvement on real-life applications (according to callgrind the patch can make 0.2% speedup, but callgrind measure instruction fetches and not the speed itself) and showed small slowdown on bench.php (the slowdown may be not the result of the patch but result of worse code-locality caused by the patch). I think we shouldn't make PHP more complicated without significant result, so I suggest not to apply array_init_size_vm.diff part of the patch. Thanks. Dmitry. Matt Wilmas wrote: > Hi all, > > Expanding on the idea of passing a size other than 0 to zend_hash_init(), > when possible, which was done awhile ago in a few areas (to save > resize/rehash operations), I finally added an "array_init_size()" that can > be used instead of array_init(), likewise, when a size is known. As an > example to start, I updated these functions: > > array_*: change_key_case, chunk, combine, fill, fill_keys, flip, keys > (without $search_value), map, rand, reverse, slice, splice, unique (since it > copies all entries first), values; and also compact; func_get_args; > get_defined_vars; str_split; and a couple internal uses. > > Those were the simplest, most obvious cases I found. :-) I didn't test > every function, but for example, the array functions that don't do much work > I found to be ~10% faster (with more than 8 elements, otherwise no resizing > would be needed). If these changes are applied, more can be done where > possible, by others, or I can and send further patches, or update them > myself if I have CVS access... > > http://realplain.com/php/array_init_size.diff > http://realplain.com/php/array_init_size_5_3.diff > > I was playing with initializing scripts' array( ... ) constructs with the > correct size too, but wasn't sure about the changes or what the opinion > would be. Runtime creation is improved with >8 elements, though it adds a > bit of compile overhead. Anyway, separate patches for that: > > http://realplain.com/php/array_init_size_vm.diff > http://realplain.com/php/array_init_size_vm_5_3.diff > > > Thanks, > Matt > >