On 12/24/2015 07:48 PM, Alex Peshkoff wrote:
> On 12/24/2015 04:19 PM, Dimitry Sibiryakov wrote:
>> Hello, All.
>>
>> I played a little with hash calculation code from lock manager and
>> found that there is a room for improvement.
>> Attached test program compiled by GCC 4.7.1 with switches "-O3
>> -msse4.2" shown that simple unroll of the loop makes it 2-3 times
>> faster. Current code is even slower than CPU-accelerated CRC32.
>> Comments?
> Use of CPU-accelerated code appears suspicious from non-intel ports POV.
> What about unrolled loop - I like it.
BTW, please try it in such form:
int hash_value = 0;
{ // scope
char* p;
const char* q = value;
int l = length;
while (l >= 4)
{
p = (char*) &hash_value;
*p++ += *q++;
*p++ += *q++;
*p++ += *q++;
*p++ += *q++;
l -= 4;
}
p = (char*) &hash_value;
if (l >= 2)
{
*p++ += *q++;
*p++ += *q++;
l -= 2;
}
if (l)
{
*p++ += *q++;
}
} // scope
For me (AMD CPU) it behaves much better for length in 11,15,19,etc.
------------------------------------------------------------------------------
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel