stanford-oval/wikipedia huggingface dataset:
حوسبة متوازية

تم تصميم الحاسبات الفائقة الكبيرة مثل الجين الأزرق (بالإنجليزية: Blue Gene/P)‏ من شركة آي بي إم (بالإنجليزية: IBM)‏ لاستغلال الحوسبة المتوازية بشكل كبير.
الحوسبة المتوازية (بالإنجليزية: Parallel computing)‏ هيَ إحدى أشكال الحوسبة التي يجري فيها تنفيذ العديد من العمليات أو الحسابات في وقت واحد. عادة يتم تقسيم المشكلات الكبيرة إلى مشكلات أصغر، والتي بدورها يمكن حلها في نفس الوقت. هناك عدة أشكال مختلفة للحوسبة المتوازية: التوازي على مستوى البت (بالإنجليزية: Bit-level)‏، والتوازي على مستوى التعليمات (بالإنجليزية: Instruction-level parallelism)‏، وتوازي البيانات (بالإنجليزية: Data parallelism)‏، وتوازي المهام (بالإنجليزية: Task parallelism)‏. استخدم التوازي لسنوات عديدة، وخاصة في الحوسبة عالية الأداء، ولكن الاهتمام به ازداد أكثر في الآونة الأخيرة بسبب العوائق المادية التي تحول دون زيادة التردد . أصبحت زيادة استهلاك أجهزة الحاسوب للطاقة (وبالتالي الحرارة الناتجة عن ذلك) مصدرًا للقلق في السنوات الأخيرة، ولذلك أصبحت الحوسبة المتوازية النموذج المهيمن في معمارية الحاسوب، وخاصة في نماذج المعالجات متعددة الأنوية.
التوازي مقابل التزامن
يُمكن أن تُصنّف الحواسيب المتوازية وفقًا لتصنيف المستوى الذي يدعم العتاد فيه عملية الموازاة. فالحواسيب متعددة المعالجات أو متعددة الأنوية تحتوي على عناصر معالجة متعددة داخل جهاز واحد، في حين أن العناقيد (clusters)، والمعالجات المتوازية الهائلة (MPPS)، ومصفوفات الحواسيب تستخدم عدة حواسيب للعمل على نفس المهمة. تُستخدم هندسة الحواسيب المتوازية المتخصصة أيضا في بعض الأحيان في المُعالجات التقليدية لتسريع أداء مهام محددة.
تُعتبر كتابة البرامج الموجهة للحواسيب المتوازية أكثر صعوبة من البرامج ذات المهام التسلسلية، لأن توازي المهام يسمح بظهور أنواع جديدة محتملة من الأخطاء البرمجية، والتي تعد مشكلة حالة التسابق أحد أشهر أمثلتها.
عادة ما تكون الاتصالات والتزامن بين المهام الفرعية المُختلفة إحدى أكبر العقبات أمام الحصول على برامج متوازية عالية الأداء. يخضع مقدار التسريع في برنامج معين نتيجة لعملية موازة لقانون أمدال.
الخلفية

عادة ما تكون البرامج الحاسوبية مكتوبة بطريقة تسلسلية. فلحل مشكلة ما، تُبنى وتطبق خوارزمية على شكل تعليمات متسلسلة. وتُنفذ هذه التعليمات على وحدة المعالجة المركزية لجهاز حاسوب واحد. حيث تنفذ تعليمة واحدة فقط في نفس الوقت، وبعدَ الانتهاء منها تُنفذ التعليمة التالية.
أما الحوسبة المتوازية فتستخدم في وَقت واحد عدة عناصر معالجة لحل مشكلة معينة. وتقسَّم المشكلة إلى أجزاء مستقلة بحيث يمكن لكل عنصر من عناصر المعالجة تنفيذ الجزء الخاص به من الخوارزمية في وقت واحد مع العناصر الأخرى. تتنوع العناصر المعالجة وتشمل موارد مختلفة مثل جهاز حاسوب واحد مع معالجات متعددة أو شبكة من عدة حواسيب أو معدات متخصصة أو أي مزيج مما ذكر.
كان رفعُ سرعة تنفيذ العمليات الهم الرئيسي لتحسين أداء الحواسيب منذ منتصف ثمانيات القرن العشرين وحتى عام 2004. حيث أن مدة تنفيذ برنامج تساوي عدد التعليمات مضروبًا في متوسط الوقت اللازم لتنفيذ تعليمة واحد. الحفاظ على كل شيء ثابتًا، وزيادة تردد الساعة الداخلية يخفض من متوسط الوقت المستغرق لتنفيذ تعليمة. وبالتالي يُقلل وقت التنفيذ لجميع البرامج ذات العمليات المحدودة.
يحسب استهلاك الشرائح للطاقة من خلال المعادلة P = C × V2 × F، حيث ترمز P إلى الطاقة، وترمز C إلى عدد المكثفات المستعملة أثناء عمل دورة كاملة (تتناسب مع عدد الترانزستورات التي تتغير مدخلاتها)، وترمز V إلى الجهد، أما F فترمز إلى تردد المعالج (دورة في الثانية). وتزيد زيادة التردد من كمية الطاقة المستهلكة. أجبَرَت زيادة استهلاك المعالجات للطاقة في النهاية شركة إنتل في مايو 2004على إلغاء إنتاج معالجاتها تيجاس وجهوك، والتي تعتبر عمومًا نهاية سياسة رفع التردد كنموذج شائع لمعمارية الحواسيب.
على الرغم من قضايا استهلاك الطاقة إضافة للتنبؤات المتكررة عن نهايته، فإن قانون مور ظل صحيحًا. فقد نصَّ قانون مور (الناتج عن ملاحظة تجريبية) على أن كثافة الترانزستورات في المعالجات الدقيقة تتضاعف كل 18 إلى 24 شهرًا. وبنهاية سياسة زيادة التردد، فقد أمكن استخدام هذه الترانزستورات الإضافية (التي لم تعد تستخدم لرفع التردد) لإضافة أجهزة أخرى من أجل إجراء حوسبة متوازية.
الخلفية > قانون أمدال، وقانون غوستافسون

