The strip mine of a loop with a tile of 64 can be obtained with a scattering function as proposed by Tobias:

```\$ cat ./tobias_strip_mine.cloog
# language: C
c

# parameter {n | n >= 0}
1 3
#  n  1
1  1  0
1
n

1 # Number of statements:

1
# {i | 0 <= i <= n}
2 4
#  i  n   1
1  1  0   0
1 -1  1   0

0  0  0
1
i

1 # Scattering functions

4 7
#  NEW  OLD  LV1    i    n    1
0    0    1    0   -1    0    0
1   -1    1    0    0    0    0
1    1   -1    0    0    0   63
0    1    0  -64    0    0    0

# LV1 is a "local variable" that is used to say that
# "the NEW loop is an integer multiple of 64",
# i.e. last row of the scattering function

1
NEW  OLD  LV1```

the output of CLooG is like this:

```\$ cloog -strides 1 ./tobias_strip_mine.cloog
/* Generated from ./strip_mine.cloog by CLooG 0.15 64 bits in 0.01s. */
for (NEW=0;NEW<=n;NEW+=64) {
for (OLD=NEW;OLD<=min(NEW+63,n);OLD++) {
S1(i = OLD) ;
}
}```

An alternative proposed by Albert is like this:

```\$ cat ./albert_strip_mine.cloog
# language: C
c

# parameter {n | n >= 0}
1 3
#  n  1
1  1  0
1
n

1 # Number of statements:

1
# {i | 0 <= i <= n}
2 4
#  i  n   1
1  1  0   0
1 -1  1   0

0  0  0
1
i

1 # Scattering functions

3 6
#  NEW  OLD    i    n    1
1  -64    0    1    0    0
1   64    0   -1    0   63
0    0    1   -1    0    0

1
NEW  OLD```

the output of CLooG is like this:

```cloog ./albert_strip_mine.cloog
/* Generated from ./albert_strip_mine.cloog by CLooG 0.15 64 bits in 0.01s. */
for (NEW=0;NEW<=floord(n,64);NEW++) {
for (OLD=max(64*NEW,0);OLD<=min(64*NEW+63,n);OLD++) {
S1(i = OLD) ;
}
}```

None: Graphite/Strip_mine (last edited 2009-06-23 20:14:19 by 163)