取消
显示结果 
搜索替代 
您的意思是: 
Highlighted
Observer
Observer
708 次查看
注册日期: ‎01-14-2019

关于HLS的#program疑问

转到解答

下面这个程序

void mmult_kernel(float in_A[A_NROWS][A_NCOLS],
float in_B[B_NCOLS][B_NCOLS],
float out_C[28*28])
{
#pragma HLS INLINE self
#pragma HLS array_partition variable=in_A complete dim=2
#pragma HLS array_partition variable=in_B complete dim=2

int i,j,x,y;

for (i = 0; i < 28; i++) {
for (j = 0; j < 28; j++) {
#pragma HLS PIPELINE
float result = 0;
for (x = 0; x < A_NCOLS; x++) {
// multiply accumulate broken into individual operators
// so that AutoESL can infer two FP operators
#pragma HLS UNROLL
for(y = 0; y < A_NCOLS; y++) {
float product_term = in_A[x][y] * in_B[x+i][y+j];
result += product_term;
}
}
out_C[i*28+j] = result;
}
}

疑问一:#pragma HLS array_partition variable=in_B complete dim=2的作用是分割数组,这样有何好处???

疑问二:#pragma HLS PIPELINE开启了流水线模式,那么流水线是多少条呢?

0 项奖励
1 个已接受解答

已接受的解答
Highlighted
Moderator
Moderator
680 次查看
注册日期: ‎05-23-2018

回复: 关于HLS的#program疑问

转到解答

Hi, @rampage 

在HLS中array一般会被映射为BRAM执行,由于BRAM最大端口数仅为2,对于读写密集型的操作会限制带宽。因此将array进行partition,映射到多个BRAM中,可以提升读写端口数量从而改善带宽。

关于HLS中loop的pipeline,可以打开Analysis-->Performance,观察具体的pipeline情况。

-------------------------------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------

在原帖中查看解决方案

0 项奖励
4 条回复4
Highlighted
Moderator
Moderator
681 次查看
注册日期: ‎05-23-2018

回复: 关于HLS的#program疑问

转到解答

Hi, @rampage 

在HLS中array一般会被映射为BRAM执行,由于BRAM最大端口数仅为2,对于读写密集型的操作会限制带宽。因此将array进行partition,映射到多个BRAM中,可以提升读写端口数量从而改善带宽。

关于HLS中loop的pipeline,可以打开Analysis-->Performance,观察具体的pipeline情况。

-------------------------------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------

在原帖中查看解决方案

0 项奖励
Highlighted
Xilinx Employee
Xilinx Employee
667 次查看
注册日期: ‎03-24-2010

回复: 关于HLS的#program疑问

转到解答

一条流水线,下面两个循环工具会自动flatten成一个循环:

for (i = 0; i < 28; i++) {
for (j = 0; j < 28; j++) {

Regards,
brucey
----------------------------------------------------------------------------------------------
Kindly note- Please mark the Answer as "Accept as solution" if information provided is helpful.

Give Kudos to a post which you think is helpful and reply oriented.
----------------------------------------------------------------------------------------------
0 项奖励
Highlighted
Observer
Observer
644 次查看
注册日期: ‎01-14-2019

回复: 关于HLS的#program疑问

转到解答

Hi,@

将array进行partition,映射到多个BRAM中是否意味着这个数组可以并行被操作?

0 项奖励
Highlighted
Observer
Observer
642 次查看
注册日期: ‎01-14-2019

回复: 关于HLS的#program疑问

转到解答

hi,@

不是应该多于一条流水线才对吗?本来就是一条流水线,PIPELINE命令开启流水线,那么流水线应该多于一条才对啊

0 项奖励