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

Динамические массивы в MPI - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Параллельное программирование + графика http://www.cyberforum.ru/cpp-beginners/thread1186194.html
Проблема такая: препод сказал написать программу, где будут два квадрата двигаться туда сюда и что бы их прорисовка, движение и т.д. были в одной функции, но выполнялись в разных потоках. пытался с помощью OpenGL и OpenМР но почему то рисуется и передвигается только один можете сказать, что использовать для решения этой задачи? OpenGL+OpenMP void display()
C++ Класс Rectangle графика Добрый вечер, с графикой в С++ ни разу не работал, поэтому прошу писать как можно понятнее Создал класс Rectangle: #include <iostream> #include <stdlib.h> using namespace std; class Rectangle { public: http://www.cyberforum.ru/cpp-beginners/thread1186187.html
Запись структуры и чтение из файла в структуру ( как бы лучше ) C++
Подкиньте идею как лучше записать структуру в файл и обратно из файла в структуру У меня есть мысль: даны 4 элемента вводим их в файл (каждый в строку отдельную),а затем считывая построчно распределять по полям структуры с помощью счётчика 9 допустим 1 в 1 поле, 2 в 2 поле и т.д. затем после ввода в последнее поле сбросить счётчик и заново как бы лучше записал так ofstream...
C++ Программа "Банкомат": выдать произвольную сумму банкнотами разного номинала
Доброго времени суток. Надо сделать методы снятия, пополнения денег с использованием банкнот то бишь в банке есть опред. кол-во банкнот разного номинала(5,10,20,50,100$). При выдаче n-ой суммы денег снимаются разные банкноты и если они закончились нужно вывести это на экран. Так же нужен баланс для каждого пользователя в файл(у меня их 5(но можно добавить)). У меня 2 файла (CVV код и пин-код)....
C++ Вставка одного вектора в другой через один без циклов http://www.cyberforum.ru/cpp-beginners/thread1186157.html
Поставили интересную задачу: вставить элементы одного вектора в другой без использования циклов. Рекурсия считается как цикл. Пользоваться можно for_each. Для вставки элементов нужно, как я понял, пользоваться функцией insert, но она вставляет только в одну позицию. Сказали, что нужно работать через итератор, но как сделать так, чтобы положение вставки менялось? Вот код, если что: #include...
C++ Масштабирование графика функции Здравствуйте. Написал программу, строящую один из трех графиков функции в зависимости от выбора пользователя. Программа работает, графики строятся, но при этом занимают незначительную часть экрана, то есть получаются слишком мелкие. Хотелось бы, чтобы программа автоматически масштабировала график, подгоняя его под размер окна. Ниже приведен код программы #include <stdio.h> #include... подробнее

Показать сообщение отдельно
MatMatRix
 Аватар для MatMatRix
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 24

Динамические массивы в MPI - C++

23.05.2014, 20:18. Просмотров 581. Ответов 0
Метки (Все метки)

Добрый вечер. Столкнулась с такой странностью, когда делала программу, которая с помощью MPI (а именно через операции коллективного обмена) находит ближайшую точку к каждой из тех, которые надо считать из файла: со статическим массивом она у меня работает, а при работе с динамическим массивом выводит такое сообщение:

"unable to read the cmd header on the pmi context, Error = -1
.
Error posting readv, Удаленный хост принудительно разорвал существующее подключение.(10054)
unable to read the cmd header on the pmi context, Error = -1
.
Error posting readv, Удаленный хост принудительно разорвал существующее подключение.(10054)
unable to read the cmd header on the pmi context, Error = -1
.
Error posting readv, Удаленный хост принудительно разорвал существующее подключение.(10054)

job aborted:
rank: node: exit code[: error message]
0: ADMIN-...: 123
1: ADMIN-...: 3: process 1 exited without calling finalize
2: ADMIN-...: 123
"

Код самой программы:

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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <time.h>
#include <mpi.h>
 
using namespace std;
 
float normal_distance(float x1, float y1, float z1, float x2, float y2, float z2)
{
    return sqrt(pow((x2-x1),2)+pow((y2-y1),2)+pow((z2-z1),2));
}
 
int main(int argc, char **argv)
{
    int N, my_rank, size, k;
    float *xord, *yord, *zord, g;
    double starttime;
    fstream filearray;
 
    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD,&size);
    MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
 
    if(my_rank == 0)
    {
        starttime = MPI_Wtime();
 
        char p;
 
        N=0;
        filearray.open("C:\\the_text.txt",ios::in);
        if(!filearray.fail())
        {
            while(!filearray.eof())
            {
                filearray.read(&p,1);
                if(p=='\n') N++;
            }
        }
        filearray.close();
        filearray.clear();
 
        N-=1;
 
        xord = new float[N];
        yord = new float[N];
        zord = new float[N];
 
        int t = 0;
        filearray.open("C:\\the_text.txt",ios::in);
        if(!filearray.fail())
        {
            while(!filearray.eof())
            {
                filearray>>xord[t];
                filearray>>yord[t];
                filearray>>zord[t];
                t++;
            }
        }
 
        filearray.close();
    }
    
    MPI_Bcast(&N,1,MPI_INT,0,MPI_COMM_WORLD);
    k=N/size;
    MPI_Bcast(&k,1,MPI_INT,0,MPI_COMM_WORLD);
 
    MPI_Bcast(xord,N,MPI_FLOAT,0,MPI_COMM_WORLD);
    MPI_Bcast(yord,N,MPI_FLOAT,0,MPI_COMM_WORLD);
    MPI_Bcast(zord,N,MPI_FLOAT,0,MPI_COMM_WORLD);
 
    int *num = new int[2*k];
 
    int p=0;
    int m;
    for(int i=my_rank*k;i<(my_rank+1)*k;i++)
        {
            g=200.0;
            m=0;
            for(int j=0;j<N-1;j++)
            {
                if(i!=j)
                {
                    if(g>normal_distance(xord[i],yord[i],zord[i],xord[j],yord[j],zord[j]))
                    {
                        g=normal_distance(xord[i],yord[i],zord[i],xord[j],yord[j],zord[j]);
                        m=j;
                    }
                }
            }
            num[p]=i;
            p++;
            num[p]=m;
            p++;
        }
 
    int *numb = new int[2*k*size];
    MPI_Gather(num,2*k,MPI_INT,numb,2*k,MPI_INT,0,MPI_COMM_WORLD);
 
    if(my_rank == 0)
    {
        int s=0;
        while(s<2*k*size)
        {
            cout<<numb[s]<<" ";
            s++;
            cout<<numb[s]<<endl;
            s++;
        }
        
        if(N%size != 0){
            int m;
            for(int i=0;i<N%size;i++)
            {
                g=200.0;
                m=0;
                for(int j=0;j<N-1;j++)
                {
                    if(i!=j)
                    {
                        if(g>normal_distance(xord[i],yord[i],zord[i],xord[j],yord[j],zord[j]))
                        {
                            g=normal_distance(xord[i],yord[i],zord[i],xord[j],yord[j],zord[j]);
                            m=j;
                        }
                    }
                }
                cout<<i<<" "<<m<<endl;
            }
        }
 
        delete [] xord;
        delete [] yord;
        delete [] zord;
 
        cout<<MPI_Wtime()-starttime<<endl;
    }
 
    delete [] numb;
    delete [] num;
 
    MPI_Finalize();
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 05:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru