Calcula pi en Compute Engine

1. Introducción

Gracias por abrir este codelab. ¿Todo listo para hacer cálculos sobre Compute Engine?

En este codelab, explicaremos cómo iniciar una nueva máquina virtual y ejecutar un programa para calcular el pi.

Crearás una instancia de Compute Engine y, además, descargarás, compilarás y ejecutarás un programa para calcular el valor de pi. Puedes crear una instancia de Compute Engine desde la consola o la línea de comandos. En este lab, aprenderás a usar las herramientas de línea de comandos.

ComputeEngine_128px.png

Compute Engine ofrece máquinas virtuales que se ejecutan en varias formas, como diferentes cantidades de núcleos, tamaño de memoria y almacenamiento. Puedes usar una máquina con más de 100 núcleos y varios cientos de GB de memoria si es necesario, pero en este ejemplo, lanzaremos una máquina virtual predefinida de 2 CPU virtuales y 8 GB de memoria.

En este codelab, usaremos la serie de máquinas N2. Es una VM de familia de máquinas de uso general que se orienta a la mayoría de las cargas de trabajo estándar y nativas de la nube. La serie N2 tiene un mayor rendimiento por subproceso y toda la flexibilidad que ofrece la familia de máquinas de uso general.

Comencemos.

2. Configuración y requisitos

Configuración del entorno de autoaprendizaje

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla en cualquier momento.
  • El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. por lo general, no te importa qué es. En la mayoría de los codelabs, deberás hacer referencia al ID del proyecto (por lo general, se identifica como PROJECT_ID). Si no te gusta el ID generado, puedes generar otro aleatorio. También puedes probar el tuyo propio y ver si está disponible. No se puede cambiar después de este paso y se mantendrá mientras dure el proyecto.
  • Para tu información, hay un tercer valor, un número de proyecto que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Para cerrar recursos y evitar que se te facture más allá de este instructivo, puedes borrar los recursos que creaste o borrar todo el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.

Google Cloud Shell

Si bien Google Cloud y Compute Engine se pueden operar de manera remota desde tu laptop, en este codelab usaremos Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

Esta máquina virtual basada en Debian está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Esto significa que todo lo que necesitarás para este Codelab es un navegador (sí, funciona en una Chromebook).

  1. Para activar Cloud Shell desde la consola de Cloud, solo haz clic en Activar Cloud Shellb125d9eb26a46cc5.png (el aprovisionamiento y la conexión al entorno debería llevar solo unos minutos).

1067942a9a93f70.png

Captura de pantalla del 14 de junio de 2017 a las 10.13.43 p.m. .png

Una vez conectado a Cloud Shell, debería ver que ya se autenticó y que el proyecto ya se configuró con tu PROJECT_ID:

gcloud auth list

Resultado del comando

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

Resultado del comando

[core]
project = <PROJECT_ID>

Si, por algún motivo, el proyecto no está configurado, solo emite el siguiente comando:

gcloud config set project <PROJECT_ID>

Si no conoce su PROJECT_ID, Observa el ID que usaste en los pasos de configuración o búscalo en el panel de la consola de Cloud:

cc3895eeac80db2c.png

Cloud Shell también configura algunas variables de entorno de forma predeterminada, lo que puede resultar útil cuando ejecutas comandos futuros.

echo $GOOGLE_CLOUD_PROJECT

Resultado del comando

<PROJECT_ID>
  1. Establece la zona predeterminada y la configuración del proyecto.
gcloud config set compute/zone us-central1-f

Puedes elegir una variedad de zonas diferentes. Para obtener más información, consulta Regiones y zonas.

3. Crea una instancia de Compute Engine

Primero, crearemos una máquina virtual con la herramienta de línea de comandos de gcloud. Si lo prefieres, también puedes usar Console, pero la línea de comandos es más fácil de repetir y explicar.

Primero, crearemos una instancia n2-standard-2 llamada pi-codelab con Debian 11 como sistema operativo. También usaremos el disco persistente balanceado (PD) para el volumen de inicio. Los PD balanceados están respaldados por unidades de estado sólido (SSD) y equilibran el rendimiento y el costo. Se le preguntará qué zona debe usar si no seleccionó la predeterminada en la sección Configuración y requisitos.

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

El resultado del comando debería verse de la siguiente manera:

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

Ten en cuenta que los campos INTERNAL_IP y EXTERNAL_IP cambian cada vez que creas una VM nueva.

Si deseas obtener más información sobre el comando gcloud compute instances create, visita la página de referencia.

4. Establece una conexión SSH a la instancia

Para establecer una conexión SSH a la instancia desde la línea de comandos, ejecuta el siguiente comando.

