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
   221   222   223   224   225   226   227   228   229   230   231