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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
KToRRy
Сообщений: n/a
#1

рапараллелить процесс - C++

28.05.2013, 17:03. Просмотров 181. Ответов 0
Метки нет (Все метки)

добрый день.

Помогите пожалуйста...

мне надо на определенном промежутке найти наиболее подходящее значение параметра. для оценивания параметра используется сравнение посчитанного значения со взятым из статистики. перебрать значения надо для 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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
    int main(int argc, char **argv)
    {
    int rank, size, type=99;
 
    MPI_Status status;
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 
    if(rank>0)
    {
        double e[11];
        double ee[11]={0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01};
        double k1, k2, k3, k4, k5, k6, n0;
 
        for(int i=1; i<size; i++)
        {
            for(k[0]=0.6+(i-1)*(0.4/(size-1)); k[0]<=0.6+i*(0.4/(size-1)); k[0]+=0.02) // для коэф-та к0 интервал        от 0.6 до 1. он делится на количество процессоров, чтобы считать меньшие интервалы.
                for(k[1]=1+(i-1)*(0.3/(size-1)); k[1]<=1+i*(0.3/(size-1)); k[1]+=0.02)
                    for(k[2]=1+(i-1)*(0.3/(size-1)); k[2]<=1+i*(0.3/(size-1)); k[2]+=0.02)
                        for(k[3]=0.6+(i-1)*(0.4/(size-1)); k[3]<=0.6+i*(0.4/(size-1)); k[3]+=0.02)
                            for(k[4]=0.8+(i-1)*(0.4/(size-1)); k[4]<=0.8+i*(0.4/(size-1)); k[4]+=0.02)
                                for(k[5]=0.6+(i-1)*(0.4/(size-1)); k[5]<=0.6+i*(0.4/(size-1)); k[5]+=0.02)
                                    for(n=0.1+(i-1)*(0.2/(size-1)); n<=0.1+i*(0.2/(size-1)); n+=0.01)
                                    {
                                        while(e[11]>ee[11])
                                        {
                                            for(int t=0; t<11; t++) // пересчет параметров с вызовом из последовательного кода
                                            { for(int i=0; i<6; i++)
                                                  S(i,t);
                                              for (int i=0; i<6; i++)
                                                  LL(i,t);
                                              for (int i=0; i<6; i++)
                                                  Y(i,t);
                                              for (int i=0; i<6; i++)
                                                  VRP1(i,t);
                                            }
                                            for (int t=0; t<11;t++)
                                                e[t]=abs(vrp1[t]-VRP[t]);
                                        }
                                    }
        }
 
         k1=k[0];
         k2=k[1];
         k3=k[2];
         k4=k[3];
         k5=k[4];
         k6=k[5];
         n0=n;
 
         printf("%.2f %.2f %.2f %.2f %.2f %.2f %.2f",k1,k2,k3,k4,k5,k6,n);
 
         for(int i=1;i<size; i++) //передача диспетчеру
         {
             MPI_Send(&k1,1,MPI_DOUBLE, 0, type, MPI_COMM_WORLD);
             MPI_Send(&k2,1,MPI_DOUBLE, 0, type, MPI_COMM_WORLD);
             MPI_Send(&k3,1,MPI_DOUBLE, 0, type, MPI_COMM_WORLD);
             MPI_Send(&k4,1,MPI_DOUBLE, 0, type, MPI_COMM_WORLD);
             MPI_Send(&k5,1,MPI_DOUBLE, 0, type, MPI_COMM_WORLD);
             MPI_Send(&k6,1,MPI_DOUBLE, 0, type, MPI_COMM_WORLD);
         }
    }
    
    if(rank==0)
    {
        double k1, k2, k3, k4, k5, k6, n0;
 
        for (int i=1; i<size;i++) // получение от рабочих процессоров
        {
            MPI_Recv(&k1,1,MPI_DOUBLE, i, type, MPI_COMM_WORLD, &status);
            MPI_Recv(&k2,1,MPI_DOUBLE, i, type, MPI_COMM_WORLD, &status);
            MPI_Recv(&k3,1,MPI_DOUBLE, i, type, MPI_COMM_WORLD, &status);
            MPI_Recv(&k4,1,MPI_DOUBLE, i, type, MPI_COMM_WORLD, &status);
            MPI_Recv(&k5,1,MPI_DOUBLE, i, type, MPI_COMM_WORLD, &status);
            MPI_Recv(&k6,1,MPI_DOUBLE, i, type, MPI_COMM_WORLD, &status);
            MPI_Recv(&n0,1,MPI_DOUBLE, i, type, MPI_COMM_WORLD, &status);
        }
        for(int t=0;t<11;t++) //пересчет
        {
            for(int i=0; i<6; i++)
                S(i,t);
            for (int i=0; i<6; i++)
                LL(i,t);
            for (int i=0; i<6; i++)
                Y(i,t);
            for (int i=0; i<6; i++)
                VRP1(i,t);
        }
 
         printf("%.2f %.2f %.2f %.2f %.2f %.2f %.2f",k1,k2,k3,k4,k5,k6,n);
         printf(" VRP = %.3f", vrp1);
 
         for(int t=0;t<11;t++)
         {
             double e[11];
             e[t]=abs(VRP[t]-vrp1[t]);
             printf("e[t]=%f", e[t]);
         }
    }
 
    MPI_Finalize();
 
    return 0;
 
    }
К сожалению, в настоящее время нет возможности проверить этот код на работоспособность. Подскажите плиз вообще правильный ли ход мысли?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2013, 17:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос рапараллелить процесс (C++):

Процесс А инициализирует массив случайными значениями и записывает их в файл, а затем запускает процесс Б - C++
В универ нужно сделать лабу по выше указанной теме. Мне не нужно чтобы за меня делали - нужен просто совет. Для начала: Задание:...

Есть процесс A и дочерний процесс B, который находит хэндл родительского процесса A. И этот хэндл в разных случаях РАЗНЫЙ! Почему? - C++
Друзья! Вот код A.exe, суть которого просто стать родительским для B.exe и висеть в системе. #include &lt;stdio.h&gt; #include &lt;windows.h&gt;...

Процесс в структуре - C++
Положил Popen в структуру. Как если процесс уничтожен, создать новый и положить в структуру. И еще, как сделать чтобы при инициализации...

Не создается процесс - C++
Вот часть задания: 1. Создать дочерний процесс Child (добавить к рабочей области еще один консольный вид проекта, при создании дочернего...

Не создаётся процесс - C++
решил сделать так как написано сдесь https://msdn.microsoft.com/ru-ru/library/ms682499(v=vs.85).aspx но как только запускаю (что с...

Процесс не закрывается - C++
Проблема на 82ой строчке, второй параметр функции GetMessage(). Так как у меня создается одно окно второй параметр пишу 0. Но если будет...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2013, 17:03
Привет! Вот еще темы с ответами:

Внедрение в процесс - C++
я знаю всего 2 способа как перехватить api dll. 1. это поменять код исполняемой dll. 2. или поменять таблицу импорта в исполняемом...

Циклический процесс - C++
Помогите пожалуйста. Вывести на экран следующую последовательность символов ******** ******* ****** ***** ****** ******* ...

Процесс компиляции - C++
Вопрос из лички перетащу на форум, т.к. другим, возможно, тоже будет интересно 1. Препроцессор ничего в &quot;исполнительный&quot; файл не...

Волновой процесс - C++
Помогите найти исходник алгоритма (волновой процесс) для нахождения минимального маршрута в графе


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru