0 / 0 / 0
Регистрация: 12.06.2013
Сообщений: 10
1

MPI, нахождение простых чисел

31.10.2010, 05:19. Показов 2765. Ответов 0
Метки нет (Все метки)

Здравсвуйте!
Пишу программу для нахождения простых чисел. Пишу в Visual Studio 2008 на C++.
Программу написал и она работает на нескольких ПК. Но проблема в том, что результаты в главный процесс возвращаются неправильно.
Допустим запускаем:
компьютер с главным процессом: 5 процессов
компьютер раб: 5 процессов.

В результате в главный файл запишутся результаты от первых 5 и только от ОДНОГО от компьютера раба. Хотя все 5 там отработали и результаты получили.

Главный процесс остается висеть в памяти, и 4 процесса на другом ПК - тоже. Т.е. возникает тупик. Видимо первый ждет от них результата, а из тех отсылает только первый.

Исходник:

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
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
 
if (rank == 0) 
    {  
 
    FILE *f;
    double *a;
    char name[6]="0.txt";
    name[0]=rank+48;
    f=fopen(name,"w");
  int position = 0;
    int how_many=0;
  fprintf(f,"N %i\n",N);
        for(int i=1; i<size; i++) 
       { 
        position=0;
        fprintf(f," %i\n",i);
       
        MPI_Recv(&how_many,1,MPI_INT,i,77,MPI_COMM_WORLD,&status);
        int*  my_array = (int*)malloc(how_many * sizeof(int));
        fprintf(f,"Array size %i\n",how_many);
            MPI_Recv(my_array,how_many,MPI_INT,i,78,MPI_COMM_WORLD,&status);
 
 
                for(int j=0; j<(int)how_many; j++) 
                 {
                fprintf(f,"My rank %i I got : %i from %i\n",rank,my_array[j],i);
                 }
 
 
}
 
 
printf("My rank %d\n", rank);
fclose(f);
    }
else
    {   
 
 
    FILE *f;
    double *a;
    char name[6]="0.txt";
    name[0]=rank+48;
    f=fopen(name,"w");
 
        fprintf(f,"A: %i  \n",min);
        fprintf(f,"B: %i  \n",max);
        
    
         myAL= IsSimple(min, max);
        for (int i=0; i<myAL->Count; i++)
        {
            fprintf(f,"Counted: %i  \n",(int)myAL[i]);
            }
 
 
    int kol = myAL->Count;
    int*  my_array = new int[myAL->Count];
 
            for (int i=0; i<myAL->Count; i++)
        {
            my_array[i] = (int)myAL[i];
        }
 
   fprintf(f,"Kol: %i  \n",(int)kol);
   fclose(f);
 
  int position = 0;
 
   MPI_Send(&kol, 1, MPI_INT, 0, 77, MPI_COMM_WORLD);
   MPI_Send(my_array, myAL->Count, MPI_INT, 0, 78, MPI_COMM_WORLD);
        
}
Пожалуйста помогите, бьюсь уже 2 недели.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.10.2010, 05:19
Ответы с готовыми решениями:

Нахождение простых чисел
Доброго времени суток, форумчане! Написал программку, которая находит простые числа. Нормально...

Нахождение простых чисел.(
Люди я все понимаю, этот вопрос наверное покажется глупым, точнее он таковым и является. Программа...

Нахождение простых чисел
Доброго времени суток. Помогите в написании программы,которая бы находила простые числа в пределах...

Нахождение простых чисел в С++
Уважаемые форумчане, помогите пожалуйста сделать прогу работающей: #include&lt;iostream&gt; using...

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

Нахождение простых чисел на отрезке [m;n]
INPUT.TXT содержит два натуральных числа M и N, разделенных пробелом (2 ≤ M ≤ N ≤...

Нахождение простых чисел на промежутке
Приветствую всех. Поиском пользовался.. т.к. только начинаю изучать с++ не могу найти ответ...

Нахождение парных простых чисел с++
Дорогие форумчане прошу помощи. Парные простые числа.парными простыми числами называют два простых...

Нахождение N первых простых чисел
Найти n первых простых чисел (число называется простым, если оно без остатка делится только на 1 и...

Нахождение простых чисел в массиве
Ввести 20 чесел в массив и найти среди них все простые числа Пожалйста помогите :( Буду оч...

Нахождение простых чисел-близнецов
Программа не выдаёт правильный ответ,если добавляю строчку с else... Дано натуральное число n....


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

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

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