Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
Ide
0 / 0 / 0
Регистрация: 12.06.2013
Сообщений: 4
#1

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

31.10.2010, 05:19. Просмотров 1784. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2010, 05:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос MPI, нахождение простых чисел (C++):

Вычисление суммы чисел, от параллельных процессов MPI - C++
Задача такая, запускаются параллельно 5 процессов, каждый из них генерит рандомное число и отправляет соседнему процессу, нужно вывести...

Компиляция MPI - C++
Доброго времени суток всем, даже не знаю где создать тему, но так как программа написана на с++ решил здесь. В общем вопрос следующий: как...

C++ MPI выделение потоков - C++
Здравствуйте, я к вам с немного нубским вопросом. Написал вот такой код: #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;ctime&gt; ...

MPI Распределение задач - C++
При инициализации процесса присваиваем N некое количество прохода цикла. При выполнении процессом всех проходов N нужно уменьшить N других...

Передача в MPI vector<char*> - C++
Пишу программу на MPI. И возникли сложности. Имеется массив слов и его нужно передать между процессами. Сначала у меня был vector&lt;string&gt;,...

MPI C++. Построение топологии сети - C++
Всем доброго времени суток. Задача следующая: каждый узел в сети знает только своих соседей(локальную топологию). Необходимо...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2010, 05:19
Привет! Вот еще темы с ответами:

MPI использует только одно ядро - C++
MPI_Comm_size(MPI_COMM_WORLD, &amp;num); всегда возвращает 1. Ядра 100% два. В диспетчере задач проверил - Visual Studio использует оба ядра....

Error LNK2019 при компиляции программы MPI - C++
Здравствуйте! Это уже становится чересчур.. все решения перепробованы. Вобщем, на VS 2012 устанавливаю MS SDK MPI. В свойствах проекта...

Вопрос про mpi (рассылка элементов массива) - C++
Привет всем, вопрос у меня следующий: можно ли с помощью mpi организовать одновременный доступ ко всему массиву для всех...

Нахождение простых чисел решетом Эратосфена - C++ Builder
Мне нужно сделать с &quot;графикой&quot;, т.е чтобы программа выводила все введенные числа, потом зачеркивала не простые, которые были использованы и...


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

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

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