MPI错误:下标值既不是数组也不是指针

时间:2011-12-02 18:15:07

标签: c arrays sorting mpi

这项任务要求我为并行Odd-Even排序开发一个MPI程序,并汇集三个功能:

  1. MPI_Compare_exchange()用于P2P比较和交换操作
  2. MPI_Sort()用于并行奇偶排序操作
  3. MPI_Is_sorted()测试并行数组排序是否完成
  4. 编译时出现这些错误

    OddEvenSort.c:102: error: invalid operands to binary / (have ‘int *’ and ‘int’)
    OddEvenSort.c:102: error: subscripted value is neither array nor pointer
    OddEvenSort.c:104: error: subscripted value is neither array nor pointer
    OddEvenSort.c:112: error: subscripted value is neither array nor pointer
    OddEvenSort.c:116: error: subscripted value is neither array nor pointer
    OddEvenSort.c:123: error: subscripted value is neither array nor pointer
    

    这是代码:

    int MPI_Sort(int n,double * array, int root, MPI_Comm comm){
    
        int rank, x, m, size, a, i;
        if( rank == 0 )
        {
            array = (double *) calloc( n, sizeof(double) );
            srand( ((unsigned)time(NULL)+rank) );
            for( x = 0; x < n; x++ ) array[x]=((double)rand()/RAND_MAX)*m;
        }
    
        MPI_Scatter(array, n/size, MPI_DOUBLE, &a[0], n/size, MPI_DOUBLE, 0, comm );
    
        merge_sort(n/size,&a[0]);
    
        for(i=0;i<size;i++){
    
            if( (i+rank)%2 ==0 ){
    
                if( rank < size-1 ) 
    
                    exchange(n/size,&a[0],rank,rank+1,comm);
    
                } else{
    
                    if( rank > 0 ) exchange(n/size,&a[0],rank-1,rank,comm);
    
                }
    
                MPI_Barrier(comm);
            }
    
        MPI_Gather(&a[0], n/size, MPI_DOUBLE, array, n/size, MPI_DOUBLE, 0, comm);
    
        if( rank == 0 )
        {
            for( x = 0; x < n; x++ )  printf( "Output : %f\n", array[x] );
    
        }
    
    
    }
    

    我认为它指的是:&a[0]但我不知道如何解决它。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

'a'被定义为int,而不是数组,因此您无法传递元素0的地址。

我认为你的意图是'a'被定义为double,并且与'array'的大小相同。

double a[n];