树莓派超算和科学计算教程(一)

原文:Raspberry Pi Supercomputing and Scientific Programming

协议:CC BY-NC-SA 4.0

一、单板计算机和树莓派简介

我们将用 Raspberry Pi 开始我们探索超级计算和科学编程科学领域的激动人心的旅程。但是对于我们开始这个旅程,我们必须熟悉单板计算机和 Raspberry Pi 的基础知识。在这一章中,我们将学习单板计算机的定义、历史和原理。我们首先将它与普通计算机进行比较。然后,我们将继续讨论有史以来最受欢迎和最畅销的单板计算机 Raspberry Pi。到本章结束时,读者将有足够的知识来独立设置自己的树莓派。本章旨在让读者熟悉单板计算机的基本概念和 Raspberry Pi 的设置。

单板计算机

单板计算机(在整本书中,从下文开始将被称为 SBCs)是一个围绕单个印刷电路板构建的全功能计算机系统。SBC 具有微处理器、存储器、输入/输出和最小功能计算机所需的其它特征。与台式个人电脑(PC)不同,大多数 SBC 没有用于外围功能或扩展的扩展槽。因为所有组件,例如处理器、RAM、GPU 等。集成在一个 PCB 上,我们无法升级 SBC。

很少有单板机是为了系统扩展而插入底板的。SBC 有许多种类、大小、形状、外形和功能。由于电子和半导体技术的进步,大多数单板机的价格非常低。SBCs 最重要的特征之一是成本效益。每个价格约为 50 美元,我们手中有一个开发工具,适用于新的应用程序、黑客攻击、调试、测试、硬件开发和自动化系统。

单板机通常以下列形式制造:

Pico-ITX虚拟仪器Qseven世界杯足球赛总线技术总线先进电信运算架构总线嵌入式紧凑型扩展(ECX)迷你 ITXPC/104工业计算机制造协会

单板机和普通计算机的区别

下面是 SBCs 和普通电脑的区别表(表 1-1 )。

表 1-1。

Differences Between SBCs and Regular Computers

| 单板计算机 | 普通计算机 | | — | — | | 它不是模块化的。 | 它是模块化的。 | | 其组件不能升级或更换。 | 它的组件可以升级或更换。 | | 这是一个片上系统。 | 它不是片上系统。 | | 它的外形尺寸很小。 | 它具有大的形状因子。 | | 它是便携式的。 | 它大多是非便携式或半便携式的。 | | 它消耗的能量更少。 | 它消耗更多的能量。 | | 它比普通电脑便宜。 | 它比单板机贵。 |

片上系统

所有 SBC 主要是 SOC。片上系统或片上系统(SOC 或 SoC)是一种集成电路(IC ),它将计算机的所有组件都集成在一个芯片上。SOC 在移动电子设备中非常常见,因为它们具有低功耗和多功能性。SOC 广泛应用于手机、SBC 和嵌入式硬件中。SoC 拥有其运行所需的所有硬件和软件。

SoC 与常规 CPU

使用 SoC 的最大优势是它的尺寸。如果我们使用中央处理器,就很难制造出一台紧凑的计算机,这仅仅是因为我们需要在一块板上排列大量的单个芯片和其他组件。然而,使用 SOC,我们可以在智能手机和平板电脑中放置完整的特定应用计算系统,并且仍然有足够的空间来放置电池、天线和远程电话和数据通信所需的其他附件。

由于非常高的集成度和紧凑的尺寸,SoC 比常规 CPU 消耗的功率要少得多。对于移动和便携式系统,这是 SOC 的一大优势。此外,通过消除计算机电路板上的冗余 IC 来减少芯片数量,可实现紧凑的电路板尺寸。

SBCs 的历史

Dyna-Micro 是第一款真正的 SBC。它基于英特尔 C8080A,并使用英特尔的第一个 EPROM,C1702A。dyna-micro 于 1976 年由康涅狄格州德比的 E&L Instruments 公司更名为 MMD 1 号(Mini-Micro Designer 1)。它作为微型计算机的主要例子而出名。在计算的早期,单板机非常流行,因为许多家用计算机实际上都是单板机。然而,随着个人电脑的兴起,单板机的受欢迎程度下降了。自 2010 年以来,由于 SBC 的生产成本较低,SBC 再次受到欢迎。

除了 MMD-1,以下是一些受欢迎的历史 SBC:

BBC Micro 是围绕运行在 2 MHz 的 MOS 技术 6502A 处理器构建的。Ferguson Big Board II 是一台基于 Zilog Z80 的计算机,运行频率为 4MHz。Nascom 是另一台基于 Zilog Z80 的计算机。

流行的 SBC 系列

基于制造商和设计师,SBC 分为系列、型号和代。一些受欢迎的 SBC 系列有

覆盆子酱基金会的覆盆子酱香蕉派和香蕉派英特尔爱迪生和伽利略方块板喙骨和喙板

树莓派

Raspberry Pi 是由 Raspberry Pi 基金会在英国开发的一系列信用卡大小的 SBC。树莓派基金会成立于 2009 年。开发 Raspberry Pi 的目的是通过提供一个低成本的计算平台来促进学校和发展中国家的基础计算机科学教学。

树莓派基金会的树莓派于 2012 年发布。这是一次巨大的成功,两年内售出了 200 多万台。随后,树莓派基金会修订了树莓派的版本。他们还发布了 Pi 的其他配件。

你可以在树莓派基金会的网站( www.raspberrypi.org 找到更多关于树莓派基金会的信息。

树莓派目前生产型号和其他配件的产品页面为 www.raspberrypi.org/products

我已经在 Raspberry Pi 模型 B+、2B 和 3B 上编写、执行和测试了本书的所有代码示例。树莓派 3 型号 B(也称为 3B)是树莓派 的最新型号。让我们看看树莓派 3 Model B 的规格(参考表 1-2 )。

表 1-2。

Specifications of Raspberry Pi 3 Model B

| 出厂日期 | 2016 年 2 月 | | 体系结构 | ARMv8 战斗机 | | SoC Broadcom | BCM2837 | | 中央处理器 | 1.2 GHz 64 位四核 ARM Cortex-A53 | | 国家政治保卫局。参见 OGPU | Broadcom video core IV(300 MHz GPU 的 3D 部分,400 MHz GPU 的视频部分) | | 记忆 | 1 GB(与 GPU 共享) | | 通用串行总线 | 2.0 端口 4 | | 视频输出 | HDMI 版本 1.3 和复合视频 RCA 插孔 | | 车载存储 | 微型 SDHC 槽 | | 车载网络 | 10/100 Mbps 以太网、蓝牙和 WiFi | | 电源 | 5V 微型 USB 端口 | | 额定功率 | 800 毫安(4W) |

下面(图 1-1 )是树莓派 3 Model B 的俯视图。

树莓派超算和科学计算教程(一)

图 1-1。

Raspberry Pi 3 Model B top view

下面(图 1-2 )是树莓派 3 Model B 的仰视图。

树莓派超算和科学计算教程(一)

图 1-2。

Raspberry Pi 3 Model B bottom view

我们可以通过访问其产品页面( www.raspberrypi.org/products/raspberry-pi-3-model-b )获得更多关于树莓派 3 Model B 的信息。

下表(表 1-3 )列出了树莓派 2 Model B 的规格。

表 1-3。

Specifications of Raspberry Pi 2 Model B

| 出厂日期 | 2015 年 2 月 | | 体系结构 | ARMv7 战斗机 | | SoC Broadcom | BCM2836 | | 中央处理器 | 900 MHz 32 位四核 ARM Cortex-A7 | | 国家政治保卫局。参见 OGPU | Broadcom 视频会议 IV @ 250 MHz | | 记忆 | 1 GB(与 GPU 共享) | | 通用串行总线 | 2.0 端口 4 | | 视频输出 | HDMI 版本 1.3 和复合视频 RCA 插孔 | | 车载存储 | 微型 SDHC 槽 | | 车载网络 | 10/100 Mbps 以太网、蓝牙和 WiFi | | 电源 | 5V 微型 USB 端口 | | 额定功率 | 800 毫安(4W) |

我们可以通过访问其产品页面( www.raspberrypi.org/products/raspberry-pi-2-model-b/ )获得更多关于树莓派 2 Model B 的信息。

下表(表 1-4 )列出了树莓派 1Model B+的规格。

表 1-4。

Specifications of Raspberry Pi 1 Model B+

| 出厂日期 | 2014 年 7 月 | | 体系结构 | ARMv6 战斗机 | | SoC Broadcom | BCM2835 | | 中央处理器 | 700 MHz 单核 ARM1176JZF-S | | 国家政治保卫局。参见 OGPU | Broadcom 视频会议 IV @ 250 MHz | | 记忆 | 512 MB(与 GPU 共享) | | 通用串行总线 | 2.0 端口 4 | | 视频输出 | HDMI 版本 1.3 和复合视频 RCA 插孔 | | 车载存储 | 微型 SDHC 槽 | | 车载网络 | 10/100 Mbps 以太网、蓝牙和 WiFi | | 电源 | 5V 微型 USB 端口 | | 额定功率 | 800 毫安(4W) |

我们可以通过访问其产品页面( www.raspberrypi.org/products/model-b-plus/ )获得更多关于树莓派 2 Model B 的信息。

Raspberry Pi 设置

我们必须先设置树莓派,然后才能开始使用它进行探索和冒险。下面我们来详细看看如何设置。正如我前面提到的,我使用 Raspberry Pi 3 Model B 进行设置。树莓派 2 型号 B 和树莓派 1 型号 B+的设置过程完全相同。让我们来看看安装所需的硬件材料清单。

Raspberry Pi 设置所需的硬件

安装需要下列硬件。

树莓派

我们需要使用树莓派 3 模型 B 或树莓派 2 模型 B 或树莓派 1 模型 B+进行设置。

计算机

需要一台带互联网连接的 Windows 电脑或笔记本电脑。我们需要使用计算机为 Pi 准备一个带有 Raspbian 操作系统映像的 microSD 卡。

输入输出设备

需要一个标准 USB 键盘和一个 USB 鼠标。

微型 sd 卡

需要一个存储容量至少为 8 GB 的 microSD 卡(例如参见图 1-3 )。我们将使用该卡作为 Pi 的二级存储。建议使用等级 10 的卡,因为等级 10 的数据传输速度非常快。安全起见,我建议至少使用 8 GB 的卡。大多数情况下,选择 16 GB 的卡就足够了。

树莓派超算和科学计算教程(一)

图 1-3。

Class 10 microSD card (image from www.flickr.com/photos/ssoosay/ ) Note

在购买该卡之前,请务必访问链接 http://elinux.org/RPi_SD_cards 以检查该卡与树莓派的兼容性。

电源

所有 Raspberry Pi 型号都需要 5V 微型 USB 电源装置(PSU)。树莓派 3 型 PSU 的推荐电流容量为 2.5 安培。对于所有其他型号 2 安培 PSU 是绰绰有余。

你可以在 https://thepihut.com/products/official-raspberry-pi-universal-power-supply 找到树莓派的官方电源。

SD/microSD 读卡器

我们还需要一个读卡器。许多笔记本电脑都有内置的 SD 读卡器。

如果笔记本电脑或读卡器只能使用 SD 卡,那么我们需要一个额外的 microSD-to-SD 卡适配器。下图(图 1-4 )显示了一个适配器。

树莓派超算和科学计算教程(一)

图 1-4。

Card reader and microSD-to-SD adapter (image from www.flickr.com/photos/sparkfun/ )

班长

我们需要一个 HDMI 显示器或 VGA 显示器。

对于 HDMI 显示器,我们需要一根 HDMI 电缆(参见图 1-5 )。它通常与 HDMI 显示器一起包装。

树莓派超算和科学计算教程(一)

图 1-5。

HDMI male-to-male cable (image from www.flickr.com/photos/sparkfun/ )

对于 VGA 显示器,我们需要一根 VGA 电缆(参见图 1-6 )。这通常也与 VGA 显示器一起包装。

树莓派超算和科学计算教程(一)

图 1-6。

VGA cable (image from www.flickr.com/photos/124242273@N07/ )

如果我们使用 VGA 显示器,我们将需要一个 HDMI-VGA 适配器,因为 Raspberry Pi 只有一个 HDMI 端口用于视频输出(图 1-7 )。

树莓派超算和科学计算教程(一)

图 1-7。

HDMI-to-VGA adapter (image from www.flickr.com/photos/sparkfun/ )

树莓派 MicroSD 卡的手工制作

手动准备用于 Pi 的 microSD 卡是将操作系统安装到单板计算机的 microSD 卡中的最佳方式。许多用户(包括我)更喜欢它,因为它允许在用于启动之前手动修改 microSD 卡的内容(如果需要)。准备 microSD 的另一种方法是使用 NOOBS(新的开箱即用软件),我在本书中没有使用过。

手动准备允许我们在启动前访问/boot/config.txt等配置文件。在启动 Pi 之前,我们可能必须在少数情况下修改配置文件(我们将很快讨论这一点)。默认的 Raspbian 映像有两个分区,bootsystem。请为 Pi 使用至少 16 GB 的 microSD 卡,考虑到将来可能对操作系统进行的任何升级。

下载所需的免费软件

让我们下载所需的软件。

下载加速器增强版

从其下载页面( www.speedbit.com/dap/download/downloading.asp )下载下载加速器加安装程序。这个免费软件用于管理下载。这对于大型下载非常有用,因为我们可以暂停和继续下载。如果您的电脑突然关机或互联网中断,它会从最后一个检查点继续下载。下载并安装后,使用它来管理以下下载。

win32 diski manager

从其下载页面( https://sourceforge.net/projects/win32diskimager/files/latest/download )下载 Win32DiskImager 安装程序。安装。

WinZip 或 WinRaR

我们需要一个文件提取工具。下载 WinZip ( http://www.winzip.com/win/en/index.htm )或者 WinRaR ( http://www.win-rar.com/download.html )。安装其中任何一个。

下载并解压缩 Raspbian 操作系统映像

我们将使用 Raspbian 操作系统作为 Pi。我们将在本章的后半部分详细讨论 Raspbian。现在,从 www.raspberrypi.org/downloads/raspbian 下载 Raspbian 操作系统的最新压缩文件。用 WinZip 或 WinRaR 提取图像 zip 文件。

将 Raspbian 操作系统映像写入 MicroSD 卡

将 microSD 卡插入读卡器。如果您的电脑或笔记本电脑有内置读卡器,请将其插入。如果读卡器或您的电脑只有一个 SD 卡插槽,您可能必须使用 microSD-to-SD 卡适配器。

打开 Win32DiskImager。选择图像文件的位置,然后单击写入按钮。见下图 1-8 。

树莓派超算和科学计算教程(一)

图 1-8。

Win32 Disk Imager

如果您看到以下警告消息(图 1-9 ,则切换读卡器或 SD 卡适配器(或两者)的写保护槽。然后再次点按“写入”按钮。

树莓派超算和科学计算教程(一)

图 1-9。

Write protection error message

将显示以下(图 1-10 )警告信息。单击“是”按钮继续。

树莓派超算和科学计算教程(一)

图 1-10。

Overwrite warning message

一旦操作系统映像被写入 SD 卡,将显示以下消息(图 1-11 )。单击确定按钮。

树莓派超算和科学计算教程(一)

图 1-11。

Write successful message

Raspbian 操作系统已经刷新到 microSD 卡。

更改 VGA 监视器的 config.txt 文件的内容

Note

如果你打算使用 VGA 显示器,这一步是必须的。如果您使用的是 HDMI 显示器,请跳过这一步。

对于 VGA 显示器,我们必须使用 HDMI 转 VGA 电缆。我们还需要更改config.txt的内容,以使 Pi 与 VGA 监视器一起工作。我们将在本章的后半部分了解更多关于config.txt的内容。

将 microSD 卡再次插入读卡器,并在 Windows 资源管理器中浏览。在 Windows 资源管理器中,它将被表示为标记为boot的可移动介质驱动器。

打开文件config.txt,对文件进行如下更改:

#disable_overscan=1改为disable_overscan=1#hdmi_force_hotplug=1改为hdmi_force_hotplug=1#hdmi_group=1改为hdmi_group=2#hdmi_mode=1改为hdmi_mode=16#hdmi_drive=2改为hdmi_drive=2#config_hdmi_boost=4改为config_hdmi_boost=4

完成上述更改后,保存文件。

microSD 卡现在已准备好用于 Pi 和 VGA 监视器。

启动 Pi

让我们用准备好的 microSD 卡启动 Pi。其步骤如下:

如果您使用的是 HDMI 显示器,请使用 HDMI 公对公电缆将显示器直接连接到 Pi 的 HDMI 端口。如果您使用的是 VGA 显示器,请使用 HDMI 转 VGA 适配器将 HDMI 信号转换为 VGA。将 microSD 卡插入 Pi 的 microSD 卡插槽。连接 USB 鼠标和 USB 键盘。此时,请确保电源已关闭。使用我们之前讨论过的微型 USB 电源线将 Pi 连接到电源。将显示器连接到电源。检查所有连接。打开 Pi 和监视器的电源。

此时,树莓派将启动。

对于所有配备单核处理器的 Raspberry Pi 机型,开机画面如下(图 1-12 )。

树莓派超算和科学计算教程(一)

图 1-12。

Single-core CPU RPi model boot screen

树莓派所有搭载四核处理器的机型,开机画面都会如下图(图 1-13 )。

树莓派超算和科学计算教程(一)

图 1-13。

Quad-core CPU RPi Model boot screen

一旦 Pi 启动,监视器显示如下的桌面(图 1-14 )。

树莓派超算和科学计算教程(一)

图 1-14。

Raspbian Desktop (as of February 2017)

配置 Pi

我们现在需要配置 Pi 以备将来使用。就这么办吧。

在桌面上,有一个任务栏。在任务栏中,我们发现了下面的图标(图 1-15 )。

树莓派超算和科学计算教程(一)

图 1-15。

LXTerminal icon

点击图标,LXTerminal 窗口(图 1-16 )将会打开。

树莓派超算和科学计算教程(一)

图 1-16。

LXTerminal Window

该终端是一个独立于桌面的基于 VTE 的 LXDE 终端模拟器,没有任何不必要的依赖。在提示符下键入sudoraspi-config并按回车键。raspi-config是树莓派 的配置工具。

导航至引导选项(在图 1-17 中突出显示)。

树莓派超算和科学计算教程(一)

图 1-17。

raspi-config with boot options highlighted

将引导选项设置为桌面自动登录,如下图 1-18 所示。

树莓派超算和科学计算教程(一)

图 1-18。

Desktop Autologin highlighted

在国际化选项中,更改时区和 Wi-Fi 国家(参见图 1-19 )。把键盘布局改成美国。

树莓派超算和科学计算教程(一)

图 1-19。

raspi-config internationalization options

完成后,返回主屏幕并选择完成,如下图所示(图 1-20 )。

树莓派超算和科学计算教程(一)

图 1-20。

Finish

它将要求重启(图 1-21 )。选择是。

树莓派超算和科学计算教程(一)

图 1-21。

Reboot Prompt

它将重新启动 Pi。

我们的工作还没有完成。我们需要学习如何将 Pi 连接到互联网,以及如何更新它。

Raspbian

操作系统是使计算机工作的一组基本程序和实用程序。它是用户和计算机之间的接口。Raspbian 是一个基于流行的 Linux 发行版 Debian 的免费操作系统。Raspbian 针对 SBCs 的 Raspberry Pi 系列进行了优化。它甚至被移植到其他类似的单板机,如香蕉亲。

Raspbian 捆绑了超过 35,000 个软件包和预编译软件,便于在 Raspberry Pi 上安装和使用。Raspbian 的第一个版本于 2012 年 6 月完成。Raspbian 仍在积极开发中,并经常更新。访问 Raspbian 主页( www.raspbian.org )和 Raspbian 文档页面( www.raspbian.org/RaspbianDocumentation )了解更多关于 Raspbian 的信息。

配置文件

Raspberry Pi 没有常规的 BIOS。BIOS(基本输入/输出系统)是计算机的微处理器用来启动计算机系统并在计算机通电后将操作系统加载到内存中的程序。它还管理计算机操作系统和连接的外围设备(如硬盘、视频适配器、键盘、鼠标和打印机)之间的数据流。

由于 Raspberry Pi 没有 BIOS,通常使用 BIOS 存储和修改的各种系统配置参数现在存储在名为config.txt的文本文件中。

树莓派 config.txt文件是树莓派 的boot分区上的文件。在 Linux 中,它通常可以作为/boot/config.txt访问。但是,在 Windows 和 Mac OS 中,它被视为 microSD 卡可访问部分中的文件。卡的可访问部分标记为boot。正如我们在本章前面已经了解到的,如果我们想将/boot/config.txt文件连接到 VGA 显示器,我们必须编辑它。

在 Raspberry Pi 上,我们可以在 LXTerminal 中使用以下命令编辑该文件:

sudo nano /boot/config.txt


12

Note

nano 是一个简单易学的基于文本的 Linux 文本编辑器。访问其主页( www.nano-editor.org )了解更多信息。我发现它比vivim编辑器更容易使用。

要了解更多关于config.txt的信息,请访问 http://elinux.org/RPiconfig 页面。此外,可以在 http://elinux.org/R-Pi_configuration_file 找到一个示例配置。

将 Raspberry Pi 连接到网络和互联网

要将 Pi 连接到任何网络,我们必须编辑/etc/network/interfaces文件。如果 Pi 连接的网络连接到 Internet,则 Pi 可以访问 Internet。

无线局域网(wireless fidelity 的缩写)

树莓派 3 型号 B 内置 WiFi。对于所有其他型号的 Pi,我们需要使用 USB WiFi 适配器。

将 USB WiFi 适配器连接到 Pi 后,使用以下命令备份/ etc/network/interfaces文件:

sudo mv /etc/network/interfaces /etc/network/interfaces.bkp


12

原始的/etc/network/interfaces文件以这种方式是安全的,并且如果出现问题可以恢复。

现在创建一个新的/etc/network/interfaces文件。

sudo nano /etc/network/interfaces


12

在其中键入以下行(列表 1-1 ):

source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid "ASHWIN"
wpa-psk "internet"

Listing 1-1./etc/network/interfaces


12345678910111213

在上面的文件中(列表 1-1 )用你的 WiFi 网络的 ssid 替换"ASHWIN",用你的 WiFi 网络的密码替换"internet"。通过按 CTRL+X 和 y 保存文件。

运行以下命令重新启动网络服务:

sudo service networking restart


12

如果您正确执行了这些步骤,Pi 应该连接到 WiFi 网络和互联网(前提是 WiFi 网络已连接到互联网)。

要验证与互联网的连接,请使用以下命令:

ping -c4 www.google.com


12

它应该显示类似下面的输出。

PING www.google.com (216.58.197.68) 56(84) bytes of data.
64 bytes from maa03s21-in-f4.1e100.net (216.58.197.68): icmp_seq=1 ttl=55 time=755 ms
64 bytes from maa03s21-in-f4.1e100.net (216.58.197.68): icmp_seq=2 ttl=55 time=394 ms
64 bytes from maa03s21-in-f4.1e100.net (216.58.197.68): icmp_seq=3 ttl=55 time=391 ms
64 bytes from maa03s21-in-f4.1e100.net (216.58.197.68): icmp_seq=4 ttl=55 time=401 ms

--- www.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 391.729/485.695/755.701/155.925 ms


12345678910

像上面这样的输出意味着 Pi 连接到了互联网。

要查找 Pi 的 IP 地址,请使用 ifconfig 命令。在其输出中,检查wlan0部分。具体如下:

wlan0     Link encap:Ethernet  HWaddr 7c:dd:90:00:e2:1e
          inet addr:192.168.0.122  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::7edd:90ff:fe00:e21e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1974 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1275 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:195049 (190.4 KiB)  TX bytes:1204336 (1.1 MiB)


123456789

在上面的输出中,192.168.0.122是 Pi 的 IP 地址。由于 IP 地址是使用 DHCP 协议分配的,因此根据 WiFi 网络设置的不同,IP 地址也会有所不同。

以太网

我们还可以将 Pi 连接到局域网。根据 LAN 交换机的设置,我们可以静态或动态地为 Pi 分配 IP 地址。

静态 IP 地址

如果局域网静态分配 IP 地址,则按如下方式配置/etc/network/interfaces(列表 1-2 ):

source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet static
# Your static IP
address 192.168.0.2
# Your gateway IP
gateway 192.168.0.1
netmask 255.255.255.0
# Your network address family
network 192.168.0.0
broadcast 192.168.0.255

Listing 1-2./etc/network/interfaces



树莓派超算和科学计算教程(一)12345678910111213141516171819

在上面的文件中,参数addressgatewaynetmasknetworkbroadcast基于局域网的配置。请查看局域网交换机或路由器的手册。如果您在组织中工作,请向网络管理员咨询这些参数。

动态 IP 地址

这是一个简单的问题。如果局域网具有 DHCP 功能,则按如下方式配置/etc/network/interfaces(列表 1-3 ):

source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

Listing 1-3./etc/network/interfaces


1234567891011

这将配置 Pi 通过 DHCP 自动获取 IP 地址。

Note

在 Debian 及其衍生产品上设置网络所需的所有信息都可以在 https://wiki.debian.org/NetworkConfiguration 上找到。

更新 Pi

为此,Pi 必须连接到互联网。

更新固件

固件是嵌入电子设备 ROM 芯片的软件。它提供对设备的控制和监控。要更新 Pi 的固件,运行sudo rpi-update。它将更新固件。

更新和升级 Raspbian

我们将为此使用 APT。APT 代表高级打包工具。这是一个处理 Debian 和其他 Debian 衍生软件的安装和删除的程序。APT 通过自动获取、配置和安装软件包,简化了在 Debian 系统上管理软件的过程。我们也需要一个互联网连接。

首先,通过在 LXTerminal 中输入以下命令来更新系统的程序包列表:

sudo apt-get update


12

apt-get update从各自的远程存储库下载软件包列表,并在本地计算机上更新它们,以获取可用于安装和更新的最新版本软件包及其依赖项的信息。它应该在运行installupgrade命令之前运行。

接下来,使用以下命令将所有已安装的软件包升级到最新版本:

sudo apt-get dist-upgrade -y


12

apt-get dist-upgrade获取机器上标记为要在本地机器上升级的软件包的新版本。它还检测和安装依赖关系。它可能会删除过时的软件包。

定期这样做将使 Pi 上安装的 RaspbianOS 保持最新。输入这些命令后,需要一段时间来更新操作系统,因为这些命令会从远程存储库中获取数据和包。

Note

sudo apt-get --help将列出与apt-get相关的所有选项

更新 raspi-config

raspi-config中,转到高级选项(参见图 1-22 )并选择更新。

树莓派超算和科学计算教程(一)

图 1-22。

Updating raspi-config

关闭和重新启动 Pi

我们可以用sudo shutdown -h now安全关闭 Pi。

我们可以用sudo reboot -h now重启 Pi。

结论

在本章中,我们介绍了 SBCs 的概念和原理。我们也开始使用 SBC 的一个流行系列,Raspberry Pi。现在我们可以满怀信心地进行进一步的探索。在下一章,我们将学习一些重要的 Linux 命令以及如何远程连接到 Pi。

二、重要的 Linux 命令和远程连接

在上一章中,我们学习了单板计算机的基础知识以及如何设置 Pi。我们还学会了将 Pi 连接到互联网。我希望所有读者现在对这些基础知识都很熟悉了。完成这些后,我们将会更深入地挖掘一些基础知识。在这一章中,我们将学习一些对我们有用的重要的 Linux 命令。我们还将研究如何远程连接到 Pi。

重要而有用的 Linux 命令

在这一节中,我们将研究几个重要的 Linux 命令,这些命令将有助于我们理解将用于超级计算和并行编程的硬件环境(Pi)。

获得 Linux 命令的帮助

我们可以使用 man 命令或- help 选项来获取有关命令的更多信息。例如,如果我们想更多地了解 cat 命令的用法,那么我们可以发出命令 man cat 或 cat – help。

网络相关命令

以下与网络相关的命令有助于理解网络基础设施。

命令

ifconfig 用于检查网络状态。我们可以使用 ifconfig eth0 或 ifconfig wlan0 分别检查 WiFi 或以太网的状态。

尤克里里琴

我们可以使用 iwconfig 来检查无线网络状态。其输出如下:

wlan0 IEEE 802.11bg ESSID:"ASHWIN"
Mode:Managed Frequency:2.412 GHz Access Point: A2:EC:80:FB:E2:66
Bit Rate=6 Mb/s Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off
Link Quality=45/70 Signal level=-65 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:24 Invalid misc:6 Missed beacon:0

lo no wireless extensions.

eth0 no wireless extensions.


12345678910111213
iwlist wlan0 扫描

iwlist wlan0 扫描显示所有可用无线网络的列表。

ping 测试两台设备之间的网络连通性。我们已经在第一章中看到了它检查互联网连接的用法。

系统信息命令

这些命令帮助我们更多地了解 Pi 上系统和硬件的状态。

CPU 相关信息

我们可以使用 cat /proc/cpuinfo 来查看关于 CPU 的信息。

要检查其他细节(即 CPU 的运行速度),可以使用 lscpu 命令。lscpu 的输出如下:

Architecture: armv7l
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
Model name: ARMv7 Processor rev 5 (v7l)
CPU max MHz: 900.0000
CPU min MHz: 600.0000


1234567891011
记忆相关信息

我们可以使用 cat /proc/meminfo 来获得关于内存的细节。我们还可以使用 free 命令来查看有多少可用内存,如下所示:

        total   used     free     shared   buffers  cached
Mem:    996476  210612   785864   7208     15152    113668
-/+ buffers/
cache:  81792   914684
Swap:   102396  0        102396


123456
系统和操作系统版本信息

uname -a 提供关于当前系统的信息如下:

Linux raspberrypi 4.4.11-v7+ #888 SMP Mon May 23 20:10:33 BST 2016 armv7l GNU/Linux


12

要识别 Linux 版本,请运行命令 cat /proc/version。

分区相关信息

df -h 以可读格式显示 microSD 卡分区相关信息,如下所示:

Filesystem              Size    Used    Avail   Use%    Mounted on
/dev/root               15G     3.6G    11G     26%     /
devtmpfs                483M    0       483M    0%      /dev
tmpfs                   487M    0       487M    0%      /dev/shm
tmpfs                   487M    6.6M    480M    2%      /run
tmpfs                   5.0M    4.0K    5.0M    1%      /run/lock
tmpfs                   487M    0       487M    0%      /sys/fs/cgroup
/dev/mmcblk0p1          63M     21M     43M     33%     /boot
tmpfs                   98M     0       98M     0%      /run/user/1000


12345678910

cat /proc/partitions 提供了分区块分配信息。

其他有用的命令

hostname -I 显示了 IP 地址。

lsusb 显示连接到 Pi 的所有 usb 设备的列表。

vcgencmd measure_temp 显示 CPU 的温度。

vcgencmd get _ mem arm & & vcgencmd get _ mem gpu 显示 CPU 和 GPU 之间的内存分割。

从 raspi-config 为 SSH 启用 Pi

要远程连接到 Pi,我们需要从 raspi- config 启用 SSH 服务器。打开 LXTerminal 并运行命令 sudo raspi-config。

在 raspi-config 的主菜单中选择高级选项。在高级选项屏幕中,选择 A4 SSH,将出现以下屏幕(图 2-1 )。

树莓派超算和科学计算教程(一)

图 2-1。

Enabling the SSH server

选择是,将显示以下信息(图 2-2 )。

树莓派超算和科学计算教程(一)

图 2-2。

SSH server enable confirmation

按回车键。从 raspi-config 的主菜单中选择 Finish,并在提示重新启动时选择 Yes。一旦 Pi 重启,我们就可以远程访问了。

从 Windows 远程连接到 Raspberry Pi

如果我们用来连接 Raspberry Pi 的计算机也在同一个网络中(无论是物理上还是通过 VPN),远程连接到 Pi 是可能的。为此,我们必须使用各种工具和实用程序。在本章中,我们将学习远程连接到 Pi。我们还将学习如何在 Pi 之间来回传输文件。当我们想在无头模式下使用 Pi 时,这一点很重要(“无头”只是指我们使用的 Pi 没有附加可视显示)。在我们没有显示器或者由于资源/空间限制而不想备用显示器的情况下,这很有用。例如,当我们创建一个 Pi 集群时,我们不能为集群中的每个 Pi 留出一个显示器。在这种情况下,无头模式非常有用。在本章的这一部分,我们将探索远程使用 Pi 的多种方法。

从另一台计算机检查与 Pi 的连接

我们计划连接到 Pi 的计算机必须在同一个网络中,这一点很重要。在其他计算机和 Pi 之间不应该有任何代理和防火墙限制。这种设置的最佳示例是 Pi 和另一台计算机连接在同一个路由器/网络交换机下。要检查连通性,我们可以使用 ping 实用程序。

在计算机上打开 Windows 命令行 cmd。打开 Pi 并记下其 IP 地址。使用 ifconfig 命令查找其 IP 地址。假设是 192.168.0.2(不管是以太网还是 WiFi)。在 cmd 中,运行 ping 192.168.0.2 来检查连通性。

我们可以在任何装有 Linux 发行版或 macOS 的计算机上使用相同的 ping 命令,只要它们与 Pi 在同一个网络中。

油灰

PuTTY 是用于 Windows 和 Unix 平台的 SSH 和 Telnet 的一个免费实现,附带一个 xterm 终端仿真器。它主要由 Simon Tatham 编写和维护。你可以探索 PuTTY 主页( www.chiark.greenend.org.uk/~sgtatham/putty/ )了解更多信息。

PuTTY 是开源软件,有源代码,由一个志愿者团队开发和支持。

现在让我们下载并安装 PuTTY。PuTTY 可以从其下载页面( www.chiark.greenend.org.uk/~sgtatham/putty/latest.html )下载。下载文件 PuTTY.exe。下载完成后,将其放在您选择的目录中,并为您创建一个桌面快捷方式(图 2-3 )。

树莓派超算和科学计算教程(一)

图 2-3。

PuTTY desktop shortcut

双击 putty 快捷方式,将会打开 PuTTY(图 2-4 )窗口。

树莓派超算和科学计算教程(一)

图 2-4。

PuTTY Window

在主机名(或 IP 地址)文本框中键入 IP 地址或主机名。确保选择 SSH 作为连接类型。为了将来使用,你可能想要保存设置(我通常这样做)。现在,单击打开按钮。它会打开一个终端风格的窗口。它会要求你输入用户名和密码,分别是 pi 和 raspberry。首次登录时,显示如下(图 2-5 )消息对话框。单击是。

树莓派超算和科学计算教程(一)

图 2-5。

PuTTY security alert

一旦我们登录,它会显示如下提示(图 2-6 )。

树莓派超算和科学计算教程(一)

图 2-6。

PuTTY remote connection window

我们现在可以远程使用 Pi 的命令提示符了。

远程访问 Raspberry Pi 桌面

树莓派 桌面是 LXDE(轻量级 X11 桌面环境)。我们可以使用 RDP(远程桌面协议)客户端从 Windows 计算机远程访问它。为此,我们需要在 Pi 上安装 xrdp。通过运行 sudo apt-get install xrdp 来安装它。安装后重新启动 Pi。

我们现在必须使用 Windows 远程桌面客户端来连接到 Pi。可以使用 Windows 中的搜索选项找到客户端。单击 Remote Desktop 客户端图标将其打开。

在下面的对话框中(图 2-7 ,点击选项将其展开。

树莓派超算和科学计算教程(一)

图 2-7。

Remote Desktop Connection

它展开并显示各种选项(图 2-8 )。输入 pi 的 IP 地址和 Pi 作为用户名。单击复选框和保存按钮,保存相同的配置供将来使用。

树莓派超算和科学计算教程(一)

图 2-8。

Remote Desktop Connection options

登录时会提示输入密码。输入密码。如果我们第一次使用 Windows 计算机连接到 Pi,那么它将显示以下对话框(图 2-9 )。选中复选框,这样它就不会再询问我们,然后单击是。

树莓派超算和科学计算教程(一)

图 2-9。

First time remote login

它将显示树莓派桌面。由于 Pi 通过网络传输桌面,操作速度会稍慢。然而,它工作得很好。

这就是我们如何使用 Windows 电脑/笔记本电脑访问 Pi 的桌面。然而,我们所学的方法都不允许我们在 Windows 计算机和 Pi 之间传输文件。我们将在本章的下一节学习如何去做。

温斯 CP

对于 Windows 计算机和 Raspberry Pi 之间的文件传输,我们将使用 WinSCP ( https://winscp.net/eng/index.php )。WinSCP 是一个免费的 Windows 开源 SFTP 和 FTP 客户端。它的主要功能是本地和远程计算机之间的安全文件传输。

下载其设置( https://winscp.net/eng/download.php )并安装。在 Windows 桌面上创建它的快捷方式。双击图标打开 WinSCP(图 2-10 )。

树莓派超算和科学计算教程(一)

图 2-10。

WinSCP window

在主机名文本框中输入 Pi 的 IP 地址。另外,输入 pi 作为用户名,输入 raspberry 作为密码。

我们还可以保存设置以备将来使用。保存会话(图 2-11 )对话框如下。

树莓派超算和科学计算教程(一)

图 2-11。

Save session

登录后,如果我们是第一次连接,则会显示以下对话框(图 2-12 )。单击“添加”按钮继续。

树莓派超算和科学计算教程(一)

图 2-12。

First time login dialog box

登录后,将显示以下窗口(图 2-13 )。

树莓派超算和科学计算教程(一)

图 2-13。

WinSCP file transfer window

本地 Windows 计算机的文件系统在左侧面板中,而 Raspberry Pi 的 Pi 用户的主目录即/home/pi 在右侧面板中。我们现在可以在两台计算机之间传输文件了。

使用 Linux 或 macOS 连接到 Raspberry Pi

让我们学习使用 Linux 计算机或 macOS 连接到 Pi。

使用 SSH 远程登录

SSH 内置于 Linux 发行版和 macOS 中。我们可以使用 SSH 从 Linux 计算机(也可能是另一个 Raspberry Pi)或 Mac 终端连接到 Pi,而无需安装额外的软件。

在 Linux 计算机或 Mac 中打开终端,并键入以下命令:

ssh pi@192.168.0.2


12

192.168.0.2 是我 Pi 的 IP 地址。用您的 Pi 的 IP 地址替换它。一旦我们按下回车键,它将显示一个安全/真实性警告提示。键入 yes 继续。此警告仅在我们第一次连接时显示。

现在它会提示输入密码。输入 pi 用户的默认密码 raspberry。我们将看到 Raspberry Pi 提示符,它与 Raspberry Pi 上的提示符完全相同。

使用 SSH 转发

我们还可以通过 ssh 转发 X11 会话,以允许使用图形应用程序,方法是在 SSH 命令中使用-Y 标志,如下所示:

ssh -Y pi@192.168.0.2


12

让我们远程访问像 scratch 这样的图形程序。运行以下命令,

scratch &


12

它将在 Linux 计算机或 Mac 上的新窗口中启动 Pi 程序scratch的新 X11 会话。&使命令在后台运行。

用于文件传输的 SCP

在 Windows 中,我们使用 WinSCP 在 Windows 计算机和 Pi 之间进行文件传输。同样,我们可以在 Linux 计算机/Mac 和 Pi 之间传输文件。为此,我们需要使用 scp 实用程序。它内置于所有的 Linux 发行版和 macOS 中。

要将文件从 Pi 复制到 Linux 计算机或 Mac 上,我们必须在 Linux 计算机或 Mac 上的终端中运行以下命令:

scp pi@192.168.0.2:/home/pi/test.txt /home/ashwin


12

上面的命令将 test.txt 从 pi 的/home/pi 目录复制到我们的 Linux 电脑或 Mac 的/home/ashwin 目录。

同样,我们可能希望将文件从 Linux 计算机或 Mac 计算机复制到 Pi。为此,在 Linux 计算机或 Mac 的终端中运行以下命令:

scp /home/ashwin/test_again.txt pi@192.168.0.2:/home/pi


12

你可以在 www.computerhope.com/unix/scp.htm 上阅读更多关于 scp 命令的详细内容。

EXERCISE

完成下面的练习,更好地理解本章。

练习 man 命令。练习各种 Linux 命令的- help 选项。运行 iwlist wlan0 scan 命令。运行 ping www.AshwinPajankar.com 命令来检查与互联网的连接。尝试查看本章中演示的所有系统相关命令的输出。尝试用 VNC 远程访问树莓派桌面。

结论

在本章中,我们探讨了远程连接到 Pi 的各种方法。我们还学习了如何在 Pi 和其他使用 Linux、Windows 和 Mac 作为操作系统的计算机之间传输文件。

三、Python 简介

在上一章中,我们学习了重要的 Linux 命令,以及如何从其他计算机远程连接到 Raspberry Pi。我们还学习了如何在 Raspberry Pi 之间传输文件。

在这一章中,我们将开始学习 Python。

让我们从 Python 的介绍开始这一章。我个人觉得 Python 很神奇,已经被它迷住了。Python 是一种简单而强大的编程语言。当我们使用 Python 时,很容易关注给定问题的解决方案的实现,因为程序员不必担心编程语言的语法。Python 完美契合了 Raspberry Pi 的理念,即“为所有人编程”。这就是为什么 Python 是 Raspberry Pi 和许多其他 SBC 的首选编程平台。

Python 的历史

Python 是在 20 世纪 80 年代末设计和构思的。1989 年底,荷兰国家数学和计算机科学研究所的吉多·范·罗苏姆开始了它的实际实施。Python 是 ABC 编程语言的继承者。ABC 编程语言本身受到了 SETL 的启发。1991 年 2 月,Van Rossum 向 alt.sources 新闻组公开发布了 Python 源代码。Python 这个名字的灵感来自电视节目《巨蟒剧团的飞行马戏团》。范·罗森是巨蟒剧团的忠实粉丝。

Van Rossum 是 Python 编程语言的主要作者。他在指导 Python 编程语言的开发、错误修复、增强和进一步发展方面起着核心作用。他拥有 Python 终身仁慈独裁者的称号。他目前(截至 2017 年 2 月)为 Dropbox 工作,并将几乎一半的时间用于 Python 编程语言的进一步开发。

Python 编程语言的核心哲学,Python 的禅,在 PEP-20 (PEP 代表 Python 增强提案)中有解释,可以在 www.python.org/dev/peps/pep-0020 找到。

它是 20 个软件原则的集合,其中 19 个已经被文档化。这些原则如下:

漂亮总比难看好。显性比隐性好。简单比复杂好。复杂总比复杂好。扁平的比嵌套的好。疏比密好。可读性很重要。特例不足以特殊到打破规则。虽然实用性战胜了纯粹性。错误永远不会无声无息地过去。除非明确沉默。面对暧昧,拒绝猜测的诱惑。应该有一种——最好只有一种——显而易见的方法来做这件事。尽管这种方式一开始可能并不明显,除非你是荷兰人。现在总比没有好。虽然从来没有比现在更好。如果实现很难解释,这是一个坏主意。如果实现很容易解释,这可能是一个好主意。名称空间是一个非常棒的想法——让我们多做一些吧!

Python 的特性

下面是 Python 的一些特性,正是这些特性让它在编程社区中变得流行和受欢迎。

简单的

Python 是一种简单的极简主义语言。阅读一个好的、写得好的 Python 程序会让我们觉得好像在阅读英文文本。

简单易学

由于其简单的、类似英语的语法,Python 对于初学者来说非常容易学习。这就是现在它作为第一编程语言被教授给学习编程入门和编程 101 课程的高中生和大学生的主要原因。新一代的程序员正在学习 Python 作为他们的第一门编程语言。

易于阅读

与其他高级编程语言不同,Python 没有提供太多混淆代码和使其不可读的措施。与用其他编程语言编写的代码相比,Python 代码类似英语的结构更容易阅读。这使得它比其他高级语言如 C 和 C++更容易理解和学习。

易于维护

由于 Python 代码易于阅读、理解和学习,任何维护代码的人都可以在相当短的时间内熟悉代码库。我可以从我维护和增强大型遗留代码库的个人经验中证明这一点,这些代码库是用 bash 和 Python 2 的组合编写的。

开放源码

Python 是一个开源项目。它的源代码是免费的。我们可以根据需要对它进行修改,并在应用程序中使用原始代码和修改后的代码。

高级语言

在编写 Python 程序时,我们不必管理低级别的细节,如内存管理、CPU 计时和调度过程。所有这些任务都由 Python 解释器管理。我们可以直接用易于理解的类似英语的语法编写代码。

轻便的

Python 解释器已经被移植到许多操作系统平台上。Python 代码也是可移植的。如果我们足够小心地避免任何依赖于系统的编码,所有的 Python 程序都可以在任何支持的平台上工作,而不需要做很多改变。

我们可以在 GNU/Linux、Windows、Android、FreeBSD、Mac OS、iOS、Solaris、OS/2、Amiga、Palm OS、QNX、VMS、AROS、AS/400、BeOS、OS/390、z/OS、psion、Acorn、PlayStation、sharp suzanrus、RISC OS、VxWorks、Windows CE 和 PocketPC 上使用 Python。

解释

Python 是一种解释型语言。让我们理解这是什么意思。用 C、C++和 Java 等高级编程语言编写的程序首先被编译。这意味着它们首先被转换成中间格式。当我们运行程序时,这个中间格式由链接器/加载器从辅助存储器(即硬盘)加载到内存(ram)中。所以 C,C++和 Java 有独立的编译器和链接器/加载器。Python 就不是这样了。Python 直接从源代码运行程序。我们不必费心编译和链接到适当的库。这使得 Python 程序具有真正的可移植性,因为我们可以将程序从一台计算机复制到另一台计算机,只要在目标计算机上安装了必要的库,程序就可以正常运行。

面向对象

Python 支持面向过程的编程以及面向对象的编程范例。

Python 支持面向对象的编程范例。所有面向对象的编程范例都是用 Python 实现的。在面向对象的编程语言中,程序是围绕结合数据和相关功能的对象构建的。Python 是一种非常简单但功能强大的面向对象编程语言。

可扩张的

Python 的一个特点就是我们可以从 Python 程序中调用 C 和 C++例程。如果我们希望应用程序的核心功能运行得更快,那么我们可以用 C/C++编写这部分代码,并在 Python 程序中调用它(C/C++程序通常比 Python 运行得更快)。

丰富的图书馆

Python 有一个广泛的标准库,它预装在 Python 中。标准库拥有现代编程语言的所有基本特性。它提供了数据库、单元测试(我们将在本书中探讨)、正则表达式、多线程、网络编程、计算机图形、图像处理、GUI 和其他实用程序。这是 Python“包含电池”哲学的一部分。

除了标准库之外,Python 还有大量且不断增长的第三方库。这些库的列表可以在 Python 包索引中找到。

粗野的

Python 通过处理错误的能力来提供健壮性。遇到的错误的完整栈跟踪是可用的,并使程序员的生活更可忍受。运行时错误被称为异常。允许处理这些错误的特性被称为异常处理机制。

快速原型

Python 被用作快速原型制作工具。正如我们前面看到的,Python 的特性是它有丰富的库,并且容易学习,所以许多软件架构师越来越多地使用它作为工具,在很短的时间内将他们的想法快速原型化为工作模型。

内存管理

在汇编语言和像 C 和 C++这样的编程语言中,内存管理是程序员的责任。这是手头任务之外的工作,给程序员带来了不必要的负担。在 Python 中,Python 解释器负责内存管理。这有助于程序员避开内存问题,专注于手头的任务。

强大的

Python 拥有现代编程语言所需的一切。它用于计算机视觉、超级计算、药物发现、科学计算、模拟和生物信息学等应用。全世界数百万程序员使用 Python。很多大品牌像 NASA,Google,SpaceX,思科(我在那里工作过!)将 Python 用于他们的应用程序和基础设施。

社区支持

我个人认为这是 Python 最吸引人的特性。正如我们所看到的,由于 Python 是开源的,并且在全世界拥有近百万程序员的社区(可能更多,因为今天的高中生也在学习 Python),互联网上有大量的论坛来支持遇到任何障碍的程序员。我提出的与 Python 相关的问题没有一个是没有答案的。

python3

Python 3 发布于 2008 年。Python 开发团队决定去掉 Python 语言的一些冗余特性,简化一些其他特性,纠正一些设计缺陷,并添加一些更急需的特性。

我们决定为此需要一个主要的修订版本号,并且最终发布的版本不会向后兼容。Python 2.x 和 3.x 应该并行共存,以便程序员社区有足够的时间将他们的代码和第三方库从 2.x 迁移到 3.x。在许多情况下,Python 2.x 代码不能按原样运行,因为 2.x 和 3.x 之间存在显著差异。

Python 2 和 Python 3 的区别

以下是 Python 2 和 Python 3 之间几个最值得注意的差异,值得了解。我们将使用 Python 3 中与这些差异相关的许多特性。让我们简单地看一下它们:

print()函数这是 Python 2 和 Python 3 之间最明显的区别。Python 2 的 print 语句在 Python 3 中被 print()函数所取代。整数除法产生浮点值为了数学正确性,整数除法的性质在 Python 3 中已经改变。在 Python 2 中,两个整数相除的结果是一个整数。然而,在 Python 3 中,它是一个浮点值,在数学上是正确的,对初学者来说更有意义。在大多数编程语言中,整数除法是一个整数。移除 xrange()在 Python 2 中,为了创建可迭代对象,使用了 xrange()函数。在 Python 3 中,range()的实现类似于 xrange()。因此在 Python 3 中不再需要单独的 xrange()。在 Python 3 中使用 xrange()会引发 nameError 异常。抛出异常在 Python 3 中,必须将异常参数(如果有的话)括在括号中,而在 Python 2 中,这是可选的。处理异常在 Python 3 中,处理异常时,参数前的 as 关键字处理参数是必须的。在 Python 2 中,不需要。新样式类 Python 2 支持旧样式类和新样式类,而 Python 3 只支持新样式类。Python 3 根本不支持旧的样式类。默认情况下,Python 3 中创建的所有类都是新的样式类。Python 3 的新特性 Python 3 的以下新特性尚未移植到 Python 2。
默认情况下,字符串是 Unicode 的清除 Unicode/字节分隔异常链接函数注释仅关键字参数的语法扩展元组解包非局部变量声明

根据上面的列表,我们将在本书的代码示例中广泛使用 print()方法、新型类、异常和异常处理机制。

Note

参见 Python Wiki 页面了解 Python 2 和 Python 3 的区别: https://wiki.python.org/moin/Python2orPython3

为什么要用 Python 3?

根据上面的列表,我们将在本书的代码示例中频繁使用新的样式类和异常。

虽然许多 Python 专家仍在鼓吹 Python 2,但我完全不同意他们的观点。

Python Wiki ( https://wiki.python.org/moin/Python2orPython3 )上说:

Python 2.x is the heritage, and Python 3.x is the present and future of language.

支持 Python 2 的一个主要理由是大量的文档、书籍和第三方库。然而,大多数开发人员已经在将他们的定制库移植到 Python 3 上了。几乎所有主要的第三方库都被移植并完全支持 Python 3。就书籍和文档而言,像我这样的作者正在大量编写 Python 3。久而久之,肯定会有更多 Python 3 的文档可用。

新一代程序员正在学习 Python 3 作为他们的第一门编程语言。当他们熟悉 Python 编程的概念和哲学时,他们会逐渐了解 Python 2。

大多数组织已经开始将代码库从 Python 2 迁移到 Python 3。Python 中几乎所有的新项目都在大量使用 Python 3。

我个人认为这些是使用 Python 3 的很好的理由。

Raspbian 上的 Python 2 和 Python 3

Raspbian 是 Debian 的变体。Python 2 和 Python 3 解释器预装在 Raspbian 中。可以通过在 lxterminal 中运行命令 Python 来调用 Python 2 解释器。可以通过在 lxterminal 中运行 python3 命令来调用 Python 3 解释器。我们可以通过运行 python3 -V 或 python – version 来检查 Python 3 解释器的版本。我们可以通过在 lxterminal 运行 which python3 来检查 Python 3 二进制文件的位置。

运行 Python 程序和 Python 模式

我们现在已经为 Python 编程建立了环境。让我们从 Python 的一个简单概念开始。Python 有两种模式,普通模式和交互模式。让我们详细看看这些模式。

对话方式

Python 的交互模式是命令行 shell。它为每个执行的语句提供即时输出。它还将以前执行的语句的输出存储在活动内存中。当 Python 解释器执行新语句时,在评估当前输出时,会考虑之前执行的整个语句序列。我们必须在 lxterminal 中键入 python3 来调用 Python 3 解释器进入交互模式,如下所示:

pi@raspberrypi:∼ $
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>


123456

我们可以在这种交互模式下直接执行 Python 语句,就像从操作系统外壳/控制台运行命令一样,如下所示:

>>>print ('Hello World!')
Hello World!
>>>


1234

我们不会在本书中使用交互模式。然而,这是检查小代码片段(5 到 10 行)最快的方法。我们可以使用 exit()语句退出交互模式,如下所示:

>>> exit()
pi@raspberrypi:∼ $


123

自然振荡

正常模式是 Python 脚本文件(。py)由 Python 解释器执行。

创建一个文件名为 test.py 的文件,并添加语句 print (‘Hello World!’)到文件。保存文件并使用 Python 3 解释器运行它,如下所示:

pi@raspberrypi:∼ $ python3 test.py
HelloWorld!
pi@raspberrypi:∼ $


1234

在上面的例子中,python3 是解释器,test.py 是文件名。如果 python test.py 文件不在调用 python3 解释器的同一个目录中,我们必须提供 python 文件的绝对路径。

Python 的 ide

集成开发环境(IDE)是一个软件套件,它拥有编写和测试程序的所有基本工具。典型的 IDE 有一个编译器、一个调试器、一个代码编辑器和一个构建自动化工具。大多数编程语言都有各种 ide 让程序员的生活更美好。Python 也有许多 ide。让我们来看看 Python 的几个 ide。

闲置的

IDLE 代表集成开发环境。它与 Python 安装捆绑在一起。IDLE3 是针对 Python 3 的。很受 Python 初学者的欢迎。在 lxterminal 中运行 idle3 即可。下面是一个 IDLE3 代码编辑器的截图(图 3-1 )和交互提示。

树莓派超算和科学计算教程(一)

图 3-1。

IDLE3

盖尼

Geany 是一个使用 GTK+工具包的文本编辑器,具有集成开发环境的基本特性。它支持许多文件类型,并有一些不错的功能。详见 www.geany.org 。下面(图 3-2 )是 Geany 文本编辑器的截图。

树莓派超算和科学计算教程(一)

图 3-2。

Geany

Geany 预装在最新版本的 Raspbian 中。如果您的 Raspbian 安装没有 Geany,那么可以在 lxterminal 中运行 sudo apt-get install geany 来安装它。安装后,可以在下面的截图(图 3-3 )中找到 Raspbian 菜单➤编程➤安歌 y 程序员编辑器。

树莓派超算和科学计算教程(一)

图 3-3。

Raspbian Menu

键入 print(“Hello World!”)并在/home/pi 目录下将文件另存为 test.py,点击菜单栏中的 Build,然后执行。我们也可以使用键盘快捷键 F5 来执行程序。程序将在 lxterminal 窗口中执行。我们必须按回车键来关闭执行窗口。Geany 的默认 Python 解释器是 Python 2。我们需要把它改成 Python 3。为此,请转到构建➤设置构建命令。将出现以下(图 3-4 )窗口。

树莓派超算和科学计算教程(一)

图 3-4。

Set Build Commands

在此窗口中,在“执行命令”部分下,将 Python“% f”(在上图中红色框中高亮显示)更改为 python3“% f”,以将 Python 3 解释器设置为默认解释器。之后,再次运行程序,以验证一切都做得正确。

EXERCISE

为了更好地理解 Python 3 背景,请完成以下练习。

访问并探索 Python 主页 www.python.org访问并探索 Python 文档页面 https://docs.python.org/3/https://docs.python.org/3/whatsnew/index.html 查看 Python 最新版本的新特性在网上搜索 Python 之禅的第 20 条未记载的原理。

结论

在这一章中,我们学习了 Python 的背景、历史和特性。我们还学习了 Python 2.x 和 Python 3.x 之间的重要区别。我们学习了在脚本和解释器模式下使用 Python 3。我们看了一些流行的 Python ide,并在 Pi 上为 Python 3 配置了 geany。在本书的后面部分,我们将使用 Python 3 和 mpi4py 为我们即将构建的小型超级计算机进行并行编程。在下一章,我们将学习超级计算的基础知识。

四、超级计算简介

在上一章中,我们学习了 Python 编程语言的历史和哲学。

在这短短的一章中,我们将学习超级计算的概念和历史。

超级计算机的概念

超级计算机是一种具有强大处理能力的特殊计算机。这是超级计算机这个术语最简单的定义。超级计算机区别于其他类型计算机的关键特征是它们巨大的处理能力。

超级计算机用于计算密集型应用。这些大多是科学应用。以下是几个例子:

天气预报气候研究分子建模物理模拟量子力学石油和天然气勘探

超级计算机简史

控制数据公司(CDC)是超级计算机的摇篮。在这里,1964 年,西摩·克雷建造了 CDC 6600。它被称为第一台超级计算机,因为它的性能超过了同时代的所有其他计算机。它的处理速度约为 10 兆赫。1968 年,西摩·克雷建造了 CDC 7600。它的处理速度是 35 兆赫。同样,它是最快的计算机,在计算能力方面超过了所有其他计算机。

这就是超级计算机的起源。最终,克雷离开了 CDC,并成立了自己的公司来设计和开发超级计算机。克雷创造了历史上一些最成功的超级计算机,即克雷 1、克雷 X-MP、克雷 2 和克雷 Y-MP。20 世纪 90 年代见证了大规模并行超级计算机的时代,数千个处理器以各种配置相互连接。一个显著的例子是 Intel Paragon,它可能有许多 Intel i860 处理器。

超级计算机的速度是以每秒浮点运算(FLOPS)而不是 MIPS(每秒百万条指令)来衡量的。英特尔 ASCI Red 是第一台 TFLOPS (Tera FLOPS)超级计算机。2008 年,IBM Roadrunner 成为第一台速度为 PFLOPS (Peta FLOPS)的超级计算机。

超级计算领域的下一个突破将是以 Exa-FLOPS 计算处理速度的 Exascale 超级计算机。

我在这里不提供前 10 名超级计算机或最快的超级计算机的列表。这是因为名单每年都在变化。此外,超级计算机基于各种参数进行排名,因此基于不同参数的不同来源的排名不会相同。

在设计大规模并行计算系统时,通常遵循两种方法。第一种是让分布在广阔地理区域的成千上万台计算机通过互联网来解决一个特定的问题。这在像互联网这样的广域网上工作得很好。这些类型的系统被称为分布式系统。另一种方法是将数千个处理节点彼此靠近放置。这节省了大量通信时间,并且大部分处理能力用于解决计算量巨大的问题。这种方法被称为聚类。所有的超级计算机都属于这一类。

计算机集群被定义为一组松散耦合或紧密耦合在一起工作的计算机。群集中的计算机称为节点。集群中的所有节点执行完全相同类型的任务。

我们将要开发的微型超级计算机将是一个 pi 集群。所有的超级计算机都是集群,但不是所有的集群都是超级计算机。正如我们在超级计算机的定义中所了解到的,超级计算机拥有巨大的处理能力。这就是为什么每个集群都没有资格被称为超级计算机。我们将在这里构建的集群不是一台超级计算机,因为它在处理能力方面比现实世界的超级计算机逊色,但它的工作原理与现实世界的超级计算机相同。因此我们称它为小型超级计算机。自从引入大规模并行系统以来,大规模集群和功能较弱的计算机之间的界限开始变得模糊。今天,很少有自制的集群像 20 世纪 80 年代的超级计算机那样强大。根据其配置,商品集群分为以下两类。

异质集群

当集群的所有节点不具有完全相同的硬件配置时,该集群被称为异构集群。在制作我的集群时,我使用了两个单位的 Pi B+,一个单位的 Pi 2,一个单位的 Pi 3,所以我的集群是一个异构集群。

贝奥武夫星团

与异构集群不同,Beowulf 集群中的所有节点具有完全相同的配置。我们可以用商品级硬件和 SBC(如 Raspberry Pi)制作同构集群和 Beowulf 集群。几乎所有集群都使用 Linux 的某个发行版作为其节点的操作系统。

根据您附近 Pi 模型的可用性,您可以创建异构集群或 Beowulf 集群。

并行和并发

让我们探讨一下超级计算领域的几个重要术语。

平行

并行性意味着计算任务是并行执行的。这意味着这些任务是同时执行的。并行通常用于计算问题非常大的情况。大问题通常被分成更小的子问题,然后由计算机并行解决。随着多核处理器的引入,硬件本身支持并行程序的执行。运行并行程序的另一种方式是通过使用多台不同的计算机来创建并行系统。Parallel 是 serial 的反义词,意思是一个接一个地串联。并行性与另一个术语“并发性”密切相关。

让我用简单的话解释一下排比。假设有两项工作要完成,有两个人可以承担这两项工作。两个人都被分配了一项工作,他们开始各自独立地工作。这就是所谓的并行。

并发

并发意味着许多计算任务同时进行。任务不必同时进行。在并行中,所有的任务同时执行。在并发中,它们不需要。在并发系统中,一个计算可以在不等待所有其他计算完成的情况下进行,并且可以同时进行多个计算。并发性的最好例子是操作系统中的进程调度。

让我用简单的语言解释一下并发性。假设要完成两项工作,而只有一个人可以完成所有的工作。这个人决定从第一份工作开始。他做了 30%,然后转到第二份工作。他完成了第二份工作的 40%,并切换回第一份工作。这种类型的切换会发生多次。我们可以说这两项工作都在进行中。虽然这些工作不是同时完成的,但它们正在朝着完成的方向前进。最后,两个工作都完成了。并发是顺序的反义词。

并行编程

所有集群和超级计算机都使用并行性来将计算量巨大的任务分解成较小的块,然后收集结果作为最终输出。支持这种类型操作的编程范例被称为并行编程。消息传递接口(MPI)是工业界和学术界最常用的并行编程标准之一。我们将在下一章研究如何在 Python 3 的 Pi 上安装它。

结论

在这短短的一章中,我们学习了一些与超级计算相关的重要概念,我们还学习了超级计算机的历史。

在下一章中,我们将学习如何建立一个树莓派集群的节点。

五、消息传递接口

在上一章中,我们学习了超级计算机的历史和哲学。我们还学习了与超级计算相关的重要概念。

在这简短的一章中,我们将开始在 Raspberry Pi 上安装必要的包和库。我们将安装 MPI4PY,这是一个用于 MPI 的 Python 库。最后,我们将安装用于节点发现的实用程序 nmap。

消息传递接口

消息传递接口标准(MPI)是基于 MPI 论坛建议的消息传递库标准。MPI 论坛在美国和欧洲有超过 40 个参与组织。消息传递接口的目标是为消息传递定义一个可移植的、有效的、灵活的标准,它将被广泛用于编写各种各样的消息传递程序。MPI 是第一个独立于供应商的消息传递库标准。使用 MPI 标准开发消息传递程序的优点是可移植性、效率和灵活性。尽管 MPI 不是 IEEE 或 ISO 标准,但它已经成为为高性能计算(HPC)、并行计算机、集群和分布式系统等各种平台编写消息传递程序的行业标准。MPI 标准定义了库例程的语法和语义,用于用 C、C++和 Fortran 编写可移植的消息传递程序。

与 MPI 相关的一些重要事实如下:

MPI 是库的规范。MPI 本身不是一个库。MPI 的目标是消息传递标准应该实用、可移植、高效和灵活。根据 MPI 标准的实现方式,实际的 MPI 库略有不同。MPI 标准已经经历了几次修订。最新版本是 MPI-3.2。

Note

有关 MPI 论坛和标准的更多信息,请访问 MPI 论坛的主页( www.mpi-forum.org )和 MPI 标准文档页面( www.mpi-forum.org/docs/docs.html )。

MPI 标准的历史和发展

1992 年 4 月 29-30 日,一个关于分布式内存环境中消息传递标准的研讨会在弗吉尼亚州的威廉斯堡召开。讨论了标准消息传递接口的基本特征,并成立了一个工作组来继续标准化进程。从那以后,MPI 的工作继续进行,工作组定期开会。MPI 标准草案在 1993 年 11 月的超级计算’93 会议上提出。经过一段时间的公众评议,MPI 标准发生了一些变化,1994 年 6 月发布了 MPI 1.0 版。这些会议和电子邮件讨论一起导致了 MPI 论坛的形成。来自美国和欧洲 40 个组织的大约 80 人参与了 MPI 标准化工作。到目前为止,MPI 的最新版本是 MPI-3.2,我们将使用它来构建集群。

MPI 的特性

MPI 针对具有分布式内存和连接所有节点的网络的分布式系统进行了优化,如图 5-1 所示。

树莓派超算和科学计算教程(一)

图 5-1。

Distributed memory system

以下是消息传递接口的功能:

简单性:MPI 范式的基础是传统的通信操作。通用性:它可以在大多数基于并行架构的系统上实现。性能:实现可以匹配底层硬件的速度。可伸缩性:相同的程序可以部署在更大的系统上,而无需对其进行任何更改。

当我们开始学习如何用 MPI4PY 编码时,我们将研究 MPI 范例的更多细节。

MPI 的实现

正如我们已经看到的,MPI 不是一个库,而是开发消息传递库的标准,有几种 MPI 实现。以下是最受欢迎的实现:

奥林匹克运动会MP-MPICH (MP 代表多平台)温姆皮奇MPI BIP惠普的 MPIIBM 的 MPISGI 的 MPI邮票OpenMPI(开放原始码)

MPI4PY

MPI4PY 代表 Python 的 MPI。MPI for Python 为 Python 提供了 MPI 绑定。这允许任何 Python 程序使用多处理器配置计算机。这个包是建立在 MPI-1/2/3 规范之上的。它为 Python 中的并行编程提供了面向对象的接口。它支持任何 Python 对象的点对点(发送和接收)和集体(广播、分散和收集)通信。

图 5-2 描绘了 MPI4PY 的概况。

树莓派超算和科学计算教程(一)

图 5-2。

Philosophy of MPI4PY

为什么要使用 Python、MPI 和 MPI4PY 的组合?

Python 是 HPC(高性能计算)中三种最常用的编程语言之一。另外两个是 C 和 FORTRAN。正如我们前面看到的,Python 语法很容易理解和学习。MPI 是 HPC 和并行编程的事实上的标准。自 1994 年左右(20 多年)以来,它就一直存在。MPI4PY 是一个广受好评的、干净的、高效的 Python MPI 实现。它涵盖了大部分 MPI-2 标准。这就是为什么我们要在树莓派 上使用 Python 3 配合 MPI4PY 进行并行编程。

在 Raspbian 上为 Python3 安装 MPI4PY

在 Raspbian 上安装 Python 3 的 MPI4PY 非常简单。用户只需在 lxterminal 中运行以下命令:

sudo apt-get install python3-mpi4py -y


12

为 Python 3 安装 MPI4PY 需要几分钟时间。

要检查它是否已安装,请运行以下命令:

mpirun hostname


12

它应该输出主机名 raspberrypi。

运行以下命令启动多个进程:

mpirun -np 3 hostanme


12

输出如下所示:

raspberrypi
raspberrypi
raspberrypi


1234

我们还可以运行以下命令来检查系统上安装的 MPI 版本:

mpirun -V


12

这样我们就可以安装、运行和验证 MPI4PY。

Note

有关更多详细信息,请访问 mpirun 手册页( www.open-mpi.org/doc/v1.8/man1/mpirun.1.php )。在本书的后半部分,我们将在 Python 3 中广泛使用 mpirun,在那里我们将详细研究它。

正在安装 nmap

nmap 是一个网络安全扫描器。我们将使用它来发现我们的 Pi 的 IP 地址。我们将在下一章使用它。现在,只需通过运行以下命令来安装 nmap:

sudo apt-get install nmap


12

结论

在本章中,我们学习了通过安装 MPI4PY 为超级计算准备一个 Pi。在下一章中,我们将通过连接多个 pi 来构建一台超级计算机。

六、构建超级计算机

在前一章中,我们通过安装必要的库、框架和工具为超级计算准备了 Pi。在本章中,我们将学习创建一个由多个 pi 组成的网络,并使用它来并行运行各种命令。

制作 MicroSD 卡的备份

一旦我们配置了 Pi,更新了它,并安装了必要的软件包和实用程序,我们就应该备份 microSD 卡。这是必要的,因为(上帝禁止!)如果 microSD 卡或 Pi 被损坏或丢失,那么我们可以用备份来继续我们的工作。建议始终备份一个安装并更新了 Raspbian 操作系统的 microSD 卡。此外,在安装了项目所需的必要包、工具和实用程序之后进行备份也是一个好主意,我总是遵循这个好主意。

要备份 microSD 卡,首先将其从 Pi 中取出,并将其插入 SD 读卡器。将 SD 读卡器连接到安装了 Win32DiskImager 的 Windows 计算机。打开 Win32DiskImager 并选择一个位置。为备份文件选择一个合适的名称。追加扩展名。img 或者。文件名后的 IMG。的。img 或者。IMG 扩展用于原始存储磁盘映像。见下图(图 6-1 )截图举例。

树莓派超算和科学计算教程(一)

图 6-1。

Taking the microSD card backup

然后点击阅读按钮。一旦完成,将显示如下(图 6-2 )对话框。

树莓派超算和科学计算教程(一)

图 6-2。

Backup completed

Raspbian OS、MPICH 和 MPI4PY 安装的更新版本的映像文件现在保存在硬盘上。我们可以使用这个图像为超级计算机的其余节点准备其他 microSD 卡。要做到这一点,我们只需要用 Win32DiskImager 把这个镜像写到其他 microSD 卡上。

准备超级计算机的节点

使用我们在上一节中准备的操作系统映像,我们将准备超级计算机的其他节点。使用 Win32DiskImager 将此操作系统映像写入其他 microSD 卡。一旦所有的 microSD 卡都准备好了,就把它们插入 Pis。每个 Pi 应该有一个唯一的主机名。我们可以用 raspi-config 更改 Pi 的主机名。转到高级选项并选择 A2 主机名。更改主机名,如下图截图所示(图 6-3 )。

树莓派超算和科学计算教程(一)

图 6-3。

Changing the hostname

主机名更改后,lxterminal 中的提示会出现在下面的截图中(图 6-4 )。

树莓派超算和科学计算教程(一)

图 6-4。

The lxterminal prompt after changing the hostname

如您所见,提示符和 lxterminal 窗口标题中的主机名raspberrypi被替换为pi001

对所有 pi 执行相同的步骤,并将它们的主机名更改为pi002pi003等等。

Pis 联网

这是一个有点棘手的部分。我们可以通过许多方式将 pi 连接在一起。选择取决于基础设施和可用的预算。让我们探索几个简单易行的方法。

使用 DHCP 的局域网

此选项适用于受管理的网络交换机和 WiFi 路由器。访问受控交换机或 WiFi 路由器的管理控制台。登录到管理控制台后,将有选项来设置 DHCP 的地址范围。修改该范围,因为我们将向其中添加更多设备。

对于 WiFi 路由器来说,管理控制台通常是一个网页。可以通过连接到 WiFi,然后在浏览器中键入其 IP 地址来访问它。它通常以用户名和密码的形式进行验证,通常在 WiFi 路由器手册中列出。每个 WiFi 路由器都有用于有线局域网的以太网端口,如下图所示(图 6-5 )。

树莓派超算和科学计算教程(一)

图 6-5。

Rear side of a WiFi router (image from https://www.flickr.com/photos/smemon/ )

更新/etc/network/interfaces中的网络设置,作为 IP 地址分配方案自动连接到 LAN 和 DHCP。以下是一个示例/etc/network/interfaces文件:

source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp


12345678

WiFi 网络

我们知道 Pi 3 之前的所有型号的 Pi 都需要 USB WiFi 适配器。最好的选择是如果你有一个 WiFi 路由器和许多 Pi 3s。如果 Pis 的型号早于 Pi 3,您将不得不投资购买 USB WiFi 适配器。在为相关型号的 Pi 配备 USB WiFi 适配器后,更新/etc/network/interfaces中的网络设置,以便自动连接到 WiFi。

下面是一个示例/etc/network/interfaces文件。

source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

auto wlan0
iface wlan0 inet dhcp
wpa-ssid "ASHWIN"
wpa-psk "internet"


12345678910

ASHWIN替换为您 WiFi 网络的 ssid,将internet替换为您 WiFi 网络的密码。

具有静态 IP 地址的局域网

这是我的首选方法。所有被管理的网络交换机和 WiFi 路由器都有一个静态 IP 地址范围。为集群中的节点选择几个地址,然后更新/etc/network/interfaces文件。使用受管网络交换机或 WiFi 路由器的 IP 地址作为网关的值。

使用低成本的非托管网络交换机可能是最便宜的选择。“未被管理”意味着它们没有管理控制台。只需用以太网电缆将 pi 连接到交换机,并按如下方式更新/etc/network/interfaces:

source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static

# Your static IP
address 192.168.0.2

# Your gateway IP
gateway 192.168.0.1
netmask 255.255.255.0

# Your network address family
network 192.168.0.0
broadcast 192.168.0.255



树莓派超算和科学计算教程(一)12345678910111213141516171819

对于所有 pi,网络设置(除了 IP 地址)将与上述相同。IP 地址将是唯一的。此外,由于交换机不受管理,我们通过使用与网关相同的值(在上例中为 192.168.0.1)为其手动分配 IP 地址。所有 pi 的网关值必须相同。

更改网络设置后重新启动 Pis。

以下是几款低成本非托管交换机及其各自的产品页面。

www.dlink.ru/mn/products/1www.dlink.lt/en/products/1/1857.htmlwww.dlink.ru/mn/products/1/2110.html

使用 nmap 查找 Pis 的 IP 地址

不管网络类型(以太网或 WiFi)和 IP 地址分配方案(静态或动态),我们都需要知道网络中所有 pi 的 IP 地址,以便将 pi 的网络用作集群。在前一章中,我们安装了nmap实用程序。我们现在将使用它来查找网络中 pi 的 IP 地址。

将显示器、键盘和鼠标连接到pi001。我们将使用pi001作为主节点。我们将在pi001使用 lxterminal 为超级计算机运行命令和并行程序。

将所有 pi 连接到网络。我们不需要将任何显示器或 I/O 设备连接到其他 pi。

启动所有 Pis。一旦所有 pi 启动,用nmap扫描网络。

以下是扫描网络的命令:

sudo nmap -sn 192.168.0.*


12

在上面的命令中,192.168.0.*中的前三个字节对应于我的网络的 IP 地址。用网络标识符的前三个字节替换它们,并在pi001上的 lxterminal 中运行命令。

输出如下所示:

Starting Nmap 6.47 ( http://nmap.org ) at 2016-09-15 18:02 IST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled.
Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 192.168.0.2
Host is up (0.0020s latency).
Nmap scan report for 192.168.0.3
Host is up (0.0018s latency).
Nmap scan report for 192.168.0.4
Host is up (0.0016s latency).
Nmap scan report for 192.168.0.5
Host is up (0.0014s latency).
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.70 seconds


12345678910111213

记下网络中所有覆盆子 pi 的 IP 地址。在这种情况下,IP 地址是 192.168.0.2、192.168.0.3、192.168.0.4 和 192.168.0.5。

使用 mpirun 在多个 pi 上运行 hostname 命令

pi001上,通过运行以下命令导航到/home/pi:

cd ∼


12

创建一个名为myhostfile的新文件。将之前记下的所有 IP 地址添加到myhostfile中,如下所示:

192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5


12345

现在运行以下命令:

mpirun -hostfile myhostfile -np 4 hostname


12

它将显示一个带有错误的输出,并且命令hostname不会在文件myhostfile中列出的所有主机上运行。

这是因为我们试图在pi002pi003pi004上远程运行来自pi001的命令。我们没有这方面的认证。

为自动认证交换 ssh-keygen 密钥

ssh-keygen实用程序用于生成认证密钥。要在任意两台 Linux 计算机之间建立身份验证,请执行以下步骤:

使用ssh-keygen.为两台主机生成密钥通过远程复制密钥,在主机之间交换密钥。将密钥添加到授权主机列表中。

完成后,我们可以在没有密码的情况下执行以下操作,因为在密钥交换后,不会再次提示输入密码。

登录到远程主机。在远程主机上执行 shell 命令。

我们还可以在 shell 脚本中使用ssh命令来自动化远程主机中的任务。我们使用pi001作为主节点,所以我们希望从其他节点上的pi001远程运行命令,反之亦然。我已经建立了一个包含四个节点的集群,因此用于密钥交换的主机对是(pi001,pi002)、(pi001,pi003)和(pi001,pi004)。

让我们交换钥匙。打开 lxterminal 并转到pi001的主目录。

cd ∼


12

运行ssh-keygen命令生成密钥。只要在每次提示输入时按下回车键。以下是 lxterminal 上的输出:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/pi/.ssh/id_rsa.
Your public key has been saved in /home/pi/.ssh/id_rsa.pub.
The key fingerprint is:
03:bc:3f:5a:28:88:b7:ac:6c:50:f0:81:5e:f9:6d:5f pi@pi001
The key's randomart image is:
+---[RSA 2048]----+
| . .             |
|o .o .           |
|.o... +          |
| .o . = E        |
| . o S .         |
|.. . o o         |
|o o . . +        |
|.+ . . o .       |
|ooo .            |
+-----------------+



树莓派超算和科学计算教程(一)123456789101112131415161718192021

请注意,由于每次执行生成的密钥不同,命令提示符上显示的图像每次都会不同。

上面的执行在 Pi 的主目录中创建了一个隐藏目录.ssh。转到.ssh目录。

cd .ssh


12

通过运行ls命令检查.ssh目录的内容,如下所示:

pi@pi001:∼/.ssh $ ls
id_rsa id_rsa.pub


123

在上面的输出中,id_rsa是私钥,id_rsa.pub是主机pi001的公钥。我们必须将公钥复制到我们想要远程登录和执行命令的主机上。

为了保持有序,我们将公钥id_rsa.pub复制到一个新文件pi01

cp id_rsa.pub pi01


12

我们需要将这个pi01文件的内容添加到其他主机的authorized_keys文件中,以便在没有身份验证的情况下实现远程访问。

现在使用以下命令登录到pi002:

ssh pi@192.168.0.3


12

系统会提示我们输入pi002的密码。输入密码。

像我们在pi001上做的那样,在pi002上运行以下命令来生成公钥:

ssh-keygen
cd .ssh
cp id_rsa.pub pi02


1234

现在我们需要使用scppi001的公钥文件复制到pi002

scp 192.168.0.2:/home/pi/.ssh/pi01 .


12

通过运行以下命令,将pi01的内容添加到authorized_keys中:

cat pi01>>authorized_keys


12

最后,使用注销命令从pi002注销。

对于pi003,我们又要按照同样的步骤。

登录到pi003

ssh pi@192.168.0.4


12

pi003上运行以下命令序列:

ssh-keygen
cd .ssh
cp id_rsa.pub pi03
scp 192.168.0.2:/home/pi/.ssh/pi01 .
cat pi01>>authorized_keys
logout


1234567

对于pi004,我们又要按照同样的步骤。

登录到pi004

ssh pi@192.168.0.5


12

pi004上运行以下命令序列:

ssh-keygen
cd .ssh
cp id_rsa.pub pi04
scp 192.168.0.2:/home/pi/.ssh/pi01 .
cat pi01>>authorized_keys
logout


1234567

pi001中,运行以下命令序列,将pi002pi003pi004的公钥复制到pi001

cd /home/pi/.ssh
scp 192.168.0.3:/home/pi/.ssh/pi02 .
scp 192.168.0.4:/home/pi/.ssh/pi03 .
scp 192.168.0.5:/home/pi/.ssh/pi04 .


12345

然后运行以下命令,将这些公钥添加到pi001的授权密钥列表中:

cat pi02>>authorized_keys
cat pi03>>authorized_keys
cat pi04>>authorized_keys


1234

这就完成了集群的设置。要测试设置,在pi001上运行以下命令:

mpirun -hostfile myhostfile -np 4 hostname


12

上面命令的输出应该如下所示:

pi001
pi002
pi003
pi004


12345

恭喜你。我们已经建立了自己的小型超级计算机集群。在下一节中,我们将学习如何在一个漂亮的栈中组织我们的集群。

在集群中组织 pi

当我建立我的第一个集群时,我想到了创建一个定制的丙烯酸案件;然而,估计的费用超出了我的预算。我还想到通过 3D 打印为集群创建一个定制案例,但 3D 打印承包商也为此报出了一笔天文数字。所以我决定尝试一种更具成本效益的方法来组织集群中的 pi。我使用 M3 六角间隔垫片来创建一个 Pis 栈。我们需要两种类型的对峙,男性对女性和女性对女性。我们现在将使用这些来创建一个栈。重要的是,支架的长度必须至少为 25 毫米,以避免 Raspberry Pi PCBs 相互接触。

Note

在谷歌上搜索 M3 六角支架垫片。

如下图所示(图 6-6 ),取四个凸对凹支架,并将它们连接到一个 Pi 上。

树莓派超算和科学计算教程(一)

图 6-6。

Attaching male-to-male standoffs to the Pi

之后,取四个凹对凹支座,将它们连接到 Pi 的底部,如下图所示(图 6-7 )。

树莓派超算和科学计算教程(一)

图 6-7。

Attaching female-to-female standoffs to the cluster base

现在将第二个 Pi 连接到此处,如下图所示(图 6-8 )。

树莓派超算和科学计算教程(一)

图 6-8。

Adding second Pi to the stack

最后,将剩余的两个 pi 添加到此之后,集群栈看起来如下图所示(图 6-9 )。

树莓派超算和科学计算教程(一)

图 6-9。

Raspberry Pi Supercomputer stack

结论

在本章中,我们学习了如何将几个 pi 连接在一起,构建一个超低成本的迷你超级计算机集群。我们还了解了如何在一个方便的栈中组织集群。在下一章中,我们将学习如何超频 Pi 的各种模型,以增加集群中 Pi 的计算能力,而无需额外的成本。

七、超频树莓派

在这一章中,我们将学习如何通过超频这台神奇的小计算机的各种组件来增加各种型号的 Raspberry Pi 的计算能力。我们将通过raspi-config和通过改变config.txt的内容来研究如何超频。

超频意味着配置计算机的硬件部件以比原始制造商认证的速度更快的速度运行。器件的工作速率通常用时钟频率来表示,如 MHz、GHz 等。通常超频组件的工作电压也会增加,这有助于在加速时保持组件的工作稳定性。然而,超频的缺点是,给定的半导体器件在比常规设置更高的频率和电压下工作时会产生和散发更多的热量,因此大多数超频尝试也会增加功耗和散热。为了减轻超频组件中增加的散热,我们通常必须安装散热器和冷却系统。

让我们从超频 Raspberry Pi 的基础开始。在本章中,我们将详细探讨如何安装被动散热器以及如何超频各种型号的 Raspberry Pi。

树莓派 超频的风险

超频 Raspberry Pi 使我们能够充分利用它。然而,我们不应该在不了解风险的情况下这样做。非常重要的一点是,我们要明白我们将要面对的是什么。

这里有一些我们必须注意的超频风险:

寿命缩短:部件可能会很快失效。发热:以更高的速度运行会产生和散发更多的热量。文件损坏:许多超频者在未优化的超频设置下观察到文件损坏。保修失效:强制过电压将使保修失效。

在 Pi 上安装散热器

散热器是用于吸收多余热量的装置或物质。如果您计划超频您的 Pi,那么建议在处理器、内存和图形处理器上安装散热器。

大多数散热器上都粘有不干胶。用它们在 Pi 的芯片上安装散热片。大多数人只在使用 Raspberry Pi 时使用被动散热器,因为像液体冷却和/或散热器这样的主动散热机制对 Raspberry Pi 来说太过了。

采购散热器

许多经销商在网上销售散热器。你可以谷歌一下关键词树莓派散热器。

以下是销售散热器的各个经销商的网站链接:

www.sparkfun.com/products/121www.adafruit.com/categories/151https://shop.pimoroni.com/products/heatsinkwww.modmypi.com/raspberry-pi/accessories/heat-sinks-and-cooling/raspberry-pi-heat-sink-kit-black

使用 raspi-config 超频 Pi

我们可以使用raspi-config工具中的超频选项对 Pi 进行超频。

下面(图 7-1 )是 Pi B 和 Pi B+中的超频选项截图。

树莓派超算和科学计算教程(一)

图 7-1。

Overclock options in Pi B and Pi B+

下面(图 7-2 )是 Pi 2 中超频选项的截图。

树莓派超算和科学计算教程(一)

图 7-2。

Overclock options in Pi 2

使用/boot/config.txt 对 Pi 进行超频

我们已经学会了如何用raspi-config超频;但是,它不允许对将要超频的 Pi 进行微调。还有一种超频 Pi 的方法,我们可以通过改变/boot/config.txt中的几个参数来手动实现。

/boot/config.txt 中的选项

我们可以在/boot/config.txt文件中添加或更改选项。如果你已经使用了raspi-config工具进行超频和/或内存分割,那么你会发现这些选项中的许多已经出现在了/boot/config.txt文件中。

arm_freq:ARM 内核的频率,单位为 MHz。core_freq:GPU 处理器内核的频率,单位为 MHz。h264_freq:硬件视频块的频率,单位为 MHz。isp_freq:图像传感器流水线块的频率,单位为 MHz。v3d_freq:3D 块的频率,单位为 MHz。avoid_pwm_pll:不要将 pll 专用于 PWM 音频。这将略微降低模拟音频质量。备用 PLL 允许 core_freq 独立于 GPU 的其余部分设置,从而对超频进行更多控制。dram_freq:SDRAM 的频率,单位为 MHz。over_voltage : ARM/GPU 核心电压调整。over_voltage_sdram_c : SDRAM 控制器电压调整。over_voltage_sdram_i : SDRAM I/O 电压调整。over_voltage_sdram_p : SDRAM phy 电压调整。force_turbo:禁用动态 cpufreq 驱动程序和以下最低设置。启用 H.264/V3D/ISP 超频选项。可以设置保修位。temp_limit:过热保护。当 SoC 达到该摄氏度值时,将时钟和电压设置为默认值。设置高于默认值会使保修失效。gpu_mem : GPU 内存,单位兆字节。设置 ARM 和 GPU 之间的内存分配。ARM 获得剩余的内存。如果已经使用 raspiconfig 设置了该值,则无需进行设置。

各种型号 Pi 的/boot/config.txt 选项

每个圆周率都是唯一的。必须为单个 Pi 定制/boot/config.txt中超频 Pi 的选项值。这些选项没有一套最适合所有 pi 的值。我通过反复试验学到了这一点。如果您为超频选项设置的值不是最合适的,Pi 将会不稳定或根本无法启动。在这些情况下,您可以尝试使用其他计算机更改 microSD 卡上config.txt中的超频选项值,然后使用同一张卡启动 Pi。这样做,直到你得到一组稳定的和最优的 Pi 值。一般来说,对于任何类型的硬件(如 CPU 和 RAM),超频设置取决于单个 IC。

我们可以在 eLinux RPi 配置页面( http://elinux.org/RPiconfig )找到上述选项的详细解释。

Pi B 和 Pi B+的选项

以下是 Pi B 和 Pi B+的超频选项值:

arm_freq=950
core_freq=450
sdram_freq=500
gpu_mem=16


12345

Pi 2 的选项

以下是 Pi 2 的超频选项值:

arm_freq=1100
over_voltage=4
core_freq=550
sdram_freq=483
over_voltage_sdram_p=0
over_voltage_sdram_i=0
over_voltage_sdram_c=0
gpu_mem=16
force_turbo=1
avoid_pwm_pll=1
v3d_freq=450
h264_freq=0
isp_freq=0
avoid_safe_mode=1


123456789101112131415

Pi 3 的选项

以下是 Pi 3 的超频选项值:

arm_freq=1350
over_voltage=6
temp_limit=80
core_freq=500
h264_freq=333
avoid_pwm_pll=1
gpu_mem=450
v3d_freq=550
sdram_freq=588
sdram_schmoo=0x02000020
over_voltage_sdram_p=6
over_voltage_sdram_i=4
over_voltage_sdram_c=4
force_turbo=1


123456789101112131415

如果您的 Pi 无法启动或变得不稳定,请尝试调整这些值以获得最佳设置。

我们无法涵盖稳定超频的所有可能的工作设置组合。浏览以下网站链接,了解超频相关信息:

http://linuxonflash.blogspot.in/2015/02/a-look-at-raspberry-pi-2-performance.html

https://github.com/retropie/retropie-setup/wiki/Overclocking

超频后,使用cat /proc/cpuinfo命令检查所有型号的处理器速度。

Note

不要将超频 Pi 的 microSD 卡插入另一个 Pi。记住!每件硬件都有独特的超频设置。如果要将一个超频 Pi 的 microSD 卡用于另一个 Pi,请禁用/boot/config.txt 中的超频设置,然后将其用于另一个 Pi。

Exercise

超频所有你打算用来构建小型超级计算机集群的 Raspberry Pis。这将在运行时方面提高个人和整体的性能。

结论

在这一章中,我们学习了如何超频各种型号的树莓派。从下一章开始,我们将开始研究如何利用我们构建的集群的计算能力。我们将使用 MPI4PY 用 Python 3 编写代码,演示 MPI 和并行编程中的概念。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...