Page 178 - 4868
P. 178
Ошибка! Стиль не определен. 176
type – тип даних для елементів, що упаковуються;
buf – буфер пам’яті для упаковки;
bufsize – розмір буфера у байтах;
bufpos – позиція для початку запису у буфер (у байтах від початку
буфера);
comm – комунікатор для упакованого повідомлення.
Функція MPI_Pack упаковує count елементів з буфера data у буфер
упаковки buf, починаючи з позиції bufpos.
Початкове значення змінної bufpos має бути сформоване до початку
упаковки і далі встановлюється функцією MPI_Pack. Виклик функції
MPI_Pack здійснюється послідовно для упаковки усіх необхідних даних. Так,
в раніше розглянутому прикладі набору змінних a, b і n для їх упаковки
необхідно виконати:
bufpos = 0;
MPI_Pack(&a, 1, MPI_DOUBLE,buf, buflen, &bufpos, comm);
MPI_Pack(&b, 1, MPI_DOUBLE,buf, buflen,&bufpos, comm);
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 – комунікатор для упакованого повідомлення.