17 / 17 / 3
Регистрация: 09.12.2011
Сообщений: 64
1

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

29.10.2012, 22:40. Показов 1140. Ответов 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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2012, 22:40
Ответы с готовыми решениями:

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

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

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

Нумерация данных, выводимых из БД
Кароче парни такое дело. Есть вью в котором выводяться данные бызы. Как правильно сделать нумерацию...

1
17 / 17 / 3
Регистрация: 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;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2012, 17:03
Помогаю со студенческими работами здесь

Группировка выводимых данных
Добрый день. Есть база данных с таблицей, вот такого вида: Хочу собрать статистику согласных и...

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

Сортировка выводимых из БД данных
Делаю вывод последних 20 записей из mysql. Дело в том что самая последняя запись которая вносилась...

Выскакивает ошибка: В документе XML (1, 2) присутствует ошибка
Возникает ошибка здесь: object obj = mySerializer.Deserialize(ms); class Program { static...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru