void for_merge(data_t a[N],data_t b[N],data_t c[N],data_t d[N])
{
data_t x_a = 0;
data_t y_a = 0;
int i;
int j;
sum_x:
for(i=0;i<N;i++)
{
x_a+=a[i];
c[i]=x_a;
}
sum_y:
for(j=0;j<N;j++)
{
y_a+=b[j];
d[j]=y_a;
}
}
采用allocation将两个for循环进行并行执行。
#include"for_merge.h"
void accumulator(data_t a[N],data_t b[N])
{
data_t a_t=0;
sum:
for(int i=0;i<N;i++)
{
a_t+=a[i];
b[i]=a_t;
}
}
void for_merge(data_t a[N],data_t b[N],data_t c[N],data_t d[N])
{
accumulator(a,c);
accumulator(b,d);
}
例3:给当循环变量是变量时
(1)使用trip count directive
(2)使用ap_int<w>定义变量类型
(3)使用assert宏:消耗资源最少,latency最小