| From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> | 
|---|---|
| To: | Jeremy Drake <pgsql(at)jdrake(dot)com> | 
| Cc: | Mark Kirkwood <markir(at)paradise(dot)net(dot)nz>, mark(at)mark(dot)mielke(dot)cc, Gurjeet Singh <singh(dot)gurjeet(at)gmail(dot)com>, PGSQL Hackers <pgsql-hackers(at)postgresql(dot)org> | 
| Subject: | Re: New CRC algorithm: Slicing by 8 | 
| Date: | 2006-10-23 19:21:09 | 
| Message-ID: | 27524.1161631269@sss.pgh.pa.us | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-hackers | 
Jeremy Drake <pgsql(at)jdrake(dot)com> writes:
> On Mon, 23 Oct 2006, Tom Lane wrote:
>> That's not a good workaround, because making mycrc expensive to access
>> means your inner loop timing isn't credible at all.  Instead try making the
>> buffer array nonlocal --- malloc it, perhaps.
> That did not make any difference.  The way I see it, the only way to
> convince the compiler it really needs to do this loop more than once is to
> make it think it is not overwriting the same variable every time.  The
> subscript was the cheapest way I could think of to do that.  Any other
> suggestions on how to do this are welcome.
Hmm. Maybe store the CRCs into a global array somewhere?
uint32 results[NTESTS];
	for ...
	{
		INIT/COMP/FIN_CRC32...
		results[j] = mycrc;
	}
This still adds a bit of overhead to the outer loop, but not much.
Another possibility is to put the INIT/COMP/FIN_CRC32 into an external
subroutine, thereby adding a call/return to the outer loop overhead.
regards, tom lane
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Tom Lane | 2006-10-23 19:33:52 | Re: Tsearch2 index size | 
| Previous Message | Jeremy Drake | 2006-10-23 19:16:19 | Re: New CRC algorithm: Slicing by 8 |