Ошибка MPI: подписанное значение не является ни массивом, ни указателем - PullRequest
0 голосов
/ 02 декабря 2011

Это задание требует, чтобы я разработал программу MPI для параллельной сортировки нечетных и четных и объединяет три функции:

  1. MPI_Compare_exchange() для операции сравнения и обмена P2P
  2. MPI_Sort() для параллельной нечетно-четной операции сортировки
  3. MPI_Is_sorted() проверка выполнения сортировки параллельного массива

Я получаю эти ошибки при компиляции

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 Ответ

1 голос
/ 02 декабря 2011

'a' определяется как int, а не как массив, поэтому вы не можете передать адрес элемента 0.

Я думаю, что вы имели в виду, что 'a' определяется как double и имеет тот же размер, что и 'array'.

* 1005 т.е. *

double a[n];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...