Статья: Распределенные вычисления на FreePascal под Windows
function f( x : double) : double;
begin
f := sqr(x);
end;
begin
MPI_Init(argc,argv);
teg := 0;
MPI_Comm_size(MPI_COMM_WORLD, numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, myid);
for i := 0 to num do
case myid of
0:
if i mod 2 = 0 then arr[i] := f(1.0*i)
else
begin
MPI_Recv(@x,1,MPI_DOUBLE,1,teg,MPI_COMM_WORLD,status);
arr[i] := x
end;
1:
if i mod 2 = 1 then
begin
z := f(1.0*i);
MPI_Send(@z,1,MPI_DOUBLE,0,teg,MPI_COMM_WORLD);
end;
end; // case statement
if myid = 0 then for i := 0 to num do writeln(i,' ',arr[i]);
MPI_Finalize;
end.
Формируется массив заданного числа элементов так, что элементы с четными номерами рассчитывает процесс с myid=0, а нечетными — с myid=1. Конечно, вместо функции sqr может стоять любая другая. Программа написана, конечно же, в расчете на то, что процессов будет всего два. Поскольку значения myid, отличные от 0 и 1, не используются, процессы с такими номерами будут простаивать.