Oblicz liczbę π w Compute Engine

1. Wprowadzenie

Dziękuję za otwarcie tego ćwiczenia z programowania. Chcesz poznać liczby w Compute Engine?

W tym ćwiczeniu w Codelabs dowiesz się, jak uruchomić nową maszynę wirtualną i uruchomić program do obliczania liczby π.

Tworzysz instancję Compute Engine, a potem pobierzesz, skompilujesz i uruchomisz program do obliczania liczby π. Instancję Compute Engine możesz utworzyć z poziomu konsoli lub wiersza poleceń. W tym module zapoznasz się z narzędziami wiersza poleceń.

ComputeEngine_128px.png

Compute Engine oferuje maszyny wirtualne o różnych kształtach, np. z różną liczbą rdzeni, rozmiarem pamięci i miejscem na dane. Możesz używać maszyny z ponad 100 rdzeniami i kilkoma setkami GB pamięci, ale w tym przykładzie wprowadzimy wstępnie zdefiniowaną maszynę wirtualną z 2 procesorami wirtualnymi i o 8 GB pamięci.

W tym ćwiczeniu z programowania użyjemy serii maszyn N2. Jest to uniwersalna maszyna wirtualna z rodziny maszyn, która jest kierowana na większość standardowych i chmurowych zadań. Seria N2 charakteryzuje się większą wydajnością na wątek i elastycznością zapewnianą przez rodzinę maszyn do zwykłych obciążeń.

Zaczynajmy!

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google. W każdej chwili możesz ją zmienić.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić (po jego ustawieniu nie można go zmienić). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń z programowania konieczne jest odwołanie się do identyfikatora projektu (zwykle nazywa się on PROJECT_ID). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Potem nie będzie można go zmienić. Pozostanie ono przez czas trwania projektu.
  • Dostępna jest trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Google Cloud Shell,

Google Cloud i Compute Engine można obsługiwać zdalnie z laptopa, ale w tym ćwiczeniu w programowaniu użyjemy Google Cloud Shell – środowiska wiersza poleceń działającego w chmurze.

Ta maszyna wirtualna oparta na Debianie zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. Oznacza to, że do tego ćwiczenia z programowania wystarczy przeglądarka (tak, działa ona na Chromebooku).

  1. Aby aktywować Cloud Shell z poziomu konsoli Cloud, kliknij Aktywuj Cloud Shell b125d9eb26a46cc5.png (udostępnienie środowiska i połączenie z nim powinno zająć tylko chwilę).

1067942a9a93f70.png

Zrzut ekranu 2017-06-14 o 10.13.43 PM.png

Po nawiązaniu połączenia z Cloud Shell powinno pojawić się potwierdzenie, że użytkownik jest już uwierzytelniony, a projekt jest już ustawiony na PROJECT_ID.

gcloud auth list

Dane wyjściowe polecenia

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Dane wyjściowe polecenia

[core]
project = <PROJECT_ID>

Jeśli z jakiegoś powodu projekt nie jest skonfigurowany, uruchom po prostu to polecenie:

gcloud config set project <PROJECT_ID>

Szukasz urządzenia PROJECT_ID? Sprawdź identyfikator użyty w krokach konfiguracji lub wyszukaj go w panelu Cloud Console:

cc3895eeac80db2c.png

Cloud Shell ustawia też domyślnie niektóre zmienne środowiskowe, które mogą być przydatne podczas uruchamiania kolejnych poleceń.

echo $GOOGLE_CLOUD_PROJECT

Dane wyjściowe polecenia

<PROJECT_ID>
  1. Na koniec ustaw domyślną strefę i konfigurację projektu.
gcloud config set compute/zone us-central1-f

Możesz wybrać różne strefy. Więcej informacji znajdziesz w artykule Regiony i Strefy.

3. Tworzenie maszyny Compute Engine

Najpierw utworzymy maszynę wirtualną za pomocą narzędzia wiersza poleceń gcloud. Jeśli wolisz, możesz też użyć konsoli, ale wiersz poleceń jest łatwiejszy do powtórzenia i objaśnienia.

Najpierw utwórzmy instancję n2-standard-2 o nazwie pi-codelab z systemem operacyjnym Debian 11. Na potrzeby woluminu rozruchowego użyjemy także zrównoważonego dysku stałego (PD). Zrównoważone dyrektywy ze stałym dostępem do danych są oparte na dyskach SSD, zapewniając optymalną wydajność i koszty. Jeśli w sekcji Konfiguracja i wymagania nie została wybrana strefa domyślna, pojawi się pytanie, której strefy chcesz używać.

gcloud compute instances create pi-codelab \
--machine-type=n2-standard-2 \
--image-project=debian-cloud \
--image-family=debian-11 \
--boot-disk-type=pd-balanced

Wynik polecenia powinien być podobny do tego:

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

Pamiętaj, że pola INTERNAL_IP i EXTERNAL_IP zmieniają się za każdym razem, gdy tworzysz nową maszynę wirtualną.

Aby dowiedzieć się więcej o poleceniu gcloud compute instances create, odwiedź stronę z dokumentacją.

4. Łączenie się z instancją przez SSH

Aby połączyć się z instancją przez SSH z poziomu wiersza poleceń, uruchom następujące polecenie.

gcloud compute ssh pi-codelab

Znakomicie. Teraz jesteś w maszynie wirtualnej. Możesz sprawdzić bieżącego hosta, uruchamiając polecenie nazwa hosta.

