RefNUMA – библиотека для организации виртуальной общей памяти в программах, использующих MPI.

А. О. Лацис

Пример 2. Цикл с поочередным выполнением тела процессами в порядке их номеров.

В Примере 1 было показано, как обеспечить запись данных в файл из разных процессов строго последовательно, в порядке номеров этих процессов. Необходимость выполнить некоторые действия в разных процессах строго последовательно, в порядке номеров этих процессов, часто возникает и в реальных задачах. В RefNUMA для организации строго последовательного, в порядке номеров процессов, выполнения некоторых действий предусмотрена специальная форма цикла – поочередный цикл. Заголовок и конец тела такого цикла записываются в виде специальных макросов. Если переписать Пример 1 с использованием макросов поочередного цикла, получится программа, выполняющая в точности те же действия, что и программа Примера 1, но несколько более компактная по форме записи:

#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#include <coarray.h>
#include <shared.h>
    COARRAY_MEM_ALLOC( 2000000000l );
    int main( int argc, char *argv[] )
{
    int i, my_node, n_nodes;
    FILE *fp;
/***/
    COARRAY_Init( &argc, &argv );
    my_node = coarray_my_node();
    n_nodes = coarray_n_nodes();
    if ( my_node == 0 )
     {
      fp = fopen( "output.dat", "w" );
      fclose( fp );
     }
    NODE_BY_NODE_BEGIN( i, 0, n_nodes )
     fp = fopen( "output.dat", "a" );
     fprintf( fp, "Hello, I am %d of %d\n", my_node, n_nodes );
     fclose( fp );
    NODE_BY_NODE_END
    COARRAY_Finalize();
    return 0;
}
◄ Пример 1 Пример 3 ►
 
 
 
 
 
 
 
 
  Тел. +7(499)220-79-72; E-mail: inform@kiam.ru