مشاركة عبر


MPI_Reduce الدالة

ينفذ عملية تقليل عمومية عبر جميع أعضاء المجموعة. يمكنك تحديد عملية رياضية أو منطقية معرفة مسبقا أو عملية معرفة من قبل التطبيق.

بناء الجملة

int MPIAPI MPI_Reduce(
  _In_      void         *sendbuf,
  _Out_opt_ void         *recvbuf,
            int          count,
            MPI_Datatype datatype,
            MPI_Op       op,
            int          root,
            MPI_Comm     comm
);

المعلمات

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

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

  • recvbuf [out, optional]
    المقبض إلى مخزن مؤقت لتلقي نتيجة عملية التقليل. هذه المعلمة مهمة فقط في عملية الجذر.

  • count
    عدد العناصر التي يجب إرسالها من هذه العملية.

  • Datatype
    نوع البيانات لكل عنصر في المخزن المؤقت. يجب أن تكون هذه المعلمة متوافقة مع العملية كما هو محدد في معلمة العملية .

  • المرجع
    عملية التخفيض العالمية التي يجب تنفيذها. يمكن أن يشير المقبض إلى عملية مضمنة أو معرفة من قبل التطبيق. للحصول على قائمة بالعمليات المعرفة مسبقا، راجع موضوع MPI_Op .

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

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

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

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

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

Fortran

    MPI_REDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT, COMM, IERROR) 
        <type> SENDBUF(*), RECVBUF(*) 
        INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERROR

الملاحظات

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

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

  1. اجمع جميع المعاملات في عملية واحدة، على سبيل المثال، باستخدام الدالة MPI_Gather .
  2. تطبيق عملية التقليل بالترتيب المطلوب، على سبيل المثال، باستخدام الدالة MPI_Reduce_local .
  3. إذا لزم الأمر، فبث النتيجة أو انبعث منها إلى العمليات الأخرى.

ملاحظة

من الممكن توفير عمليات مختلفة يحددها المستخدم للدالة MPI_Reduce في كل عملية. لا تحدد الدالة العمليات المستخدمة على أي معامل في هذه الحالة. لا يمكنك إجراء أي افتراضات حول كيفية تنفيذ الدالة MPI_Reduce . من الأكثر أمانا تحديد نفس العملية في كل عملية.

 

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

يسمح بأنواع البيانات المتداخلة في المخازن المؤقتة المرسلة، ولكن ليس في المخازن المؤقتة المتلقية. يمكن أن تعطي أنواع البيانات المتداخلة في المخازن المؤقتة المتلقية نتائج لا يمكن التنبؤ بها وتعتبر خطأ.

إذا كانت معلمة comm تشير إلى intracommunicator، فإن الدالة MPI_Reduce تجمع بين العناصر كما هو محدد في مخزن الإدخال المؤقت لكل عملية في المجموعة، وباستخدام العملية المحددة، ترجع القيمة المجمعة في المخزن المؤقت للإخراج لعملية الجذر.

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

يمكن أن توفر كل عملية عنصرا واحدا أو تسلسلا من العناصر، وفي هذه الحالة يتم تنفيذ العملية لكل عنصر في كل إدخال من التسلسل. على سبيل المثال، إذا كانت العملية MPI_MAX وكان المخزن المؤقت للإرسال يحتوي على عنصرين هما أرقام نقاط عائمة، فسيتلقى recvbuf(1) الحد الأقصى العمومي من (sendbuf(1)) ويتلقى recvbuf(2) الحد الأقصى العمومي ل (sendbuf(2)).

إذا كانت معلمة comm تشير إلى متداخل، فإن الاستدعاء يتضمن جميع العمليات في جهاز الاتصال البيني، ولكن مع مجموعة واحدة، المجموعة أ، التي تحدد عملية الجذر. تقوم جميع العمليات في المجموعة الأخرى، المجموعة ب، بتعيين نفس القيمة في معلمة الجذر ، أي ترتيب عملية الجذر في المجموعة A. تعين عملية الجذر القيمة MPI_ROOT في المعلمة الجذر . تعين جميع العمليات الأخرى في المجموعة A القيمة MPI_PROC_NULL في المعلمة الجذر . فقط إرسال معلمات المخزن المؤقت مهمة في عمليات المجموعة 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

MPI_Op

MPI_Bcast