المقالات الرئيسة: قانون أمدال قانون غوستافسون
بنظرة مثالية، فإن مقدار التسريع الناتج عن عملية الموازاة سيكون خطيا، أي بمضاعفة عدد عناصر المعالجة ينبغي خفض وقت التشغيل إلى النصف، وبمضاعفته مرة أخرى ينبغي خفض وقت التنفيذ إلى النصف مرة أخرى. ومع ذلك، عدد قليل جدا من الخوارزميات المتوازية تحقق مقدار التسريع المثالي. فمعظمها لديها مقدار تسريع قريب من مقدار التسريع المثالي عند استخدام أعداد قليلة من عناصر المعالجة، والذي يتحول إلى قيمة ثابتة عند استخدام عدد أكبر من عناصر المعالجة.
إن مقدار التسريع المحتمل لخوارزمية في بيئة حوسبة متوازية تحسب باستخدام قانون أمدال، والذي وضعه جين أمدال في ستينيات القرن العشرين. والذي ينص على أن أي جزء صغير من البرنامج لا يمكن موازاته سوف يحد من مقدار التسريع الإجمالي المتاح بعملية الموازاة. أي مشكلة رياضية أو هندسية كبيرة عادة ما تتألف من عدة أجزاء قابلة للموازاة وأجزاء أخرى غير قابلة للموازاة (أجزاء متسلسلة). وتعطى هذه العلاقة من المعادلة:
حيث S هو مقدار تسريع البرنامج (بصفته عاملا من عوامل وقت تنفيذ الخوارزمية التسلسلية الأصلية)، وP هو الجزء القابل للموازاة. إذا كان الجزء غير القابل للموازاة من برنامج يستهلك 10% من وقت التنفيذ، فإنه من غير الممكن أن نحصل على مقدار تسريع أكثر من عشرة أضعاف، بغض النظر عن عدد المعالجات التي تم إضافتها. وهذا يضع حدا أعلى للفائدة من إضافة وحدات تنفيذ متوازية أكثر. «عندما لا يمكن تقسيم مهمة بسبب قيود تمنع عملية التقسيم، فإن تطبيق مزيد من الجهد ليس له تأثير على الجدول الزمني. فحمل الطفل يأخذ تسعة أشهر ولا علاقة لذلك بعدد النسوة».
قانون غوستافسون هو قانون آخر في هندسة الحاسبات، ويرتبط ارتباطا وثيقا بقانون أمدال. ويمكن صياغته على النحو التالي:
حيث P هو عدد المعالجات، S هو مقدار التسريع وα هو الجزء غير القابل للموازاة من هذه العملية. يفترض قانون أمدال أن للمشكلة حجما ثابتا وأن حجم المقطع المتسلسل مستقل عن عدد المعالجات، في حين أن القانون غوستافسون لم يقم بهذه الافتراضات.
الخلفية > الاعتمادية

فهم الاعتمادية على البيانات أمر أساسي في تنفيذ الخوارزميات المتوازية. لا يمكن تشغيل برنامج بسرعة أكبر من أطول سلسلة من العمليات الحسابية المعتمدة على بعضها (المعروف باسم المسار الحرج)، لأن الحسابات التي تعتمد على حسابات سابقة في السلسلة يجب أن تنفذ بالترتيب. ومع ذلك، فإن معظم الخوارزميات لا تتكون من مجرد سلسلة طويلة من العمليات الحسابية المعتمدة على بعضها؛ عادة ما تكون هناك فرص لتنفيذ بالتوازي عمليات حسابية مستقلة.
ليكن Pi و Pj جزأين من برنامج. شروط برنشتاين  تصف متى يمكن تنفيذ جزأين مستقلين بشكل متواز. لكل Pi، افرض ان Ii يمثل كافة المتغيرات المدخلة وOi المتغيرات المخرجة، وكذلك الأمر مع Pj. فإن P i وPj مستقلان إذا حققا الشروط التالية:
I_{j}\cap O_{i}=\varnothing ,\,
I_{i}\cap O_{j}=\varnothing ,\,
O_{i}\cap O_{j}=\varnothing .\,
انتهاك الشرط الأول يسبب اعتمادية التتابع، بالاعتماد على نتائج الشرط الأول تنتج الجملة الثانية نتائجها. الشرط الثاني يمثل مضاد للتبعية، عندما (Pj) يحاول التصرف في متغير يحتاجه (Pi). الشرط الثالث والأخير يمثل التبعية في المخرجات: عندما تكتب الجملتين على نفس المخرج، يجب أن تأتي النتيجة النهائية من آخر جملة تنفذ منطقيا.
بالنظر إلى المهام التالية، والتي تمثل عدة أنواع من الاعتمادية:
1: function Dep(a, b)
2: c = a·b
3: d = 2·c
4: end function
لا يمكن تنفيذ عملية السطر 3 قبل (أو حتى في موازاة مع) عملية السطر 2، لأن عملية السطر 3 تستخدم نتيجة عملية من السطر 2. وذلك لا عدم تحقق الشرط 1، وبهذا تكون هناك اعتمادية التتابع.
1: NoDep function (a, b)
2: c = a·b
3: d = 2·b
4: e = a+b
5: end function
في هذا المثال، لا توجد اعتمادية بين التعليمات، وبالتالي يمكن تنفذهم جميعا بالتوازي.
شروط برنشتاين لا تسمح باشتراك الذاكرة بين العمليات المختلفة. لذلك، فإن فرض بعض الترتيب بين عمليات الوصول للذاكرة ضروري، مثلا نظام إشارات (semaphores)، أو الحواجز أو بعض طرق التزامن الأخرى.
الخلفية > حالة السباق واستبعاد التشارك والتزامن والتباطؤ في التوازي

