Форум программистов, компьютерный форум, киберфорум
MPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 08.05.2016
Сообщений: 73
1

Microsoft mpi. Не запускается командой mpiexec

27.10.2017, 13:54. Показов 3078. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь запустить приложение через командную строку с помощью mpiexec -n 1 AKLab2_3.exe
Вылетает ошибка типо null значение + negative count, хотя в коде cout делаю и все нормально там, адрес не null и count вполне адекватный: 100. Новичок в mpi. Что тут может сломаться?
Само приложение реализует метод Якоби.
Вывод:
job aborted:
[ranks] message

[0-4] fatal error
Fatal error in MPI_Bcast: Invalid count, error stack:
MPI_Bcast(788): MPI_Bcast(buf=0x0000000000000000, count=-858993460, MPI_DOUBLE, root=0, MPI_COMM_WORLD) failed
MPI_Bcast(722): Negative count, value is -858993460

---- error analysis -----

[0-4] on DESKTOP-7FHSDOH
mpi has detected a fatal error and aborted AKLab2_3.exe

---- error analysis -----

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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include <fstream>
#include <iostream>
 
#include <mpi.h>
 
#include <cmath>
#include <malloc.h>
#include <memory.h>
#include <iomanip>
 
/* myid – номер процесса, numprocs – количество процессов, Root – номер
корневого процесса, sendcounts, displs – массивы для организации обменов */
int myid, numprocs, Root = 0, *sendcounts, *displs;
/* AB – исходная матрица метода, может быть задана любым способом
X – вектор, содержит начальное приближение */
double *AB, *A, *X;
 
 
/* задана матрица А, начальное приближение вектора Х_old, размерность
матрицы MATR_SIZE, количество вычисляемых элементов вектора
в данном процессе size, вычисляем новые значение вектора Х с номера first */
void Iter_Jacoby(double *X_old, int size, int MATR_SIZE, int first);
void SolveSLAE(size_t MATR_SIZE, int size, double Error);
 
int ind(int i, int j, int SIZE); /* процедура обращения к элементу матрицы */
 
int main(int argc, char *argv[]) {
    /* MATR_SIZE – размерность системы, size – количество строк матрицы в
    каждом процессе, SIZE – количество элементов матрицы в каждом процессе */
    int i, size, MATR_SIZE, SIZE;
    double Error; /* точность вычислений */
    double startTime, finishTime;
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
    MPI_Comm_rank(MPI_COMM_WORLD, &myid);
    if (myid == Root) {
        /* получаем размерность системы MATR_SIZE */
        /* выделяем память для матрицы AB */
        std::ifstream fin("Source.txt");
        fin >> MATR_SIZE;
        fin >> Error;
        //AB = new double[1, 0, 0, 2, 0, 1, 0, 2, 0, 0, 1, 2];
        AB = (double *)malloc(sizeof(double) * MATR_SIZE * (MATR_SIZE + 1));
        for (int i = 0; i < MATR_SIZE * (MATR_SIZE + 1); i++) {
            fin >> AB[i];
        }
 
        /* получение матрицы АB размерности MATR_SIZE+1(матрица+столбец
        свободных членов), задание точности вычислений Error */
    }
    startTime = MPI_Wtime();
 
    /* рассылка значений всем процессам */
    std::cout << &MATR_SIZE << "\n";
    MPI_Bcast(&MATR_SIZE, 1, MPI_INT, Root, MPI_COMM_WORLD);
    MPI_Bcast(&Error, 1, MPI_DOUBLE, Root, MPI_COMM_WORLD);
    /* выделяем память для вектора X */
    X = (double *)malloc(sizeof(double) * MATR_SIZE);
    if (myid == Root) {
        for (int i = 0; i < MATR_SIZE; i++) {
            X[i] = 1;
        }
        /*получаем начальное значение для вектора Х */
    }
    std::cout << MATR_SIZE << " ; " << X;
    /* рассылка вектора Х всем процессам */
    MPI_Bcast(X, MATR_SIZE, MPI_DOUBLE, Root, MPI_COMM_WORLD);////////////////////////////////////////////////////////////////////////////////////////
    /* определение количества элементов вектора, которые будут
    вычисляться в каждом процессе (равно количеству строк
    матрицы, находящихся в данном процессе) */
    size = (MATR_SIZE / numprocs) + ((MATR_SIZE % numprocs) > myid ? 1 : 0);
    /* выделяем память для матрицы А в каждом процессе*/
    A = (double *)malloc(sizeof(double) * (MATR_SIZE + 1)*size);
    displs = (int *)malloc(numprocs * sizeof(int));
    sendcounts = (int *)malloc(numprocs * sizeof(int));
    /* рассылка частей матрицы по процессам */
    SIZE = (MATR_SIZE + 1) * size;
    MPI_Gather(&SIZE, 1, MPI_INT, sendcounts, 1, MPI_INT, Root, MPI_COMM_WORLD);
    displs[0] = 0;
    for (i = 1; i < numprocs; ++i)
        displs[i] = displs[i - 1] + sendcounts[i - 1];
    MPI_Scatterv(AB, sendcounts, displs, MPI_DOUBLE, A,
        (MATR_SIZE + 1) * size, MPI_DOUBLE, Root, MPI_COMM_WORLD);
    /* решение СЛАУ методом простой итерации */
    SolveSLAE(MATR_SIZE, size, Error);
    /* освобождение памяти */
    finishTime = MPI_Wtime();
    if (myid == Root) {
        std::cout << "algorithm took " << finishTime - startTime << " seconds with eps = " << Error << " on " << numprocs << " processes" << std::endl;
        std::ofstream fout("output.txt");
        fout << std::fixed << std::setprecision(4);
        for (int i = 0; i < MATR_SIZE; i++) {
            fout << X[i] << std::endl;
        }
    }
    free(sendcounts); free(displs);
    free(AB);
    //    free(AB);
    free(A); free(X);
    MPI_Finalize();
    //system("pause");
    return 0;
}
 
