Digital Signal Processing Reference
In-Depth Information
Fig. 5 A process with a
one-dimensional iteration
domain
2
1
3
••••••
2
1
3
2
2
2
2
Operation 6 can be performed using CLooG [ 2 ] , 6 CodeGen [ 13 ] (part of the Omega
library) or isl .
Essentially, the input of Operation 6 is a schedule. When generating code for a
single process in a process network, we can essentially use an identity schedule.
However, we not only need to generate code for applying the main operation
of the process, but also for reading and writing to the communication channels.
Furthermore, we need to ensure that within a given iteration of the process, the reads
happen before the actual operation and that the writes happen after the operation. To
enforce this extra ordering constraint, we introduce an extra innermost dimension
in the range of the schedule, assigning it the value 0 for reads, 1 for the iteration
domain and 2 for writes. The domains for the read and write operations are obtained
as ranges and domains of the associated communication channel mappings.
Example 13. Consider a process with a one-dimensional iteration domain
= { S (
) |
<
}
D
i
0
i
N
that reads a value from some other process in its first iteration
= { P () S (
) |
=
>
},
M 1
i
i
0
N
0
propagates a value from one iteration to the next
i ) |
i =
= { S (
) S (
<
+
}
M 2
i
0
i
N
1
i
1
and then sends a value to some other process in its last iteration
M 3 = { S (
i
) C () |
i
=
N
1
N
>
0
}.
The process is shown in Fig. 5 . The code that results from scanning D at 1, ran M 1
at 0, dom M 2 at 2, ran M 2 at 0 and dom M 3 at 2 is shown schematically in Fig. 6 .
In iscc , we could generate such code using the following script.
D := [N] -> { S[i] : 0 <= i < N };
M1 := [N] -> { P[] -> S[0] : N > 0 };
M2 := [N] -> { S[i] -> S[i+1] : 0 <= i < N - 1 };
M3 := [N] -> { S[N-1] -> C[] : N > 0 };
6 http://www.cloog.org/
 
 
 
Search WWH ::




Custom Search