open Printf open Mpi (* comm_size, comm_rank *) let size = comm_size comm_world let myrank = comm_rank comm_world let print_array array = printf "myrank is %d:\n" myrank; for i=1 to (Array.length array) do print_int array.(i-1);print_string ";" done; print_newline () let print_farray array = printf "myrank is %d:\n" myrank; for i=1 to (Array.length array) do print_float array.(i-1);print_string ";" done; print_newline () type record_example = { re:int; im:int } (* record *) type variant_example1 = Positive | Negative (* simple variant *) type variant_example2 = Data1 of int * int * int | Data2 of float * float * float (* variant with value *) let fun1 arg = arg+1 class point(x_init,y_init) = object val mutable x = x_init; val mutable y = y_init; method get_x = x; method get_y = y; method incr_x = x <- x+1; method incr_y = y <- y+1; end exception Exception let _ = printf "broadcast test: rank:%d, data:%d\n" myrank (broadcast 1 0 comm_world); printf "broadcast test: rank:%d, data:%f\n" myrank (broadcast 1.0 0 comm_world); let a = broadcast {re=1;im=2} 0 comm_world in begin printf "broadcast test: rank:%d, data:re=%d,=im%d\n" myrank a.re a.im end; if (broadcast Positive 0 comm_world)=Positive then printf "broadcast test: rank:%d, True\n" myrank; let a = broadcast (Data1(3,2,1)) 0 comm_world in begin match a with Data1(x,y,z) -> printf "rank:%d Data1:%d,%d,%d\n" myrank x y z | Data2(x,y,z) -> printf "rank:%d Data2:%f,%f,%f\n" myrank x y z end; let a = broadcast fun1 0 comm_world in begin printf "rank:%d , %d\n" myrank (a 1) end; let a = broadcast (new point (2,4)) 0 comm_world in begin printf "rank:%d object x:%d,y:%d\n" myrank a#get_x a#get_y; a#incr_x; a#incr_x; a#incr_y; printf "rank:%d object x:%d,y:%d\n" myrank a#get_x a#get_y end; if myrank=0 then print_newline(); printf "rank:%d ,data: %d\n" myrank (broadcast_int 1 0 comm_world); printf "rank:%d ,data: %f\n" myrank (broadcast_float 2.1 0 comm_world); if myrank=0 then (broadcast_int_array [|1;2;3|] 0 comm_world) else begin let a = Array.make 3 0 in broadcast_int_array a 0 comm_world; print_array a; end; if myrank=0 then (broadcast_float_array [|1.3;2.4;5.1|] 0 comm_world) else begin let a = Array.make 3 0.0 in broadcast_float_array a 0 comm_world; print_farray a; end; printf "rank:%d, time is %f\n" myrank (wtime())