核心内容摘要
5步搞定InternLM2-Chat-1.8B部署:详细图文教程
stable说明
使用stable修饰数组用于标记stream数据流区域的输入变量或者输出变量
stable修饰数组的目的是用于移除对应的同步但是移除同步之前用户需要确保设计是正确无误的确实能够移去掉才去做stable修饰否则不要使用stable修饰数组
案例void dataflow_region(int A[...], src,dst)#pragma HLS stable variableA#pragma HLS dataflowproc1(src,temp);proc2(A,temp,dst);}上述代码如果不使用stable修饰数组那么proc2准备好才能启动Proc1;这样组织数据流迭代重叠导致性能下降。
如果使用stable修饰数组那么无需要这个等待同步proc1不需要等待proc2;如无 stable 编译指示并假定 A 由 proc2 读取因为 proc2 当前绕过任务将出现性能损失。
需要注意的是仅当数据流区域尚未开始执行或者已完成执行时调用程序才会更新或读取这些变量。
axiliteap_memoryap_stable对数组的综合优化void stream_top(hls::streamap_uint32 src,hls::streamap_uint32 dst,ap_uint32 param_cfg[1024]){#pragma HLS INTERFACE ap_stable portparam_mem#pragma HLS RESOURCE variableparam_mem coreRAM_2P_BRAM#pragma HLS INTERFACE axis register both portsrc#pragma HLS INTERFACE axis register both portdst#pragma HLS INTERFACE s_axilite portreturn#pragma HLS INTERFACE s_axilite portparam_mem#pragma HLS DATAFLOWstatic hls::streamap_uint32 temp;#pragma HLS STREAM variabletemp depth2 dim1proc1(src,temp);proc2(param_cfg,temp,dst);//param_cfg为单口RAM使用双口RAM需要中间定义一个局部数组进行一次缓存}
stable修饰数组需要注意仅当数据流区域尚未开始执行或者已完成执行时调用程序才会更新或读取这些变量。
如果你不满足这个要求不要使用stable数组。