Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting MPI阵列同步_Sorting_Mpi - Fatal编程技术网

Sorting MPI阵列同步

Sorting MPI阵列同步,sorting,mpi,Sorting,Mpi,我正在学习MPI,所以我想我可以为2个处理器编写简单的奇偶排序。第一处理器对偶数数组元素和第二奇数数组元素进行排序。我对2个处理器使用全局数组,所以我需要同步(比如信号量或锁变量),因为我得到的结果不好。如何在MPI中解决此问题?我的代码: #include "mpi.h" #include <stdio.h> int main(int argc, char *argv[]) { int rank, size ; int n = 6 ; int array[6

我正在学习MPI,所以我想我可以为2个处理器编写简单的奇偶排序。第一处理器对偶数数组元素和第二奇数数组元素进行排序。我对2个处理器使用全局数组,所以我需要同步(比如信号量或锁变量),因为我得到的结果不好。如何在MPI中解决此问题?我的代码:

#include "mpi.h"
#include <stdio.h>

int main(int argc, char *argv[])
{
   int rank, size ; 
   int n = 6 ; 
   int array[6] = { 5, 6, 1, 2, 4, 10} ;
   MPI_Init(&argc, &argv) ; 
   MPI_Comm_rank( MPI_COMM_WORLD, &rank) ; 
   MPI_Comm_size( MPI_COMM_WORLD, &size)  ;
   if (size == 2)
   {  
     int sorted1;
     int sorted2;  
     if (rank == 0)
     {
        sorted1 = 0 ;
   while (!sorted1) 
        {
  sorted1 = 1 ; 
          int x; 
   for (x=1; x < n; x += 2)
   {
             if (array[x] > array[x+1])
      {
                int tmp = array[x]  ;
   array[x] = array[x+1] ;
  array[x+1] = tmp ;
  sorted1 = 0 ;  
             }
          } 
        }
     }
     if (rank == 1)
     {
        sorted2 = 0 ;
   while (!sorted2) 
        {
  sorted2 = 1 ; 
          int x; 
   for (x=0; x < n-1; x += 2)
   {
             if (array[x] > array[x+1])
      {
                int tmp = array[x]  ;
   array[x] = array[x+1] ;
  array[x+1] = tmp ;
  sorted2 = 0 ;  
             }
          } 
        }

     } 
   } 
   else if (rank == 0) printf("Only 2 processors supported!\n") ; 
     int i=0 ; // bad output printed two times..
     for (i=0; i < n; i++)
     {
        printf("%d ", array[i])  ;
     }
     printf("\n") ; 

   MPI_Finalize() ; 
   return 0 ; 
}
#包括“mpi.h”
#包括
int main(int argc,char*argv[])
{
int等级、大小;
int n=6;
int数组[6]={5,6,1,2,4,10};
MPI_Init(&argc,&argv);
MPI通信等级(MPI通信世界和等级);
MPI_通信大小(MPI_通信世界和大小);
如果(大小==2)
{  
int-1;
int-2;
如果(秩==0)
{
1=0;
而(!D1)
{
1=1;
int x;
对于(x=1;x数组[x+1])
{
int tmp=数组[x];
数组[x]=数组[x+1];
阵列[x+1]=tmp;
1=0;
}
} 
}
}
如果(秩==1)
{
d2=0;
而(!d2)
{
d2=1;
int x;
对于(x=0;x数组[x+1])
{
int tmp=数组[x];
数组[x]=数组[x+1];
阵列[x+1]=tmp;
d2=0;
}
} 
}
} 
} 
如果(秩==0)printf(“仅支持2个处理器!\n”);
int i=0;//打印了两次错误的输出。。
对于(i=0;i
您的两个MPI任务中的每一个都在阵列的不同副本上工作。您需要使用类似于MPI_Send()和MPI_Recv()或更复杂的MPI函数之一显式合并这两个数组


MPI是一种分布式内存编程模型,而不是像OpenMP或线程那样的共享内存

谢谢。现在我知道了MPI和OpenMP的区别