4
5:- use_module(library(lam_mpi)). 6
7
8main :-
9 mpi_init,
10 mpi_comm_rank(Rank),
11 do_comm(Rank),
12 mpi_finalize.
13
14do_comm(0) :-
15 between(1,10,I),
16 NI is I*10,
17 gen_list(NI,List),
18 mpi_isend(List, 1, I, Handle),
19 T =.. [f|List],
20 mpi_isend(T, 1, I, Handle2),
21 mpi_wait(Handle2, _),
22 mpi_wait(Handle, _),
23 fail.
24do_comm(0) :-
25 between(1,10,I),
26 NI is 2.3*I,
27 mpi_send(NI, 1, I),
28 fail.
29do_comm(0).
30do_comm(1) :-
31 between(1,10,I),
32 mpi_irecv(0, I, Handle),
33 mpi_irecv(0, I, Handle1),
34 mpi_wait_recv(Handle1, _, _T),
35 mpi_wait_recv(Handle, _, _List),
36 writeln(I:_T),
37 writeln(I:_List),
38 fail.
39do_comm(1) :-
40 between(1,10,I),
41 mpi_recv(0, I, T),
42 writeln(I:T),
43 fail.
44do_comm(1).
45
46gen_list(0,[]) :- !.
47gen_list(I,[I|List]) :-
48 I1 is I-1,
49 gen_list(I1,List).
50
51:-main,halt.