07 FPGA 助力Python加速计算 陈志勇工程师关心的问题 3 Python 工程师开发嵌入式产品的时候哪些地方可能会遇到性能瓶颈? Ø 传统的计算平台:基于通用处理器的架构,Intel x86 Ø 新的嵌入式计算平台:MCU,DSP,FPGA,GPU、ASSP等 Ø 嵌入式计算: Ø 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统对功能、可靠 性、成本、体积、功耗有严格要求的专用计算机系统,它一般由嵌入式微处理器、外围硬件设备、 Ø 并行计算:多处理器、多线程计算 Ø 分布式计算引擎:Spark Ø 并行计算语言(函数式编程):Scala Ø 加速方法: Ø 算法的优化 Ø 算法的并行化 Ø CPU: 多核 CPU Ø GPU: 多核处理器 Ø 硬件仿真:算法计算在FPGA里实现,输入和输出在 PC 端实现。 Ø Hardware in the loop simulation 加速计算 (Accelerate Computing) 语言的转换工具 Ø 全面覆盖 C、C++、OpenCL,能够进行浮点运算和任意精度浮点运算 Ø 可以输出 Verilog和 VHDL代码 Ø 可以通过制定约束 (Directive) 来提高运算性能和优化资源利用率 Ø 从算法验证到硬件实现的自动化工作流程 Ø 适合C算法的工程师进行快速硬件验证 Ø 赛灵思提供基于 OpenCV 的库函数,适用于图像处理 Ø 高层次EDA开发工具,C开发者的福音,Xilinx0 码力 | 34 页 | 6.89 MB | 1 年前3
2_FPGA助力Python加速计算_陈志勇工程师关心的问题 3 Python 工程师开发嵌入式产品的时候哪些地方可能会遇到性能瓶颈? Ø 传统的计算平台:基于通用处理器的架构,Intel x86 Ø 新的嵌入式计算平台:MCU,DSP,FPGA,GPU、ASSP等 Ø 嵌入式计算: Ø 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统对功能、可靠 性、成本、体积、功耗有严格要求的专用计算机系统,它一般由嵌入式微处理器、外围硬件设备、 Ø 并行计算:多处理器、多线程计算 Ø 分布式计算引擎:Spark Ø 并行计算语言(函数式编程):Scala Ø 加速方法: Ø 算法的优化 Ø 算法的并行化 Ø CPU: 多核 CPU Ø GPU: 多核处理器 Ø 硬件仿真:算法计算在FPGA里实现,输入和输出在 PC 端实现。 Ø Hardware in the loop simulation 加速计算 (Accelerate Computing) 语言的转换工具 Ø 全面覆盖 C、C++、OpenCL,能够进行浮点运算和任意精度浮点运算 Ø 可以输出 Verilog和 VHDL代码 Ø 可以通过制定约束 (Directive) 来提高运算性能和优化资源利用率 Ø 从算法验证到硬件实现的自动化工作流程 Ø 适合C算法的工程师进行快速硬件验证 Ø 赛灵思提供基于 OpenCV 的库函数,适用于图像处理 Ø 高层次EDA开发工具,C开发者的福音,Xilinx0 码力 | 33 页 | 8.99 MB | 1 年前3
FPGA助力Python加速计算 陈志勇 工程师关心的问题 3 Python 工程师开发嵌入式产品的时候哪些地方可能会遇到性能瓶颈? ➢ 传统的计算平台:基于通用处理器的架构,Intel x86 ➢ 新的嵌入式计算平台:MCU,DSP,FPGA,GPU、ASSP等 ➢ 嵌入式计算: ➢ 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统对功能、可靠 性、成本、体积、功耗有严格要求的专用计算机系统,它一般由嵌入式微处理器、外围硬件设备、 ➢ 并行计算:多处理器、多线程计算 ➢ 分布式计算引擎:Spark ➢ 并行计算语言(函数式编程):Scala ➢ 加速方法: ➢ 算法的优化 ➢ 算法的并行化 ➢ CPU: 多核 CPU ➢ GPU: 多核处理器 ➢ 硬件仿真:算法计算在FPGA里实现,输入和输出在 PC 端实现。 ➢ Hardware in the loop simulation 加速计算 (Accelerate Computing) 语言的转换工具 ➢ 全面覆盖 C、C++、OpenCL,能够进行浮点运算和任意精度浮点运算 ➢ 可以输出 Verilog和 VHDL代码 ➢ 可以通过制定约束 (Directive) 来提高运算性能和优化资源利用率 ➢ 从算法验证到硬件实现的自动化工作流程 ➢ 适合C算法的工程师进行快速硬件验证 ➢ 赛灵思提供基于 OpenCV 的库函数,适用于图像处理 ➢ 高层次EDA开发工具,C开发者的福音,Xilinx0 码力 | 34 页 | 4.19 MB | 1 年前3
Build Python App with Serverless 费良宏 • Architect Evangelist @ (2004-2011) … Serverless 为何而生 ? 为什么需要“无服务器”? 服务部署及利用率 可用性及容错度 监控、调度 运行及管理 什么是“Serverless”? 无需管理基础设施 自动扩展 按价值付费 高可用以及安全 “无服务”是一种新的模型,它跨越许多不同类别的服务 AWS 带来的响应延迟 • 资源限制 …… 并发、I/O、内存、程序包大小等等 • 监控与调试 …… 需要新的IDE、APM、DevOps、分析器等工具 • 缺少特定的硬件支持 ……只有通用的计算环境,缺如GPU、FPGA等支持 • 标准化 …… 可移植性的问题 “冷启动” 带来的响应延迟 1 10 100 1000 Java F# C# Haskell Rust Ruby Go Node.js0 码力 | 35 页 | 7.81 MB | 1 年前3
Hello 算法 1.0.0b1 Python版典的一系列指令看作是「二分查找」算法。 小到烹饪一道菜、大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现,使我们可以通过编程将 数据结构存储在内存中,也可以编写代码来调用 CPU, GPU 执行算法,从而将生活中的问题搬运到计算机中, 更加高效地解决各式各样的复杂问题。 � 读到这里,如果你感到对数据结构、算法、数组、二分查找等此类概念一知半解,那么就太好 了!因为这正是本书 92 Figure 7‑12. 完全二叉树的数组表示 数组表示有两个优点:一是不需要存储指针,节省空间;二是可以随机访问结点。然而,当二叉树中的“空 位”很多时,数组中只包含很少结点的数据,空间利用率很低。 7.2. 二叉树遍历 从物理结构角度看,树是一种基于链表的数据结构,因此遍历方式也是通过指针(即引用)逐个遍历结点。同 时,树还是一种非线性数据结构,这导致遍历树比遍历链表更加复杂,需要使用搜索算法来实现。0 码力 | 178 页 | 14.67 MB | 1 年前3
Hello 算法 1.0.0b2 Python版典的一系列指令看作是「二分查找」算法。 小到烹饪一道菜、大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现,使我们可以通过编程将 数据结构存储在内存中,也可以编写代码来调用 CPU, GPU 执行算法,从而将生活中的问题搬运到计算机中, 更加高效地解决各式各样的复杂问题。 � 读到这里,如果你感到对数据结构、算法、数组、二分查找等此类概念一知半解,那么就太好 了!因为这正是本书 93 Figure 7‑12. 完全二叉树的数组表示 数组表示有两个优点:一是不需要存储指针,节省空间;二是可以随机访问结点。然而,当二叉树中的“空 位”很多时,数组中只包含很少结点的数据,空间利用率很低。 7.2. 二叉树遍历 从物理结构角度看,树是一种基于链表的数据结构,因此遍历方式也是通过指针(即引用)逐个遍历结点。同 时,树还是一种非线性数据结构,这导致遍历树比遍历链表更加复杂,需要使用搜索算法来实现。0 码力 | 186 页 | 15.69 MB | 1 年前3
Hello 算法 1.1.0 Python版案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,本书将引导你 空间开销:由于每个元素需要两个额外的指针(一个用于前一个元素,一个用于后一个元素),所以 std::list 通常比 std::vector 更占用空间。 ‧ 缓存不友好:由于数据不是连续存放的,因此 std::list 对缓存的利用率较低。一般情况下,std::vector 的性能会更好。 另一方面,必要使用链表的情况主要是二叉树和图。栈和队列往往会使用编程语言提供的 stack 和 queue , 而非链表。 Q:初始化列表 ‧ 数组存储需要连续内存空间,因此不适合存储数据量过大的树。 ‧ 增删节点需要通过数组插入与删除操作实现,效率较低。 ‧ 当二叉树中存在大量 None 时,数组中包含的节点数据比重较低,空间利用率较低。 7.4 二叉搜索树 如图 7‑16 所示,二叉搜索树(binary search tree)满足以下条件。 1. 对于根节点,左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值。0 码力 | 364 页 | 18.42 MB | 1 年前3
Hello 算法 1.0.0b5 Python版案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使我们能够通过编程将 数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题转 移到计算机上,以更高效的方式解决各种复杂问题。 � 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,这本书 将引导你迈入数据结构与算法的知识殿堂。 空间开销:由于每个元素需要两个额外的指针(一个用于前一个元素,一个用于后一个 元素),所以 std::list 通常比 std::vector 更占用空间。 ‧ 缓存不友好:由于数据不是连续存放的,std::list 对缓存的利用率较低。一般情况下, std::vector 的性能会更好。 另一方面,必要使用链表的情况主要是二叉树和图。栈和队列往往会使用编程语言提供的 stack 和 queue ,而非链表。 81 第 然而,数组表示也存在一些局限性。 ‧ 数组存储需要连续内存空间,因此不适合存储数据量过大的树。 ‧ 增删节点需要通过数组插入与删除操作实现,效率较低。 ‧ 当二叉树中存在大量 None 时,数组中包含的节点数据比重较低,空间利用率较低。 7.4 二叉搜索树 如图 7‑16 所示,「二叉搜索树 binary search tree」满足以下条件。 1. 对于根节点,左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值。0 码力 | 361 页 | 30.64 MB | 1 年前3
Hello 算法 1.0.0 Python版案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 � 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,本书将 引导你迈入数据结构与算法的知识殿堂。 空间开销:由于每个元素需要两个额外的指针(一个用于前一个元素,一个用于后一个元素),所以 std::list 通常比 std::vector 更占用空间。 ‧ 缓存不友好:由于数据不是连续存放的,因此 std::list 对缓存的利用率较低。一般情况下,std::vector 的性能会更好。 另一方面,必要使用链表的情况主要是二叉树和图。栈和队列往往会使用编程语言提供的 stack 和 queue , 而非链表。 Q:初始化列表 ‧ 数组存储需要连续内存空间,因此不适合存储数据量过大的树。 ‧ 增删节点需要通过数组插入与删除操作实现,效率较低。 ‧ 当二叉树中存在大量 None 时,数组中包含的节点数据比重较低,空间利用率较低。 7.4 二叉搜索树 如图 7‑16 所示,「二叉搜索树 binary search tree」满足以下条件。 1. 对于根节点,左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值。0 码力 | 362 页 | 17.54 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Python 版案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,本书将引导你 空间开销:由于每个元素需要两个额外的指针(一个用于前一个元素,一个用于后一个元素),所以 std::list 通常比 std::vector 更占用空间。 ‧ 缓存不友好:由于数据不是连续存放的,因此 std::list 对缓存的利用率较低。一般情况下,std::vector 的性能会更好。 另一方面,必要使用链表的情况主要是二叉树和图。栈和队列往往会使用编程语言提供的 stack 和 queue , 而非链表。 Q:操作 ‧ 数组存储需要连续内存空间,因此不适合存储数据量过大的树。 ‧ 增删节点需要通过数组插入与删除操作实现,效率较低。 ‧ 当二叉树中存在大量 None 时,数组中包含的节点数据比重较低,空间利用率较低。 7.4 二叉搜索树 如图 7‑16 所示,二叉搜索树(binary search tree)满足以下条件。 1. 对于根节点,左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值。0 码力 | 364 页 | 18.43 MB | 10 月前3
共 35 条
- 1
- 2
- 3
- 4













