The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа
next up previous contents
Next: Библиотечный пример 2 Up: Примеры Previous: Пример 4   Contents

Библиотечный пример 1

Головная программа:

   main(int argc, char **argv) 
   { 
     int done = 0; 
     user_lib_t *libh_a, *libh_b; 
     void *dataset1, *dataset2; 
     ... 
     MPI_Init(&argc, &argv); 
     ... 
     init_user_lib(MPI_COMM_WORLD, &libh_a); 
     init_user_lib(MPI_COMM_WORLD, &libh_b); 
     ... 
     user_start_op(libh_a, dataset1); 
     user_start_op(libh_b, dataset2); 
     ... 
     while(!сделано) 
     { 
        /* выполнение */ 
        ... 
        MPI_Reduce(..., MPI_COMM_WORLD); 
        ...
        /* проверка окончания цикла */ 
        ... 
     } 
     user_end_op(libh_a); 
     user_end_op(libh_b); 
 
     uninit_user_lib(libh_a); 
     uninit_user_lib(libh_b); 
     MPI_Finalize(); 
   }

Код инициализации библиотеки пользователя:

   void init_user_lib(MPI_Comm comm, user_lib_t **handle) 
   { 
     user_lib_t *save; 

     user_lib_initsave(&save); /* локально */ 
     MPI_Comm_dup(comm, &(save->comm)); 

      ... 

     *handle = save; 
   }

Пользовательский код запуска:

   void user_start_op(user_lib_t *handle, void *data) 
   { 
     MPI_Irecv(..., handle->comm, &(handle->irecv_handle)); 
     MPI_Isend(..., handle->comm, &(handle->isend_handle)); 
   }

Пользовательский код очистки связи:

   void user_end_op(user_lib_t *handle)
   {
     MPI_Status *status;
     MPI_Wait(handle -> isend_handle, status);
     MPI_Wait(handle -> irecv_handle, status);
   }

Код очистки обьекта пользователя:

   void uninit_user_lib(user_lib_t *handle)
   {
     MPI_Comm_free(&(handle -> comm));
     free(handle);
   }



Alex Otwagin 2002-12-10



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру