Req #53213 [Opn->Csd]: Adler32 algorithm is very slow

From: Date: Mon, 08 Nov 2010 09:35:54 +0000
Subject: Req #53213 [Opn->Csd]: Adler32 algorithm is very slow
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-155848@lists.php.net to get a copy of this message
Edit report at http://bugs.php.net/bug.php?id=53213&edit=1 ID: 53213 Updated by: aharvey@php.net Reported by: zavasek at yandex dot ru Summary: Adler32 algorithm is very slow -Status: Open +Status: Closed Type: Feature/Change Request Package: hash related Operating System: Any PHP Version: 5.3.3 -Assigned To: +Assigned To: aharvey Block user comment: N New Comment: This bug has been fixed in SVN. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. Patch committed to trunk. Thanks very much! Previous Comments: ------------------------------------------------------------------------ [2010-11-08 10:35:36] aharvey@php.net Automatic comment from SVN on behalf of aharvey Revision: http://svn.php.net/viewvc/?view=revision&amp;revision=305193 Log: Implemented FR #53213 (Adler32 algorithm is very slow). Patch by zavasek at yandex dot ru. ------------------------------------------------------------------------ [2010-10-31 20:45:28] pajoye@php.net svn diff > mypatch.txt and upload mypatch.txt here using the Add Patch link. ------------------------------------------------------------------------ [2010-10-31 20:40:47] zavasek at yandex dot ru I've never used SVN and do not know how to create patches. ------------------------------------------------------------------------ [2010-10-31 19:14:48] pajoye@php.net Can you provide a patch and attach it to this bug please ("Add a patch")? ------------------------------------------------------------------------ [2010-10-31 18:22:17] zavasek at yandex dot ru Description: ------------ Now adler32 algorithm for each byte uses two operations " % 65521". It is very slow. I propose to change the function PHP_ADLER32Update in the file hash_adler32.c { php_hash_uint32 i, s[2]; s[0] = context->state & 0xffff; s[1] = (context->state >> 16) & 0xffff; for (i = 0; i < len; ++i) { s[0] += input[i]; s[1] += s[0]; if (s[1]>0x7fffffff) { s[0] = s[0] % 65521; s[1] = s[1] % 65521; } } s[0] = s[0] % 65521; s[1] = s[1] % 65521; context->state = s[0] + (s[1] << 16); } Test script: --------------- <?php $t = microtime(true); echo hash_file('adler32','/home/user/testfile')."\n"; // I used testfile size 400 MB with random content echo sprintf('%0.3d',(microtime(true)-$t)*1000)." ms\n\n"; ?> Actual result: -------------- PHP 5.3.3 showed: 85ffb2c5 2174 ms After modification the file: 85ffb2c5 664 ms Speed was higher than about 3 times ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=53213&edit=1

« previous php.bugs (#155848) next »