pascalabcnet/InstallerSamples/Experimental/OMPSamples/SqrSinArrays.pas

47 lines
1.2 KiB
ObjectPascal
Raw Permalink Normal View History

// демонстрация работы параллельного for
//заполнение массива
2015-05-14 22:35:07 +03:00
procedure FillRandArr(A: array of real);
begin
Randomize;
for var i := 0 to A.Length - 1 do
a[i] := Random(1000);
end;
// вывод массива
2015-05-14 22:35:07 +03:00
procedure printArr(A: array of real);
begin
for var i := 0 to A.Length - 1 do
writeln(a[i]);
end;
// Последовательное вычисление квадратов синусов
2015-05-14 22:35:07 +03:00
procedure SqrSinArr(A: array of real; var C: array of real);
begin
for var i := 0 to A.Length - 1 do
C[i] := sqr(sin(A[i]));
end;
// Параллельное вычисление квадратов синусов
2015-05-14 22:35:07 +03:00
procedure SqrSinArrParallel(A: array of real; var C: array of real);
begin
{$omp parallel for}
for var i := 0 to A.Length - 1 do
C[i] := sqr(sin(A[i]));
end;
begin
var A: array of real;
var C: array of real;
SetLength(A, 10000000);
SetLength(C, A.Length);
FillRandArr(A);
var m0 := Milliseconds;
SqrSinArrParallel(A, C);
writeln('Параллельное выполнение: ', Milliseconds - m0, 'ms');
2015-05-14 22:35:07 +03:00
m0 := Milliseconds;
SqrSinArr(A, C);
writeln('Последовательное выполнение: ', Milliseconds - m0, 'ms');
2015-05-14 22:35:07 +03:00
end.