上一篇讲的是完全映射,也就是block中的所包含的所有的卷积以及归一,池化卷积 举例总共6个等都在pl侧进行处理(写一个top 顶层 里面conv 1 bn1 relu1 pool1 conv1*1 conv 2 bn2 relu2 pool2 conv1*1 ....总共6个 ),最后在送给ps进行解码的。
部分映射
也就是conv 以及relu pool conv1*1 各个只有一个模块在PL侧 。
当数据在pl侧进行读取时,通过axi协议将采集到的数据送给ps测进行处理的时候,如果接下来进行conv1的话,ps会给pl进行conv1 处理,ps因为是流水操作只等待处理好的卷积1 再进行下次RELU1的操作,依次往后,在进行conv2等等。
在上述处理中会遇到没有数据的时候,因为需要ps是串行等待,而pl是并行操作
部分映射流程
就是如果对第一图来说
ps 下达指令需要卷积,送给pl只有一个的conv模块进行处理,处理结束把计算的结果通过axi送给ps。ps在下达指令进行relu,然后再送给PL的RELU模块进行处理,处理完后再送给PS,PS在下达指令进行池化,等等处理完后。在处理第二张图,送给pl只有一个的conv模块进行处理,处理结束把计算的结果通过axi送给ps。依次往后类推
但是完全映射是ps将图片送给PL的 conv 1 bn1 relu1 pool1 conv1*1 conv 2 bn2 relu2 pool2 conv1*1 多个模块进行处理。
对于分析加速了多少,软件工程师会有一个网络架构,硬件需要实现什么东西,硬件就做,硬件做完后告诉软件工程师输出接口输出的内容。软件工程师调用输出的数据即可。
软件工程师先在ps侧将整个工程进行串行处理有一个结果1.然后再把ps中一些功能用PL侧进行做,得出结果2 ,将结果1与结果2 进行对比就可知结果2 加速了多少。