Advertisement
impressive_i

unrolling loop

Aug 22nd, 2021
1,500
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.13 KB | None | 0 0
  1. program p1;
  2.  
  3. uses crt, Utils;
  4.  
  5. type TArray = array[0..1000000] of integer;
  6.  
  7. procedure initArray(var arr : TArray; N : integer);
  8. begin
  9.     for var i := 0 to N - 1 do
  10.         begin
  11.            arr[i] := random(50); //i + 1;
  12.         end;
  13. end;
  14.  
  15. {
  16. procedure printArray(var arr : TArray; N : integer);
  17. var i : integer;
  18. begin
  19.     for i := 0 to N - 1 do
  20.         begin
  21.            write(' ', arr[i]);
  22.         end;
  23. end;
  24. }
  25. {Код через обычный цикл}
  26. function cicleStandart(a : TArray; N : integer) : integer;
  27. var sum : integer;
  28.       i : integer;
  29. begin
  30.     sum := 0;
  31.     for i := 0 to N - 1 do
  32.         begin
  33.            sum := sum + a[i];
  34.         end;
  35.     result := sum;
  36. end;
  37.  
  38.  
  39. {Код через развернутый цикл}
  40. function cicleExtand(a : TArray; N : integer) : integer;
  41. var sum : integer;
  42.       i : integer;
  43. begin
  44.     sum := 0;
  45.     i := 0;
  46.     while(i < N) do
  47.         begin
  48.            sum := sum + a[i] + a[i+1] + a[i+2] +
  49.                       + a[i+3] + a[i+4] + a[i+5] + a[i+6] + a[i+7];
  50.            i := i + 8;
  51.         end;
  52.     result := sum;
  53. end;
  54.  
  55.  
  56.  
  57. var arr : TArray;
  58.     k : integer;
  59.     N : integer;
  60.     timeBefore : LongInt;
  61.     timeAfter : LongInt;
  62.     CountIteration : integer;
  63.     sum : integer;
  64.  
  65. begin
  66.     //write(' Введите n = '); readln(n);
  67.     N := 1000000;
  68.     initArray(arr, N);
  69.    // printArray(arr, N);
  70.    
  71.     CountIteration := 1000;
  72.    
  73.     timeBefore := Milliseconds ;
  74.     for k := 1 to CountIteration do sum := cicleStandart(arr, N);
  75.     writeln(' Сумма элементов массива через стандартный цикл : ', sum );
  76.     timeAfter := Milliseconds ;
  77.     writeln(' Время выполнения: ', (timeAfter - timeBefore)/1000:1:10, ' секунды' );
  78.  
  79.     timeBefore := Milliseconds;
  80.     for k := 1 to CountIteration do sum := cicleExtand(arr, N);
  81.     writeln(' Сумма элементов массива через развернутый цикл : ', sum );
  82.     timeAfter := Milliseconds;
  83.     writeln(' Время выполнения: ', (timeAfter - timeBefore)/1000:1:10, ' секунды' );
  84.  
  85. end.
  86.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement