Calcular o Pi no Compute Engine

1. Introdução

Agradecemos por abrir este codelab. Pronto para processar números no Compute Engine?

Neste codelab, mostraremos como iniciar uma nova máquina virtual e executar um programa para calcular o pi.

Você criará uma instância do Compute Engine, fará o download, compilará e executará um programa para calcular o pi. É possível criar uma instância do Compute Engine no console ou na linha de comando. Este laboratório mostra como usar as ferramentas de linha de comando.

ComputeEngine_128px.png

O Compute Engine oferece máquinas virtuais em execução em vários formatos, como números diferentes de núcleos, tamanho da memória e armazenamento. É possível usar uma máquina com mais de 100 núcleos e várias centenas de GB de memória, se necessário, mas neste exemplo vamos lançar uma máquina virtual predefinida com 2 vCPUs e 8 GB de memória.

Vamos usar a série de máquinas N2 neste codelab. É uma VM com uma família de máquinas de uso geral destinada à maioria das cargas de trabalho padrão e nativas da nuvem. A série N2 tem maior desempenho por thread e toda a flexibilidade que a família de máquinas de uso geral oferece.

Agora vamos começar.

2. Configuração e requisitos

Configuração de ambiente autoguiada

  1. Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google Você pode atualizar a qualquer momento.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. normalmente você não se importa com o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, que normalmente é identificado como PROJECT_ID. Se você não gostar do ID gerado, poderá gerar outro ID aleatório. Como alternativa, você pode tentar o seu próprio e ver se ele está disponível. Ela não pode ser alterada após essa etapa e permanecerá durante a duração do projeto.
  • Para sua informação, há um terceiro valor, um Número de projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não será muito cara, se tiver algum custo. Para encerrar os recursos e não gerar faturamento além deste tutorial, exclua os recursos criados ou exclua o projeto inteiro. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Google Cloud Shell

Embora o Google Cloud e o Compute Engine possam ser operados remotamente do seu laptop, neste codelab vamos usar o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.

O Cloud Shell é uma máquina virtual com base em Debian que contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Isso significa que tudo que você precisa para este codelab é um navegador (sim, funciona em um Chromebook).

  1. Para ativar o Cloud Shell no Console do Cloud, basta clicar em Ativar o Cloud Shell b125d9eb26a46cc5.png. Leva apenas alguns instantes para provisionar e se conectar ao ambiente.

1067942a9a93f70.png

Screen Shot 2017-06-14 às 10.13.43 PM.png

Depois de se conectar ao Cloud Shell, você já estará autenticado e o projeto estará configurado com seu PROJECT_ID.

gcloud auth list

Resposta ao comando

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

Resposta ao comando

[core]
project = <PROJECT_ID>

Se, por algum motivo, o projeto não estiver definido, basta emitir o seguinte comando:

gcloud config set project <PROJECT_ID>

Quer encontrar seu PROJECT_ID? Veja qual ID você usou nas etapas de configuração ou procure-o no painel do Console do Cloud:

cc3895eeac80db2c.png

O Cloud Shell também define algumas variáveis de ambiente por padrão, o que pode ser útil ao executar comandos futuros.

echo $GOOGLE_CLOUD_PROJECT

Resposta ao comando

<PROJECT_ID>
  1. Defina a zona padrão e a configuração do projeto:
gcloud config set compute/zone us-central1-f

É possível escolher uma variedade de zonas diferentes. Para mais informações, consulte Regiões e zonas.

3. Criar uma instância do Compute Engine

Primeiro, criaremos uma máquina virtual com a ferramenta de linha de comando gcloud. Você também pode usar o Console se preferir, mas a linha de comando é mais fácil de repetir e explicar.

Primeiro, vamos criar uma instância n2-standard-2 chamada pi-codelab com o Debian 11 como sistema operacional. Também usaremos o disco permanente equilibrado (DP, na sigla em inglês) para o volume de inicialização. Os DPs equilibrados são respaldados por unidades de estado sólido (SSD) e equilibram desempenho e custo. Caso você não tenha selecionado a zona padrão na seção Configuração e requisitos, ele perguntará qual zona usar.

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

O resultado do comando será semelhante a este:

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

Observe que os campos INTERNAL_IP e EXTERNAL_IP mudam sempre que você cria uma nova VM.

Se você quiser saber mais sobre o comando gcloud compute instances create, acesse a página de referência.

4. Acesse a instância via SSH

Para usar o SSH na instância pela linha de comando, execute o comando a seguir.

gcloud compute ssh pi-codelab

Pronto! Agora você está na máquina virtual. Para confirmar seu host atual, execute o comando do nome do host.

hostname

O comando vai mostrar o nome do host do ambiente shell atual.

pi-codelab

5. Instalar dependências

Agora, instalaremos as dependências necessárias para compilar o programa e calcular o pi.

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

O processo leva alguns minutos para ser concluído. Agora, vamos verificar se você tem um compilador C++ em funcionamento.

c++ --version

Esse comando vai gerar informações sobre a versão do compilador se ele for instalado corretamente.

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. Compilar o programa

Agora, vamos compilar o programa em C++ para calcular o Pi. Isso é mais simples do que parece, mesmo que você não tenha desenvolvido em C++ antes. Todos os pré-requisitos foram instalados na etapa anterior, então só precisamos buscar e compilar o código-fonte.

Primeiro, busque e salve o código-fonte. Esta etapa faz o download de um arquivo de origem do GitHub e o salva como pi.cc no diretório atual.

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

Em seguida, execute o compilador C++ para compilar o código-fonte salvo.

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

O compilador não gera nada em caso de sucesso. Verifique se você tem o arquivo executável:

ls pi

Esse comando "ls" deve gerar o nome do arquivo do programa, se houver.

pi

7. Calcular Pi

O programa pi usa um argumento, o número de dígitos a serem calculados. Por exemplo, vamos calcular os primeiros 100 decimais de Pi.

./pi 100

O programa vai terminar em menos de um segundo e vai gerar algo parecido com este:

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

A última linha são os 100 primeiros decimais de Pi. Parabéns, você pediu para o computador fazer as contas para você!

O programa pode calcular mais dígitos (atualmente limitado a 100 bilhões de dígitos). Agora, vamos calcular 10 milhões de dígitos e medir quanto tempo isso leva. Redirecionamos a saída para um arquivo porque 10 milhões de dígitos de pi são longos demais para serem vistos no console da linha de comando.

time ./pi 10000000 > pi10m.txt

A resposta do programa é semelhante a esta:

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

Desta vez, ele não inclui os dígitos porque eles estão salvos no arquivo pi10m.txt. As três últimas linhas descrevem quanto tempo o programa levou para ser executado e a quantidade de CPU usada.

  • real: o tempo real do início ao fim, o que significa que levou 9,7 segundos para calcular 10 milhões de dígitos de pi no exemplo acima.
  • usuário: quanto tempo de CPU foi usado, que é maior do que "real" porque a máquina tem dois núcleos de CPU, e cada um deles é contabilizado no total.
  • sys: o tempo que o sistema operacional precisa para executar o programa e processar tarefas do sistema, como rede e E/S. Desta vez, demorou cerca de 0,4 segundo, que é principalmente o tempo para gravar o resultado no disco.

Podemos dar uma olhada em pi10m.txt e ver os primeiros e os últimos 100 dígitos de cada um.

Vamos verificar os primeiros dígitos. Esse comando gera os primeiros 100 decimais (e os três primeiros e o ponto decimal).

head -c 102 pi10m.txt

O resultado ficará assim:

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

O próximo comando gera os últimos 100 decimais.

tail -c 100 pi10m.txt

O resultado ficará assim:

610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897

8. Limpar o cluster

Não se esqueça de desligar sua instância do Compute Engine. Caso contrário, ela continuará em execução e acumulando custos.

Se você estiver na VM (conectada com SSH), execute primeiro o comando de saída para fazer logout.

exit

Em seguida, execute o seguinte comando gcloud compute instances delete para excluir a instância e os discos associados. Você vai precisar confirmar a exclusão do recurso.

gcloud compute instances delete pi-codelab

9. A seguir

Parabéns, você concluiu este codelab do Compute Engine e calculou 10 milhões de dígitos de pi.

Usamos a mesma infraestrutura para calcular 100 trilhões de dígitos de pi em 2022. Leia o comunicado para saber como foi nosso desempenho. Os resultados completos estão disponíveis no nosso site de demonstração pi.delivery.

Fique por dentro das últimas notícias sobre computação e computação de alto desempenho no blog do Google Cloud.

Mais recursos do Compute Engine

O Compute Engine tem um amplo conjunto de recursos. Talvez você queira mergulhar em alguns destes tópicos :

Envie um feedback

  • Reserve um momento para completar nossa pesquisa curta