2013-02-09 4 views
1

У меня проблемы с записью 2d-блока циклического распределенного массива в файл.Выход MPI записывает 2d-блок циклического распределения в C с использованием некоторого MPI_File_write

Я пробовал это вещи:

rc=MPI_File_open(MPI_COMM_WORLD, rez, MPI_MODE_WRONLY, MPI_INFO_NULL, &cFile); 
    if(rc){printf("Failed to open file! Error: %d \n", rc);MPI_Finalize(); 
    fflush(stdout);} 
    else 
    { 
    MPI_File_write_all(cFile, MatC, loccC*locrC, compa, &status);  
    } 

...

rc=MPI_File_open(MPI_COMM_WORLD, rez, MPI_MODE_WRONLY, MPI_INFO_NULL, &cFile); 
    if(rc){printf("Failed to open file! Error: %d \n", rc);MPI_Finalize(); 
    fflush(stdout);} 
    else 
    { 
    MPI_File_write_ordered(cFile, MatC, loccC*locrC, compa, &status);  
    } 

...

rc=MPI_File_open(MPI_COMM_WORLD, rez, MPI_MODE_WRONLY, MPI_INFO_NULL, &cFile); 
    if(rc){printf("Failed to open file! Error: %d \n", rc);MPI_Finalize(); 
    fflush(stdout);} 
    else 
    { 
    MPI_File_write_shared(cFile, MatC, loccC*locrC, compa, &status);  
    } 

Я не мог найти ничего в этом посте (Но только как читать файл и форматировать его в 2d-блок циклического распределенного массива (который мне удалось использовать этот пост): MPI IO Reading and Writing Block Cyclic Matrix

Извините за мой ужасном английском :(

ответ

0

Вы сказали, что вы использовали этот пост: MPI IO Reading and Writing Block Cyclic Matrix. Мы должны предположить некоторые вещи - такие как размеры матрицы MatC: предположим, что r - это m строк и n столбцов. Размеры блока в MatC, предположим, что они являются m_b и n_b. Предположим, что число процессоров - nproc, и этот класс proc сохраняется в переменном узле. Кроме того, мы должны знать размеры 2D-тора (процессорной сетки), для нашего примера p и q. Вот как вы это делаете:

int dims[]={m, n}, dargs[]={m_b, n_b}, distribs[]={MPI_DISTRIBUTE_CYCLIC, MPI_DISTRIBUTE_CYCLIC}, nproc, dim[]={p, q}; 
    char nat[]="native"; 
    MPI_Datatype dcarray, compa; //don't know what type compa is 
    ... 
    MPI_Type_create_darray(nproc, node, 2, dims, distribs, dargs, dim, MPI_ORDER_C, compa, &dcarray); 
    MPI_Type_commit(&dcarray); 
    rc=MPI_File_open(comm, rez, MPI_MODE_CREATE | MPI_MODE_WRONLY, MPI_INFO_NULL, &cFile); 
    if(rc){printf("Failed to open file! Error: %d \n", rc);MPI_Finalize(); fflush(stdout);} 
    else 
    { 
     MPI_File_set_view(cFile, 0, compa, dcarray, nat, MPI_INFO_NULL); 
     MPI_File_write_all(cFile, MatC, locrC*loccC, compa, &status);  
    } 
    MPI_File_close(&cFile);