Вычислить число Пи в Compute Engine

1. Введение

Спасибо за открытие этого практического занятия! Готовы приступить к вычислениям на Compute Engine?

В этом практическом занятии мы разберем, как запустить новую виртуальную машину и программу для вычисления числа пи.

Вам предстоит создать экземпляр Compute Engine, загрузить, скомпилировать и запустить программу для вычисления числа пи. Создать экземпляр Compute Engine можно как из консоли, так и из командной строки. В этой лабораторной работе вы познакомитесь с использованием инструментов командной строки.

ComputeEngine_128px.png

Compute Engine предлагает виртуальные машины, работающие в различных конфигурациях, например, с разным количеством ядер, объемом памяти и хранилища. При необходимости можно использовать машину с более чем 100 ядрами и несколькими сотнями гигабайт памяти, но в этом примере мы запустим предопределенную виртуальную машину с 2 виртуальными процессорами и 8 ГБ памяти.

В этом практическом занятии мы будем использовать виртуальные машины серии N2 . Это семейство машин общего назначения, ориентированное на большинство стандартных и облачных рабочих нагрузок. Серия N2 обладает более высокой производительностью на поток и всей гибкостью, которую предлагает семейство машин общего назначения.

Итак, начнём!

2. Настройка и требования

Настройка среды для самостоятельного обучения

  1. Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы можете изменить её в любое время.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как PROJECT_ID ). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он останется неизменным на протяжении всего проекта.
  • К вашему сведению, существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
  1. Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить весь проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Google Cloud Shell

Хотя Google Cloud и Compute Engine можно запускать удаленно с ноутбука, в этом практическом занятии мы будем использовать Google Cloud Shell — среду командной строки, работающую в облаке.

Эта виртуальная машина на базе Debian содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Это означает, что для выполнения этого практического задания вам понадобится только браузер (да, он работает и на Chromebook).

  1. Для активации Cloud Shell из консоли Cloud Console просто нажмите «Активировать Cloud Shell». b125d9eb26a46cc5.png (На подготовку и подключение к среде должно уйти всего несколько минут).

1067942a9a93f70.png

Screen Shot 2017-06-14 at 10.13.43 PM.png

После подключения к 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:

cc3895eeac80db2c.png

Cloud Shell также по умолчанию устанавливает некоторые переменные среды, которые могут быть полезны при выполнении будущих команд.

echo $GOOGLE_CLOUD_PROJECT

вывод команды

<PROJECT_ID>
  1. Наконец, установите зону по умолчанию и конфигурацию проекта.
gcloud config set compute/zone us-central1-f

Вы можете выбрать различные зоны. Для получения дополнительной информации см. раздел «Регионы и зоны» .

3. Создайте экземпляр Compute Engine.

Сначала мы создадим виртуальную машину с помощью инструмента командной строки gcloud. При желании вы можете использовать и консоль , но командную строку проще повторить и объяснить.

Для начала создадим экземпляр n2-standard-2 с именем pi-codelab и операционной системой 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

Эта команда отобразит имя хоста текущей среды оболочки.

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 принимает один аргумент — количество знаков после запятой. Например, давайте вычислим первые 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 десятичных знаков числа пи. Поздравляем, компьютер только что сделал за вас вычисления!

Программа может вычислять больше цифр (в настоящее время ограничение составляет 100 миллиардов цифр). Теперь давайте вычислим 10 миллионов цифр и измерим время, необходимое для этого. Мы перенаправляем вывод в файл, так как 10 миллионов цифр числа пи слишком много для просмотра в консоли командной строки.

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 . Последние три строки описывают время выполнения программы и объем использованного процессора.

  • реальное время: фактическое время от начала до конца, что означает, что в приведенном выше примере на вычисление 10 миллионов цифр числа пи потребовалось 9,7 секунды.
  • Пользователь: сколько процессорного времени было использовано, что больше, чем "реальное", потому что машина имеет два ядра процессора, и каждое ядро ​​учитывается в общем объеме.
  • sys: время, необходимое операционной системе для выполнения программы и обработки системных задач, таких как работа с сетью и ввод-вывод. В данном случае это заняло около 0,4 секунды, что в основном соответствует времени записи результата на диск.

Мы можем взглянуть на файл pi10m.txt и увидеть первые и последние 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 и вычислили 10 миллионов цифр числа пи!

Мы использовали ту же инфраструктуру для вычисления 100 триллионов цифр числа пи в 2022 году. Ознакомьтесь с объявлением , чтобы узнать, как мы справились. Полные результаты доступны на нашем демонстрационном сайте pi.delivery .

Будьте в курсе последних новостей о вычислительных ресурсах и высокопроизводительных вычислениях в блоге Google Cloud!

Дополнительные возможности Compute Engine

Compute Engine обладает богатым набором функций. Возможно, вам будет интересно ознакомиться с некоторыми из них:

Оставьте свой отзыв.

  • Пожалуйста, уделите несколько минут, чтобы пройти наш очень короткий опрос.