Статья: Распределенные вычисления на 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, не используются, процессы с такими номерами будут простаивать.

К-во Просмотров: 394
Бесплатно скачать Статья: Распределенные вычисления на FreePascal под Windows