<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Clúster de computacion con Raspberry Pi 4 | fratava.dev</title><link>https://fratava.dev/es/raspberry/</link><atom:link href="https://fratava.dev/es/raspberry/index.xml" rel="self" type="application/rss+xml"/><description>Clúster de computacion con Raspberry Pi 4</description><generator>Wowchemy (https://wowchemy.com)</generator><language>es-mexico</language><copyright>© ftapia 2026</copyright><lastBuildDate>Thu, 31 Dec 2020 00:00:00 +0000</lastBuildDate><image><url>https://fratava.dev/media/sharing.jpg</url><title>Clúster de computacion con Raspberry Pi 4</title><link>https://fratava.dev/es/raspberry/</link></image><item><title>Test</title><link>https://fratava.dev/es/raspberry/test/</link><pubDate>Thu, 31 Dec 2020 00:00:00 +0000</pubDate><guid>https://fratava.dev/es/raspberry/test/</guid><description>&lt;h1 id="probando-nuestro-clúster">Probando nuestro clúster&lt;/h1>
&lt;h2 id="aplicaciones-en-paralelo">Aplicaciones en paralelo&lt;/h2>
&lt;h3 id="llamada-de-procesos">Llamada de procesos&lt;/h3>
&lt;p>Para esta parte, vamos a ejecutar una serie de códigos en parelelo para comprobar la comunicación entre los nodos. Para ello vamos a clonar el repositorio de pruebas siguiendo estos pasos:&lt;/p>
&lt;pre>&lt;code class="language-bash">su - alpha
cd /beta/
git clone https://gitlab.com/fratava/cluster-pi.git
cd cluster-pi
&lt;/code>&lt;/pre>
&lt;p>Para la primera prueba, vamos a comprobar que hay intercomunicación entre los nodos del clúster. Para evitar estar listando los núcleos que vamos a utilizar, crearemos una archivo en dónde le vamos a indicar a MPI los nodos con los cuales va a estalecer la comunicación dinámicamente. Es muy recomendable contar con este archivo, ya que de otra manera hay que indicarle explícitamente los núcleos de los nodos que vamos a utilizar.&lt;/p>
&lt;p>Creamos el archivo llamado &lt;code>#!bash machinefile&lt;/code> de la siguiente manera&lt;/p>
&lt;pre>&lt;code class="language-bash">emacs machinefile
&lt;/code>&lt;/pre>
&lt;p>y escribimos&lt;/p>
&lt;pre>&lt;code class="language-bash">nodo1
nodo2
nodo3
master
&lt;/code>&lt;/pre>
&lt;p>pulsamos ctrl+s y ctrl+x.&lt;/p>
&lt;div class="alert alert-info">
&lt;div>
Si añadimos más nodos de cómputo a nuestro clúster o queremos hacer una segmentación, debemos modificar nuestro &lt;code>machinefile&lt;/code> para agregar o remover nodos.
&lt;/div>
&lt;/div>
&lt;p>Compilamos el código&lt;/p>
&lt;pre>&lt;code class="language-bash">mpicc call-procs.c -o call-procs
&lt;/code>&lt;/pre>
&lt;p>y los ejecutamos&lt;/p>
&lt;p>Con machinefile&lt;/p>
&lt;pre>&lt;code class="language-bash">mpiexec -machinefile machinefile -n 16 ./call-procs
&lt;/code>&lt;/pre>
&lt;p>Sin machinefile&lt;/p>
&lt;pre>&lt;code class="language-bash">mpiexec -H master,master,master,master,nodo1,nodo1,nodo1,nodo1,nodo2,nodo2,nodo2,nodo2,nodo3,nodo3,nodo3,nodo3 ./call-procs
&lt;/code>&lt;/pre>
&lt;p>Si todo marcha bien debemos tener una salida como esta&lt;/p>
&lt;pre>&lt;code class="language-bash">Llamada al proceso 3 de 16 en master
Llamada al proceso 2 de 16 en master
Llamada al proceso 0 de 16 en master
Llamada al proceso 1 de 16 en master
Llamada al proceso 15 de 16 en nodo3
Llamada al proceso 12 de 16 en nodo3
Llamada al proceso 5 de 16 en nodo1
Llamada al proceso 6 de 16 en nodo1
Llamada al proceso 14 de 16 en nodo3
Llamada al proceso 8 de 16 en nodo2
Llamada al proceso 13 de 16 en nodo3
Llamada al proceso 7 de 16 en nodo1
Llamada al proceso 9 de 16 en nodo2
Llamada al proceso 4 de 16 en nodo1
Llamada al proceso 10 de 16 en nodo2
Llamada al proceso 11 de 16 en nodo2
&lt;/code>&lt;/pre>
&lt;p>Recordemos que las llamadas son aleatorias.&lt;/p>
&lt;div class="alert alert-info">
&lt;div>
&lt;p>En algunas ocasiones, podrías no tener esta salida. En este caso deberás revisar que tu cable de red está bien conectado, tu raspberry está prendida o tu volumen está montado. Para verificar esto último podemos teclear&lt;/p>
&lt;pre>&lt;code class="language-bash">cd /beta
ls
&lt;/code>&lt;/pre>
&lt;p>Si el folder está vacío debemos teclear&lt;/p>
&lt;pre>&lt;code class="language-bash">sudo mount master:/beta /beta
&lt;/code>&lt;/pre>
&lt;p>y volvemos a ejecutar el código.&lt;/p>
&lt;/div>
&lt;/div>
&lt;h3 id="calculando-pi-en-paralelo">Calculando Pi en paralelo&lt;/h3>
&lt;p>Ahora calcularemos Pi de forma paralela. Para esto, haremos una integración numérica. La idea detrás de este algoritmo la podemos encontrar en esta &lt;a href="http://cercs-ed.gatech.edu/node/14" target="_blank" rel="noopener">página&lt;/a>.&lt;/p>
&lt;p>Procedemos entonces a ejecutar el código. Primero lo compilamos&lt;/p>
&lt;pre>&lt;code class="language-bash">mpicc pi_mpi.c -o pi_mpi
&lt;/code>&lt;/pre>
&lt;p>y lo ejecutamos&lt;/p>
&lt;p>Con machinefile&lt;/p>
&lt;pre>&lt;code class="language-bash">mpiexec -machinefile machinefile -n 16 ./pi_mpi
&lt;/code>&lt;/pre>
&lt;p>Sin machinefile&lt;/p>
&lt;pre>&lt;code class="language-bash">mpiexec -H master,master,master,master,nodo1,nodo1,nodo1,nodo1,nodo2,nodo2,nodo2,nodo2,nodo3,nodo3,nodo3,nodo3 ./pi_mpi
&lt;/code>&lt;/pre>
&lt;p>En este caso no solicitará el número de rectángulos&lt;/p>
&lt;pre>&lt;code class="language-shell">#######################################################
Master node name: master
Enter the number of intervals:
&lt;/code>&lt;/pre>
&lt;p>El valor queda al criterio del usuario. A continuación, te mostramos a modo de ilustración, los resultados que se obtienen para 300000 rectángulos cuando se calcula Pi con diferentes números de procesadores, los cuales los designaremos con &amp;ldquo;n=??&amp;rdquo; y &lt;code>#!bash time&lt;/code> antes de la ejecución para medir el tiempo.&lt;/p>
&lt;p>n=1&lt;/p>
&lt;pre>&lt;code class="language-shell"> alpha@master:/beta/cluster-pi $ time mpiexec -machinefile machinefile -n 1 ./pi_mpi
#######################################################
Master node name: master
Enter the number of intervals:
300000
*** Number of processes: 1
Pi Calculado = 3.141592653590713268840772798285
Pi = 3.141592653589793115997963468544
Error relativo = 0.000000000000920152842809329741
real 8m54.547s
user 8m47.000s
sys 0m0.160s
&lt;/code>&lt;/pre>
&lt;p>n=2&lt;/p>
&lt;pre>&lt;code class="language-shell"> alpha@master:/beta/cluster-pi $ time mpiexec -machinefile machinefile -n 2 ./pi_mpi
#######################################################
Master node name: master
Enter the number of intervals:
300000
*** Number of processes: 2
Pi Calculado = 3.141592653590711492483933398034
Pi = 3.141592653589793115997963468544
Error relativo = 0.000000000000918376485969929490
real 4m36.129s
user 8m58.883s
sys 0m0.211s
&lt;/code>&lt;/pre>
&lt;p>n=4&lt;/p>
&lt;pre>&lt;code class="language-shell"> alpha@master:/beta/cluster-pi $ time mpiexec -machinefile machinefile -n 4 ./pi_mpi
#######################################################
Master node name: nodo3
Enter the number of intervals:
300000
*** Number of processes: 4
Pi Calculado = 3.141592653590712824751562948222
Pi = 3.141592653589793115997963468544
Error relativo = 0.000000000000919708753599479678
real 2m19.781s
user 9m10.213s
sys 0m0.228s
&lt;/code>&lt;/pre>
&lt;p>n=8&lt;/p>
&lt;pre>&lt;code class="language-shell"> alpha@master:/beta/cluster-pi $ time mpiexec -machinefile machinefile -n 8 ./pi_mpi
#######################################################
Master node name: master
Enter the number of intervals:
300000
*** Number of processes: 8
Pi Calculado = 3.141592653590715045197612198535
Pi = 3.141592653589793115997963468544
Error relativo = 0.000000000000921929199648729991
real 1m26.563s
user 4m44.188s
sys 0m12.459s
&lt;/code>&lt;/pre>
&lt;p>n=16&lt;/p>
&lt;pre>&lt;code class="language-shell"> alpha@master:/beta/cluster-pi $ time mpiexec -machinefile machinefile -n 16 ./pi_mpi
#######################################################
Master node name: master
Enter the number of intervals:
300000
*** Number of processes: 16
Pi Calculado = 3.141592653590720818357340249349
Pi = 3.141592653589793115997963468544
Error relativo = 0.000000000000927702359376780805
real 0m59.547s
user 2m41.094s
sys 0m30.697s
&lt;/code>&lt;/pre>
&lt;p>Como podemos darnos cuenta, el tiempo de ejecución, baja a medida que aumentamos el número de procesadores.&lt;/p>
&lt;div class="alert alert-success">
&lt;div>
Ahora que tenemos nuestro clúster funcionando, desarrollaremos códigos parelelos. Pero como lo hemos mencionado en la &lt;a href="https://fratava.dev/introduccion/#en-que-se-utiliza-el-computo-de-alto-rendimiento">introducción&lt;/a>, podemos utilizar nuestro clúster para diversas tareas.
&lt;/div>
&lt;/div></description></item></channel></rss>