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