49 lines
		
	
	
		
			913 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			49 lines
		
	
	
		
			913 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | :- use_module(library(lam_mpi)). | ||
|  | 
 | ||
|  | :- initialization(main). | ||
|  | 
 | ||
|  | main :- | ||
|  |        mpi_init, | ||
|  |        mpi_comm_size(2), | ||
|  |        mpi_comm_rank(Rank), | ||
|  |        do_comm(Rank), | ||
|  |        mpi_finalize. | ||
|  | 
 | ||
|  | do_comm(0) :- | ||
|  | 	   between(1,10,I), | ||
|  | 	   NI is I*10, | ||
|  | 	   gen_list(NI,List), | ||
|  | 	   mpi_isend(List, 1, I, Handle), | ||
|  | 	   T =.. [f|List], | ||
|  | 	   mpi_isend(T, 1, I, Handle2), | ||
|  | 	   mpi_wait(Handle2, _), | ||
|  | 	   mpi_wait(Handle, _), | ||
|  | 	   fail. | ||
|  | do_comm(0) :- | ||
|  | 	   between(1,10,I), | ||
|  | 	   NI is 2.3*I, | ||
|  | 	   mpi_send(NI, 1, I), | ||
|  | 	   fail. | ||
|  | do_comm(0). | ||
|  | do_comm(1) :- | ||
|  | 	   between(1,10,I), | ||
|  | 	   mpi_irecv(0, I, Handle), | ||
|  | 	   mpi_irecv(0, I, Handle1), | ||
|  | 	   mpi_wait_recv(Handle1, _, _T), | ||
|  | 	   mpi_wait_recv(Handle, _, _List), | ||
|  | 	   writeln(I:_T), | ||
|  | 	   writeln(I:_List), | ||
|  | 	   fail. | ||
|  | do_comm(1) :- | ||
|  | 	   between(1,10,I), | ||
|  | 	   mpi_recv(0, I, T), | ||
|  | 	   writeln(I:T), | ||
|  | 	   fail. | ||
|  | do_comm(1). | ||
|  | 
 | ||
|  | gen_list(0,[]) :- !. | ||
|  | gen_list(I,I.List) :- | ||
|  |           I1 is I-1, | ||
|  |           gen_list(I1,List). | ||
|  | 
 |