Advertisement
Hinski2

Untitled

May 24th, 2024
13
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.71 KB | None | 0 0
  1. # zad4
  2.  
  3. ---
  4.  
  5. `loop interchange` - technika optymalizacji, która polega na zamianie kolejności zagnieżdżonych pętli
  6. `loop fusion` - optymalizacja, która polega na łączeniu dwóch lub więcej pętli, które mają tę samą strukturę iteracyjną
  7. `usuwanie zmiennych indukcyjnych` - polega na usunięciu lub zastąpieniu zmiennych indukcyjnych w pętlach
  8. `rematerialization` - optymalizaja polegająca na ponownym obliczeniu wartości zmiennej zamiast jej przechowywania w rejestrze lub pamięci
  9.  
  10. #### kod początkowy:
  11. ```c
  12. void compute2(long *a, long *b, long k) {
  13. long n = 1 << k; // n = 2 ^ k
  14.  
  15. /*
  16. x x x x x
  17. x x x x x
  18. x x x x x
  19. x x x x x
  20. x x x x x
  21. */
  22.  
  23.  
  24. for (long i = 0; i < n; i++)
  25. a[i * n] = a[i] = 0; // tutaj czyścimy pierwszy wiersz i pierwszą kolumne
  26.  
  27. /*
  28. 0 0 0 0 0
  29. 0 x x x x
  30. 0 x x x x
  31. 0 x x x x
  32. 0 x x x x
  33. */
  34.  
  35. for (long i = 1; i < n; i++)
  36. for (long j = 1; j < n; j++)
  37. a[j * n + i] = i * j; // tutaj ustawiamy macierz z pominięciem pierwszej kolumny i wiersza
  38.  
  39. /*
  40. 0 0 0 0 0
  41. 0 1 2 3 4
  42. 0 2 4 6 8
  43. 0 3 6 9 12
  44. 0 4 8 12 16
  45. */
  46.  
  47. for (long i = 1; i < n; i++)
  48. for (long j = 1; j < n; j++)
  49. b[i * n + j] = a[i * n + j] + a[(i - 1) * n + (j - 1)];
  50.  
  51. /*
  52. 0 0 0 0 0 0 0 0 0 0
  53. 0 1 2 3 4 0 0 0 0 0
  54. 0 2 4 6 8 + 0 0 1 2 3
  55. 0 3 6 9 12 0 0 2 4 6
  56. 0 4 8 12 16 0 0 3 6 9
  57. */
  58. }
  59. ```
  60.  
  61. #### usuwanie zmiennych indukcyjnych dla środkowej pętli
  62. ```c
  63. void compute2(long *a, long *b, long k) {
  64. long n = 1 << k; // n = 2 ^ k
  65. for (long i = 0; i < n; i++)
  66. a[i * n] = a[i] = 0;
  67.  
  68. for (long i = 1; i < n; i++)
  69. for (long j = 1; j < n; j++)
  70. a[i * n + j] = i * j;
  71.  
  72. for (long i = 1; i < n; i++)
  73. for (long j = 1; j < n; j++)
  74. b[i * n + j] = a[i * n + j] + a[(i - 1) * n + (j - 1)];
  75. }
  76. ```
  77.  
  78. #### loop fusion dla drugiej i trzeciej pętli
  79. ```c
  80. void compute2(long *a, long *b, long k) {
  81. long n = 1 << k; // n = 2 ^ k
  82. for (long i = 0; i < n; i++)
  83. a[i * n] = a[i] = 0;
  84.  
  85. for (long i = 1; i < n; i++)
  86. for (long j = 1; j < n; j++){
  87. a[i * n + j] = i * j;
  88. b[i * n + j] = a[i * n + j] + a[(i - 1) * n + (j - 1)];
  89. }
  90. }
  91. ```
  92.  
  93. #### dodanie dodatkowych zmiennych tak by nie liczyć tych samych żeczy
  94. ```c
  95. void compute2(long *a, long *b, long k) {
  96. long n = 1 << k;
  97. long itr1 = 0; // oddanie pierwszego iteratora
  98.  
  99. for (long i = 0; i < n; i++){
  100. a[itr1] = a[i] = 0;
  101. itr1 += n;
  102. }
  103.  
  104. itr1 = n + 1; //ustawienie itr1 na odpowiednie miejsce
  105. long itr2 = 0; // odanie drugiego iteratora
  106.  
  107. for (long i = 1; i < n; i++){
  108. for (long j = 1; j < n; j++){
  109. a[itr1] = i * j;
  110. b[itr1] = a[itr1] + a[itr2];
  111. itr1++;
  112. itr2++;
  113. }
  114.  
  115. // przejście do następnej lini
  116. itr1++;
  117. itr2++;
  118. }
  119. }
  120. ```
  121.  
  122. #### strenght reduction dla i * j
  123. ```c
  124. void compute2(long *a, long *b, long k) {
  125. long n = 1 << k;
  126. long itr1 = 0;
  127.  
  128. for (long i = 0; i < n; i++){
  129. a[itr1] = a[i] = 0;
  130. itr1 += n;
  131. }
  132.  
  133. itr1 = n + 1;
  134. long itr2 = 0;
  135. long val = 0; //dodanie zmiennej pomocniczej
  136.  
  137. for (long i = 1; i < n; i++){
  138. val = i;
  139. for (long j = 1; j < n; j++){
  140. a[itr1] = val;
  141. val += i;
  142.  
  143. b[itr1] = a[itr1] + a[itr2];
  144. itr1++;
  145. itr2++;
  146. }
  147.  
  148. // przejście do następnej lini
  149. itr1++;
  150. itr2++;
  151. }
  152. }
  153. ```
  154.  
  155.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement