The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w -I/accounts/darin/current/blib/arch -I/accounts/darin/current/blib/lib

BEGIN { 
	unless (@ARGV) {
		print "1..2\n"; 
		$ret = system("mpirun -np 2 $0 yes");
		print ($ret ? "nok 2\n" : "ok 2\n") ;
		exit;
	}
}


$|=1;
use PDL;
use PDL::Parallel::MPI;

MPI_Init();

$my_rank = MPI_Comm_rank(MPI_COMM_WORLD);
$p = MPI_Comm_size(MPI_COMM_WORLD);

#print "pid = $$, rank = $my_rank\n";
$tag = 0;
if ($my_rank != 0) {
    $message = 31337;
    $dest = 0;
    
    MPI_Send(\$message, 1, MPI_INT, $dest, $tag, MPI_COMM_WORLD);
} else { 
    # my_rank == 0
    for $source (1..$p-1) {
	@status = MPI_Recv(\$message, 1, MPI_INT, $source, $tag, 
			   MPI_COMM_WORLD);	
	
	printf("Recieved: \"%s\" from $source\n", $message);
	printf("Status: (" . (join ', ',@status) . ")\n");
        if($message == 31337) {
	    print "ok 1\n";
        } else {
            print "MESSAGE: $message\nnot ok 1\n";
        }
	# (count,MPI_SOURCE,MPI_TAG,MPI_ERROR)
    }
}

MPI_Finalize();