Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2010, 06:10   #1
vernan
Новичок
Джуниор
 
Регистрация: 04.11.2010
Сообщений: 1
По умолчанию проблема с MPI.

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

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

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

Исходник:

PHP код:
        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=1i<sizei++) 
           { 
                
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=0j<(int)how_manyj++) 
                                 {
                            
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);
                
        
                 
myALIsSimple(minmax);
                for (
int i=0i<myAL->Counti++)
                {
                        
fprintf(f,"Counted: %i  \n",(int)myAL[i]);
                }
 
 
        
int kol myAL->Count;
        
int*  my_array = new int[myAL->Count];
 
                        for (
int i=0i<myAL->Counti++)
                {
                        
my_array[i] = (int)myAL[i];
            }
 
   
fprintf(f,"Kol: %i  \n",(int)kol);
   
fclose(f);
 
  
int position 0;
 
   
MPI_Send(&kol1MPI_INT077MPI_COMM_WORLD);
   
MPI_Send(my_arraymyAL->CountMPI_INT078MPI_COMM_WORLD);
                

P.S. не нашел тега для C++.
Прошу помощи!
vernan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
mpi и адресация переменных SkrudjMakdak Общие вопросы C/C++ 0 26.04.2010 16:53
mpi skrudjmagdak C++ Builder 4 23.03.2010 19:05
MPI: send и recv cheparamba Общие вопросы C/C++ 0 09.03.2010 05:48
Помогите с MPI, плз! kbbudanov Общие вопросы C/C++ 1 25.11.2009 17:53
Проблема компиляции проги с использованием MPI! neo-210 Общие вопросы C/C++ 7 14.07.2009 17:55