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

С++ под Linux

Войти
Регистрация
Восстановить пароль
 
dofddd
0 / 0 / 0
Регистрация: 13.09.2015
Сообщений: 10
#1

Программа с использованием MPI - C++ Linux

24.10.2016, 22:44. Просмотров 393. Ответов 3
Метки нет (Все метки)

Укажите пожалуйста на ошибку в коде.

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
#include "mpi.h" 
#include <stdlib.h>
#include <stdio.h>
#include <time.h> 
void ReadFromFile(int* src, int rows_, int columns_, char Name[]){
    FILE *fileToRead = fopen(Name, "rb");
    fread(src, sizeof(int), rows_*columns_, fileToRead);
    fclose(fileToRead);
}
int main (int argc, char* argv[])
{ 
    int rank; 
    MPI_Status st;  
    MPI_Init(&argc, &argv); 
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    if (rank == 0) 
{ 
        clock_t t1 = clock();
        int* vector = new int [10];
        char NameFile_V[] = "Vector.dat";
        FILE *fileToRead = fopen(NameFile_V, "rb");
        for (int j = 0; j < 10; j++)
{
            fread(&vector[j], sizeof(int), 1, fileToRead);
        };
        fclose(fileToRead);
        MPI_Send(vector, 10, MPI_INT, 1, 0, MPI_COMM_WORLD); 
        int* Matrix = new int[5*5];
        char NameFile_M[] = "Matrix.dat";
        ReadFromFile(Matrix, 5, 5, NameFile_M);
        for (int i = 0; i < 5; i++)
{
            for (int j = 0; j < 5; j++)
                printf(" %d ", Matrix[i*5+j]);
            printf("\n");
        };
        for (int j = 0; j < 25; j++)
            printf(" %d ", Matrix[j]);
        clock_t t2 = clock();
        double time = (double) (t2-t1) / (double)CLOCKS_PER_SEC;
        printf("Time of task is %f\n", time);   
        } 
    else { 
        int* vector1 = new int [10];
        MPI_Recv(vector1, 10, MPI_INT, 0, 0, MPI_COMM_WORLD, &st); 
        for (int i=0; i<10; i++){
            printf("Process %d received vector[ %d ] = %d \n", rank, i, vector1[i]);
        }
    }; 
        MPI_Finalize(); 
}
Миниатюры
Программа с использованием MPI  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2016, 22:44     Программа с использованием MPI
Посмотрите здесь:

синхронизация процессов с использованием мьютексов C++ Linux
вторая производная с использованием SSE C++ Linux
C++ Linux Сборка программы с MPI
C++ Linux MPI. Разбиение процессов на группы
C++ Linux Неблокирующий обмен MPI
Компиляция и запуск программ из mpi C++ Linux
вычисление числа пи с использованием потоков C++ Linux
C++ Linux Захват мыши с использованием xlib
Параллельный алгоритм столбцово-ориентированный метод гаусса. MPI C++ Linux
C++ Linux Прогон программ с использованием разделяемой памяти
C++ Linux Простейший аудио плеер с использованием GStreamer
Как написать программу с использованием mpi на многоядерном ПК (ubuntu) C++ Linux

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grgdvo
518 / 459 / 126
Регистрация: 02.09.2012
Сообщений: 1,346
24.10.2016, 23:30     Программа с использованием MPI #2
mpicc - это С-компилятор. В C нет оператора new.
Вам нужен C++-компилятор: mpicxx

Bash
1
mpicxx -o hello MV_for_stduents.c
Чтобы уж совсем по правилам, надо бы еще и расширение у файла сменить на .cpp (хотя и так откомпилируется)
dofddd
0 / 0 / 0
Регистрация: 13.09.2015
Сообщений: 10
24.10.2016, 23:50  [ТС]     Программа с использованием MPI #3
Спасибо за разъяснение проблемы компилирования. При запуске выдаёт ошибку, не могли бы вы указать на ошибку и куда копать?
Миниатюры
Программа с использованием MPI  
grgdvo
518 / 459 / 126
Регистрация: 02.09.2012
Сообщений: 1,346
25.10.2016, 02:17     Программа с использованием MPI #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Параллельную программу надо запускать "параллельно".
Пользователь перед запуском должен сам для себя определить и задать, какое количество MPI-процессов будет у него в программе.
Я в код особо не вчитывался, но вроде у вас только два процесса используется.
Для запуска параллельной программы используется mpirun
Надо написать

Bash
1
mpirun -np 2 ./hello
Yandex
Объявления
25.10.2016, 02:17     Программа с использованием MPI
Ответ Создать тему
Опции темы

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