Está en la página 1de 11

Instituto Tecnológico de Veracruz.

Ingeniería Mecatronica.
Departamento: Metal – Mecánica .

Computo Paralelo
Periodo: AGOSTO DICIEMBRE 2022.

Unidad III.
(Sesión 3.2 )
“Anillo circular”.
Topología: Anillo Circular.

Ejemplo:
La topología de anillo mueve información sobre el cable en una dirección y
es considerada como una topología activa. Las computadoras en la red
retransmiten los paquetes que reciben y los envían a la siguiente
computadora en la red. El acceso al medio de la red es otorgado a una
computadora en particular en la red por un “token”.
Anillo circular.

void main(int argc, char *argv[])


{
int rango;
int nprocs;
int etiqueta = 0;
int destino, fuente, token, trecv;
MPI_Status estado;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rango);

if (rango == 0)
{
destino = 1; fuente = nprocs-1; token = 2;
MPI_Send(&token, 1, MPI_INT, destino, etiqueta, MPI_COMM_WORLD);
MPI_Recv(&trecv, 1, MPI_INT, fuente, etiqueta, MPI_COMM_WORLD, &estado);
printf("Soy %d recibi el siguiente mensaje: %d\n", rango, trecv); fflush(stdout);
}
else
{ destino = rango + 1; fuente = rango - 1;
if (rango == nprocs - 1) destino = 0;
MPI_Recv(&trecv, 1, MPI_INT, fuente, etiqueta, MPI_COMM_WORLD, &estado);
printf("Soy %d, recibí el siguiente mensaje: %d \n", rango, trecv); fflush(stdout); trecv *=2;
MPI_Send(&trecv, 1, MPI_INT, destino, etiqueta, MPI_COMM_WORLD);
}
MPI_Finalize();
}
Instituto Tecnológico de Veracruz.
Ingeniería Mecatronica.
Departamento: Metal – Mecánica .

Computo Paralelo
Periodo: AGOSTO DICIEMBRE 2022.

Unidad III.
(Sesión 3.2 b)
“Integración Numérica”.
Integración Numérica.
Ejemplo.
𝜋

∫ 𝑒 𝑥 sin 𝑥 𝑑𝑥
0

F(x)= exp(x) *sin(x)

0.84254 2.405254 4.109817 5.055273

12.070346
.

MPI_Status estado;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &id);
N = Ns / nprocs;
dx = (b - a) / nprocs;
if (id == 0)
{
sumaT = integral(a, a + dx, N);
for (i = 1; i < nprocs; i++)
{
MPI_Recv(&suma, 1, MPI_DOUBLE, MPI_ANY_SOURCE, etiqueta, MPI_COMM_WORLD, &estado);
printf("recibi de %d el valor de %lf\n", estado.MPI_SOURCE, suma);
sumaT += suma;
}
printf("Soy %d y la suma total es %lf \n", id, sumaT); fflush(stdout);
}
else
{
suma = integral(a + id*dx, a + (id + 1)*dx, N);
MPI_Send(&suma, 1, MPI_DOUBLE, 0, etiqueta, MPI_COMM_WORLD);
}
MPI_Finalize();
Instituto Tecnológico de Veracruz.
Ingeniería Mecatronica.
Departamento: Metal – Mecánica .

Computo Paralelo
Periodo: AGOSTO DICIEMBRE 2022

Unidad III.
(Sesión 3.2 c)
“Conversión: binario-decimal”.
Ejercicio.

Elabore un programa en MPI que simule la conversión de un número del


sistema binario al decimal, empleando para ello una topología de estrella.

Decimal = d1x20 + d2x21 + d3x22 + d4x23 + ….

 
La simulación se realizara bajo la siguiente estrategia: El nodo maestro
contará con un arreglo unidimensional representante de la cantidad binaria,
conteniendo en cada elemento un digito binario (0 o 1) este nodo maestro
enviara un digito binario del arreglo a cada uno de los nodos esclavos
(existirán tantos nodos esclavos como dígitos en el arreglo). Los nodos
recibirán el digito binario y de acuerdo a su identificador (rango: 1,2,3,4…)
regresara el valor correspondiente de acuerdo a la posición del digito
recibido y la base del sistema binario ( ver ejemplo ilustrado).
Ejemplo:

Por ejemplo si la cantidad binaria es:


 
001010
 
el nodo 1 recibe 0, y regresa 0x20
el nodo 2 recibe 1, y regresa 1x21
el nodo 3 recibe 0.... y regresa 0x22
el nodo 4 recibe 1, y regresa 1x23
el nodo 5 recibe 0, y regresa 0x24
el nodo 6 recibe 0.... y regresa 0x25
 
el nodo maestro (0) se encargara se sumar los valores recibidos:

10
Fin.

Gracias .

También podría gustarte