Форум программистов, компьютерный форум CyberForum.ru

Распараллеливание процесса путем использования алгоритма четно-нечетных перестановок. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ввод без отображения http://www.cyberforum.ru/cpp/thread58438.html
Как сделать ввод через " cin >> ", но чтобы вводимые значения(строка(char s)) не отображались??? Добавлено через 28 секунд Если " cin >> " не подходит то можно что-то другое!
C++ Лабораторная C++ Ребята нужна помощь 17 вариант программа... http://www.cyberforum.ru/cpp/thread58428.html
Проблема со скачиванием http-страницы C++
Возможно, что вопрос не к программистам, а к тем, кто разбирается в протоколе http, но для начала попробую здесь Когда-то я нашёл статью о том, как программно скачивать страницы - http://www.rsdn.ru/article/inet/wininet.xml Это дело вполне приемлимо работает. Но сейчас столкнулся с тем, что с некоторых страниц вместо текстовой инфы скачивается какой-то бинарный контент. В аттаче находится...
Записная книжка C++
Помогите пожалуйста доделать записную книжку. Там суть такая что при запуске читаются все файлы в мультимап и в мап. Дальше потом обрабатываются комбобоксы чтобы выбирать кафедру->Group->студент и потом при выбирании студента показывается его данные в формах. Можно еще поставить опции удаления,редактирования,добавления студента. А при закрытии файла все должно считыватся с массивов и...
C++ Найти разность квадратов матриц http://www.cyberforum.ru/cpp/thread57540.html
Даны 2 матрицы А и В найти разность их квадратов
C++ exe in *jpg можно и это осущиствить?чтобы у проги был формат другой,напр jpg,mp3,doc? подробнее

Показать сообщение отдельно
Артин
2 / 2 / 1
Регистрация: 27.06.2008
Сообщений: 29

Распараллеливание процесса путем использования алгоритма четно-нечетных перестановок. - C++

23.10.2009, 20:11. Просмотров 1408. Ответов 0
Метки (Все метки)

Здравствуйте. Необходимо в среде Turbo C на вычислительном кластере под Linux с использованием MPI распараллелить глупую сортировку массива с использованием алгоритма чётно-нечётных перестановок. Программа должна выводить время, затраченное на выполнение задачи в качестве результата. Так же прога должна корректно выполнятся на 1м, 5 и 10 компьютерах.
Собственно доступ к кластеру имеется раз в неделю и менее чем на час. Я составил программу согласно алгоритму, но она не работает - виснет.

Алгоритм - http://www.software.unn.ru/cluster/c...work=4&topic=7

Вот собственно код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# include <mpi.h>
# include <time.h>
# include <stdio.h>
# include <stdlib.h>
 
int n = 3000;
 
void cremas(long mas[]) {
    int i;
    for(i = 0; i < n; i++)
       mas[i] = random()/256;
}
 
void outmas(long mas[]) {
    int i;
    for(i = 0; i < n; i++)
       printf("%5.d", mas[i]);
}
 
void sort(long mas[10][3000], int g, int k, int l) {
    int i = k, tmp;
    while (i < l-1) {
      if (mas[g][i+1] < mas[g][i]) {
         tmp = mas[g][i];
         mas[g][i] = mas[g][i+1];
         mas[g][i+1] = tmp;
         i = 0;
      }
      else i++;
       }
}
 
int main(int argc, char **argv) {
    long t0, t1, mat[3000], inmat[3000], inmat2[10][1500];
    int i, j, l, k1, k2, source, tag = 1, rank, num;
    MPI_Status stat;
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &num);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    if (rank == 0) {
       t0 = clock();
       cremas(mat);
       //outmas(mat);
       if (num > 4) {
          for (i = 1; i < num; i++)
              MPI_Send(mat, n, MPI_INT, i, tag, MPI_COMM_WORLD);
          k1 = k2 = 0;
          for (i = 1; i < num; i++) {
              MPI_Recv(inmat, n, MPI_INT, i, tag, MPI_COMM_WORLD, &stat);
              for (j = 0; j < n/(num-1); j++) mat[i*n/(num-1)+j] = inmat[j];
          }
       }
       else sort(mat, 0, 0, n);
       //outmas(mat);
       t1 = clock() - t0;
       printf("\nProc's - %d, Time - %i mcs\n", num, t1);
    }
    for (i = 1; i < num; i++) if (rank == i) {
         source = 0;
         MPI_Recv(inmat, n, MPI_INT, source, tag, MPI_COMM_WORLD, &stat);
         for (j = 0; j < n/num; j++) inmat2[i][j] = inmat[i*n/num+j];
         sort(inmat2, i, 0, n/(num-1)); 
    }
    for (j = 0; j < num-1; j++)
        for (i = 0; i < num-1; i++) if (rank == i+1) {
            if (j % 2 == i % 2) source = i+2;
            else source = i;
            if ((source > 0)&&(source < num)) {
               for (l = 0; l < n/(num-1); l++) inmat[l] = inmat2[i][l];
               MPI_Send(inmat, n, MPI_INT, source, tag, MPI_COMM_WORLD);
               MPI_Recv(mat, n, MPI_INT, source, tag, MPI_COMM_WORLD, &stat);
               for (l = 0; l < n/(num-1); l++) inmat2[i][n/(num-1)+l] = mat[l];
               sort(inmat2, i, 0, 2*n/(num-1));
               if (j % 2 != i % 2)
                  for (l = 0; l < n/(num-1); l++) inmat2[i][l] = inmat2[i][n/(num-1)+l];
               } 
           }
    for (i = 0; i < num; i++) if (rank == (i+1)) {
        for (l = 0; l < n/(num-1); l++) inmat[l] = inmat2[i][l];
        MPI_Send(inmat, n, MPI_INT, 0, tag, MPI_COMM_WORLD); 
    }
    MPI_Finalize();
}
Люди, хорошо знающие MPI подскажите пожалуйста что не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru