MPI-2 вводит новые функции кэширования атрибутов по следующим двум причинам:
Прежние функции кэширования, хотя они и устарели, по-прежнему являются частью стандарта MPI.
Устаревшие функции кэширования для MPI-I перечислены ниже. Нейтральные по отношению к языку определения и привязки для Си те же самые. Привязки для языка ФОРТРАН отличаются тем, что все аргументы в новых функциях имеют тип INTEGER (KIND=MPI_INTEGER_KIND).
1) Функция MPI_KEYVAL_CREATE (даны представления для языков Си и ФОРТРАН)
MPI_KEYVAL_CREATE (copy_fn, delete_fn, keyval, extra_state)
int MPI_Keyval_create (MPI_Copy_fmiction *copy_fn,
MPI_Delete_fmiction *delete_fn, int *keyval, void* extra_state)
MPI_KEYVAL_CREATE (COPY_FN, DELETE_FN, KEYVAL, EXTRA_STATE, IERROR)
EXTERNAL COPY_FN, DELETE_FN
INTEGER KEYVAL, EXTRA_STATE, IERROR
замещается новой функцией MPI_COMM_CREATE_KEYVAL, синтаксис которой приведен ниже.
MPI_COMM_CREATE_KEYVAL(comm_copy_attr_fn,
comm_delete_attr_fn, comm_keyval, extra_state)
IN | comm_copy_attr_fn | функция копирования для comm_keyval (функция) | |
IN | comm_delete_attr_fn | функция удаления для comm_keyval (функция) | |
OUT | comm_keyval | значения ключа для будущего обращения (целое) | |
IN | extra_state | дополнительное состояние для функций обратного вызова |
int MPI_Comm_create_keyval(
MPI_Comm_copy_attr_function *comm_copy_attr_fn,
MPI_Comm_delete_attr_function *comm_delete_attr_fn,
int *comm_keyval, void *extra_state)
MPI_COMM_CREATE_KEYVAL(COMM_COPY_ATTR_FN, COMM_DELETE_ATTR_FN,
COMM_KEYVAL,
EXTRA_STATE, IERROR)
EXTERNAL COMM_COPY_ATTR_FN, COMM_DELETE_ATTR_FN
INTEGER COMM_KEYVAL, IERROR
INTEGER(KIND=MPI_ADDRESS_KIND) EXTRA_STATE
static int MPI::Comm::Create_keyval(
MPI::Comm::Copy_attr_function* comm_copy_attr_fn,
MPI::Comm::Delete_attr_function* comm_delete_attr_fn, void* extra_state)
2) Функция MPI_KEYVAL_FREE (даны представления для языков Си и ФОРТРАН)
MPI_KEYVAL_FREE(keyval)
int MPI_Keyval_free(int *keyval)
MPI_KEYVAL_FREE(KEYVAL, IERROR)
INTEGER KEYVAL, IERROR
замещается функцией MPI_COMM_FREE_KEYVAL, синтаксис которой приведен ниже.
MPI_COMM_FREE_KEYVAL(comm_keyval)
INOUT | comm_keyval | значение ключа (целое) |
int MPI_Comm_free_keyval(int *comm_keyval)
MPI_COMM_FREE_KEYVAL(COMM_KEYVAL, IERROR)
INTEGER COMM_KEYVAL, IERROR
static void MPI::Comm::Free_keyval(int& comm_keyval)
3) Функция MPI_ATTR_PUT (даны представления для языков Си и ФОРТРАН)
MPI_ATTR_PUT(comm, keyval, attribute_val)
int MPI_Attr_put (MPI_Conim comm, int keyval, void* attribute_val)
MPI_ATTR_PUT (COMM, KEYVAL, ATTRIBUTE_VAL, IERROR)
INTEGER COMM, KEYVAL, ATTRIBUTE_VAL, IERROR
замещается функцией MPI_COMM_SET_ATTR, синтаксис которой приведен ниже.
MPI_COMM_SET_ATTR(comm, comm_keyval, attribute_val)
INOUT | comm | коммуникатор, из которого будут подключаться атрибуты (дескриптор) | |
IN | comm_keyval | значение ключа (дескриптор) | |
IN | attribute_val | значение атрибута |
int MPI_Comm_set_attr(MPI_Comm comm,
int comm_keyval, void *attribute_val)
MPI_COMM_SET_ATTR(COMM, COMM_KEYVAL, ATTRIBUTE_VAL, IERROR)
INTEGER COMM, COMM_KEYVAL, IERROR
INTEGER(KIND=MPI_ADDRESS_KIND) ATTRIBUTE_VAL
void MPI::Comm::Set_attr(int comm_keyval,
const void* attribute_val) const
4) Функция MPI_ATTR_GET (даны представления для языков Си и ФОРТРАН)
MPI_ATTR_GET(comm, keyval, attribute_val, flag)
int MPI_Attr_get (MPI_Comm comm, int keyval,
void *attribute_val, int *flag)
MPI_ATTR_GET(COMM, KEYVAL, ATTRIBUTE_VAL, FLAG, IERROR)
INTEGER COMM, KEYVAL, ATTRIBUTE_VAL, IERROR LOGICAL FLAG
замещается функцией MPI_COMM_GET_ATTR, синтаксис которой представлен ниже.
MPI_COMM_GET_ATTR(comm, comm_keyval, attribute_val, flag)
IN | comm | коммуникатор, к которому подключаются атрибуты (дескриптор) | |
IN | comm_keyval | значение ключа (целое) | |
OUT | attribute_val | значение атрибута, пока отсутствует состояние flag = false | |
OUT | flag | false, если никакой атрибут не связан с ключом (логическое значение) |
int MPI_Comm_get_attr(MPI_Comm comm,
int comm_keyval, void *attribute_val, int *flag)
MPI_COMM_GET_ATTR(COMM, COMM_KEYVAL, ATTRIBUTE_VAL, FLAG, IERROR)
INTEGER COMM, COMM_KEYVAL, IERROR
INTEGER(KIND=MPI_ADDRESS_KIND) ATTRIBUTE_VAL
LOGICAL FLAG
bool MPI::Comm::Get_attr(int comm_keyval,
void* attribute_val) const
5) Функция MPI_ATTR_DELETE (даны представления для языков Си и ФОРТРАН)
MPI_ATTR_DELETE(comm, keyval)
int MPI_Attr_delete(MPI_Comm comm, int keyval)
MPI_ATTR_DELETE(COMM, KEYVAL, IERROR)
INTEGER COMM, KEYVAL, IERROR
замещается функцией MPI_COMM_DELETE_ATTR, синтаксис которой представлен ниже.
MPI_COMM_DELETE_ATTR(comm, comm_keyval)
INOUT | comm | коммуникатор, из которого удаляются атрибуты (дескриптор) | |
IN | comm_keyval | значение ключа (целое) |
int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval)
MPI_COMM_DELETE_ATTR(COMM, COMM_KEYVAL, IERROR)
INTEGER COMM, COMM_KEYVAL, IERROR
void MPI::Comm::Delete_attr(int comm_keyval)