تصنيف فلين
تم في العقدين الأخيرين تصميم وإنشاء الكثير من الحاسبات المتوازية. ويمكن أن نصنفها في مجموعات اعتماداً على السمات المشتركة. وتمكننا خطة التصنيف هذه من دراسة آلة أو أكثر كنموذج لكل مجموعة مما يساعدنا على فهم أفضل للمجموعة. ولسوء الحظ, لم يجد الباحثون مخطط تصنيف مقنع يمكن أن يغطي كل أنواع الآلات المتوازية. وعلى مر السنين, كان هناك العديد من المحاولات لإيجاد طريقة فعالة ومريحة لتصنيف الحاسبات من حيث العمارة. وعلى الرغم من أنه ليس هناك تصنيف كامل, إلا أن التصنيف الأكثر انتشارا ًهذه الأيام هو ذلك التصنيف الذي اقترحه مايكل ج. فلين (Flynn) في عام 1966. ويأخذ تصنيف فلاين بعين الاعتبار عاملين اثنين وهما: كمية السريان (أو التدفق) للتعليمات وكمية السريان للبيانات التي تتدفق للمعالج.
تصنيف فلين مبني أساساً على كمية تدفق البيانات والتعليمات الموجودة في الآلة. ويقصد بالتدفق هنا على أنه تتابع أو تسلسل لعناصر (التعليمات أو المعطيات) كما نفذت أو شغلت بواسطة المعالج. فعلى سبيل المثال, تقوم بعض الآلات بتنفيذ تدفق واحد من التعليمات, بينما يتم تنفيذ عدة تدفقات في آلات أخرى. وبنفس الطريقة فبعض الآلات ترجع تدفقاً واحداً من المعطيات, وآلات أخرى ترجع تدفقات متعددة. وعليه فإن فلاين يضع الآلة في تصنيف واحد من بين أربعة وذلك اعتماداً على وجود تدفق واحد أو تدفقات متعددة.
ويندرج تحت هذا الصنف جميع الحاسبات التسلسلية المعتادة, مثل Apple Macintosh و DEC VAX. والحاسبات من هذا الصنف تُحضر التعليمات من الذاكرة ثم تقوم بتنفيذها عادة باستخدام قيم المعطيات المشار إليها من الذاكرة. ومن ثم تقوم بإحضار تعليمات أخرى من الذاكرة, وهكذا. وأيضاًَ يعرف هذا التصميم (SISD) بتصميم "فون نيومان Von Neumann" والذي قام به العالم "جون فون نيومان" في أواخر الأربعينات وأوائل الخمسينات من القرن الماضي. لقد مرت صناعة الحاسبات وعلى مدى خمسين عاماً بالكثير من الخبرة في هذا التصنيف فالكثير من لغات البرمجة (مثل Fortran و C), والمترجمات, ونظم التشغيل, وطرق البرمجة, كلها تعتمد أساساً على هذا التصنيف.
إن كل أنواع الحاسبات التسلسلية موجودة في تصنيف SISD, بل وأكثر من ذلك؛ فالباحثون وضعوا بعض أنواع الحاسبات المتوازية ضمن هذا التصنيف, فعلى سبيل المثال, المعالجات الشعاعية (Vector) مثل Cray-1 تنتمي إلى هذا التصنيف بالرغم من أن تعليمات التشغيل تعمل على قيم بيانات شعاعية إلا أن لديها دَفقٌ واحد من التعليمات.
ويتضمن هذا التصنيف الحاسبات التي تحتوي على وحدة تعليمات واحدة تصدر أوامر إلى عدة عناصر معالجة (PEs). ولأن كل عنصر معالجة (PE) يُشغّل بياناته المحلية الخاصة فهناك تدفقات متعددة للبيانات. وعادة فإن وحدة التعليمات تصدر نفس الأمر إلى جميع عناصر المعالجة. على سبيل المثال جميع عناصر المعالجة تنفذ تعليمة الجمع ADD, وبعد ذلك تنفذ تعليمة التخزين STORE, وهكذا. 
يتميز هذا النوع من الحاسبات بوجود وحدة تحكم مركزية. وتشرف على عناصر المعالجة المختلفة تعليمة واحدة من وحدة التحكم وتقوم بتنفيذ هذه التعليمة بشكل متزامن على معاملات مختلفة. تكون هذه الحاسبات متزامنة, وغالباً ما تملك ذاكرة مشتركة بين الوحدات. ولتسهيل عملية الولوج المتوازي إلى الذاكرة يُلجأُ إلى تقسيمها إلى بنوك مما يسمح باستخلاص عدة معاملات في نفس الوقت, تتبادل وحدات معالجة المعطيات عن طريق الذاكرة المشتركة ويتم الاتصال بين وحدات المعالجة المختلفة وبنوك الذاكرة عبر شبكة الربط. ونظراً لتنفيذ نفس العملية على الوحدات المختلفة فمن الممكن اعتبار الحاسبات SIMD كحاسوب وحيد المعالج الذي يقوم بتنفيذ التعليمات على أجزاء مختلفة من المعطيات. ويلائم هذا النوع من الحاسبات العمليات على الأشعة وعلى المصفوفات وغالباً ما يستخدم من أجل عمليات الحساب العلمي. ويوضح الشكل(2-3) هذا الصنف حيث تؤخذ المعطيات من الذاكرة وينفذ عليها أمر واحد, ومثال على ذلك عملية ضرب العدد B بالشعاع A(I) حيث I=0,…,N, والناتج يوضع في C(I), فتحصل عملية ضرب B بجميع عناصر الشعاع A(I) بعملية واحدة على كل المعاملات
تستخدم في هذه الحاسبات آلاف المعالجات، وتكون عادة متوسطة الأداء أو بسيطة جداً، وجودتها وأدائها العالي ناتج عن العدد الكبير للمعالجات المستخدمة.
تحتل الحاسبات من النوع SIMD موقعاً بارزاً في تاريخ الحاسبات المتوازية, فأول حاسب متوازي تم تشييده كان من هذا النوع (وهو ILLIAC IV), ولكن بسبب أن هذا النوع من الآلات يبنى باستخدام مكونات مخصصة لذا فإنه قل الإقبال عليها في السنوات القليلة الماضية.
يعتبر الحاسب (ILLIAC IV) مثالاً جيداً لتوضيح الآلات التي تنتمي إلى هذا النوع. فهنالك وحدة تعليمات واحدة تصدر نفس الأمر إلى جميع عناصر المعالجة الأربع وستون. وكل عنصر معالجة له ذاكرة مكونة من 2 كيلو من الكلمات (2K words) وذلك لتحميل وتخزين ومعالجة المعطيات. وترتبط الأربع وستون عنصر معالجة معاً بشبكة ثنائية الأبعاد فيها ثمانية عناصر معالجة في كل جانب, ويمكن للعناصر المتجاورة إرسال واستقبال الرسائل. وتلتف الارتباطات للمعالجات في الطرف العلوي لترتبط مع المعالجات في الطرف السفلي, وكذلك تلتف الارتباطات للمعالجات في الطرف الأيسر لترتبط مع المعالجات في الطرف الأيمن. (الالتفافات ظاهرة في الشكل(2-5)).
وحيث أن كل عنصر معالجة ((PE يمكنه أن يرسل الرسائل في أربع اتجاهات فالروابط تعنون أو تعرف غالباً باتجاهات البوصلة (شمال, شرق, جنوب، غرب). ويدعى هذا أيضاً بشبكة اتصال NEWS. فمع تعليمة واحدة يمكن لعناصر المعالجة الأربع وستون أن تمرر الرسالة في اتجاه واحد, كالشمال مثلاً.
يصمم (ILLIAC IV) ليكون حاسباً عام الغرض, وإنما صمم لغرض خاص وهو حل المعادلات التفاضلية الجزئية. مثلاً يستخدم (ILLIAC IV) للتنبؤ بالطقس, والتنبؤ بالطقس يستلزم بيانات كثيرة في فضاء ثلاثي الأبعاد. وفي هذه الحالة فالحل النموذجي هو بتقسيم الفضاء إلى 64 قسماً, ووضع قسم واحد في كل معالج (PE). فالحلول للأربع وستين قسماً في هذه الطريقة تحسب بالتوازي. وعندما يحتاج عنصر المعالجة إلى بيانات من القسم المجاور فالاتصال يجب أن يبدأ على شبكة الربط.
من الآلات الهامة التي تتبع لتصنيف SIMD هي: ILLIAC IV و ICL DAP و Goodyear MPP و MasPar MP-2.
حيث يتم في هذا النوع تنفيذ عدة تعليمات مختلفة على معامل واحد خلال الدورة الزمنية للحاسب. يتضمن كل معالج وحدة تحكم خاصة به تساعده على تنفيذ المهام الجزئية الموكلة إليه. يوجد القليل من الحاسبات المتوازية من نوع MISD وتكاد تكون أهمية هذا النوع مقتصرة على تصنيفFlynn)) لأنه يتلاءم مع مبدأ التصنيف. وأن MISD هي قليلة الاستعمال فهي تعتمد مبدأ العمل التسلسلي.
يتم في هذا النوع تنفيذ عدة تعليمات على معاملات مختلفة خلال الدورة الزمنية للحاسب. يتميز هذا النوع من الحاسبات بوجود عدد من المعالجات التي تعمل بشكل مستقل عن بعضها البعض. يتضمن كل معالج وحدة تحكم خاصة به تساعده على تنفيذ المهام الجزئية الموكلة إليه. هذه الحاسبات غير متزامنة وبالتالي فالحوادث التي تجري على معالج ما لا ترتبط بالحوادث التي تجري على المعالجات الأخرى. يمكن فرض نوع من التزامن بين هذه المعالجات فيما دعت الضرورات البرمجية لذلك ويتم هذا التزامن باستخدام بعض التعليمات الأولية المخصصة للتزامن أو عن طريق العتاد ويمكن أن يتم أيضاً عن طريق البرمجيات ونظم التشغيل. يوضح الشكل(2-8) أن كل معامل يعالج من قبل معالج ما بأمر ما، وفي الوقت ذاته تعالج جميع المعاملات حسب كافة الأوامر ونتيجة هذه المعالجة تخزن في الذاكرة. نلاحظ أنه عند المعالجة لا ينتظر أي معالج نتيجة من معالج آخر لأنه تعمل جميع المعالجات بشكل غير متزامن وعلى التوازي.
تستخدم المعالجة المتوازية في حاسبات MIMD على مستوى الخوارزميات حيث يقسم البرنامج إلى مهمات جزئية مستقلة جزئياً فيما بينها, وتنفذ كل مهمة على معالج من معالجات الحاسب. تتكون هذه الحاسبات من عشرات المعالجات وهي الحاسبات الأكثر عمومية في وقتنا الحاضر حيث يمكن استثمارها من أجل تطبيقات مختلفة ومتنوعة.
ويوجد لهذا التصنيف فئتين فرعيتين هامتين وهما: (a) الذاكرة المشتركة (Shared memory). (b) تمرير الرسائل (message passing).
في هذه الفئة الفرعية فإن أي معالج يتضمن وحدة تعليمات ووحدة حسابية تمكنه من أن يقرأ من أو يكتب في ذاكرة مشتركة.
في هذا النموذج ترتبط المعالجات مع وحدات الذاكرة بواسطة شبكة الربط, والتي يمكن أن تتخذ عدة أشكال تبعاً لنوع الآلة. شبكة الربط يمكن أن تثبت على شكل حلقة أو شبكة (Mesh).
يمكن لنا تشبيه هذا النموذج بلجنة تستخدم سبورة رئيسية مشتركة فيما بينها لكل الاتصالات, فأي عضو في اللجنة يمكن له أن يقرأ أي جزء من السبورة, ولكن يمكن لشخص واحد فقط أن يكتب على جزء معين من السبورة. ففي نموذج الذاكرة المشتركة هذا ربما يحصل تعارض أو تضارب في الذاكرة عندما يحاول معالجان الكتابة في نفس الجزء من الذاكرة في نفس الوقت, وأيضاً ربما تتداخل المعالجات مع بعضها عند الكتابة في نفس خلية الذاكرة المشتركة مما يتسبب في إيقاف وفشل العملية الحسابية. ولكي لا يصبح التداخل مشكلة يجب أن تزود الآلة بأقفال أو أي آلية للتزامن وذلك لضمان وجود معالج واحد فقط يتعامل مع خلية الذاكرة المشتركة في الوقت الواحد.
وباختصار سوف نعرض لثلاث آلات تجارية تستخدم تقنية الذاكرة المشتركة, ويجب أن نأخذ في عين الاعتبار التنوع في شبكات الربط.
في نموذج تمرير الرسائل هذا فإن كل معالج له ذاكرة داخلية خاصة به, ولكي تتواصل المعالجات فيما بينها فإنها ترسل رسائل إلى كل معالج عن طريق شبكة الربط(interconnection Network). (أنظر الشكل2-13)
يتشابه نموذج تمرير الرسالة مع اللجنة فقط في حال إذا كان بمقدور الأعضاء أن يكتبوا ملاحظاتهم لبعضهم. إن أسلوب توجيه الرسالة وسرعتها يشكل أمراً هاماً لأداء الآلات من هذا النوع. 
ولهذا النموذج العديد من الحسنات, منها أنه لا يوجد ذاكرة مشتركة, وهذا يعني اختفاء المشاكل الناتجة عن التداخل والتضارب في الذاكرة والتي يعاني منها نموذج الذاكرة المشتركة.كما أن النفاذ أو الوصول إلى الذاكرة سريع.
يخدم هذا النوع من الآلات غرضين هما:
الأول: يعمل كأداة اتصال لعبور قيم المعطيات بين المعالجات.
والثاني: يعمل كآلية تزامن للخوارزميات المتوازية.
وبما أن المعالجات لا تشترك في ذاكرة واحدة فإن نموذج تمرير الرسائل يمكن أن يحتوي على عدد كبير جداً من المعالجات, بخلاف نموذج الذاكرة المشتركة. فعلى سبيل المثال... عندما نحاول إضافة معالجات أكثر إلى الجهاز CRAY X-MP فإن العدد الممكن للمنافذ إلى الذاكرة المشتركة محدود (الشكل (2-10)) ولا يمكن في هذه الطريقة زيادة عدد المعالجات إلى أكثر من 16 معالج. 
إن العيب الرئيسي في نموذج تمرير الرسائل هو الحمل الزائد الملقى على المبرمج, فليس كافياً أن يقوم المبرمج بتقسيم البرنامج على المعالجات, بل عليه أيضاً أن يوزع المعطيات. إن برمجة الآلات من نوع تمرير الرسائل تتطلب من المبرمجين أن يعيدوا النظر في الخوارزميات كي يكون استخدام الآلة أكثر كفاءة.
من الأمثلة لأجهزة تستخدم هذا النوع... Intel iPSCو لهذه الآلة 128 معالج (128= 27 أي أن المكعب ذو 7 أبعاد). كذلك شركة nCUBE قامت بتسويق آلة لها 8192 معالج (8192=213, أي أن المكعب ذو 13 بعد).
وبالرغم من أن أكثر الآلات التجارية تتبع لأحد أصناف فلاين (SISD, SIMD,MIMD) فإنه يوجد بعض التصاميم لا تتبع لتصنيف فلاين, مثلاً... بعض الآلات مثل الآلة ICL DAP يمكن أن توضع في أكثر من تصنيف. والبعض الآخر مثل dataflow و reduction لا تتبع لأي تصنيف من تصنيفات فلاين.