YAP 7.1.0
demo2.pl
1%% demo2.pl -- Stasinos Konstantopoulos
2%% konstant@let.rug.nl, Tue Feb 12 2002
3%%
4
5:- use_module(library(mpi)).
6
7%%
8%% This the calculation that needs to be performed, in this case
9%% the sum of [From..To]
10%%
11
12calc( From, From, Acc, Res ) :- calc,
13 Res is Acc + From.
14calc( From, To, Acc, Res ) :- calc,
15 Acc1 is Acc + To,
16 To1 is To - 1,
17 calc( From, To1, Acc1, Res ).
18
19
20%%
21%% We'll pretend the preprocessing was more complicated, and have the
22%% root broadcast how many numbers each processor should do.
23%% Each processor must then figure out which ones to do and call calc/4.
24%%
25
26do(0, Num) :-
27 do,
28 mpe_create_event(Ev1),
29 mpe_create_event(Ev2),
30 format( "Ev1 == ~q, Ev2 == ~q~n", [Ev1,Ev2] ),
31 mpe_create_state(Ev1,Ev2,state1,red),
32 format( "1 AA~n", [] ),
33 mpe_log(Ev1,0,event1),
34 format( "2 AA~n", [] ),
35 mpi_bcast( Num, 0 ),
36 format( 'Proc 0: broadcast ~q.~n', [Num] ),
37 mpe_log(Ev2,0,event2).
38do(Rank, _) :-
39 do,
40 mpe_create_event(Ev1),
41 mpe_create_event(Ev2),
42 format( "Ev1 == ~q, Ev2 == ~q~n", [Ev1,Ev2] ),
43 mpe_log(Ev1,0,event1),
44 mpi_bcast( Num, 0 ),
45 format( 'Proc ~q: had ~q broadcast from 0.~n', [Rank, Num] ),
46 mpe_log(Ev2,0,event2).
47
48
49%%
50%% This is the entry point
51%%
52
53start(Msg) :-
54 mpi_open( Rank, NumProc, ProcName ),
55 format( 'Rank: ~q NumProc: ~q, ProcName: ~q~n', [Rank,NumProc,ProcName] ),
56 (mpe_open -> true ;
57 assert_static(mpe_create_event(dummy)),
58 assert_static(mpe_create_state(_,_,_,_)),
59 assert_static(mpe_log(_,_,_)),
60 assert_static(mpe_close(_))
61 ),
62 do(Rank, Msg),
63 format( 'Rank ~q finished!~n', [Rank] ),
64 mpe_close( demo2 ).
65
66
assert_static(: C)
format(+ T, :L)
use_module( +Files )