Advertisement
Guest User

n2 loops

a guest
Jan 17th, 2013
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.37 KB | None | 0 0
  1. struct Array {
  2.     double * restrict data;
  3.     long n;
  4. };
  5.  
  6.  
  7. #define X   0
  8. #define Y   1
  9. #define Z   2
  10.  
  11.  
  12. void __attribute__((noinline))
  13. func1(double * restrict d, double * restrict out, const long n)
  14. {
  15.     for (long i = 0; i < n; ++ i) {
  16.         for (long j = i + 1; j < n; ++ j) {
  17.  
  18.             const double rx = d[i * 3 + 0] * d[j * 3 + 0];
  19.             const double ry = d[i * 3 + 1] * d[j * 3 + 1];
  20.             const double rz = d[i * 3 + 2] * d[j * 3 + 2];
  21.  
  22.             out[i * 3 + X] += rx;
  23.             out[i * 3 + Y] += ry;
  24.             out[i * 3 + Z] += rz;
  25.  
  26.             out[j * 3 + X] -= rx;
  27.             out[j * 3 + Y] -= ry;
  28.             out[j * 3 + Z] -= rz;
  29.         }
  30.     }
  31. }
  32.  
  33.  
  34. void __attribute__((noinline))
  35. func2(struct Array * restrict d, struct Array * restrict out, const long n)
  36. {
  37.     for (long i = 0; i < n; ++ i) {
  38.         for (long j = i + 1; j < n; ++ j) {
  39.  
  40.             const double rx = d->data[i * 3 + X] * d->data[j * 3 + X];
  41.             const double ry = d->data[i * 3 + Y] * d->data[j * 3 + Y];
  42.             const double rz = d->data[i * 3 + Z] * d->data[j * 3 + Z];
  43.  
  44.             out->data[i * 3 + X] += rx;
  45.             out->data[i * 3 + Y] += ry;
  46.             out->data[i * 3 + Z] += rz;
  47.  
  48.             out->data[j * 3 + X] -= rx;
  49.             out->data[j * 3 + Y] -= ry;
  50.             out->data[j * 3 + Z] -= rz;
  51.         }
  52.     }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement