Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: what is the meaning of RESTRICT in crafty?

Author: Anthony Cozzie

Date: 13:35:38 12/17/03

Go up one level in this thread


On December 17, 2003 at 15:06:14, Dieter Buerssner wrote:

>On December 17, 2003 at 14:51:38, Anthony Cozzie wrote:
>
>
>>suppose we make a slight change:
>>
>>void vectoradd(double *a, double *b, double *c, int len)
>>{
>>  for(int i = 0; i < len; i++)
>>    c[i+1] = b[i] + a[i];
>>}
>>
>>now the compiler cannot unroll the loop unless it knows that there is no
>>aliasing.
>
>Hmmm, I think the compiler can still unroll the loop. For example like this
>(untested, but you get the idea):
>
>void vectoradd(double *a, double *b, double *c, int len)
>{
>  int l2 = len/2;
>  for (i=0; i<l2; i+=2)
>  {
>    c[i+1] = b[i] + a[i];
>    c[i+2] = b[i+1] + a[i+1];
>  }
>  /* And now handle odd numbers ... */
>}

Oops.  I was thinking vectorizer.  Note that you still can't do the two adds in
parallel.

>What the compiler cannot do (in your first and in your second source snippet)
>for example: He cannot load a[i] and a[i+1] into two registers, same for b, and
>then do two adds with the four registers. It could do this when the pointers
>were restrict.
>
>A better example may be,
>
>void copy_pv(pv_t *dest, pv_t *src, size_t n)
>{
>  int i;
>  for (i=0; i<n; i++)
>    dest[i] = src[i];
>}
>
>Now assume pv_t is unsigned char, and n is long. An obvious optimization would
>be to copy the elements word wise (for example 4 chars on typical hardware). The
>compiler cannot do this optimization. You might call
>
>  copy_pv(pv_array, pv_array+1, m);
>
>and that would go wrong. So this optimization must not be done. However, when
>the pointers are restricted (and then, you never can call copy_pv like above),
>the compiler can do this optimization. For example it will be secure, when you
>typically only use calls like
>
>  copy_pv(pv1_array, pv2_array, m);
>
>where pv1_array and pv2_array are different objects (no overlap).
>
>Regards,
>Dieter

very true.  Of course, anyone who writes code that uses aliasing heavily should
be smacked with a wet towel :)

anthony



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.