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

1. Введение

Спасибо, что открыли эту лабораторию! Готовы посчитать цифры на Compute Engine?

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

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

ComputeEngine_128px.png

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

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

Теперь давайте начнем!

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

Самостоятельная настройка среды

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

Google Cloud Shell

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

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

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

1067942a9a93f70.png

Снимок экрана 14.06.2017, 22.13.43.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 ? Узнайте, какой идентификатор вы использовали на этапах настройки, или найдите его на панели управления 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) в качестве загрузочного тома. Сбалансированные 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

Затем выполните следующую команду gcloud compute instances delete чтобы удалить экземпляр и связанные с ним диски. Он попросит вас подтвердить удаление ресурса.

gcloud compute instances delete pi-codelab

9. Что дальше?

Поздравляем, вы завершили эту лабораторную работу Compute Engine и вычислили 10 миллионов цифр числа Пи!

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

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

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

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

Оставьте нам свой отзыв

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