Page 227 - 6571
P. 227
MPI_Pack(&b, 1, MPI_DOUBLE, buf, buflen, &bufpos, co
m);
MPI_Pack(&n, 1, MPI_INT, buf, buflen, &bufpos, comm);
Для визначення необхідного розміру буфера для упаковки
може бути застосована функція:
int MPI_Pack_size(int count, MPI_Datatype type,
MPI_Comm comm, int *size)
де count – кількість елементів у буфері;
type – тип даних для елементів, що упаковуються;
comm – комунікатор для упакованого повідомлення;
size – розрахований розмір буфера.
Після упаковки усіх необхідних даних підготовлений буфер
може бути використаний у функціях передачі даних з вказівкою
типу MPI_PACKED.
Після отримання сполучення з типом MPI_PACKED дані мо-
жуть бути розпаковані за допомогою функції:
int MPI_Unpack(void *buf, int bufsize, int *bufpos,
void *data, int count, MPI_Datatype type,
MPI_Comm comm)
де buf – буфер пам’яті з упакованими даними;
bufsize – розмір буфера у байтах;
bufpos – позиція початку даних у буфері (у байтах від поча-
тку буфера);
data – буфер пам’яті для даних, що розпаковуються;
count – кількість елементів у буфері;
type – тип даних, що розпаковуються;
comm – комунікатор для упакованого повідомлення.
Функція MPI_Unpack розпаковує, починаючи з позиції bu
pos, чергову порцію даних з буфера buf і поміщає розпаковані
дані у буфер data.
Початкове значення змінної bufpos має бути сформоване до
початку розпаковування і далі встановлюється функцією M
I_Unpack. Виклик функції MPI_Unpack здійснюється послідовно
для розпаковування усіх упакованих даних, при цьому порядок
розпаковування повинен відповідати порядку упаковки. Так, в
раніше розглянутому прикладі упаковки для розпаковування упа-
кованих даних необхідно виконати:
226