Последовательная запись в файл

Подскажите, пожалуйста, как организовать последовательную запись в файл для N процессов? Следующий кусок кода на 64 узлах Blue Gene/P работает нормально, а на 128 узлах происходит что-то не то. Может быть это как-то связано с работой с увеличением количества i/o потоков?
               if(rank==0)
               {
               remove(name);
               }
               for(i=0;i<size;i++)
               {
                       if(rank==i)
                       {
                       output=fopen(name,"ab");
//                        fseek(output,sizeof(double)*rank*total,SEEK_SET);
                       fwrite((void *)ion5D1,sizeof(double),total,output);
                       fflush(output);
                       fclose(output);
                       }
                       MPI_Barrier(MPI_COMM_WORLD);
               }
Необходимо воспользоваться MPI-IO:
/*
 * io.c
 *
 * Example of MPI-IO usage
 * /bgsys/drivers/ppcfloor/comm/bin/mpicc io.c -Wall -Wextra -ansi
 *
 * Alexander Pozdneev
 * http://hpc.cmc.msu.ru
 */


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

int main(int argc, char **argv)
{
    const MPI_Comm comm = MPI_COMM_WORLD;
    int rank;

    char fname[] = "mpi-io.bin";
    MPI_File fout;

    int *buf;
    int buf_size;

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(comm, &rank);

    /* Each process writes its rank to file */
    buf = &rank;
    buf_size = 1;

    MPI_File_open(comm, fname, MPI_MODE_CREATE | MPI_MODE_WRONLY,
            MPI_INFO_NULL, &fout);
    MPI_File_set_view(fout, rank * buf_size * sizeof(buf[0]),
            MPI_INT, MPI_INT, "native", MPI_INFO_NULL);
    MPI_File_write_all(fout, buf, buf_size, MPI_INT, MPI_STATUS_IGNORE);
    MPI_File_close(&fout);

    MPI_Finalize();

    return 0;
}
Литература: Gropp W., Lusk E., Thakur R. - Using MPI-2. Advanced Features of the Message Passing Interface

На самом деле вместо

MPI_File_set_view(...);
MPI_File_write_all(...);
я бы рекомендовал использовать функцию
MPI_File_write_ordered(...), которая имеет те же параметры, что и MPI_File_write_all. Эта функция гарантирует, что записи в файле будут сделаны последовательно в соответствии с нумерацией процессов.

Альтернативным вариантом может служить также такой набор команд

MPI_File_set_view(...);
offset=...;
MPI_File_write_at(.,offset,..);

Да, согласен, в данном случае MPI_File_write_ordered() будет оптимальным выбором.
Честно говоря, не знал про эту функцию, потому что я пишу последовательно, а читаю параллельно, используя MPI_File_write_all() и нетривиальный вид на файл.

Документация по MPI-функциям с примерами: http://mpi.deino.net/mpi_functions/index.htm