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