Распараллеливание алгоритма сортировки массива, страница 3

// ======================== Сохранение результата ==============================

if (rank != 0)                          // Сохранение проводит нулевой комп

MPI_Send(x,rows,MPI_FLOAT,0,15,MPI_COMM_WORLD);

else                                  

{                                   

t_en = clock();                       // Засекаем время

t_en = t_en - t_st;                 

fp = fopen("_x.txt","w");             // Открываем файл результата

fprintf(fp,"Time: %d.\n",t_en);       // Пишем туда время

fprintf(fp,"%d\n",N);                 //   и размерность

for (i = 0; i < rows; i++)            // Сохраняем свои данные

fprintf(fp,"%f\n",x[i]);

for (rank_k = 1; rank_k < size; rank_k++)

{                                   // Принимаем данные от rank_k

rows_k = (int)(N/size);             //  и сохраняем

if (rank_k < N%size) rows_k++;

MPI_Recv(x,rows_k,MPI_FLOAT,rank_k,15,MPI_COMM_WORLD,&st);

for (i = 0; i < rows_k; i++)      

fprintf(fp,"%f\n",x[i]);

}

fclose(fp);                           // Закрываем файл

}

free(x);                                // Чистим память

MPI_Finalize();                       

return 0;                               // Конец

}

//--------------------------------------------------------------------------4. Тестирование программы:

FPM (время в микросекундах)

Случайные числа

Обратный порядок

1 проц

2

3

1 проц

3

2

2 проц

20

21

2 проц

35

36

3 проц

27

26

3 проц

36

39

4 проц

30

34

4 проц

52

57

5 проц

38

32

5 проц

62

60

6 проц

44

43

6 проц

81

80

7 проц

45

44

7 проц

71

72

8 проц

48

47

8 проц

86

81

RM 600 (время в микросекундах)

Случайные числа

Обратный порядок

1 проц

80000

1 проц

80003

2 проц

135343

2 проц

180334

3 проц

165403

3 проц

213683

4 проц

180345

4 проц

250432

5 проц

204324

5 проц

299841

6 проц

230982

6 проц

340213

7 проц

251954

7 проц

351025

8 проц

243108

8 проц

350001