في برنامج مواز غالبا ما تسمى المهام الفرعية خيوطا (بالإنجليزية: Threads)‏. بعض هندسة الحواسيب المتوازية تستخدم نسخ صغيرة وخفيفة من الخيوط المعروفة باسم الألياف، بينما تستخدم هندسات أخرى نسخ أكبر تسمى بالعمليات. ومع ذلك فإن «الخيوط» مقبولة عموما كمصطلح عام عن المهام الفرعية.
غالبا ما تحتاج الخيوط إلى تحديث بعض المتغيرات مشتركة بينها. يمكن ترتيب التعليمات المشتركة بين البرنامجين بأي ترتيب. على سبيل المثال، البرنامج التالي:
| 0 | 1 |
| --- | --- |
الخيط أ: الخيط ب
1أ: قراءة المتغير س: 1ب: قراءة المتغير س
2أ: إضافة 1 إلى قيمة س: 2ب: إضافة 1 إلى قيمة س
3أ طباعة س: 3ب طباعة س
إذا تم تنفيذ التعليمة 1ب بين 1أ و3أ، أو إذا تم تنفيذ التعليمات 1أ بين 1ب و3ب، سيقوم البرنامج بإنتاج بيانات غير صحيحة. وهذا هو المعروف باسم حالة السباق (بالإنجليزية: Race condition)‏. يجب على المبرمج استخدام قفل لضمان استبعاد التشارك. القفل هو بناء في لغة البرمجة يسمح لخيط واحد بالسيطرة على متغير ومنع الخيوط الأخرى من القراءة أو الكتابة بها، حتى تحرير المتغير من القفل. الخيط الذي قام بعملية القفل يمكنه تنفيذ الجزء الحرج (القسم من البرنامج الذي يتطلب وصول حصري إلى المتغير)، وبعدها يقوم بتحرير البيانات بعدما ينهي هذا الجزء. لذلك، لضمان تنفيذ البرنامج السابق بشكل صحيح، يمكن إعادة صياغته باستخدام الأقفال:
| 0 | 1 |
| --- | --- |
الخيط أ: الخيط ب
1أ: ضع قفلا على المتغير س: 1ب: ضع قفلا على المتغير س
2أ: قراءة المتغير س: 2ب: قراءة المتغير س
3أ: إضافة 1 إلى قيمة س: 3ب: إضافة 1 إلى قيمة س
4أ: طباعة س: 4ب: طباعة س
5أ: حرر متغير س: 5B : حرر متغير س
سوف يقوم خيط واحد بقفل المتغير س، في حين أن الخيوط الأخرى ستكون مستبعدة، وغير قادرة على المضي قدما إلى أن يتم تحرير المتغير س مرة أخرى. وهكذا يتم ضمان تنفيذ البرنامج بشكل صحيح. تستعمل الأقفال عند الضرورة لتنفيذ البرنامج بشكل صحيح، لكن العملية يمكن أن تبطئ هذا البرنامج بشكل كبير.
قفل عدة متغيرات باستخدام أقفال غير موحدة يدخل البرنامج في طريق مسدود. الأقفال الموحدة تقفل كل المتغيرات مرة واحدة. وإذا لم يتمكن من قفلهم جميعا، فإنه لن يقفل أي واحد منهم. إذا احتاج خيطان لحجز نفس المتغيرين باستعمال قفل غير موحد، من الممكن أن يحجز أحد الخيوط أحد المتغيرات بينما يحجز الخيط الثاني المتغير الآخر. في مثل هذه الحالة، لا يمكن لأي خيط منهما إنهاء عمله ويصلان لطريق مسدود.
كثير من البرامج المتوازية تتطلب تزامنا بين مهامها الفرعية، وهذا يتطلب استخدام حاجز. والذي عادة ما ينفذ باستخدام قفل برمجي. فئة من الخوارزميات، تعرف بإقفال-تحرير وانتظار-تحرير، تتجنب استخدام الأقفال والحواجز تماما. ولكن هذا النهج صعب التنفيذ غالبا ويتطلب تصميم تركيبة بيانات بشكل صحيح.
لا تؤدي كل عمليات الموازاة إلى التسريع. عموما، كلما قسمت المهام إلى خيوط أكثر فأكثر، فإن تلك الخيوط ستستهلك جزء زائد من الوقت في التواصل مع بعضهم البعض. في نهاية المطاف، فإن الوقت الزائد من عملية الاتصال يهيمن على الوقت الذي يستغرقه حل المشكلة، وكذلك عملية الموازاة (أي تقسيم عبء العمل على خيوط أكثر) تزيد بدلا من أن تقلل من مقدار الوقت المطلوب لانتهاء. يعرف هذا بتباطؤ التوازي (بالإنجليزية: Parallel slowdown)‏.
الخلفية > توازي الحبيبات الناعمة والحبيبات الخشنة والمربك

غالبا ما تصنف التطبيقات وفقا لمدى حاجة المهام الفرعية للمزامنة أو التواصل مع بعضها البعض. يظهر التطبيق توازي الحبيبات الناعمة (بالإنجليزية: Fine-grained parallelism)‏ إذا كانت المهام الفرعية تتواصل عدة مرات في الثانية الواحدة، أو توازي الحبيبات الخشنة (بالإنجليزية: Coarse-grained parallelism)‏ إذا لم تتواصل عدة مرات في الثانية الواحدة، ويصنف بالتوزاي المربك (بالإنجليزية: Embarrassing parallelism)‏ إذا كانت نادرا ما تضطر للتواصل أو لا يوجد تواصل إطلاقا. تعتبر التطبيقات من صنف التوازي المربك أسهل للموازاة.
الخلفية > نماذج تناسق

يجب أن يكون للغات البرمجة المتوازية ولأجهزة الحاسوب المتوازية نموذج تناسق (المعروف أيضا باسم نموذج الذاكرة). نموذج التناسق (بالإنجليزية: Consistency model)‏ يحدد القواعد لكيفية حدوث العمليات في ذاكرة الحاسوب، وكيفية إنتاج النتائج.
واحد من نماذج التناسق هو نموذج «ليسلي لامبورت» للتناسق المتسلسل. التناسق المتسلسل هو خاصية للبرنامج المتوازي الذي ينتج عن تنفيذه بشكل متواز نفس النتائج إذا نفذ بشكل تسلسلي. بشكل أدق، يكون البرنامج متطابق تسلسليا إذا «... نتائج أي تنفيذ هي نفسها إذا ما نفذت كل العمليات على كل المعالجات بترتيب متسلسل ما، والعمليات في كل معالج تظهر في هذا التسلسل بالترتيب المحدد من قبل البرنامج».
ذاكرة معاملات البرنامج هي نوع شائع من نماذج التناسق. تستعمل ذاكرة معاملات البرنامج مفهوما، استعير من نظريات قواعد البيانات وتطبيقها، هو مفهوم المعاملات الموحدة (بالإنجليزية: Atomic transactions)‏ في عملية الوصول إلى الذاكرة.
رياضيا، يمكن تمثيل هذه النماذج بعدة طرق. شبكة بيتري، الذي تم عرضها في أطروحة الدكتوراه لآدم كارل بيتري سنة 1962، كانت محاولة مبكرة لتدوين قواعد نماذج التناسق. بعدها تم بناء نظرية تدفق البيانات، وتم إنشاء هندسة تدفق البيانات كتطبيق عملي لفكرة نظرية تدفق البيانات. بدأت في أواخر سبعينات القرن العشرين، حيث تم تطوير جبر العمليات مثل حسابات أنظمة الاتصالات وعمليات الاتصال التسلسلية للسماح بالتفكير بشكل جبري حول نظم مكونة من عناصر متفاعلة. إضافات جديدة إلى عائلة جبر العمليات، مثل π-calculus الذي أضاف إمكانية التفكير في طبولوجيا ديناميكية. المنطق مثل Lamport's TLA+ والنماذج الرياضية مثل التعقب ومخططات الأحداث الفاعلة، طورت أيضا لوصف سلوك النظم المتنافسة.
الخلفية > تصنيف فلين

المقالة الرئيسة: تصنيف فلين
قام مايكل ج. فلين بإنجاز واحدة من أوائل نظم التصنيف للحاسبات والبرنامج المتوازية (والمتسلسلة)، والتي تعرف الآن باسم تصنيف فلين (بالإنجليزية: Flynn's taxonomy)‏. صنف فلين برامج وأجهزة الحاسوب من خلال إذا كانت تعمل باستخدام مجموعة واحدة أو عدة مجموعات من تعليمات، مهما يكن عدد المجموعات من البيانات التي تستخدمها هذه التعليمات مجموعة واحدة أو أكثر.
تصنيف تعليمة واحدة على معلومة واحدة (بالإنجليزية: Single-instruction-single-data SISD)‏ ما يعادل برنامج متسلسل تماما. بينما تصنيف تعليمة واحدة على بيانات متعددة (بالإنجليزية:  Single-instruction-multiple-data SIMD)‏ يماثل القيام بالعملية نفسها مرارا وتكرارا على مجموعة كبيرة من البيانات. وهذا هو الشائع في تطبيقات معالجة الإشارات. تعليمات متعددة على معلومة واحدة (بالإنجليزية: Multiple-instruction-single-data MISD)‏ هو تصنيف نادر الاستخدام. في حين أن هندسة الحاسبات انقسمت في التعامل مع هذا التصنيف، فإن عدد قليل من التطبيقات تتناسب مع هذا التصنيف تم تجسيدها. برامج تعليمات متعددة على بيانات متعددة (بالإنجليزية: Multiple-instruction-multiple-data MIMD)‏ هي إلى حد بعيد، النوع الأكثر شيوعا بين البرامج المتوازية.
وفقا لديفيد باترسون وجون هينيسي فإن «بعض الآلات الهجينة من هذه الفئات، وبالطبع أن هذه النماذج الكلاسيكية قد عمر طويلا لأنها بسيطة وسهلة الفهم، وتعطي تقريبا أوليا جيد. وهو أيضا المخطط الأكثر استعمال وعلى نطاق واسع، ربما بسبب سهولة فهمه».
أنواع التوازي > التوازي على مستوى البت

المقالة الرئيسة: توازي على مستوى البت
منذ بدايات تكنولوجيا دارات التكامل الفائق (بالإنجليزية: Very-large-scale integration VLSI)‏ في تصنيع رقائق الحاسوب في سبعينات القرن العشرين وحتى حوالي عام 1986، كانت تتم عملية التسريع في هندسة الحاسبات من خلال مضاعفة حجم كلمة الحاسوب، والتي بدورها تزيد كمية المعلومات التي يمكن للمعالج أن يعالجها في كل دورة. زيادة حجم الكلمة يقلل من عدد التعليمات التي يجب على المعالج تنفيذها لأداء عملية على متغيرات حجمها أكبر من طول الكلمة. على سبيل المثال، عند جمع رقمين صحيحين مكونين من 16 بت على معالج 8 بت، فإن المعالج يقوم بجمع أول 8 بت من كل رقم باستخدام تعليمة الجمع، ثم يجمع ثاني 8 بت مع الإعارة من العملية السابقة، وبالتالي فإن معالج 8 بت يحتاج لتعليمتين لإكمال عملية واحدة، بينما معالج 16 بت معالج سيكون قادر على إكمال العملية بتعليمة واحدة.
تاريخيا، تم استبدال المعالجات 4-بت بمعالجات 8 بت ثم 16 بت، ثم 32 بت. وبشكل عام فقد وصل هذا الاتجاه إلى نهايته مع إدخال معالجات 32 بت، التي سائدة في الحاسبات العامة لعقدين من الزمن. ولكن ليس إلى غاية وقت قريب (2003-2004)، حيث ظهرت هندسة x86-64، والتي تحوي على معالجات 64 بت وشاع استخدامها.
أنواع التوازي > التوازي على مستوى التعليمات

برنامج حاسوبي في جوهره وهو دفق من التعليمات التي ينفذها المعالج. يمكن إعادة ترتيب هذه التعليمات ودمجها في مجموعات يتم تنفيذها بالتوازي دون تغيير نتيجة هذا البرنامج. وهذا ما يسمى بالموازاة على مستوى التعليمات. تطور فكرة الموازاة على مستوى التعليمات هيمنة على هندسة الحاسبات من منتصف ثمانينات وحتى منتصف تسعينات القرن العشرين.
المعالجات الحديثة لديها خطوط أنابيب متعددة المراحل. كل مرحلة في خط الأنابيب توافق عملا مختلفا يقوم به المعالج على التعليمات في هذه المرحلة؛ المعالج الذي يحوي ن مرحلة في خط أنابيب يمكن أن ينجز حتى ن تعليمة مختلفة في مراحل مختلفة. وتعد المعالجات من نوع RISC مثال على المعالجات التي تعمل بنظام خطوط الأنابيب، وفي هذا النوع من المعالجات خمس مراحل: جلب التعليمة، وفك الشفرة، وتنفيذها، والوصول إلى الذاكرة، وكتابة النتائج. المعالج بنتيوم 4 له 35 مراحل في خط الأنابيب.
بالإضافة إلى الموازاة على مستوى التعليمات باستخدام خط الأنابيب، يمكن لبعض المعالجات معالجة أكثر من تعليمة في نفس الوقت. تعرف بالمعالجات سوبرسكيلر. تجمع التعليمات معا إذا لم يكن هناك أي تبعية في البيانات فيما بينها. تعد خوارزمية «سكوربوردنج» وخوارزمية «توماسلو» (التي تشبه سكوربوردنج ولكن تقوم بإعادة تسمية السجلات) من أكثر الأساليب شيوعا لتنفيذ التعليمات بدون ترتيب في تنفيذ الموازاة على مستوى التعليمة.
أنواع التوازي > موازاة البيانات

موازاة البيانات هي عملية الموازاة المتأصلة في جمل التكرار في البرنامج، التي تركز على توزيع هذه البيانات عبر عقد الحوسبة المختلفة بحيث تتم معالجتها بشكل متواز. «غالبا ما تؤدي موازاة التكرار بصورة مماثلة (ليست بالضرورة مطابقة) إلى تسلسل العمليات أو المهام التي تؤدى على عناصر بيانات ذات هياكل كبيرة.»  العديد من التطبيقات العلمية والهندسية تستعمل توازي البيانات.
الاعتمادية في حلقات التكرار هي اعتمادية حلقة تكرار على ناتج واحدة أو أكثر من حلقات التكرار السابقة لها. وهذه الاعتمادية في حلقات التكرار تمنع القيام بعمل توزيع لعمليات التكرار. على سبيل المثال، بالنظر إلى الكود التالي الذي يحسب بعض أعداد فيبوناتشي الأولى :
1 : PREV1 = 0
2: PREV2 = 1
4: do:
5: CUR = PREV1 + PREV2
6 : PREV1 = PREV2
7 : PREV2 = CUR
8: while (CUR < 10)
لا يمكن توزيع هذا التكرار لان CUR يعتمد عليه PREV2 وPREV1، والتي يتم حسابها في كل حلقة تكرار. ولأن التكرار يعتمد في نتيجة على المرحلة السابقة، فلا يمكن أن يتم تنفيذها في نفس الوقت. وبتعاظم حجم مشكلة، يتعاظم مقدار توازي البيانات المتاحة عادة.
أنواع التوازي > توازي المهام

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

تكون الذاكرة الرئيسية في أجهزة الحواسيب المتوازية إما ذاكرة مشتركة (تشترك جميع عناصر المعالجة في مساحة تخزينية واحدة) أو ذاكرة موزعة (التي يكون فيها لكل عنصر من عناصر التجهيز مساحة تخزينية محلية خاصة به). ومصطلح الذاكرة الموزعة يعني أن الذاكرة موزعة منطقيا، ولكن غالبا ما يعني أيضا أنها موزعة ماديا. الذاكرة المشتركة الموزعة والذاكرة الافتراضية تجمعان بين النهجين، حيث أن كل عنصر معالجة يملك ذاكرة محلية خاصة به وسبيلا للوصول إلى ذاكرة على معالجات غير المحلية. الوصول للذاكرة المحلية عادة ما يكون أسرع من الوصول إلى الذاكرة غير المحلية.
هندسة الحواسيب التي يكون فيها كل عنصر من الذاكرة الرئيسية متوفرا بنفس المدة والتدفق تعرف بالذاكرة موحدة الوصول (بالإنجليزية: Uniform Memory Access : UMA)‏. لا يمكن أن يتحقق هذا إلا من خلال نظام ذاكرة مشتركة حيث لا وجود لتوزيع مادي للذاكرة. النظم التي ليس لديها هذه الخاصية تعرف بنظم الذاكرة غير موحدة الوصول (بالإنجليزية: Non-Uniform Memory Access - NUMA)‏. نظم الذاكرة الموزعة هي ذاكرة غير موحدة الوصول.
تستفيد نظم الحاسوب من مخزن صغير وسريع بقرب من المعالج لتخزين مؤقت لنسخ من قيم الذاكرة. أما أنظمة الحواسيب المتوازية فتواجه صعوبات مع هذه المخازن التي قد تخزن القيمة نفسها في أكثر من مكان واحد، مع إمكانية تنفيذ غير صحيح للبرنامج. أجهزة الحاسوب هذه تتطلب نظام تخزين متناسق، والذي يتتبع القيم المخزنة مؤقتا ويعمل على تطهير إستراتيجيا لها، وبالتالي ضمان تنفيذ صحيح للبرنامج. قنوات التطفل هي واحدة من أكثر الطرق شيوعا لتتبع القيم التي يتم الوصول إليها (وبالتالي ينبغي تطهيرها). تصميم نظام تخزين متناسق عالي الكفاءة وكبير هي مشكلة صعبة للغاية في مجال هندسة الحواسيب. ونتيجة لذلك، فإن هندسة الحواسيب بذاكرة مشتركة لا تتناسب جيدا مع أنظمة الذاكرة الموزعة.
يمكن تنفيذ الاتصالات بين الذاكرة والمعالجات وفيما بين المعالجات باستعمال أجهزة بطرق متعددة، بما في ذلك عبر ذاكرة مشتركة أو عارضة تبديل (بالإنجليزية: Crossbar switch)‏ أو ناقل مشترك أو شبكة ربط لعدد لا يحصى من طبولوجيات بما في ذلك طبولوجيات الطوق والنجمة والشجرة، هايبر مكعب (بالإنجليزية: Hypercube)‏، هايبر مكعب ضخم (بالإنجليزية: Fat hypercube)‏؛ أي هايبر مكعب بأكثر من معالج في العقدة الواحدة، أو شبكة من ن-بعد.
تحتاج الحواسيب المتوازية (المبنية على أساس شبكات الربط) إلى نوع من التوجيه لتمكينها من تمرير الرسائل بين العقد التي لا علاقة مباشرة بينها. من المرجح أن تكون الوسيلة المستخدمة للاتصال بين المعالجات هي التسلسل الهرمي في الأجهزة الكبيرة متعددة المعالجات.
العتاد > فئات الحواسيب المتوازية

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

المقالة الرئيسة: معالج متعدد الأنوية
المعالج متعدد الأنوية (بالإنجليزية: Multicore)‏ هو معالج يتضمن عدة وحدات تنفيذ («النوى») على نفس الشريحة. هذه المعالجات تختلف عن المعالجات «سوبرسكيلر» (بالإنجليزية: Superscalar)‏، والتي يمكنها تمرير تعليمات متعددة لكل دورة من سيل واحد من التعليمات (خيط أو thread)؛ على النقيض من ذلك، يمكن للمعالجات متعددة الأنوية تمرير تعليمات متعددة لكل دورة من سيول تعليمات متعددة. كل نواة في المعالج متعدد الأنوية يمكنها أن تكون سوبرسكيلر. ففي كل دورة، ويمكن لكل نواة تمرير تعليمات متعددة من سيل واحد.
معالجة متزامنة لعدة خيوط (بالإنجليزية: Multithreading)‏ في وقت واحد (وتقنية خيوط المعالجة الفائقة لإنتل هي الأكثر شهرة) وشكل مبكر من شبه تعدد الأنوية (بالإنجليزية: Pseudo-multicoreism)‏. معالج قادر على معالجة متزامنة لعدة خيوط لديه وحدة تنفيذ واحدة («نواة»)، ولكن عندما تكون وحدة التنفيذ خاملة (مثل حالة جلب بيانيات)، فإنها تستخدم في تنفيذ الخيط الثاني. معالج آي بي إم Cell، المصمم للاستخدام في سوني بلاي ستيشن 3، هو معالج بارز آخر متعدد الأنوية.
العتاد > فئات الحواسيب المتوازية > المعالجة المتعددة المتماثلة

المقالة الرئيسة: المعالجات المتعددة المتماثلة
المعالجات المتعددة المتماثلة (بالإنجليزية: Symmetric multiprocessor - SMP)‏ هو نظام حاسوبي ذو معالجات متعددة متطابقة تتشارك ذاكرة وقناة اتصال (أو ناقل). الزحام في الناقل يمنع هندسة النواقل من التزايد. ونتيجة لذلك، فعموما لا تضم المعالجات المتعددة المتماثلة أكثر من 32 معالج. «نظرا لصغر حجم المعالجات والانخفاض الكبير في متطلبات لسعة التدفق التي تحققها المخابئ الكبيرة، مثل هذه المعالجات المتماثلة فعالة للغاية من حيث التكلفة، شريطة أن تكون كمية كافية من سعة التدفق للذاكرة متوفرة.»
العتاد > فئات الحواسيب المتوازية > الحوسبة الموزعة

المقالة الرئيسة: حوسبة موزعة
الحاسوب الموزع (المعروف أيضا بالمعالجات موزعة الذاكرة) هو نظام حاسوبي موزع الذاكرة ترتبط فيه العناصر المعالجة من خلال شبكة. الحواسيب الموزعة قابلة للتزايد.
العتاد > فئات الحواسيب المتوازية > الحوسبة الموزعة > الحوسبة العنقودية

المقالة الرئيسة: حوسبة عنقودية
العنقود (بالإنجليزية: Cluster)‏، هو مجموعة من أجهزة الحواسيب المتقاربة التي تعمل معا بشكل وثيق، حتى أنه في بعض النواحي تعتبر بمثابة جهاز حاسوب واحد. تتكون العناقيد من مجموعة من آلات مستقلة متعددة ومتصلة بواسطة شبكة حاسوبية. لا يشترط أن تكون آلات العنقود الواحد متماثلة، ولكن عملية موازنة الحمل فيما بينها تصبح أكثر صعوبة إذا لم تكن كذلك. النوع المتعارف عليه هو عنقود بياولف (بالإنجليزية: Beowulf cluster)‏، وتمثل مجموعة من أجهزة الحاسوب متعددة ومتطابقة مرتبطة بشبكة محلية تعمل بحزمة برتوكولات حزمة بروتوكولات الإنترنت بوصلات إيثرنت. قام بتطوير تقنية بياولف كل من توماس ستيرلينغ ودونالد بيكر. وتشكل الحواسيب العنقودية الغالبية العظمى من حواسيب قائمة توب 500 لأقوى أنظمة الحواسيب في العالم.
العتاد > فئات الحواسيب المتوازية > الحوسبة الموزعة > المعالجة عالية التوازي

المقالة الرئيسة: حاسوب متوازي هائل
المعالج عال التوازي (بالإنجليزية: Massively parallel processor-MPP)‏ هو جهاز حاسوب واحد مع معالجات شبكية كثيرة. هذه الأجهزة لها العديد من خصائص العناقيد، ولكنها تملك شبكات خاصة (في حين أن العناقيد تستخدم عتاد للشبكات). وتميل إلى أن تكون أكبر من العناقيد، وعادة "أكثر بكثير" من 100 معالج. في المعالج عال التوازي، "كل وحدة معالجة مركزية تحتوي على ذاكرة خاصة بها، ونسخة من نظام التشغيل والبرمجية. كل فرع يتصل مع الآخرين عبر وصلات عالية السرعة.
بلو جين/L المعالج عالي التوازي هو خامس أسرع حاسوب عملاق في العالم وفقا لتصنيف توب 500 ليونيو 2009.
العتاد > فئات الحواسيب المتوازية > الحوسبة الموزعة > الحوسبة الشبكية

المقالة الرئيسة: حوسبة شبكية
الحوسبة الشبكية (بالإنجليزية: Grid computing)‏ هي الشكل الأكثر انتشارا للحوسبة المتوازية. إنه يستخدم اتصال أجهزة الحاسوب عبر الإنترنت للعمل على مشكلة معينة. وبسبب انخفاض سرعة تدفق البيانات والبطء التباعد العالي للغاية على شبكة الإنترنت، فإن الحوسبة الشبكية تتعامل عادة فقط مع مشاكل التوازي الحرج. تم إنشاء عدة برمجيات للحوسبة الشبكية، أشهرها: ستي@هوم وفولدنغ@هوم.
معظم برمجيات الحوسبة الشبكية تستخدم برمجيات وسيطة (بالإنجليزية: Middleware)‏، وهي برمجيات تعمل بين نظام التشغيل والبرمجيات الأخرى لإدارة موارد الشبكة وتوحد الواجهة البرمجية. أكثر البرمجيات الوسيطة للحوسبة الشبكية شيوعا هي بنية باركلي التحتية المفتوحة للحوسبة شبكية (بالإنجليزية: Berkeley Open Infrastructure for Network Computing-BOINC)‏. في كثير من الأحيان، تقوم برامج الحوسبة الشبكية بإتمام «دورات إضافية»، وأداء عمليات حسابية عندما يكون جهاز الحاسوب خاملا.