Skip site navigation (1) Skip section navigation (2)

memset using long instead of int32

From: ITAGAKI Takahiro <itagaki(dot)takahiro(at)lab(dot)ntt(dot)co(dot)jp>
To: pgsql-patches(at)postgresql(dot)org
Subject: memset using long instead of int32
Date: 2006-01-19 08:17:12
Message-ID: 20060119171445.4DDE.ITAGAKI.TAKAHIRO@lab.ntt.co.jp (view raw or flat)
Thread:
Lists: pgsql-patches
Attached is a patch that changes memset to use 'long' instead of 'int32'.
I will also send a test program.

As far as I know, setting memory by 64bit unit is faster than 32bit unit on
64bit CPUs. While there are no changes on 32bit CPUs because 'long' and 'int32'
are same length on them.


The followings are test results on my machines.

* Opteron 248 2.2GHz ('long' version is 25-55% faster than int.)
        RHEL4 2.6.9-22.0.2.ELsmp #1 SMP
        gcc 3.4.3 20050227 (Red Hat 3.4.3-22.1)
        gcc -O2
sizeof(int)  = 4
sizeof(long) = 8
Loop by int  (size=64)   :  2.883838 /  1.481662 /  1.481677
Loop by long (size=64)   :  0.613221 /  0.610086 /  0.832484
Loop by int  (size=256)  :  4.272891 /  4.270954 /  4.270668
Loop by long (size=256)  :  2.383517 /  2.382581 /  2.382300
Loop by int  (size=1024) : 16.898493 / 15.475216 / 15.455585
Loop by long (size=1024) : 11.679070 / 11.682782 / 11.702978

* Xeon 2.80GHz HT ('long' version is 35-55% faster than int.)
        RHEL4 2.6.9-22.0.2.ELsmp #1 SMP 
        gcc 3.4.4 20050721 (Red Hat 3.4.4-2)
        gcc -O3
sizeof(int)  = 4
sizeof(long) = 8
Loop by int  (size=64)   :  1.581404 /  1.200408 /  1.202054
Loop by long (size=64)   :  0.509141 /  0.535169 /  0.575655
Loop by int  (size=256)  :  4.138742 /  3.967415 /  3.985982
Loop by long (size=256)  :  2.616929 /  2.502939 /  2.447899
Loop by int  (size=1024) : 13.035987 / 12.921727 / 13.253955
Loop by long (size=1024) :  8.480915 /  8.916534 /  8.565102

* Penitum4 1.4GHz (32bit cpu, so the performance has not changed.)
        SuSE 10.0 2.6.11.4-21.9-default #1
        gcc 3.3.5 20050117 (prerelease) (SUSE Linux)
        gcc -O2
sizeof(int)  = 4
sizeof(long) = 4
Loop by int  (size=64)   :  1.531222 /  1.531955 /  1.515964
Loop by long (size=64)   :  1.576709 /  1.526092 /  1.553555
Loop by int  (size=256)  :  6.036154 /  5.997446 /  5.995208
Loop by long (size=256)  :  6.047094 /  6.020463 /  6.111434
Loop by int  (size=1024) : 20.973230 / 20.905700 / 20.905927
Loop by long (size=1024) : 20.943455 / 20.911707 / 20.931522

---
ITAGAKI Takahiro
NTT Cyber Space Laboratories

Attachment: memset-test.c
Description: application/octet-stream (1.3 KB)
Attachment: memset-using-long.patch
Description: application/octet-stream (3.0 KB)

Responses

pgsql-patches by date

Next:From: Neil ConwayDate: 2006-01-19 09:14:00
Subject: Re: TupleDesc refcounting
Previous:From: Bruce MomjianDate: 2006-01-19 04:48:09
Subject: Re: pgxs/windows

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group