用vivado HLS优化设计大规模矩阵相乘,求详细具体的优化策略
时间:10-02
整理:3721RD
点击:
设计一个高性能的HLS, 可以用任何优化策略,在保持函数功能的同时尽可能提高性能。希望论坛里的大神给予具体优化的指导,最近几天调试太费劲了,希望大神给予保罗loop unroll, pipeline, dataflow, memory partition在内的多种优化策略具体怎么在这段代码里摆放优化,以及输入输出矩阵的interface, resource设置。要详细具体的策略,不是泛泛而谈的。
有重谢,多谢!
void matrixmul(
mat_a_t a[1024][1024], //a[1024][1024]
mat_b_t b[1024][1024], //b[1024][1024]
result_t res[1024][1024]) //res[1024][1024]
{
// Iterate over the rows of the A matrix
Row: for(int i = 0; i < 1024; i++) {
// Iterate over the columns of the B matrix
Col: for(int j = 0; j < 1024; j++) {
res[i][j] = 0;
// Do the inner product of a row of A and col of B
Product: for(int k = 0; k < 1024; k++) {
res[i][j] += a[i][k] * b[k][j];
}
}
}
}
您的这种算法用浮点运算效率来衡量已经很高了,建议加大缓冲池,并在编译时使用单进程多线程并行运行于多个处理器来提高效率
感谢分享