Resolviendo ejercicios de MPI(y tambien en erlang)
Como tarea en un grupo de la facultad del que formo parte tenemos que resolver ejercicios de MPI, como yo algo de idea de MPI tengo decidí también resolverlos en erlang para seguir aprendiendo mas de este lenguaje, acá van los enunciados del primer ejercicio y las resoluciones de ambos.
Write a program that uses MPI and has each MPI process print
Hello world from process i of nusing the rank in MPI_COMM_WORLD for i and the size of MPI_COMM_WORLD for n. You can assume that all processes support output for this example.
el ejercicio en C lo pueden ver en el post anterior así que acá pego el de erlang nomas
-module(ej1).
-export([run/1]).
run(Total, Total) -> ok;
run(Count, Total) ->
spawn(fun() -> salute(Total) end),
run(Count + 1, Total).
run(Total) -> run(0, Total).
salute(Total) ->
io:format("Hello world from ~p of ~p~n", [self(), Total]).
como en erlang no hay una forma de saber cuantos procesos totales hay dando vueltas (o al menos no es tan estatico como MPI) decidi pasarle el total y imprimir el PID.
para correrlo y ver la salida la forma facil es:
$ erl ej1.erl
Erlang (BEAM) emulator version 5.6.5 [source] [async-threads:0] [kernel-poll:false]
Eshell V5.6.5 (abort with ^G)
1> c(ej1).
{ok,ej1}
2> ej1:run(4).
Hello world from of 4
Hello world from of 4
Hello world from of 4
Hello world from of 4
ok
3>
todo en orden, vamos a por el segundo
como nota al margen, donde hice el pattern matching de
run(Total, Total) -> ok;
podria haber hecho
run(0, _Total) -> ok;
y contar al reves en
run(Count + 1, Total).
por
run(Count - 1, Total).
pero me parecio mas simpatico contar para adelante :P