pascalabcnet/InstallerSamples/OMPSamples/Hanoi.pas

35 lines
1.2 KiB
ObjectPascal
Raw Normal View History

//Демонстрация использования параллельных секций на примере задачи о ханойских башнях
// Вывод решения закомментирован, так как он занимает большую часть времени
2015-05-14 22:35:07 +03:00
//параллельная процедура
2015-05-14 22:35:07 +03:00
procedure MovePiramidParallel(n: integer; f, t, w: integer);
begin
if n = 0 then
exit;
{$omp parallel sections}
begin
MovePiramidParallel(n - 1, f, w, t);
//writelnFormat('Переложить диск с {0} на {1}', f, t);
2015-05-14 22:35:07 +03:00
MovePiramidParallel(n - 1, w, t, f);
end;
end;
//последовательная процедура
2015-05-14 22:35:07 +03:00
procedure MovePiramid(n: integer; f, t, w: integer);
begin
if n = 0 then
exit;
MovePiramid(n - 1, f, w, t);
//writelnFormat('Переложить диск с {0} на {1}', f, t);
2015-05-14 22:35:07 +03:00
MovePiramid(n - 1, w, t, f);
end;
begin
var m0 := Milliseconds;
MovePiramid(27, 1, 2, 3);
writeln('Последовательное выполнение: ', Milliseconds - m0, 'ms');
2015-05-14 22:35:07 +03:00
var m1 := Milliseconds;
MovePiramidParallel(27, 1, 2, 3);
writeln('Параллельное выполнение: ', Milliseconds - m1, 'ms');
2015-05-14 22:35:07 +03:00
end.