aiecompiler
会为每个存储器连接自动分配所需数量的缓冲器。有多个不同用例,如下所示。
- 查找表始终作为单一缓冲器来分配,因为这些查找表为只读,且供内核专用。无需通过锁定来同步查找表,因为这些查找表应按专属方式来访问。
- 通常,如果生产者和使用者内核映射到不同的处理器或者生产者或使用者为 DMA,那么会为缓冲器连接分配双缓冲器。这样即可支持两个代理使用含两个锁定的乒乓同步,以流水打拍方式工作。
aiecompiler
会在相应的处理器main
函数中自动生成此同步。 - 如果生产者和使用者内核映射到同一个处理器,那么仅为缓冲器连接提供一个缓冲器,无需锁定同步,因为内核按顺序执行。
- 对于运行时参数连接,可为其分配双缓冲器(默认)搭配一个选择器字,以选择要访问的下一个缓冲器。
对于运行时参数连接,也可分配单个缓冲器。有时,对于缓冲器连接,建议仅使用单缓冲器同步替代双缓冲器。如果局部数据存储器极为重要,且使用单缓冲器执行数据传输的性能惩罚并不严重,那么这很有用。这可使用 single_buffer(port<T>&)
约束来达成。
single_buffer(first.in[0]); //For buffer input or RTP input
single_buffer(first.inout[0]); //For RTP output