当前位置: 首页 > news >正文

龙华区住房和建设局官方网站昆明做网站建设的公司哪家好

龙华区住房和建设局官方网站,昆明做网站建设的公司哪家好,网络营销方式的特点,兰溪市建设局网站这是新的系列教程#xff0c;在本教程中#xff0c;我们将介绍使用 FPGA 实现深度学习的技术#xff0c;深度学习是近年来人工智能领域的热门话题。在本教程中#xff0c;旨在加深对深度学习和 FPGA 的理解。用 C/C 编写深度学习推理代码高级综合 (HLS) 将 C/C 代码转换为硬…这是新的系列教程在本教程中我们将介绍使用 FPGA 实现深度学习的技术深度学习是近年来人工智能领域的热门话题。在本教程中旨在加深对深度学习和 FPGA 的理解。用 C/C 编写深度学习推理代码高级综合 (HLS) 将 C/C 代码转换为硬件描述语言FPGA 运行验证从这篇文章中我们将从之前创建的网络模型中提取并行性并确认处理速度得到了提高。首先我们检查当前模型的架构并考虑什么样的并行化是可性的。并行化方法研究当前模型架构的框图如下所示。限于篇幅省略了maxpool2d和relu。在这个模块中conv1、conv2、fc1、fc2都是作为不同的模块实现的。FPGA内部的SRAM在每一层之间插入一个缓冲区x, x, x 这个缓冲区成为每一层的输入和输出。此后每一层conv1、conv2、fc1、fc2被称为一个任务。顺序处理基线下图显示了使用该模块对 3 帧图像执行推理处理时的执行时间可视化。每个任务的执行时间以推理模块的实际运行波形为准是conv2conv1fc1fc2的关系。在该模块中conv1、conv2、fc1和fc2作为单独的任务实施但是这些任务一次只能运行一个后面会解释原因。因此如果将conv1、conv2、fc1、fc2各层的执行时间作为最终的执行时间则这3帧图像的t0, t1, t2, t3处理时间为3 * (t0 t1 t2 t3)任务并行度假设我们可以修复这些任务并发运行。这种情况下的执行时间如下所示多个任务可以同时处理不同的帧。提取并行性使多个任务可以同时运行称为任务并行化。在这个过程中conv2的执行时间占主导地位所以3帧的处理时间为t0 3 * t1 t2 t3。理想的任务并行度最后我们考虑可以理想地执行任务并行化的模式。如上所述如果只提取任务并行性最慢的任务就会成为瓶颈整体处理速度会受到该任务性能的限制。因此最有效的任务并行是所有任务都具有相同的执行时间。在这种情况下处理时间t0 3 * t1 t2 t3保持不变但t0 t1 t2 t3调整了每个任务的执行时间从而提高了性能。在本课程中实现这种加速的技术被称为循环并行化和数据并行化。这两种并行度提取方法将在下一篇文章中介绍。任务并行化在本文中第一个目标是执行任务并行化。由于这次创建的模块中有多个任务貌似已经可以并行处理了但在实际波形中并不是这样。之所以不能并行化是因为作为x, x, x任务间接口的buffer()不能被多个任务同时使用。对于任务并行化任务之间的接口必须可以同时被两个或多个任务读写。在这个模块x中任务级并行化是通过在任务之间使用乒乓缓冲区来实现的。乒乓缓冲区有两个缓冲区一个用于写入一个用于读取。带有乒乓缓冲器的框图如下所示带有乒乓缓冲器的推理模块如果以这种方式配置电路存储 conv1 输出的缓冲区和 conv2 从中读取输入的缓冲区是分开的因此 conv1 和 conv2 可以同时运行。虽然图中省略了但所有层都可以通过双缓冲conv2 - fc1fc1 - fc2同时操作。要在 RTL 中实现这一点准备两个缓冲区并实现切换机制会很麻烦但在 Vivado/Vitis HLS 中只需添加一些 pragma 即可实现这种并行化。代码更改对于此任务并行化我们需要添加以下三种类型的编译指示。#pragma HLS dataflow #pragma HLS stable #pragma HLS interface ap_ctrl_chain在解释每个pragma的作用之前我先inference_dataflow展示一下新增函数的源代码。与第五篇中的inference_top函数重叠的部分省略。60 void inference_dataflow(const float x[kMaxSize],61                         const float weight0[kMaxSize], const float bias0[kMaxSize],62                         const float weight1[kMaxSize], const float bias1[kMaxSize],63                         const float weight2[kMaxSize], const float bias2[kMaxSize],64                         const float weight3[kMaxSize], const float bias3[kMaxSize],65                         float y[kMaxSize]) {66 #pragma HLS dataflow67 #pragma HLS interface m_axi portx offsetslave bundlegmem0...76 #pragma HLS interface m_axi porty offsetslave bundlegmem977 #pragma HLS interface s_axilite portx bundlecontrol...86 #pragma HLS interface s_axilite porty bundlecontrol87 #pragma HLS interface s_axilite portreturn bundlecontrol88 #pragma HLS interface ap_ctrl_chain portreturn bundlecontrol8990 #pragma HLS stable variablex91 #pragma HLS stable variableweight092 #pragma HLS stable variablebias093 #pragma HLS stable variableweight194 #pragma HLS stable variablebias195 #pragma HLS stable variableweight296 #pragma HLS stable variablebias297 #pragma HLS stable variableweight398 #pragma HLS stable variablebias399 #pragma HLS stable variabley 100 101   dnnk::inference(x, 102                   weight0, bias0, 103                   weight1, bias1, 104                   weight2, bias2, 105                   weight3, bias3, 106                   y); 107 }第66 行添加#pragma HLS dataflow的 pragma使inference_dataflow这些内部函数之间的接口成为乒乓缓冲区并启用任务并行化。第 101 行调用的函数dnnk::inference是下面的函数它通过第 20 行的#pragma HLS inline编译指示在函数内inference_dataflow内嵌展开。因此诸如 conv2d, relu的函数符合任务并行化的条件它们的接口 ( x1, x2, ...) 是一个乒乓缓冲区。14 static void inference(const float* x,15                       const float* weight0, const float* bias0,16                       const float* weight1, const float* bias1,17                       const float* weight2, const float* bias2,18                       const float* weight3, const float* bias3,19                       float* y) {20 #pragma HLS inline...3435   // 1st layer36   conv2d(x, weight0, bias0, kWidths[0], kHeights[0], kChannels[0], kChannels[1], 3, x1);37   relu(x1, kWidths[0] * kHeights[0] * kChannels[1], x2);38   maxpool2d(x2, kWidths[0], kHeights[0], kChannels[1], 2, x3);39...4849   // 4th layer50   linear(x8, weight3, bias3, kChannels[3], kChannels[4], y);51 }inference_dataflow从函数的第90行#pragma HLS stable开始在x, weight0, y输入/输出等函数inference_dataflow的入口/出口处自动完成同步。如果不去掉这个同步两个进程之间就会产生依赖比如“上一帧y输出完成-下一帧x输入准备好”多任务就不行了。另请参阅Vivado HLS 官方文档 ( UG902 )了解有关稳定阵列部分的详细说明。最后inference_dataflow该函数第88行的pragma修改了外部寄存器接口使得#pragma HLS interface ap_ctrl_chain portreturn该函数可以用于同时处理多个帧。inference_dataflow如果没有这个 pragma即使你实现了 ping-pong 缓冲区主机端也只会尝试一个一个地执行它们性能不会提高。综合结果确认可以在检查综合时检查任务并行化是否顺利进行。下面是HLS综合结果报告Latency - Summary一栏列出了整个函数的延迟和执行间隔Interval。在这里整体延迟仍然是所有任务处理时间的总和但执行间隔的值conv2d_232_U0与第二个卷积层的执行周期数相匹配。该模块的吞吐量是第二个卷积层执行间隔的倒数。正如本文开头所解释的conv2d_232_U0处理时间成为此任务并行化后电路中的瓶颈。任务并行化的速度提升率为947407 / 504898 1.88倍。通过这种方式我们能够确认 HLS 能够正确实现任务并行化。总结在本文中我们通过提取任务并行性来加速处理。本来conv2占用了一半以上的执行时间所以提速幅度不到2倍如果设置为N最大提速为N倍。在下一篇文章中我们将通过对卷积层应用数据并行化和循环并行化来解决每一层处理时间的不平衡。关注我们 OpenFPGA与数万打工人共同成长
http://www.hkea.cn/news/14565183/

