Problemes MPI
Problemes MPI
Facultat de Ciències
Universitat Autònoma de Barcelona
Problemas MPI
1. Describa el efecto de ejecutar los siguientes fragmentos de código, asumiendo que la línea de
comandos es mpirun -np 4 test:
• int V[100];
void main( int argc, char *argv[] )
{
int nproc, rank, i;
MPI_Status s;
2. Paralelice el siguiente código utilizando MPI, de tal forma que cada proceso calcule una parte del
sumatorio:
int main(int argc, char **argv){
int sum = 0;
for(int i=1;i<=1000;i=i+1)
sum = sum + i;
}
El resultado final debe ser calculado por el proceso con rango 0.
3. Escriba un programa donde el proceso con rango 0 lea un dato de tipo entero y donde el resto de
procesos espere dicho dato del proceso anterior y lo reenvíe al siguiente (excepto el último proceso
que no lo envía). [Broadcast en anillo]
Modifique el programa cerrando el anillo, haciendo que cada proceso incremente el valor del entero
recibido y se comunique utilizando comunicación síncrona.
5. Escriba un programa que inicialice dos vectores y lea un escalar. Asuma que la dimensión de los
vectores es múltiplo del número de procesos. Implemente la multiplicación de un escalar por un
vector y el producto punto de vectores. Los vectores deben distribuirse entre todos los procesos y el
escalar debe ser enviado a los mismos. El proceso de rango 0 debe recibir como resultado los
vectores resultantes al aplicar el producto escalar por vector y el resultado del producto punto.
6. Escriba un programa que multiplique de forma distribuida dos matrices A y B NxN (puede asumir
que N es múltiplo del número de procesos o en su caso del número de workers). Pueden plantearse
diferentes alternativas, como por ejemplo un Master/Worker que envía paquetes de una fila y una
columna (o bloques de filas y columnas) a los workers recibiendo el Master (proceso de rango 0) los
elementos de la matriz resultado. Otra posibilidad consiste en enviar la matriz B a todos los procesos
y repartir las filas de la matriz A, de tal forma que cada proceso calcule un bloque de la matriz
resultante. ¿Cuáles son los pros y contras de estas posibilidades? ¿Puede pensar en alguna otra
posibilidad más eficiente?