ERROR: [HLS 200-1715] Encountered problem during source synthesis
工具:Vitis_HLS 2022.2
我尝试用HLS部署一个神经网络时,在HLS Synthesis阶段出现如下信息,且无其他任何报错
ERROR: [HLS 200-1715] Encountered problem during source synthesis
显示综合失败,但仿真是通过的。经检查是权重文件“param.h”的问题。在该文件中一共定义了8个二维weights数组,经排查,将问题定位在weights7和weights8两个数组中。
原始文件中数组定义如下:
ap_uint<4> weights7[1][32768] = {{0x4, 0x5, ...}}; ap_uint<8> weights8[1][32768] = {{0x34, 0x56, ...}};
现删除weights8初始化的数据变为:
ap_uint<4> weights7[1][32768] = {{0x4, 0x5, ...}}; ap_uint<4> weights8[1][32768] ;
综合通过。然后删除weights7初始化的数据变为:
ap_uint<4> weights7[1][32768] ; ap_uint<4> weights8[1][32768] = {{0x34, 0x56, ...}};
综合也通过;但如果都初始化综合就不通过。
问题定位:
1. 代码写法问题:
仿真没有问题,删除单独一个数组的初始化数据后(相当于初始化0)也可以通过综合,所以初步排除是代码写法问题
2. Param.h文件太大:
建立新的Param_copy.h文件,将weights6,weights7都移进去,综合仍然不通过,故排除此问题。
3. 服务器问题:
检查内核日志(dmesg)发现OOMK问题
[2983747.260553] Out of memory: Kill process 15738 (clang) score 747 or sacrifice child
[2983747.260558] Killed process 15738 (clang) total-vm:50002884kB, anon-rss:49882444kB, file-rss:0kB, shmem-rss:0kB
同样的问题可参照:Vitis hls huge memory requirements +630GB (xilinx.com)
解决方法:
我的解决方案是减小数组Size,这在我的应用中是允许的
ap_uint<16> weights7[1][8192] = {{0x1234, 0x5678, ...}}; ap_uint<32> weights8[1][8192] = {{0x12345678, 0x12345678, ...}};