相关文章:

  • 怎么用织梦源代码做网站顺企网怎么样
  • 网站建设常用的方法wordpress 企业站开发
  • 建设银行官方网站是什么官方网站建设的意义
  • 公司门户网站wordpress固定链接出错
  • 网站页尾的作用上海网页设计公司
  • 上海网站制作顾wordpress 评论审核
  • 焦作音响网站建设做家常菜哪个网站最好
  • 我想建网站做推广西安市招聘网最新招聘信息
  • 如何用云服务器做网站网站建设工作领导小组
  • 网站开发网页创建网站的费用
  • 网站开发 前端珠宝网站建设要以商为本
  • 有哪些专门做写字楼的网站在哪个彩票网站是小黄人做头像的
  • 在国外网站上买机票怎样做财务汽车网址大全123
  • 做外贸找客户最好用的网站有个网站可以接单做设计的
  • 做的最成功的网站东营网站建设报价
  • 用php做网站出现的问题在线图像制作
  • 潍坊知名网站建设价格seo搜索引擎入门教程
  • 在哪个网站做销售比较好云空间可以做网站
  • 网站主机 流量新密郑州网站建设
  • 做网站前应该怎么处理动力无限做网站怎样
  • 网站不维护会怎么样十大电商平台有哪些
  • 用哪个软件做网站h5个人简历模板
  • 中小企业网站多大空间企业网站建设经验
  • wordpress站点图标网站建设哪家g
  • 手机网站怎样排版最好美容营销型网站
  • 网站搭建代理杭州vi设计价格
  • 北京网站建设推广手机优化大师怎么退款
  • 网站开发需要做什么工作中国人寿寿险保险公司官方网站
  • 网站建设雨点企业信用信息系统登录平台
  • 哈尔滨模板建站定制网站山东专业网站建设公司