hostname

W tym poleceniu zostanie wyświetlona nazwa hosta bieżącego środowiska powłoki.

pi-codelab

5. Zainstaluj zależności

Teraz zainstalujemy zależności niezbędne do skompilowania programu służącego do obliczania liczby π.

sudo apt update
sudo apt -y install build-essential libgmp-dev libmpfr-dev libfmt-dev

Ten proces może potrwać kilka minut. Sprawdźmy, czy masz działający kompilator C++.

c++ --version

To polecenie zwraca informacje o wersji kompilatora, jeśli jest on zainstalowany prawidłowo.

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. Kompilacja programu

Teraz skompilujmy program w C++, który obliczy liczbę pi. To znacznie prostsze, niż się wydaje, nawet jeśli nie masz jeszcze doświadczenia w programowaniu w języku C++. Wszystkie wymagania wstępne zostały zainstalowane w poprzednim kroku, więc musimy tylko pobrać i skompilować kod źródłowy.

Najpierw pobierz i zapisz kod źródłowy. Ten krok pobiera plik źródłowy z GitHuba i zapisuje go jako pi.cc w bieżącym katalogu.

curl -OL https://raw.githubusercontent.com/GoogleCloudPlatform/pi-delivery/main/codelab/pi.cc

Następnie uruchom kompilator C++, aby skompilować zapisany kod źródłowy.

c++ -opi pi.cc -std=c++17 -O3 -march=native -lgmp -lmpfr -lpthread -lfmt

W przypadku powodzenia kompilator nie zwraca żadnych wyników. Sprawdźmy, czy masz plik wykonywalny:

ls pi

Polecenie ls powinno zwrócić nazwę pliku programu, jeśli istnieje.

pi

7. Oblicz liczbę π

Program pi przyjmuje 1 argument, czyli liczbę cyfr do obliczenia. Obliczmy na przykład pierwsze 100 miejsc po przecinku liczby pi.

./pi 100

Program zakończy się w niecałą sekundę i wyświetli komunikat podobny do tego:

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

Ostatni wiersz to pierwsze 100 miejsc po przecinku liczby pi. Gratulacje, właśnie komputer zaczął za Ciebie liczyć!

Program może obliczyć więcej cyfr (obecnie limit wynosi 100 miliardów). Teraz obliczmy 10 milionów cyfr i zmierzmy, ile to zajmie. Przekierowujemy dane wyjściowe do pliku, ponieważ 10 milionów cyfr pi to trochę za dużo, aby wyświetlić je w konsoli wiersza poleceń.

time ./pi 10000000 > pi10m.txt

Program generuje następujący wynik:

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

Tym razem nie zawiera cyfr, ponieważ są one zapisane w pliku pi10m.txt. Ostatnie 3 wiersze opisują czas działania programu i liczbę procesorów.

  • rzeczywiste: rzeczywisty czas od początku do końca, co oznacza, że w przykładzie powyżej obliczenie 10 milionów cyfr pi to trwa 9,7 sekundy.
  • user: czas pracy procesora, który jest większy niż „rzeczywisty”. ponieważ procesor ma 2 rdzenie, a każdy z nich jest wliczany do łącznej liczby rdzeni.
  • sys: czas potrzebny na uruchomienie programu przez system operacyjny do przetworzenia zadań systemowych, takich jak sieć i wejścia-wyjścia. Tym razem trwało to około 0, 4 sekundy – czyli głównie czas zapisu wyniku na dysku.

Na podstawie pliku pi10m.txt możemy sprawdzić pierwsze i ostatnie 100 cyfr każdy.

Sprawdźmy pierwsze cyfry. To polecenie zwraca pierwsze 100 cyfr (i pierwsze 3 oraz pierwsze 3 cyfry).

head -c 102 pi10m.txt

Wynik powinien wyglądać tak.

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Następne polecenie zwraca 100 ostatnich miejsc po przecinku.

tail -c 100 pi10m.txt

Wynik powinien wyglądać tak.

610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897

8. Czyszczenie klastra

Nie zapomnij wyłączyć instancji Compute Engine. W przeciwnym razie będzie ona nadal działać i generować koszty.

Jeśli korzystasz z maszyny wirtualnej (połączonej przez SSH), najpierw wyloguj się, uruchamiając polecenie wyjścia.

exit

Następnie uruchom to polecenie gcloud compute instances delete, aby usunąć instancję i powiązane z nią dyski. Pojawi się prośba o potwierdzenie usunięcia zasobu.

gcloud compute instances delete pi-codelab

9. Co dalej?

Gratulacje! Udało Ci się ukończyć to ćwiczenie z programowania Compute Engine. Udało Ci się obliczyć 10 milionów cyfr pi.

W 2022 roku użyliśmy tej samej infrastruktury, aby obliczyć 100 bilionów cyfr pi. Aby dowiedzieć się, jak nam poszło, przeczytaj ten ogłoszenie. Pełne wyniki są dostępne w naszej witrynie demonstracyjnej pi.delivery.

Bądź na bieżąco z najnowszymi informacjami o Compute i usługach przetwarzania o wysokiej wydajności, czytając blog Google Cloud.

Więcej funkcji Compute Engine

Compute Engine ma bogaty zestaw funkcji. Być może zainteresują Cię niektóre z tych materiałów :

Prześlij nam swoją opinię

  • Poświęć chwilę na wypełnienie naszej bardzo krótkiej ankiety