![]() |
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 | ||||||||||||||||||||||||||||||||||