مشاركة عبر


دالة MPI_Alltoallw

يجمع البيانات من البيانات ويبعثرها إلى جميع أعضاء المجموعة. الدالة MPI_Alltoallw هي الشكل الأكثر عمومية لتبادل البيانات الكامل في واجهة برمجة التطبيقات هذه. MPI_Alltoallw تمكين مواصفات منفصلة للعدد والإزاحة ونوع البيانات.

بناء الجملة

int MPIAPI MPI_Alltoallw(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts[],
  _In_  int          *sdispls[],
  _In_  MPI_Datatype sendtypes[],
  _Out_ void         *recvbuf,
  _In_  int          *recvcounts[],
  _In_  int          *rdispls[],
  _In_  MPI_Datatype recvtypes[],
        MPI_Comm     comm
);

المعلمات

  • sendbuf [in]
    المؤشر إلى البيانات التي سيتم إرسالها إلى جميع العمليات في المجموعة. يتم تحديد عدد ونوع البيانات للعناصر في المخزن المؤقت في معلمات sendcountوsendtype . يتوافق كل عنصر في المخزن المؤقت مع عملية في المجموعة.

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

    يجب أن يكون للبيانات التي يتم إرسالها وتلقيها نفس خريطة النوع، كما هو محدد بواسطة صفيف recvcounts ومعلمة recvtype ، ويتم قراءتها من مواقع المخزن المؤقت للاستلام كما هو محدد بواسطة المعلمة rdispls .

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

  • sdispls [in]
    موقع البيانات لكل عملية اتصال بالبايت بالنسبة إلى معلمة sendbuf .

    يحدد الإدخال j الإزاحة المتعلقة بمعلمة sendbuf التي يجب أخذ البيانات الصادرة منها الموجهة للعملية j.

  • أنواع الإرسال [in]
    نوع البيانات لكل عنصر من العناصر في المخزن المؤقت للإرسال. يحدد الإدخال j نوع البيانات التي يتم إرسالها لمعالجة j في المجموعة.

  • recvbuf [out]
    المؤشر إلى مخزن مؤقت يحتوي على البيانات التي يتم تلقيها من كل عملية. يتم تحديد رقم ونوع البيانات للعناصر في المخزن المؤقت في معلمات recvcount و recvtype .

  • عمليات الاستصلاح [in]
    عدد عناصر البيانات من كل عملية اتصال في المخزن المؤقت للاستلام.

  • rdispls [in]
    موقع البيانات من كل عملية اتصال بالبايت بالنسبة إلى معلمة recvbuf . يحدد الإدخال i الإزاحة المتعلقة بمعلمة recvbuf التي سيتم وضع البيانات الواردة فيها من العملية i.

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

  • أنواع مستطيلة [في]
    نوع البيانات لكل عنصر في المخزن المؤقت. يحدد الإدخال i نوع البيانات التي يتم تلقيها من العملية i.

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

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

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

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

Fortran

    MPI_ALLTOALLW(SENDBUF, SENDCOUNT, SDISPLS, SENDTYPE, RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPE,COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPES(*), SDISPLS(*), RECVCOUNTS(*), RDISPLS(*), RECVTYPE, COMM, IERROR

الملاحظات

هام

للسماح بأقصى قدر من المرونة، يتم تحديد إزاحة الكتل داخل المخازن المؤقتة لإرسال واستقبال بالبايت. 

جميع المعلمات مهمة في جميع العمليات. يجب أن تكون معلمة comm متطابقة في جميع العمليات.

إذا كانت معلمة comm تشير إلى intracommunicator، فإن كتلة jth التي يتم إرسالها من العملية I يتم تلقيها بواسطة العملية j ويتم وضعها في كتلة ith من المخزن المؤقت للاستلام. هذه الكتل لا يجب أن يكون لها نفس الحجم.

يجب أن يكون توقيع النوع المحدد بواسطة معلمات sendcounts[j]وsendtypes[j] للعملية أنا مساويا لتوقيع النوع المقترن ب recvcounts[i] و recvtypes[i] في العملية j. لذلك، يجب أن تكون كمية البيانات المرسلة مساوية لكمية البيانات التي يتم تلقيها بين أي زوج من العمليات. لا يزال يسمح بخرائط النوع المميزة بين المرسل والمتلقي.

نتيجة استدعاء إلى الدالة MPI_Alltoallw كما لو أن كل عملية أرسلت رسالة إلى كل عملية أخرى مع MPI_Send(sendbuf+sdispls[i],sendcounts[i],sendtypes[i] ,i,...)، وتلقيت رسالة من كل عملية أخرى مع استدعاء إلى MPI_Recv(recvbuf+rdispls[i],recvcounts[i],recvtypes[i] ,i,...).

يشير تحديد الخيار الموضعي إلى أن نفس كمية ونوع البيانات يتم إرسالها وتلقيها بين أي عمليتين في مجموعة communicator. يمكن لأزواج مختلفة من العمليات تبادل كميات مختلفة من البيانات. يجب على المستخدمين التأكد من أن recvcounts[j] و recvtype عند العملية تتطابق معrecvcounts[i] و recvtype على العملية j.

إذا كانت معلمة comm تشير إلى متداخل، فإن النتيجة كما لو أن كل عملية في المجموعة A ترسل رسالة إلى كل عملية في المجموعة B، والعكس صحيح. يجب أن يكون المخزن المؤقت j th send من العملية i في المجموعة A متسقا مع المخزن المؤقت ith تلقي العملية j في المجموعة 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_Alltoallv

MPI_Gather

MPI_Scatter

MPI_Send

MPI_Recv