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

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

Войти
Регистрация
Восстановить пароль
 
Байр
15 / 15 / 1
Регистрация: 09.12.2011
Сообщений: 64
#1

MPI. Ошибка в выводимых данных. (Код присутствует) - C++

29.10.2012, 22:40. Просмотров 532. Ответов 1
Метки нет (Все метки)

Доброе время суток.
Программа должна пересылать данные от 3 процесса к 0, и от 0 к 3. Необхожимо использовать в работе функции передачи не вызывающие "тупиковые ситуации". Я выбрал MPI_Bsend(...) -пересылка с буферизацией. Поначалу я сделал с разделением на блоки, и программа выдавала "почти" правильный результат:
Procesor # 0 : High Voltage Rock'n'Roll!‰. //пара лишних символов
Procesor # 0 : 8.300000.
Procesor # 0 : Z.
Procesor # 3 : 2.
Как можно это исправить?

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
#include <mpi.h>
#define ROOT 0
#define BUFFSIZE 10000
#define MesSize 25
 
int main(int argc, char **argv) 
{
    int myrank, nprocs, namelen;
    char processor_name[MPI_MAX_PROCESSOR_NAME];    
    int MesTag=0;
    MPI_Status Status;
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &nprocs); 
    MPI_Comm_rank(MPI_COMM_WORLD, &myrank); 
    MPI_Get_processor_name(processor_name,&namelen);
    MPI_Buffer_attach(malloc(BUFFSIZE), BUFFSIZE);
    
    if(myrank == 3)
    { 
        char Message1[]="High Voltage Rock'n'Roll!";
        MPI_Bsend(Message1, MesSize, MPI_CHAR, 0, MesTag, MPI_COMM_WORLD);
        
        float Message2 = 8.3;   
        MPI_Bsend(&Message2, MesSize, MPI_FLOAT, 0, MesTag+2, MPI_COMM_WORLD); 
        
        char Message3[]="Z";
        MPI_Bsend(Message3, MesSize, MPI_CHAR, 0, MesTag+3, MPI_COMM_WORLD);   
        
        int Message4;
        MPI_Recv(&Message4, MesSize, MPI_INT, 0, MesTag+1, MPI_COMM_WORLD, &Status);    
        printf("Procesor # %d : %d.\n", myrank, Message4);        
         
    }    
    if(myrank == 0)
    {
        int Message5 = 2;  
        MPI_Bsend(&Message5, MesSize, MPI_INT, 3, MesTag+1, MPI_COMM_WORLD); 
         
        char Message6[10];
        MPI_Recv(Message6, MesSize, MPI_CHAR, 3, MesTag, MPI_COMM_WORLD, &Status); 
        printf("Procesor # %d : %s.\n", myrank, Message6); 
        
        float Message7;    
        MPI_Recv(&Message7, MesSize, MPI_FLOAT, 3, MesTag+2, MPI_COMM_WORLD, &Status); 
        printf("Procesor # %d : %f.\n", myrank, Message7);
        
        char Message8[1];      
        MPI_Recv(Message8, MesSize, MPI_CHAR, 3, MesTag+3, MPI_COMM_WORLD, &Status); 
        printf("Procesor # %d : %s.\n", myrank, Message8);      
    }
    MPI_Finalize();     
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2012, 22:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос MPI. Ошибка в выводимых данных. (Код присутствует) (C++):

Разделение выводимых данных - C++
Доброго времени суток, есть маленькая проблема и соответственно с ней вопрос.Вот программа которая расшифровывает текст, закодированный...

Тип выводимых данных. abs() и fabs() - C++
Здравствуйте, столкнулся с такой проблей при выводе через cout данных типа double выводится почемуто только 2 знака после запятой(хотя их...

Сортировка выводимых данных в алфавитном порядке - C++
у меня вот такое задание Дан файл, состоящий из записей, которые содержат следующие поля: - фамилия, имя; - знак Зодиака; - дата...

Visual studio 2013 в документе xml (8,2) присутствует ошибка - C++
Добрый день. не могу понять что за ошибка происходит. создавал уже чистые тестовые проекты. при закрытии консольного окна появляется...

MPI, ошибка исполнения - C++
int size, rank; MPI_Init(&amp;argc, &amp;argv); MPI_Comm_size(MPI_COMM_WORLD, &amp;size); MPI_Comm_rank(MPI_COMM_WORLD, &amp;rank); MPI_Status...

Ошибка при подключении MPI - C++
Здравствуйте,я поставил на Visual Studio 2013 Microsoft HPC Pack 2008 SDK. Проект создавал с соответствующими свойствами,и всё что нужно...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Байр
15 / 15 / 1
Регистрация: 09.12.2011
Сообщений: 64
31.10.2012, 17:03  [ТС] #2
Я нашел как исправить данную ошибку. Хотя, правильнее сказать, она сама как-то исправилась) Как это произошло, я не знаю.
Выкладываю результат уже готовый программы, но что я скажу, иногда в MPI может произойти ошиба, даже в логически правильном коде:
C
1
2
char Message1[]="High Voltage Rock'n'Roll!";
        /*MPI_Bsend(Message1, MesSize, MPI_CHAR, 0, MesTag, MPI_COMM_WORLD);*/
отличается от
C
1
2
/*char Message1[]="High Voltage Rock'n'Roll!";
        MPI_Bsend(Message1, MesSize, MPI_CHAR, 0, MesTag, MPI_COMM_WORLD);*/
Ну и сам код:
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>
#define ROOT 0
#define BUFFSIZE 10000
#define MesSize 25
 
int main(int argc, char **argv) 
{
    int myrank, nprocs, namelen, MesTag=0;
    char processor_name[MPI_MAX_PROCESSOR_NAME];    
    MPI_Status Status;
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &nprocs); 
    MPI_Comm_rank(MPI_COMM_WORLD, &myrank); 
    MPI_Get_processor_name(processor_name,&namelen);
    MPI_Buffer_attach(malloc(BUFFSIZE), BUFFSIZE);
    if(myrank == 3)
    { 
        char Message1[]="High Voltage Rock'n'Roll!";
        MPI_Bsend(Message1, MesSize, MPI_CHAR, 0, MesTag, MPI_COMM_WORLD);
 
        float Message2 = 8.3;   
        MPI_Bsend(&Message2, MesSize, MPI_FLOAT, 0, MesTag+2, MPI_COMM_WORLD); 
        
        char Message3[]="Z";
        MPI_Bsend(Message3, MesSize, MPI_CHAR, 0, MesTag+3, MPI_COMM_WORLD);   
        
        int Message4;
        MPI_Recv(&Message4, MesSize, MPI_INT, 0, MesTag+1, MPI_COMM_WORLD, &Status);    
        printf("Procesor # %d : %d.\n", myrank, Message4);        
         
    }    
    if(myrank == 0)
    {
        int Message5 = 2;  
        MPI_Bsend(&Message5, MesSize, MPI_INT, 3, MesTag+1, MPI_COMM_WORLD); 
         
        char Message6[10];
        MPI_Recv(Message6, MesSize, MPI_CHAR, 3, MesTag, MPI_COMM_WORLD, &Status); 
        printf("Procesor # %d : %s.\n", myrank, Message6); 
        
        float Message7;    
        MPI_Recv(&Message7, MesSize, MPI_FLOAT, 3, MesTag+2, MPI_COMM_WORLD, &Status); 
        printf("Procesor # %d : %f.\n", myrank, Message7);
        
        char Message8[1];      
        MPI_Recv(Message8, MesSize, MPI_CHAR, 3, MesTag+3, MPI_COMM_WORLD, &Status); 
        printf("Procesor # %d : %s.\n", myrank, Message8);      
    }
    MPI_Finalize();     
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2012, 17:03
Привет! Вот еще темы с ответами:

Как сделать структуру (как в таблице) выводимых в консоле данных? - C++
Вот этой проге? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;stdlib.h&gt; #include &lt;Windows.h&gt; using...

Отладка проекта с mpi: ошибка corrupted stack around variable - C++
Подскажите пожалуйста, как правильно отлаживать проект с mpi Windows7x64, VS2010, microsoft hpc 2008 Если запускать без дебага, то...

Deserialize - ошибка. в документе XML присутствует ошибка - странный глюк - C#
Происходит ошибка в следующей функции: private void LoadSettingsFromFile() { string folderToSaveSettings =...

Косяк в проге.Код присутствует - Delphi
Вот код программы табулирования функции.Когда делаешь шаг 1 или больше то выдает ошибку &quot;Floating point division by zero&quot; как исправить? ...


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

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

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