مشاركة عبر


الدالة MPI_Gatherv

جمع بيانات متغيرة من جميع أعضاء المجموعة إلى عضو واحد. تضيف الدالة MPI_Gatherv مرونة إلى الدالة MPI_Gather من خلال السماح بعدد مختلف من البيانات من كل عملية.

بناء الجملة

int MPIAPI MPI_Gatherv(
  _In_      void         *sendbuf,
            int          sendcount,
            MPI_Datatype sendtype,
  _Out_opt_ void         *recvbuf,
  _In_opt_  int          *recvcounts[],
  _In_opt_  int          *displs[],
            MPI_Datatype recvtype,
            int          root,
            MPI_Comm     comm
);

المعلمات

  • sendbuf [in]
    المقبض إلى مخزن مؤقت يحتوي على البيانات التي سيتم إرسالها إلى عملية الجذر.

    إذا كانت معلمة comm تشير إلى أداة داخلية، يمكنك تحديد خيار موضعي عن طريق تحديد MPI_IN_PLACE في جميع العمليات. يتم تجاهل معلمات sendcountوsendtype . تدخل كل عملية البيانات في عنصر مخزن الاستلام المؤقت المقابل. ترسل العملية nالبيانات إلى عنصر nth للمخزن المؤقت للاستلام. من المفترض أن تكون البيانات التي يتم إرسالها بواسطة العملية الجذر في المكان الصحيح في المخزن المؤقت للتلقي.

  • عدد الإرسال
    عدد العناصر في المخزن المؤقت الإرسال. إذا كان عدد الإرسال صفرا، يكون جزء البيانات من الرسالة فارغا.

  • نوع الإرسال
    نوع البيانات لكل عنصر في المخزن المؤقت.

  • recvbuf [خارج، اختياري]
    المقبض إلى مخزن مؤقت على العملية الجذر التي تحتوي على البيانات التي يتم تلقيها من كل عملية، بما في ذلك البيانات التي يتم إرسالها بواسطة عملية الجذر. هذه المعلمة مهمة فقط في عملية الجذر. يتم تجاهل المعلمة recvbuf لجميع العمليات غير الجذرية.

  • recvcounts[] [in, optional]
    عدد العناصر التي يتم تلقيها من كل عملية. يتوافق كل عنصر في الصفيف مع مرتبة عملية الإرسال. إذا كان العدد صفرا، يكون جزء البيانات من الرسالة فارغا. هذه المعلمة مهمة فقط في عملية الجذر.

  • displs[] [in, optional]
    موقع البيانات من كل عملية اتصال، بالنسبة إلى معلمة recvbuf . يتم وضع البيانات المستلمة من العملية j في المخزن المؤقت لتلقي عناصر إزاحة عملية الجذر displs[j] من مؤشر sendbuf .

    في صفائف المعلمات recvbuf و recvcounts و displpls، يشير العنصر nمن كل صفيف إلى البيانات التي يتم تلقيها من عملية n th communicator.

    هذه المعلمة مهمة فقط في عملية الجذر.

  • نوع مستطيل
    نوع البيانات لكل عنصر في المخزن المؤقت. هذه المعلمة مهمة فقط في عملية الجذر.

  • جذر
    رتبة عملية الاستلام داخل التواصل المحدد.

  • الاتصالات
    مقبض MPI_Comm communicator.

القيمة المُرجعة

إرجاع MPI_SUCCESS عند النجاح. وإلا، فإن القيمة المرجعة هي رمز خطأ.

في Fortran، يتم تخزين القيمة المرجعة في المعلمة IERROR .

Fortran

    MPI_GATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), RECVTYPE, ROOT, COMM, IERROR

الملاحظات

جميع معلمات الدالة مهمة في عملية الجذر، فقط sendbufوsendcountوsendtypeوالجذروcomm مهمة في العمليات الأخرى. يجب أن تكون معلمات الجذروcomm متطابقة في جميع العمليات.

بشكل عام، يسمح بأنواع البيانات المشتقة لكل من معلمات نوع الإرسال ونوع المستطيل . يجب أن يكون توقيع النوع كما هو محدد بواسطة معلمات نوع الإرسال ونوع المستطيل في كل عملية مساويا لتوقيع نوع معلمات recvcount وs sendcount في العملية الجذر. يجب أن تكون كمية البيانات المرسلة مساوية لكمية البيانات التي يتم تلقيها بين عملية الجذر وكل عملية فردية. لا يزال يسمح بخرائط النوع المميزة بين المرسل والمتلقي.

يجب ألا تتسبب مواصفات العد والأنواع في كتابة أي موقع على الجذر أكثر من مرة واحدة. مثل هذه المكالمة خاطئة.

إذا كانت معلمة comm تشير إلى intracommunicator، فإن جميع العمليات ترسل محتويات المخزن المؤقت لإرسالها إلى عملية الجذر. تتلقى عملية الجذر الرسائل وتخزنها بترتيب الرتبة. النتيجة كما لو أن كل عملية من العمليات n في المجموعة التي يتم تنفيذ استدعاء إلى MPI_Send(sendbuf, sendcount, sendtype, root, …)؛ وكان الجذر قد نفذ استدعاءات n إلى MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …). يتم الحصول على قيمة extent(recvtype) باستخدام الدالة MPI_Type_get_extent . الوصف البديل للدالة هو أن الرسائل n التي يتم إرسالها بواسطة العمليات في المجموعة متسلسلة بترتيب الرتبة، ويتم تلقي الرسالة الناتجة بواسطة الجذر كما لو كان باستدعاء إلى MPI_RECV(recvbuf, recvcountn, recvtype, ...). يتم تجاهل المخزن المؤقت للتلقي لجميع العمليات غير الجذرية.

إذا كانت معلمة comm تشير إلى متداخل، فإن الاستدعاء يتضمن جميع العمليات في التداخل، ولكن مع مجموعة واحدة، المجموعة A، التي تحدد عملية الجذر. تقوم جميع العمليات في المجموعة الأخرى، المجموعة ب، بتعيين نفس القيمة في معلمة الجذر ، أي ترتيب عملية الجذر في المجموعة A. تعين عملية الجذر القيمة MPI_ROOT في المعلمة الجذر . تعين جميع العمليات الأخرى في المجموعة A القيمة MPI_PROC_NULL في المعلمة الجذر . يتم بث البيانات من العملية الجذر إلى جميع العمليات في المجموعة B. يجب أن تكون معلمات المخزن المؤقت للعمليات في المجموعة B متسقة مع معلمة المخزن المؤقت لعملية الجذر.

المتطلبات

منتج

حزمة HPC Pack 2012 MS-MPI القابلة لإعادة التوزيع، حزمة HPC Pack 2008 R2 MS-MPI القابلة لإعادة التوزيع، حزمة HPC Pack 2008 MS-MPI القابلة لإعادة التوزيع أو الأدوات المساعدة للعميل HPC Pack 2008

الرأس

Mpi.h; Mpif.h

المكتبة

Msmpi.lib

Dll

Msmpi.dll

راجع أيضًا

الدالات الجماعية ل MPI

MPI_Datatype

MPI_Gather