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

принцип геометрического параллелизма на MPI - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Обнулить элементы массива, расположенные между его минимальным и максимальным элементами http://www.cyberforum.ru/cpp-beginners/thread394145.html
Дан массив размера N. Обнулить элементы массива, расположенные между его минимальным и максимальным элементами (не включая мини-мальный и максимальный элементы). На одномерные че та не так.... помогите плс) Добавлено через 1 минуту #include <iostream.h>
C++ Создать новый файл, содержащий элементы исходного файла в обратном порядке Дан файл целых чисел. Создать новый файл, содержащий те же элемен-ты, что и исходный файл, но в обратном порядке. помогите буду очень при очень благодарен.... Добавлено через 3 минуты #include <iostream.h> http://www.cyberforum.ru/cpp-beginners/thread394141.html
Конфигурационный файл C++
Здравствуйте. В общем, стоит задача в мою программу добавить конфигурационный файл. Пока необходимо считать из него два параметра: 1) №порта 2) dns-имя сервера Соответственно, первый параметр число, второй- строка (или указатель на char?). При этом сделать это надо без использования Qt и каких-либо других сторонних библиотек. Чем готовее будет код, тем лучше. Спасибо большое.
C++ Задача на С++
Вот щас сижу смотрю на эту задачу и понимаю, что нехер было в выходные балду пинать ибо до завтро я ее точно не осилю, видимо слишком тяжело для меня изучение языка С. Вот решил обратиться к вам за помощью добрые люд, быть может для кого-то не составит труда решить следующею задачку: Дана матрица А(5,4) 1.Найти новый одномерный массив В из сумм эл-в каждой строки матрицы А. 2.Найти мах-й...
C++ Слова кончающееся на букву d http://www.cyberforum.ru/cpp-beginners/thread394131.html
нужно вывести все слова, которые кончаются на букву d int j,a,x;int i=0; char s,s1; cin.getline(s,255); while(s!='\0'){a=0; while(s==' ') i++;a=0; if(s!=' ') {while(s!=' ') {i++;a++;
C++ Цикл while, пару несложных вопросов Есть у меня две блок-схемы по ним надо написать программу в первой у меня идёт цикл while, "если да" то выполняется два оператора присваивания, "если нет" то другой оператор присваивания Мне интересно как можно записать в цикле while "если нет"? "если да" я знаю например: while (a>b) { a=3b+c; // если да то вот два оператора 4b=6c; } подробнее

Показать сообщение отдельно
Pain'ka
 Аватар для Pain'ka
1 / 1 / 0
Регистрация: 23.11.2011
Сообщений: 54
28.11.2011, 19:50     принцип геометрического параллелизма на MPI
не знаю, в какой отдел обращаться с этим вопросом, решила сюда.
необходимо распараллелить такую задачку:
y1=a[0][0] + a[0][1]*x1 + a[0][2]*x2 + a[0][3]*x3;
y2=a[1][0] + a[1][1]*x1 + a[1][2]*x2 + a[1][3]*x3;
y3=a[2][0] + a[2][1]*x1 + a[2][2]*x2 + a[2][3]*x3;
y4=a[3][0] + a[3][1]*x1 + a[3][2]*x2 + a[3][3]*x3;

подобрать отпимальные значения х1, х2, х3.
0< = x1<= 2
0<= x2 <=5
0<= x3 <= 20

критерий оптимизации: у4 минимальный, при этом 1050<= y1 <=1110, 20<= y2 <=40, 4<= y3 <=8

вот то что у меня получилось, но без распараллеливания. Буду рада любой помощи)))

// consist.cpp : Defines the entry point for the console application.
//

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
#include "stdafx.h"
#include <mpi.h>
#include <conio.h>
#include <iostream>
 
using namespace std;
 
 
int main(int argc, char** argv)
{   
    int size, rank;
 
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 
    double x1, x2, x3, x4, y1, y2, y3, y4;
 
    double a[4][4]={1030, 4, 5, 9,
                    20, -5, 10, 10,
                    1, 0.5, -0.5, 2,
                    1.2, 0.1, 0.5, 1.2 };
    double b[3][2]={1050, 1110,
                    20, 40, 
                    4, 8};
 
    double *mas=new double[4];
    //mas[0]=1; mas[1]=2; mas[2]=3; mas[3]=4;
    double min=999999;
 
    for(x1=0; x1<=2; x1=x1+2/(rank+1))
        for(x2=0; x2<=5; x2=x2+5/(rank+1))
            for(x3=0; x3<=20; x3=x3+20/(rank+1))
            {
 
                y1=a[0][0]  + a[0][1]*x1 + a[0][2]*x2 + a[0][3]*x3;
                
                if((b[0][0]<=y1) && (y1<=b[0][1]))
                {y2=a[1][0] + a[1][1]*x1 + a[1][2]*x2 + a[1][3]*x3;
                cout<<y2<<endl;
                }
                else 
                    continue;
                
                if((b[1][0]<=y2) &&( y2<=b[1][1]))
                {y3=a[2][0] + a[2][1]*x1 + a[2][2]*x2 + a[2][3]*x3;
                //cout<<y3<<endl;
                }
                else continue;
                
                        if((b[2][0]<=y3) && (y3<=b[2][1]))
                        {{y4=a[3][0] + a[3][1]*x1 + a[3][2]*x2 + a[3][3]*x3;
                        //cout<<y4<<endl;
                        }
                        if(y4<min){
                            min=y4;
                        mas[0]=x1; mas[1]=x2; mas[2]=x3;mas[3]=y4;
                        cout<<x1<<"  "<<x2<<"  "<<y4<<endl;
                        }
                
                }else continue;
            }
 
            cout<<rank<<endl;
        for(int i=0; i<4;i++)
        {cout<<endl;
        printf("%f ", mas[i]);}
        delete[]mas;
    MPI_Finalize();
    cout<<"bye"<<endl;
    //getch();
 
    return 0;
}
 Комментарий модератора 
Код выделяем тегами!


Добавлено через 15 минут
Упс)))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru