лельный алгорітм4 процесса8 процессовВремя, сУскореніе 1Ускореніе 2Время, сУскореніе 1Ускореніе 20,0000540,0555560,129630,0184940,0001620,0003790,0000610,573770,2950820,0361190,0009690,0004980,0861173,7853040,0177430,0338279,6366510,0451710,09065316,046210,0327950,09273515,685950,0320590,20197815,708060,0211460,16774918,913270,0254610,35511915,740340,0171770,22848224,464480,0266980,54179916,47110,0156390,28510531,300850,029719
У таблиці 4.2 Прискорення 1 відповідає значенню прискорення часу виконання паралельного алгоритму щодо практично отриманого часу виконання послідовного алгоритму, а Прискорення 2 - Прискорення, взяте в порівнянні з часом роботи послідовного алгоритму при використанні в ньому стандартних бібліотек.
Висновок:
. У ході лабораторної роботи були розроблені послідовний і паралельний алгоритми для сортування даних.
. При використанні стандартних бібліотек час обчислення алгоритму значно скорочується.
Індивідуальне завдання.
Формулювання:
Дана матриця випадкових чисел (рівномірно розподілених на інтервалі [0, r], де r - параметр, переданий у функцію), розміру N * N. Відсортувати рядка матриці в порядку убування суми елементів рядків.
Код програми:
# include lt; stdio.h gt; #include lt; stdlib.h gt; #include lt; time.h gt; #include lt; math.h gt; #include lt; mpi.h gt; #define N 5 int A [N] [N]; int B [N] [N]; void fill_matrix () {int i, j; srand (time (NULL)); for (i=0; i lt; N; i ++) for (j=0; j lt; N; j ++) A [i] [j]=rand ()% 30; } Void print_matrix () {int i, j; for (i=0; i lt; N; i ++) {for (j=0; j lt; N; j ++) printf (% d raquo ;, A [i] [j]); printf ( n ); }} Int main (int argc, char * argv []) {int r, i, j, k, temp, temp1; int D [N]; MPI_Status st; MPI_Datatype typ; MPI_Init ( amp; argc, amp; argv); MPI_Comm_rank (MPI_COMM_WORLD, amp; r); if (r == 0) {fill_matrix (); printf ( n Source: n ); print_matrix (); printf ( n ); for (i=0; i lt; N; i ++) {for (j=0; j lt; (N); j ++) {B [i] [j]=A [i] [j]; }} MPI_Barrier (MPI_COMM_WORLD); MPI_Send (A, N * N, MPI_INT, 1, 0, MPI_COMM_WORLD); } Else if (r == 1) {MPI_Barrier (MPI_COMM_WORLD); MPI_Recv (B, N * N, MPI_INT, 0, 0, MPI_COMM_WORLD, amp; st); for (i=0; i lt; N; i ++) {D [i]=0; for (j=0; j lt; (N); j ++) {D [i]=D [i] + B [i] [j]; }} For (i=0; i lt; N; i ++) {printf (% d raquo ;, D [i]); printf ( n ); } For (i=0; i lt; N - 1; i ++) {for (k=i + 1; k lt; N; k ++) {for (j=0; j lt; N; j ++) {if (D [ i] lt; D [k]) {temp=D [i]; D [i]=D [k]; D [k]=temp; temp1=B [i] [j]; B [i] [j]=B [k] [j]; B [k] [j]=temp1; }}}} Printf ( n ); printf ( n Otsortirovannaya: n ); for (i=0; i lt; N; i ++) {for (j=0; j lt; N; j ++) printf (% d raquo ;, B [i] [j]); printf ( n ); }} MPI_Finalize (); return 0; }
Результат роботи програми:
Висновок: У ході проробленої роботи був розроблений алгоритм для сортування даних. Порахували суму елементів рядків, а потім відсортували матрицю спаданням цієї суми елементів.