gcloud compute ssh pi-codelab

Eso es todo. Ahora estás en la máquina virtual. Para confirmar tu host actual, ejecuta el comando de nombre de host.

hostname

El comando mostrará el nombre de host del entorno de shell actual.

pi-codelab

5. Instala las dependencias

Ahora, instalaremos las dependencias necesarias para compilar el programa y calcular pi.

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

El proceso tarda unos minutos en completarse. Ahora veamos si tienes un compilador de C++ que funciona.

c++ --version

Este comando mostrará información sobre la versión del compilador si está instalado correctamente.

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. Compila el programa

Ahora compilemos el programa de C++ para calcular el valor de pi. Esto es más simple de lo que parece, incluso si no realizaste desarrollos en C++ antes. Todos los requisitos previos están instalados en el paso anterior, por lo que solo necesitamos recuperar y compilar el código fuente.

Primero, recupera y guarda el código fuente. En este paso, se descarga un archivo fuente de GitHub y se guarda como pi.cc en el directorio actual.

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

A continuación, ejecuta el compilador de C++ para compilar el código fuente guardado.

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

El compilador no genera ningún resultado en caso de éxito. Comprobemos que tengas el archivo ejecutable:

ls pi

Este comando ls debería mostrar el nombre de archivo del programa (si existe).

pi

7. Calcular pi

El programa pi toma un argumento, la cantidad de dígitos que se calculará. Por ejemplo, vamos a calcular los primeros 100 decimales de pi.

./pi 100

El programa finalizará en menos de un segundo y tendrá un resultado similar al siguiente:

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

La última línea corresponde a los primeros 100 decimales de pi. ¡Felicitaciones! Acabas de hacer que la computadora haga los cálculos por ti.

El programa puede calcular más dígitos (actualmente, con un límite de 100,000 millones de dígitos). Ahora, calculemos 10 millones de dígitos para medir cuánto tardan. Redirigimos el resultado a un archivo, ya que 10 millones de dígitos de pi son demasiado largos para verlos en la consola de línea de comandos.

time ./pi 10000000 > pi10m.txt

El programa genera un resultado similar al siguiente:

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

Esta vez no incluye los dígitos, ya que están guardados en el archivo pi10m.txt. En las últimas tres líneas, se describe cuánto tiempo tardó en ejecutarse el programa y cuánta CPU usó.

  • real: El tiempo real de principio a fin, lo que significa que, en el ejemplo anterior, se tardó 9.7 segundos en calcular 10 millones de dígitos de pi.
  • usuario: la cantidad de tiempo de CPU que usó, que es mayor que la cantidad “real” porque la máquina tiene dos núcleos de CPU y cada núcleo se considera en el total.
  • sys: Es el tiempo que el sistema operativo necesita para ejecutar el programa y procesar las tareas del sistema, como la red y la E/S. Esta vez, tomó alrededor de 0.4 segundos, que es la mayoría del tiempo para escribir el resultado en el disco.

Podemos ver pi10m.txt y ver los primeros y los últimos 100 dígitos de cada uno.

Comprobemos los primeros dígitos. Este comando genera los primeros 100 decimales (y los primeros 3 y puntos decimales).

head -c 102 pi10m.txt

El resultado debería verse de la siguiente manera:

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Con el siguiente comando, se muestran los últimos 100 decimales.

tail -c 100 pi10m.txt

El resultado debería verse de la siguiente manera:

610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897

8. Limpia el clúster

No olvides cerrar tu instancia de Compute Engine; de lo contrario, seguirá ejecutándose y acumulando costos.

Si estás en la VM (conectada con SSH), primero debes salir ejecutando el comando de salida.

exit

Luego, ejecuta el siguiente comando de gcloud compute instances delete para borrar la instancia y los discos asociados. Se te pedirá que confirmes la eliminación del recurso.

gcloud compute instances delete pi-codelab

9. Próximos pasos

¡Felicitaciones! Completaste este codelab de Compute Engine y calculaste 10 millones de dígitos de pi.

Usamos la misma infraestructura para calcular 100 billones de dígitos de pi en 2022. Lea el anuncio para conocer nuestro rendimiento. Los resultados completos están disponibles en nuestro sitio de demostración pi.delivery.

Mantente al tanto de las noticias más recientes sobre el procesamiento y la computación de alto rendimiento en el Blog de Google Cloud.

Más funciones de Compute Engine

Compute Engine tiene un amplio conjunto de funciones. Recomendamos que explores algunos de estos temas :

Envíanos tus comentarios

  • Tómate un momento para completar nuestra breve encuesta