07 FPGA 助力Python加速计算 陈志勇述数字电路的语言,常用 的主要有VHDL、Verilog HDL Ø 信号处理:数据可以并行处理 Ø 主要实现功能: Ø 组合逻辑 -》计数器 -》算法实现 -》SOC 设计 Ø 新一代FPGA器件:高速接口、ARM SOC、多个 IP 硬核、大容量存储器等 Ø 新一代PCIE加速卡:人工智能、金融计算、数据库、高性能计算、视频转码等。 Ø 主要应用: Ø 通信设备:路由器、交换机、5G 可以实现多个数据流的同步:数 据打齐 Ø 纯并行处理架构 / 流水线处理架构 FPGA 如何实现算法加速 FPGA 基本架构 9 赛灵思 Zynq UltraScale+ MPSoC (16nm SOC 芯片) Ø 是一种从 C -> RTL 语言的转换工具 Ø 全面覆盖 C、C++、OpenCL,能够进行浮点运算和任意精度浮点运算 Ø 可以输出 Verilog和 VHDL代码 Ø 可以通过制定约束 HDL代码硬件实 现 Ø 客户可以直接调用这些函数, 也可以参考它们的实现,针对 自己的算法做修改 12 • PYNQ: Python Productivity for Zynq (Xilinx SOC 芯片) • http://www.pynq.io/ • PYNQ is an open-source project from Xilinx® that makes it easy to design0 码力 | 34 页 | 6.89 MB | 1 年前3
2_FPGA助力Python加速计算_陈志勇述数字电路的语言,常用 的主要有VHDL、Verilog HDL Ø 信号处理:数据可以并行处理 Ø 主要实现功能: Ø 组合逻辑 -》计数器 -》算法实现 -》SOC 设计 Ø 新一代FPGA器件:高速接口、ARM SOC、多个 IP 硬核、大容量存储器等 Ø 新一代PCIE加速卡:人工智能、金融计算、数据库、高性能计算、视频转码等。 Ø 主要应用: Ø 通信设备:路由器、交换机、5G 如何实现算法加速 FPGA 基本架构 9 Application Processor 64-bit Dual/Quad-Core 赛灵思 Zynq UltraScale+ MPSoC (16nm SOC 芯片) Real-Time Processors 32-bit Dual-Core Platform & Power Management Granular Power Control Functional HDL代码硬件实现 Ø 客户可以直接调用这些函数, 也可以参考它们的实现,针对 自己的算法做修改 12 • PYNQ: Python Productivity for Zynq (Xilinx SOC 芯片) • http://www.pynq.io/ • PYNQ is an open-source project from Xilinx® that makes it easy to design0 码力 | 33 页 | 8.99 MB | 1 年前3
FPGA助力Python加速计算 陈志勇 述数字电路的语言,常用 的主要有VHDL、Verilog HDL ➢ 信号处理:数据可以并行处理 ➢ 主要实现功能: ➢ 组合逻辑 -》计数器 -》算法实现 -》SOC 设计 ➢ 新一代FPGA器件:高速接口、ARM SOC、多个 IP 硬核、大容量存储器等 ➢ 新一代PCIE加速卡:人工智能、金融计算、数据库、高性能计算、视频转码等。 ➢ 主要应用: ➢ 通信设备:路由器、交换机、5G 如何实现算法加速 FPGA 基本架构 9 Application Processor 64-bit Dual/Quad-Core 赛灵思 Zynq UltraScale+ MPSoC (16nm SOC 芯片) Real-Time Processors 32-bit Dual-Core Platform & Power Management Granular Power Control Functional HDL代码硬件实现 ➢ 客户可以直接调用这些函数, 也可以参考它们的实现,针对 自己的算法做修改 12 • PYNQ: Python Productivity for Zynq (Xilinx SOC 芯片) • http://www.pynq.io/ • PYNQ is an open-source project from Xilinx® that makes it easy to design0 码力 | 34 页 | 4.19 MB | 1 年前3
Hello 算法 1.0.0b1 Python版Hello 算法 Python 语言版 靳宇栋(Krahets) Release 1.0.0b1 2023‑03‑01 序 两年前,我在力扣上分享了《剑指 Offer》系列题解,受到了很多小伙伴的喜爱与支持。在此期间,我也回复 了许多读者的评论问题,遇到最多的问题是“如何入门学习算法”。我渐渐也对这个问题好奇了起来。 两眼一抹黑地刷题应该是最受欢迎的方式,简单粗暴且有效。然而,刷题就如同玩“扫雷”游戏,自学能力强 算法学习路线 总体上看,我认为可将学习数据结构与算法的过程分为三个阶段。 1. 算法入门。熟悉各种数据结构的特点、用法,学习各种算法的原理、流程、用途、效率等。 2. 刷算法题。可以先从热门题单开刷,推荐剑指 Offer、LeetCode Hot 100,先积累至少 100 道题量,熟 悉大多数的算法问题。刚开始刷题时,“遗忘”是最大的困扰点,但这是很正常的,请不要担心。学习中 有一种概念叫“周期性回顾”,同一道题隔段时间做一次,在重复 。你可能会想,这并不符合日常习惯,首个元素的 索引为什么不是 1 呢,这不是更加自然吗?我认同你的想法,但请先记住这个设定,后面讲内 存地址计算时,我会尝试解答这个问题。 数组初始化。一般会用到无初始值、给定初始值两种写法,可根据需求选取。在不给定初始值的情况下,一般 所有元素会被初始化为默认值 0 。 # === File: array.py === """ 初始化数组 """ arr0 码力 | 178 页 | 14.67 MB | 1 年前3
Hello 算法 1.0.0b2 Python版Hello 算法 Python 语言版 靳宇栋(Krahets) Release 1.0.0b2 2023‑03‑30 序 两年前,我在力扣上分享了《剑指 Offer》系列题解,受到了很多小伙伴的喜爱与支持。在此期间,我也回复 了许多读者的评论问题,遇到最多的问题是“如何入门学习算法”。我渐渐也对这个问题好奇了起来。 两眼一抹黑地刷题应该是最受欢迎的方式,简单粗暴且有效。然而,刷题就如同玩“扫雷”游戏,自学能力强 算法学习路线 总体上看,我认为可将学习数据结构与算法的过程分为三个阶段。 1. 算法入门。熟悉各种数据结构的特点、用法,学习各种算法的原理、流程、用途、效率等。 2. 刷算法题。可以先从热门题单开刷,推荐剑指 Offer、LeetCode Hot 100,先积累至少 100 道题量,熟 悉大多数的算法问题。刚开始刷题时,“遗忘”是最大的困扰点,但这是很正常的,请不要担心。学习中 有一种概念叫“周期性回顾”,同一道题隔段时间做一次,在重复 。你可能会想,这并不符合日常习惯,首个元素的 索引为什么不是 1 呢,这不是更加自然吗?我认同你的想法,但请先记住这个设定,后面讲内 存地址计算时,我会尝试解答这个问题。 数组初始化。一般会用到无初始值、给定初始值两种写法,可根据需求选取。在不给定初始值的情况下,一般 所有元素会被初始化为默认值 0 。 # === File: array.py === """ 初始化数组 """ arr:0 码力 | 186 页 | 15.69 MB | 1 年前3
Hello 算法 1.0.0b5 Python版Hello 算法 Python 语言版 靳宇栋(Krahets) Release 1.0.0b5 2023‑09‑10 序 两年前,我在力扣上分享了《剑指 Offer》系列题解,受到了许多同学的喜爱和支持。在与读者的交流期间, 最常收到的一个问题是“如何入门学习算法”。我逐渐对这个问题产生了浓厚的兴趣。 两眼一抹黑地刷题似乎是最受欢迎的方法,简单直接且有效。刷题就如同玩“扫雷”游戏,自学能力强的同 从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段。 1. 算法入门。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效率等方面 内容。 2. 刷算法题。建议从热门题目开刷,如剑指 Offer和LeetCode Hot 100,先积累至少 100 道题目,熟悉 主流的算法问题。初次刷题时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按 照“艾宾浩斯遗忘曲线”来复习题目,通常在进行 置称为该元素的「索引 index」。图 4‑1 展示了数组的主要术语和概念。 图 4‑1 数组定义与存储方式 4.1.1 数组常用操作 1. 初始化数组 我们可以根据需求选用数组的两种初始化方式:无初始值、给定初始值。在未指定初始值的情况下,大多数 编程语言会将数组元素初始化为 0 。 # === File: array.py === # 初始化数组 arr: list[int] = [0]0 码力 | 361 页 | 30.64 MB | 1 年前3
Hello 算法 1.0.0 Python版Hello 算法 Python 语言版 作者:靳宇栋(@krahets) Release 1.0.0 2024‑02‑09 序 两年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我 最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。 两眼一抹黑地刷题似乎是最受欢迎的方法,简单、直接且有效。然而刷题就如同玩“扫雷”游戏,自学能力 从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段。 1. 阶段一:算法入门。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效 率等方面的内容。 2. 阶段二:刷算法题。建议从热门题目开刷,如“剑指 Offer”和“LeetCode Hot 100”,先积累至少 100 道题目,熟悉主流的算法问题。初次刷题时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。 我们可以按照“艾宾浩斯遗忘曲线”来复习题目,通常在进行 表 2‑1 迭代与递归特点对比 迭代 递归 实现方 式 循环结构 函数调用自身 第 2 章 复杂度分析 hello‑algo.com 27 迭代 递归 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 适用于子问题分0 码力 | 362 页 | 17.54 MB | 1 年前3
Hello 算法 1.0.0b4 Python版Hello 算法 Python 语言版 靳宇栋(Krahets) Release 1.0.0b4 2023‑07‑26 序 两年前,我在力扣上分享了《剑指 Offer》系列题解,受到了许多朋友的喜爱与支持。在此期间,我回答了众 多读者的评论问题,其中最常见的一个问题是“如何入门学习算法”。我逐渐也对这个问题产生了浓厚的兴 趣。 两眼一抹黑地刷题似乎是最受欢迎的方法,简单直接且有效。 从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段: 1. 算法入门。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效率等方面 内容。 2. 刷算法题。建议从热门题目开刷,如剑指 Offer和LeetCode Hot 100,先积累至少 100 道题目,熟悉 主流的算法问题。初次刷题时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按 照“艾宾浩斯遗忘曲线”来复习题目,通常在进行 行过程中动态扩容。在列表中, 我们可以自由添加元素,而无需担心超过容量限制。 4.3.1. 列表常用操作 初始化列表。通常我们会使用“无初始值”和“有初始值”的两种初始化方法。 # === File: list.py === # 初始化列表 # 无初始值 list1: List[int] = [] # 有初始值 list: List[int] = [1, 3, 2, 5, 4]0 码力 | 329 页 | 27.34 MB | 1 年前3
Hello 算法 1.1.0 Python版Hello 算法 Python 语言版 作者:靳宇栋(@krahets) Release 1.1.0 2024‑04‑15 序 两年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我 最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。 两眼一抹黑地刷题似乎是最受欢迎的方法,简单、直接且有效。然而刷题就如同玩“扫雷”游戏,自学能力 表 2‑1 迭代与递归特点对比 迭代 递归 实现方 式 循环结构 函数调用自身 第 2 章 复杂度分析 hello‑algo.com 27 迭代 递归 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 适用于子问题分 位置称为该元素的索引(index)。图 4‑1 展示了数组的主要概念和存储方式。 图 4‑1 数组定义与存储方式 4.1.1 数组常用操作 1. 初始化数组 我们可以根据需求选用数组的两种初始化方式:无初始值、给定初始值。在未指定初始值的情况下,大多数 编程语言会将数组元素初始化为 0 : # === File: array.py === # 初始化数组 arr: list[int] = [0]0 码力 | 364 页 | 18.42 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Python 版Hello 算法 Python 语言版 作者:靳宇栋(@krahets) 代码审阅:靳宇栋(@krahets) Release 1.2.0 2024‑12‑06 序 两年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我 最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。 两眼一抹黑地刷题似乎是最受欢迎的方法,简单 2‑1 迭代与递归特点对比 迭代 递归 实现方 式 循环结构 函数调用自身 第 2 章 复杂度分析 www.hello‑algo.com 27 迭代 递归 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 适用于子问题分 位置称为该元素的索引(index)。图 4‑1 展示了数组的主要概念和存储方式。 图 4‑1 数组定义与存储方式 4.1.1 数组常用操作 1. 初始化数组 我们可以根据需求选用数组的两种初始化方式:无初始值、给定初始值。在未指定初始值的情况下,大多数 编程语言会将数组元素初始化为 0 : # === File: array.py === # 初始化数组 arr: list[int] = [0]0 码力 | 364 页 | 18.43 MB | 10 月前3
共 134 条
- 1
- 2
- 3
- 4
- 5
- 6
- 14













