- dtype = MPI_INT;
- MPI_Allreduce( bufin, bufout, count, dtype, MPI_SUM, comm );
- /* Check output */
- for (i=0; i<count; i++) {
- if (bufout[i] != i * size) {
- fprintf( stderr, "Expected bufout[%d] = %d but found %d\n",
- i, i * size, bufout[i] );
- errs++;
- }
- }
- free( bufin );
- free( bufout );
- MTestFreeComm( &comm );
+ while (MTestGetIntracommGeneral(&comm, minsize, 1)) {
+ if (comm == MPI_COMM_NULL) {
+ continue;
+ }
+ MPI_Comm_size(comm, &size);
+ count = size * 2;
+ bufin = (int *) malloc(count * sizeof(int));
+ bufout = (int *) malloc(count * sizeof(int));
+ if (!bufin || !bufout) {
+ fprintf(stderr, "Unable to allocated space for buffers (%d)\n", count);
+ MPI_Abort(MPI_COMM_WORLD, 1);
+ }
+ for (i = 0; i < count; i++) {
+ bufin[i] = i;
+ bufout[i] = -1;
+ }
+
+ dtype = MPI_INT;
+ MPI_Allreduce(bufin, bufout, count, dtype, MPI_SUM, comm);
+ /* Check output */
+ for (i = 0; i < count; i++) {
+ if (bufout[i] != i * size) {
+ fprintf(stderr, "Expected bufout[%d] = %d but found %d\n", i, i * size, bufout[i]);
+ errs++;
+ }
+ }
+ free(bufin);
+ free(bufout);
+ MTestFreeComm(&comm);