1. 簡介
感謝您開啟本程式碼研究室!準備好在 Compute Engine 上處理一些數字了嗎?
在本程式碼研究室中,我們將逐步說明如何啟動新的虛擬機器,並執行計算 pi 的程式。
您將建立 Compute Engine 執行個體,然後下載、編譯及執行程式來計算圓周率。您可以透過主控台或指令列建立 Compute Engine 執行個體。本實驗室將逐步說明如何使用指令列工具。

Compute Engine 提供各種形狀的虛擬機器,例如不同數量的核心、記憶體大小和儲存空間。如有需要,您可以使用超過 100 個核心和數百 GB 記憶體的機器,但在此範例中,我們將啟動預先定義的 2 個 vCPU、8 GB 記憶體虛擬機器。
在本程式碼研究室中,我們將使用 N2 系列機器。這是適用於大多數標準和雲端原生工作負載的一般用途機器系列 VM。N2 系列的每執行緒效能較高,且具備一般用途機器系列的所有彈性。
現在就開始吧!
2. 設定和需求
自修實驗室環境設定
- 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。



- 專案名稱是這個專案參與者的顯示名稱。這是 Google API 未使用的字元字串。你隨時可以更新該位置資訊。
- 專案 ID 在所有 Google Cloud 專案中都是不重複的,而且設定後即無法變更。Cloud 控制台會自動產生不重複的字串,通常您不需要在意這個字串。在大多數程式碼研究室中,您需要參照專案 ID (通常會標示為
PROJECT_ID)。如果您不喜歡產生的 ID,可以產生另一個隨機 ID。你也可以嘗試自訂名稱,看看是否可用。完成這個步驟後就無法變更,且專案期間都會維持這個設定。 - 請注意,部分 API 會使用第三個值,也就是「專案編號」。如要進一步瞭解這三種值,請參閱說明文件。
- 接著,您需要在 Cloud 控制台中啟用帳單,才能使用 Cloud 資源/API。完成本程式碼研究室的費用應該不高,甚至完全免費。如要關閉資源,避免產生本教學課程以外的費用,您可以刪除自己建立的資源,或刪除整個專案。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。
Google Cloud Shell
雖然可以透過筆電遠端操作 Google Cloud 和 Compute Engine,但在本程式碼研究室中,我們將使用 Google Cloud Shell,這是可在雲端執行的指令列環境。
這部以 Debian 為基礎的虛擬機器,搭載各種您需要的開發工具,並提供永久的 5GB 主目錄,而且可在 Google Cloud 運作,大幅提升網路效能並強化驗證功能。也就是說,您只需要瀏覽器 (Chromebook 也可以) 就能完成本程式碼研究室。
- 如要從 Cloud 控制台啟用 Cloud Shell,只要按一下「啟用 Cloud Shell」
即可 (佈建並連線至環境的作業需要一些時間才能完成)。


連至 Cloud Shell 後,您應該會看到驗證已完成,專案也已設為獲派的專案 ID 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 控制台資訊主頁中尋找:

Cloud Shell 也會預設設定部分環境變數,這些變數在您執行後續指令時可能很有用。
echo $GOOGLE_CLOUD_PROJECT
指令輸出
<PROJECT_ID>
- 最後,設定預設可用區和專案。
gcloud config set compute/zone us-central1-f
你可以選擇各種不同區域。詳情請參閱「地區和區域」。
3. 建立 Compute Engine 執行個體
首先,我們將使用 gcloud 指令列工具建立虛擬機器。您也可以使用 Console,但命令列更容易重複使用和說明。
首先,請建立名為 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
請注意,每次建立新的 VM 時,INTERNAL_IP 和 EXTERNAL_IP 欄位都會變更。
如要進一步瞭解 gcloud compute instances create 指令,請參閱參考頁面。
4. 透過 SSH 登入執行個體
如要透過指令列以 SSH 連線至執行個體,請執行下列指令。
gcloud compute ssh pi-codelab
大功告成!現在您已進入虛擬機器。執行 hostname 指令即可確認目前的主機。
hostname
這項指令會顯示目前殼層環境的主機名稱。
pi-codelab
5. 安裝依附元件
現在我們要安裝編譯程式所需的依附元件,以計算圓周率。
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++ 程式,計算圓周率。即使您先前未曾使用 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 千萬位數,並測量所需時間。由於圓周率的 1 千萬位數太長,無法在指令列控制台中查看,因此我們會將輸出內容重新導向至檔案。
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 千萬位數的圓周率花了 9.7 秒。
- 使用者:使用的 CPU 時間量,大於「實際」時間,因為機器有兩個 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 執行個體,否則執行個體會持續運作並產生費用。
如果您位於 VM 上 (透過 SSH 連線),請先執行 exit 指令登出。
exit
然後執行下列 gcloud compute instances delete 指令,刪除執行個體和相關聯的磁碟。系統會要求您確認是否要刪除資源。
gcloud compute instances delete pi-codelab
9. 接下來要做什麼?
恭喜!您已完成本 Compute Engine 程式碼研究室,並計算出圓周率的 1 千萬位數!
我們在 2022 年使用相同的基礎架構,計算出圓周率的 100 兆個位數。請參閱公告,瞭解我們如何達成這項目標。如要查看完整結果,請前往 pi.delivery 示範網站。
歡迎前往 Google Cloud 網誌,隨時掌握 Compute 和 高效能運算的最新消息!
更多 Compute Engine 功能
Compute Engine 提供豐富的功能,建議您深入瞭解下列主題:
- 先占 VM - 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
- 將 VM 遷移至 Compute Engine - https://cloud.google.com/compute/docs/vm-migration/
提供意見
- 請花點時間填寫這份簡短的問卷調查