For streaming input and output interfaces, when the performance is limited by
the streaming interface, it is possible to use two streaming inputs or two streaming
outputs in parallel. To use two parallel streams, it is recommended to use the
following pairs of macros, where idx1
and idx2
are the two streams. Add the restrict
keyword to the stream ports to optimize them for parallel
processing. The macro is operating on 32 bits every cycle, or 128 bits per four
cycles.
READINCR(SS_rsrc1, idx1) and READINCR(SS_rsrc2, idx2)
READINCRW(WSS_rsrc1, idx1) and READINCRW(WSS_rsrc2, idx2)
WRITEINCR(MS_rsrc1, idx1, val) and WRITEINCR(MS_rsrc2, idx2, val)
WRITEINCRW(WMS_rsrc1, idx1, val) and WRITEINCRW(WMS_rsrc2, idx2, val)
The following example code shows two parallel input streams using pipelining with an interval of 1.
void simple( input_stream_int32 * restrict data0, input_stream_int32 * restrict data1,
output_stream_int32 * restrict out) {
for(int i=0; i<1024; i++)
chess_prepare_for_pipelining
{
int32_t d = READINCR(SS_rsrc1, data0) ;
int32_t e = READINCR(SS_rsrc2, data1) ;
WRITEINCR(MS_rsrc1,out,d+e);
}
}