Page 54 - 6601
P. 54

MPI_Scatterv(pMatrix , pSendNum, pSendInd, MPI_DOUBLE,
                                                  pProcRows,pSendNum[ProcRank],
                                                  MPI_DOUBLE, 0, MPI_COMM_WORLD);
                                // Звільнення  пам’яті
                                delete [] pSendNum;
                                delete [] pSendInd;
                            }
                                    У  вищенаведеному  фрагменті  використано  функцію
                            MPI_Scatterv,  яка  дозволяє  посилати  кожному  процесу  різну
                            кількість  елементів.  Початок  розташування  елементів  блоку,  що
                            посилається i-му процесу, задається в масиві зсувів displs, а число
                            посиланих  елементів  –  в  масиві  sendcounts.    Формат  функції
                            наступний:
                            int MPI_Scatterv(void* sendbuf, int *sendcounts, int *displs,
                                          MPI_Datatype sendtype, void* recvbuf, int recvcount,
                                          MPI_Datatype recvtype, int root, MPI_Comm comm),
                            де sendbuf (IN)– адреса початку буфера посилки (використовується
                                   тільки в процесі-відправнику root);
                                sendcounts  (IN)–  цілочисельний  масив  (розмір  рівний  числу
                                   процесів  в  групі),  що  містить  число  елементів,  які
                                   надсилаються кожному процесу;
                                displs(IN) – цілочисельний масив (розмір рівний числу процесів
                                   в  групі),  i-те  значення  визначає  зсув  відносно  початку
                                   sendbuf для даних, що посилаються процесу i;
                                sendtype (IN)– тип посиланих елементів;
                                recvbuf (OUT)– адреса початку буфера прийому;
                                recvcount (IN)– число отримуваних елементів;
                                recvtype (IN)– тип отримуваних елементів;
                                root (IN)– номер процесу-відправника;
                                comm (IN)– комунікатор(група процесів).










                                                           52
   49   50   51   52   53   54   55   56   57   58   59