Page 226 - 6571
P. 226
користанням створений тип має бути оголошений за допомогою
функції:
int MPI_Type_commit(MPI_Datatype *type)
де type – оголошуваний тип даних.
При завершенні використання похідний тип має бути видале-
ний за допомогою функції:
int MPI_Type_free(MPI_Datatype *type)
де type – тип даних, що видаляється.
Разом з розглянутими методами конструювання похідних ти-
пів в MPI передбачений і явний спосіб збирання і розбирання по-
відомлень, що містять значення різних типів і розташовуються в
різних областях пам’яті.
Для використання цього підходу має бути визначений буфер
пам’яті достатнього розміру для збирання повідомлення. Дані, що
входять до складу повідомлення дані мають бути упаковані у бу-
фер за допомогою функції:
int MPI_Pack(void *data, int count, MPI_Datatype type,
void *bufint bufsize, int *bufpos, MPI_Comm comm)
де data – буфер пам’яті з елементами для упаковки;
count – кількість елементів у буфері;
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, co
m);
225