The OpenNET Project / Index page

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

Каталог документации / Раздел "Программирование, языки" / Оглавление документа
next up previous contents
Next: Способность языка к взаимодействию Up: Разное Previous: Объект Info   Contents

Распределение памяти

В некоторых системах операции передачи сообщений и удаленный доступ к памяти (RMA) выполняются быстрее при доступе к специально распределенной памяти (например, память, которая разделена другими процессами в группе связи на SMP). MPI обеспечивает механизм для распределения и освобождения такой специальной памяти. Использование такой памяти для передачи сообщений или RMA не обязательно, и эта память может использоваться без ограничений, как любая другая динамически распределенная память. Однако, реализации могут ограничить использование функций MPI_WIN_LOCK и MPI_WIN_UNLOCK к окнам, распределенным в такой памяти (см. Раздел 6.4.3.)

MPI_ALLOC_MEM(size, info, baseptr)

IN size размер сегмента памяти в байтах (неотрицательное целое число)  
IN info аргумент информации (указатель)  
OUT baseptr указатель на начало распределенного сегмента памяти  

int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr)
MPI_ALLOC_MEM(SIZE, INFO, BASEPTR, IERROR)
    INTEGER INFO, IERROR
    INTEGER(KIND=MPI_ADDRESS_KIND) SIZE, BASEPTR
void* MPI::Alloc_mem(MPI::Aint size, const MPI::Info& info)

Аргумент info может использоваться, чтобы обеспечить директивы, которые управляют желательным расположением распределенной памяти. Такая директива не затрагивает семантику вызова. Действительные значения аргумента info зависят от реализации; нулевое директивное значение info=MPI_INFO_NULL всегда действительно.

Функция MPI_ALLOC_MEM может возвращать код ошибки класса MPI_ERR_NO_MEM, чтобы указать, что она потерпела неудачу, потому что не хватает памяти.

MPI_FREE_MEM(base)

IN base начальный адрес сегмента памяти, распределенного MPI_ALLOC_MEM  

int MPI_Free_mem(void *base)
MPI_FREE_MEM (BASE, IERROR)
    <type> BASE(*)
    INTEGER IERROR
void MPI::Free_mem(void *base)

Функция MPI_FREE_MEM может возвратить код ошибки класса MPI_ERR_BASE, чтобы указать недействительный основной аргумент.

Объяснение: Привязки Си и С++ MPI_ALLOC_MEM и MPI_FREE_MEM подобны привязкам для вызовов malloc и free из библиотек Си: вызов MPI_Alloc_mem(..., &base) должен быть парным вызову MPI_Free_mem(base) (еще один уровень косвенности). Оба аргумента объявлены того же самого типа void*, чтобы облегчить приведение типа. Привязка ФОРТРАН совместима с привязками С++ и Си: Вызов MPI_ALLOC_MEM языка ФОРТРАН возвращает в baseptr (оцененное целое число) адрес распределенной памяти. Аргумент base функции MPI_FREE_MEM - аргумент выбора, который передает (ссылается на) переменную, сохраненную в том расположении. []

Совет разработчикам: Если MPI_ALLOC_MEM распределяет специальную память, то должно использоваться оформление, подобное оформлению функций Си malloc и free, чтобы выяснить размер сегмента памяти, когда сегмент освобожден. Если никакая специальная память не используется, MPI_ALLOC_MEM просто вызывает malloc, и MPI_FREE_MEM вызывает free.

Вызов MPI_ALLOC_MEM может использоваться в разделяемых системах памяти, чтобы распределить память в разделяемом сегменте памяти. []

Пример 4.7 Пример использования MPI_ALLOC_MEM в языке ФОРТРАН с поддержкой указателя. Мы принимаем 4-байтовые REAL, и предполагаем, что указатели являются адрес-размерными.

REAL A
POINTER (P, A(100,100))   ! память не распределена
CALL MPI_ALLOC_MEM(4*100*100, MPI_INFO_NULL, P, IERR)
! память распределена
...
A(3,5) = 2.71;
...
CALL MPI_FREE_MEM(A, IERR) ! память освобождена

Так как стандартный ФОРТРАН не поддерживает указатели (Си-подобные), этот код - не код ФОРТРАН90 или ФОРТРАН77. Некоторые компиляторы (в частности, во время создания документа, g77 и компиляторы языка ФОРТРАН для Intel) не поддерживают этот код.

Пример 4.8 Тот же самый пример в Си:

float (* f)[100][100] ;
MPI_Alloc_mem(sizeof(float)*100*100, MPI_INFO_NULL, &f);
(*f)[5][3] = 2.71;
...
MPI_Free_mem(f);



Alex Otwagin 2002-12-10



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

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