前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HLS Lesson17-数组优化:数组映射和重组

HLS Lesson17-数组优化:数组映射和重组

作者头像
瓜大三哥
发布2018-02-26 15:09:07
9260
发布2018-02-26 15:09:07
举报
文章被收录于专栏:瓜大三哥瓜大三哥

c程序中有多个比较小的数组,可以映射为一个大的数组,而这个大的数组会消耗Block RAM或者UltraRAM,从而降低资源的用量。分为横向映射和纵向映射。

1.横向映射(ARRAY_MAP):

0

1

2

...

...

M-1

0

1

...

N-1

在HLS中可以通过ARRAY_MAP中设置Horizontal,则合并后的数组长度为M+N:

0

1

2

...

...

M-1

0

1

...

N-1

2.纵向映射(ARRAY_MAP):相应位置的元素做位拼接

0

1

...

...

M-1

0

1

...

N-1

在HLS中可以通过ARRAY_MAP中设置Vertical,最终数组的长度是最长的数组长度,宽度会发生变化。

3. ARRAY_RESHAPE:直接组合ARRAY_PARTITION和纵向的ARRAY_MAP结合在一起

这样可以在一定程度上减少资源而且可以获得一定的吞吐率ARRAY_PARTITION就是为了提高并行性,同时读取数据。同样的ARRAY_RESHAPE(对应的是同一个数组)也有三种方式:

(1)Block/Factor=2

0

1

2

3

...

...

N-1

重新组合之后:长度变为N/2,宽度变为原先的2倍

N/2

N/2+1

...

N-1

0

1

...

N/2-1

(2)Cyclic/Factor=2

0

1

2

3

...

...

N-1

重新组合之后:长度变为N/2,宽度变为原先的2倍

1

3

...

N-1

0

2

...

N-2

(3)Complete

0

1

2

3

...

...

N-1

重新组合之后:长度变为1,宽度变为原先的N倍

0

1

2

...

N-1

例子:

代码语言:js
复制
#include"ap_int.h"
#define W 8
#define N 4
typedef ap_int<W> data_t;
void foo(data_t pa[N],data_t pb[N]);
#include"map.h"
void foo(data_t pa[N],data_t pb[N])
{
int i;
int k;
data_t A[N];
data_t B[N];
read_A:
for(i=0;i<N;i++)
{
A[i]=pa[i];
if(i%2==0)
{
A[i]=A[i]+5;
}
else
{
A[i]=A[i]-5;
}
}
read_B:
for(i=0;i<N;i++)
{
B[i]=pb[i];
if(i%2==0)
{
B[i]=B[i]+5;
}
else
{
B[i]=B[i]-5;
}
}
write_A:
for(i=0;i<N;i++)
{
pa[i]=A[i]*2;
}
write_B:
for(i=0;i<N;i++)
{
pb[i]=B[i]*2;
}
}

分别采用horizontal,vertical和RESHAPE

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 瓜大三哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.横向映射(ARRAY_MAP):
  • 2.纵向映射(ARRAY_MAP):相应位置的元素做位拼接
  • 3. ARRAY_RESHAPE:直接组合ARRAY_PARTITION和纵向的ARRAY_MAP结合在一起
    • (1)Block/Factor=2
      • (2)Cyclic/Factor=2
        • (3)Complete
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档