void SolveSLAE(size_t MATR_SIZE, int size, double Error) {
    /* задана матрица А, размерность матрицы MATR_SIZE, количество
    элементов, вычисляемых в данном процессе size, погрешность
    вычислений Error*/
    double *X_old;
    int Iter = 0, i, Result, first;
    double dNorm = 0, dVal;
    /* определение номера элемента first вектора Х, с которого
    будут вычисляться новые значения в данном процессе*/
    MPI_Scan(&size, &first, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
    first -= size;
    /* заполнение массива sendcounts значениями size от каждого процесса*/
    MPI_Allgather(&size, 1, MPI_INT, sendcounts, 1, MPI_INT, MPI_COMM_WORLD);
    /* заполнение массива displs – расстояний между элементами вектора,
    распределенных по процессам */
    displs[0] = 0;
    for (i = 1; i < numprocs; ++i)
        displs[i] = displs[i - 1] + sendcounts[i - 1];
    /* выделяем память для X_old */
    X_old = (double *)malloc(sizeof(double) * MATR_SIZE);
    do {
        ++Iter;
        /*сохраняем предыдущее значение вектора Х */
        memcpy(X_old, X, sizeof(double)*MATR_SIZE);
        /* вычисляем новое значение вектора Х */
        //double *R = new double (MATR_SIZE);
        Iter_Jacoby(X_old, size, MATR_SIZE, first);
        /* Рассылаем вектор Х всем процессам */
 
        MPI_Allgatherv(&X[first], size, MPI_DOUBLE, X, sendcounts, displs,
            MPI_DOUBLE, MPI_COMM_WORLD);
        /* Считаем норму */
        if (myid == Root) {
            dNorm = 0;
            for (i = 0; i < MATR_SIZE; ++i) {
                dVal = fabs(X[i] - X_old[i]);
                if (dNorm < dVal) dNorm = dVal;
            }
            Result = Error < dNorm;
            //std::cout << X[0] << std::endl;
        }
        /* рассылаем результат всем процессам */
        MPI_Bcast(&Result, 1, MPI_INT, Root, MPI_COMM_WORLD);
    } while (Result);
    free(X_old);
    return;
}
 
void Iter_Jacoby(double *X_old, int size, int MATR_SIZE, int first) {
    /* задана матрица А, начальное приближение вектора Х_old, размерность
    матрицы MATR_SIZE, количество вычисляемых элементов вектора
    в данном процессе size, вычисляем новые значение вектора Х с номера first */
    int i, j;
    double Sum;
    for (i = 0; i < size; ++i)
    {
        Sum = 0;
        for (j = 0; j < i + first; ++j)
            Sum += A[ind(i, j, MATR_SIZE)] * X_old[j];
        for (j = i + 1 + first; j < MATR_SIZE; ++j)
            Sum += A[ind(i, j, MATR_SIZE)] * X_old[j];
        X[i + first] = (A[ind(i, MATR_SIZE, MATR_SIZE)] - Sum) /
            A[ind(i, i + first, MATR_SIZE)];
    }
}
 
int ind(int i, int j, int SIZE) {/* процедура обращения к элементу матрицы */
    return (i*(SIZE + 1) + j);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2017, 13:54
Ответы с готовыми решениями:

Постоянно открывается страница спонсоров в браузере, периодически запускается окно командой строки
Добрый день. Перед запуском браузера каждый раз открывается страница спонсоров с рекламой....

Постоянно открывается страница спонсоров в браузере, периодически запускается окно командой строки
Здравствуйте. Помогите дилетанту разобраться с проблемой. При запуске устройства каждый раз...

Можно ли закрыть приложение командой в консоле, если открыл командой system();?
Открыл system(&quot;roulette.JPG&quot;); А как закрыть?

Запуск mpiexec через оконное приложение
Доброго времени суток, есть интерфейсное оконное приложение. Необходимо запустить процесс с помощью...

0
27.10.2017, 13:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2017, 13:54
Помогаю со студенческими работами здесь

Ошибка запуска mpiexec для выполнения на нескольких хостах
mpiexec -hosts 2 host1-pc 1 host2-pc 1 -wdir \\host1-pc\Project\mpi_test\x64\Release mpi_test.exe...

Microsoft Outlook - не запускается
Dobryj den, pomogite, liudi dobryje, nezapuskajetsa Microsoft Outlook, postojano vydajot oshybku...

Не запускается setup от Microsoft Office 2013
Операционная система Windows 7 Pro 64 Машина - Pavilion dv6-3052nr Столкнулся с проблемой:...

Не запускается Microsoft Office Visio 2007
При попытке запустить Microsoft Office Visio 2007 выдается сообщение об ошибке: &quot;Конфигурация...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru