1. 简介
感谢您打开此 Codelab!准备好在 Compute Engine 上处理一些数据了吗?
在此 Codelab 中,我们将逐步介绍如何启动新的虚拟机并运行程序来计算 pi。
您将创建一个 Compute Engine 实例,然后下载、编译并运行一个用于计算 Pi 的程序。您可以通过控制台或命令行创建 Compute Engine 实例。本实验将引导您使用命令行工具。

Compute Engine 提供以各种配置运行的虚拟机,例如不同的核心数、内存大小和存储空间。如有必要,您可以使用具有 100 多个核心和数百 GB 内存的机器,但在此示例中,我们将启动预定义的 2 个 vCPU、8 GB 内存虚拟机。
在此 Codelab 中,我们将使用 N2 机器系列。它是一种通用机器系列虚拟机,适用于大多数标准工作负载和云原生工作负载。N2 系列具有更高的每线程性能,同时还能受益于通用机器系列提供的所有灵活性。
现在,让我们开始吧!
2. 设置和要求
自定进度的环境设置
- 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。



- 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时更新。
- 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用
PROJECT_ID标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。 - 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档。
- 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除整个项目。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。
Google Cloud Shell
虽然 Google Cloud 和 Compute Engine 可以从笔记本电脑远程操作,但在此 Codelab 中,我们将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。
基于 Debian 的这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证。这意味着在本 Codelab 中,您只需要一个浏览器(没错,它适用于 Chromebook)。
- 如需从 Cloud Console 激活 Cloud Shell,只需点击激活 Cloud Shell
(预配和连接到环境仅需花费一些时间)。


在连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且相关项目已设置为您的 PROJECT_ID。
gcloud auth list
命令输出
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
命令输出
[core] project = <PROJECT_ID>
如果出于某种原因未设置项目,只需发出以下命令即可:
gcloud config set project <PROJECT_ID>
正在查找您的 PROJECT_ID?检查您在设置步骤中使用的 ID,或在 Cloud Console 信息中心查找该 ID:

默认情况下,Cloud Shell 还会设置一些环境变量,这对您日后运行命令可能会很有用。
echo $GOOGLE_CLOUD_PROJECT
命令输出
<PROJECT_ID>
- 最后,设置默认可用区和项目配置。
gcloud config set compute/zone us-central1-f
您可以选择各种不同的可用区。如需了解详情,请参阅区域和可用区。
3. 创建 Compute Engine 实例
首先,我们将使用 gcloud 命令行工具创建虚拟机。如果您愿意,也可以使用控制台,但命令行更易于重复使用和说明。
我们先创建一个名为 pi-codelab 的 n2-standard-2 实例,并将操作系统设置为 Debian 11。我们还将使用平衡永久性磁盘 (PD) 作为启动卷。平衡永久性磁盘由固态硬盘 (SSD) 提供支持,可在性能和费用之间取得平衡。如果您未在“设置和要求”部分中选择默认可用区,系统会询问您要使用哪个可用区。
gcloud compute instances create pi-codelab \ --machine-type=n2-standard-2 \ --image-project=debian-cloud \ --image-family=debian-11 \ --boot-disk-type=pd-balanced
命令的结果应如下所示:
Created [https://www.googleapis.com/compute/v1/projects/xxx/zones/us-central1-f/instances/pi-codelab]. NAME: pi-codelab ZONE: us-central1-f MACHINE_TYPE: n2-standard-2 PREEMPTIBLE: INTERNAL_IP: 10.128.X.XX EXTERNAL_IP: XX.XX.XX.XX STATUS: RUNNING
请注意,每次创建新虚拟机时,INTERNAL_IP 和 EXTERNAL_IP 字段都会发生变化。
如果您想详细了解 gcloud compute instances create 命令,请访问参考页面。
4. 通过 SSH 连接到实例
如需通过 SSH 从命令行登录到实例,请运行以下命令。
gcloud compute ssh pi-codelab
大功告成!现在,您已进入虚拟机。您可以运行 hostname 命令来确认当前主机。
hostname
该命令将显示当前 shell 环境的主机名。
pi-codelab
5. 安装依赖项
现在,我们将安装编译程序以计算 pi 所需的依赖项。
sudo apt update sudo apt -y install build-essential libgmp-dev libmpfr-dev libfmt-dev
此过程需要几分钟才能完成。现在,我们来检查一下您是否拥有可正常运行的 C++ 编译器。
c++ --version
如果正确安装了编译器,此命令将输出编译器的版本信息。
c++ (Debian 10.2.1-6) 10.2.1 20210110 Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
6. 编译程序
现在,我们来编译 C++ 程序以计算 pi。即使您之前没有使用 C++ 进行过开发,这也会比您想象的简单。上一步中已安装所有前提条件,因此我们只需提取并编译源代码。
首先,提取并保存源代码。此步骤会从 GitHub 下载一个源文件,并将其另存为当前目录中的 pi.cc。
curl -OL https://raw.githubusercontent.com/GoogleCloudPlatform/pi-delivery/main/codelab/pi.cc
接下来,运行 C++ 编译器以编译已保存的源代码。
c++ -opi pi.cc -std=c++17 -O3 -march=native -lgmp -lmpfr -lpthread -lfmt
如果编译成功,编译器不会输出任何内容。我们来检查一下您是否拥有可执行文件:
ls pi
如果该程序存在,此 ls 命令应输出该程序的文件名。
pi
7. 计算 Pi
pi 程序接受一个实参,即要计算的位数。例如,我们来计算一下圆周率的前 100 位小数。
./pi 100
程序将在不到一秒的时间内完成,并输出如下内容:
Calculating 100 digits of pi... Internal precision = 348 bits Number of terms = 9, digits per term = 14.181647462725477 Summation series complete. Final steps... 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
最后一行是圆周率的前 100 位小数。恭喜,您刚刚让计算机为您计算了数学题!
该程序可以计算更多位数(目前上限为 1,000 亿位)。现在,我们来计算 1,000 万位数字,并测量所需的时间。我们将输出重定向到一个文件,因为 1000 万位圆周率在命令行控制台中查看有点太长了。
time ./pi 10000000 > pi10m.txt
程序会输出类似如下内容:
Calculating 10000000 digits of pi... Internal precision = 33219296 bits Number of terms = 705138, digits per term = 14.181647462725477 Summation series complete. Final steps... real 0m9.702s user 0m14.839s sys 0m0.364s
这次不包含数字,因为它们已保存在文件 pi10m.txt 中。最后三行描述了程序运行所花费的时间以及使用的 CPU 量。
- 实际时间:从开始到结束的实际时间,这意味着在上面的示例中,计算 1, 000 万位圆周率用了 9.7 秒。
- 用户:使用的 CPU 时间,该时间大于“实际”时间,因为机器有 2 个 CPU 核心,每个核心都会计入总时间。
- sys:操作系统运行程序以处理网络和 I/O 等系统任务所需的时间。这次大约用了 0.4 秒,其中大部分时间用于将结果写入磁盘。
我们可以查看 pi10m.txt,看看前 100 位和后 100 位数字。
我们先检查一下前几位数字。此命令会输出前 100 个小数位(以及前 3 个整数位和小数点)。
head -c 102 pi10m.txt
结果应如下所示。
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
下一个命令会输出最后 100 位小数。
tail -c 100 pi10m.txt
结果应如下所示。
610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897
8. 清理集群
别忘了关闭 Compute Engine 实例,否则它会继续运行并产生费用。
如果您位于虚拟机上(已通过 SSH 连接),请先运行 exit 命令以退出。
exit
然后,运行以下 gcloud compute instances delete 命令以删除实例和关联的磁盘。系统会要求您确认是否要删除资源。
gcloud compute instances delete pi-codelab
9. 接下来做什么?
恭喜,您已完成此 Compute Engine Codelab,并计算了圆周率的 1, 000 万位数字!
我们于 2022 年使用同一基础架构计算了圆周率的 100 万亿位。请阅读通知,了解我们的做法。您可以在我们的 pi.delivery 演示网站上查看完整的结果。
请访问 Google Cloud 博客,及时了解有关计算和高性能计算的最新资讯!
更多 Compute Engine 功能
Compute Engine 具有丰富的功能。您可能需要深入了解以下内容:
- 抢占式虚拟机 - https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- 单租户节点 - https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU 和 TPU - https://cloud.google.com/compute/docs/gpus/add-gpus
- Windows 实例 - https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- 标记资源 - https://cloud.google.com/compute/docs/labeling-resources
- 将虚拟机迁移到 Compute Engine - https://cloud.google.com/compute/docs/vm-migration/
向我们提供反馈
- 请抽出片刻时间,完成这份非常简短的调查问卷