diff --git a/lectures/need_for_speed.md b/lectures/need_for_speed.md index b77f5fd..40a21c5 100644 --- a/lectures/need_for_speed.md +++ b/lectures/need_for_speed.md @@ -106,12 +106,12 @@ import random 我们需要 Python 科学库有两个原因: -1. Python 体量小 +1. Python 核心语言小巧 2. Python 速度慢 -**Python 体量小** +**Python 核心语言小巧** -核心 Python 在设计上体量较小——这有助于优化、易用性和维护。 +Python 核心语言在设计上较为精简——这有助于性能优化、易于理解和维护。 科学库提供了我们不想——也可能不应该——自己编写的程序: @@ -121,7 +121,7 @@ import random 我们需要科学库的另一个原因是纯 Python 的速度相对较慢。 -科学库通过三种主要策略来加速执行: +科学计算库主要通过以下三种策略加快执行速度: 1. 向量化:提供已编译的机器码以及使该代码可访问的接口 1. JIT 编译:在运行时将类 Python 语句转换为快速机器码的编译器 @@ -290,7 +290,7 @@ Python 在一定程度上尝试复现这些思路。 ```{index} single: Python; Vectorization ``` -避免内存流量和类型检查的一种方法是[数组编程](https://en.wikipedia.org/wiki/Array_programming)。 +减少内存中的数据传输和类型检查的一种方法是[数组编程](https://en.wikipedia.org/wiki/Array_programming)。 许多经济学家通常将数组编程称为"向量化"。 @@ -298,7 +298,7 @@ Python 在一定程度上尝试复现这些思路。 在计算机科学中,这个术语有[稍微不同的含义](https://en.wikipedia.org/wiki/Automatic_vectorization)。 ``` -其核心思想是将数组处理操作批量发送到预编译的高效本地机器码。 +其核心思想是将数组运算批量交给预先编译好的高效本机机器码执行。 机器码本身通常由经过仔细优化的 C 或 Fortran 编译而来。 @@ -352,7 +352,7 @@ with qe.Timer(): 1. 对它们求平方 1. 对它们求和 -这些操作作为批量算子发送到经过优化的机器码。 +这些操作以批量运算的形式交由经过优化的机器码执行。 @@ -376,7 +376,7 @@ with qe.Timer(): ## 并行化 -近年来,CPU 时钟速度(即单条逻辑链的运行速度)的增长已大幅放缓。 +近年来,CPU 时钟频率(即单条逻辑链的运行速度)的提升已大幅放缓。 芯片设计师和计算机程序员通过寻求一条不同的路径来应对这一放缓:并行化。 @@ -428,7 +428,7 @@ with qe.Timer(): ### 硬件加速器 -并行化的一个更为重要的来源来自专用硬件加速器,尤其是 **GPU**(图形处理单元)。 +专用硬件加速器是另一个更显著的并行计算来源,尤其是 **GPU**(图形处理单元)。 GPU 最初是为渲染图形而设计的,这需要同时对许多像素执行相同的操作。 @@ -436,7 +436,7 @@ GPU 最初是为渲染图形而设计的,这需要同时对许多像素执行 :scale: 40 ``` -这种架构——数千个简单核心对不同数据点执行相同指令——恰好非常适合科学计算。 +这种架构让数千个简单核心对不同数据点同时执行相同指令,恰好非常适合科学计算。 ```{note} **核心**是芯片中的一个独立处理单元——一种可以自主执行指令的电路。CPU 通常拥有少量强大的核心,每个核心都能处理复杂的操作序列。而 GPU 则集成了数千个更小、更简单的核心,每个核心专门执行基本的算术运算。GPU 的强大之处在于让所有这些核心同时处理同一问题的不同部分。