سؤال

يبدو جيدا سؤالا بسيطا للغاية، لكنني طلبت بعد الذهاب من خلال عدد قليل من PPTs على حد سواء.

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

هل كانت مفيدة؟

المحلول

Superscalar Design. ينطوي على المعالج قادر على إصدار تعليمات متعددة في ساعة واحدة، مع مرافق زائدة عن الحاجة لتنفيذ التعليمات. نحن نتحدث عنها داخل نواة واحدة، عقلك - معالجة متعددة الألوان مختلفة.

خطوط الأنابيب يقسم تعليمات إلى خطوات، حيث يتم تنفيذ كل خطوة في جزء مختلف من المعالج، يمكن أن تكون تعليمات متعددة في "المراحل" مختلفة كل ساعة.

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

Superscalar/pipelining in use

هنا، يتم تنفيذ تعليمين في وقت واحد في خط أنابيب خمس مراحل.


لكسرها أكثر، نظرا للتحرير الأخير:

في المثال أعلاه، تعقد التعليمات من خلال 5 مراحل "أجريت". هذه إذا كانت (جلب التعليمات)، المعرف (فك تشفير التعليمات)، السابق (تنفيذ)، MEM (ذاكرة التحديث)، WB (Writeback إلى ذاكرة التخزين المؤقت).

في تصميم معالج بسيط للغاية، سيتم الانتهاء من كل ساعة مرحلة مختلفة لذلك لدينا:

  1. إذا
  2. هوية شخصية
  3. السابق
  4. مادن
  5. بوز

والتي من شأنها أن تفعل تعليم واحد في خمس ساعات. إذا أضفنا بعد ذلك وحدة تنفيذ زائدة عن الحاجة، فقم بإدخال تصميم SuperScalar، ولدينا هذا، للحصول على تعليمتين A و B:

  1. إذا (أ) إذا (ب)
  2. معرف (أ) معرف (ب)
  3. السابقين (أ) السابقين (ب)
  4. MEM (أ) MEM (B)
  5. WB (أ) WB (ب)

تعليمان في خمس ساعات - كسب أقصى قدر من النظري قدره 100٪.

يسمح خطوط الأنابيب بالأجزاء التي سيتم تنفيذها في وقت واحد، لذلك كنا نواجه الأمر مع شيء من هذا القبيل (للحصول على تعليمات لعشرة من خلال J):

  1. إذا (أ) إذا (ب)
  2. معرف (أ) معرف (ب) إذا (ج) إذا (د)
  3. EX (A) EX (B) معرف (ج) IF (D) إذا (E) إذا (F)
  4. MEM (A) MEM (B) EX (C) IV (D) معرف (E) ID (F) إذا (G) إذا (H)
  5. WB (أ) WB (B) MEM (C) MEM (D) EX (E) ID (F) ID (F) ID (G) IF (H) إذا (I) إذا (ي)
  6. WB (C) WB (D) MEM (E) MEM (F) EX (G) EX (H) ID (I) معرف (1) (ي)
  7. WB (E) WB (F) MEM (G) MEM (H) السابق (I) السابقين (ي)
  8. WB (G) WB (H) MEM (I) MEM (J)
  9. WB (I) WB (ي)

في تسع ساعات، نفذت عشر تعليمات - يمكنك أن ترى أين يتحرك الأنابيب حقا الأشياء. وهذا هو شرح للمثال الرسم، وليس كيف يتم تنفيذها بالفعل في هذا المجال (هذا السحر الأسود).

مقالات ويكيبيديا ل superscalar. و خط أنابيب التعليمات هي جيدة جدا.

نصائح أخرى

وقت طويل قبل، المنفذات CPU تعليمات آلة واحدة فقط في وقت واحد. وبعد فقط عندما تم الانتهاء تماما هل جلب وحدة المعالجة المركزية التعليمات التالية من الذاكرة (أو، لاحقا، ذاكرة التخزين المؤقت للتعليمات).

في النهاية، لاحظ شخص ما أن هذا يعني أن معظم وحدة المعالجة المركزية لم تفعل شيئا في معظم الوقت، حيث كانت هناك العديد من فروع التنفيذ (مثل وحدة فك ترميز التعليمات، وحدة الحسابة الصحيحة، وحدة حسابية FP، إلخ) وتنفيذ التعليمات التي تم الاحتفاظ بها واحد فقط منهم مشغول في وقت واحد.

هكذا، "بسيط" خطوط الأنابيب ولدت: بمجرد تنفيذ تعليمات واحدة فك التشفير وذهبت نحو الوحدة الفرعية للتنفيذ التالي، لماذا لا تجلب بالفعل وتعليمات التدريس القادمة؟ إذا كان لديك 10 مثل هذه "مراحل"، ثم وجود كل مرحلة عملية تعليمات مختلفة هل يمكن أن تزيد من الناحية النظرية من إنتاجية التعليمات عشرة أضعاف دون زيادة ساعة وحدة المعالجة المركزية على الإطلاق! بالطبع، هذا يعمل فقط بلا عيوب عندما لا تكون هناك قفزات مشروطة في الكود (هذا أدى إلى الكثير من الجهد الإضافي للتعامل مع القفزات الشرطية خصيصا).

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

تشبيه: غسل الملابس

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

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

في يوم نموذجي، قد تكون هذه التعليمات شيئا على غرار:

  1. خذ القميص من الرف
  2. اغسل القميص
  3. جفف القميص
  4. حديد القميص
  5. أضعاف القميص
  6. ضع القميص مرة أخرى على الرف
  7. خذ السراويل من الرف
  8. اغسل السراويل
  9. تجفيف السراويل
  10. أضعاف السراويل
  11. ضع السراويل مرة أخرى على الرف
  12. خذ معطف من الرف
  13. اغسل المعطف
  14. تجفيف المعطف
  15. الحديد معطف
  16. ضع معطف الظهر على الرف

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

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

  1. خذ القميص من الرف
  2. اغسل القميص، خذ السراويل من الرف
  3. جفف القميص، اغسل السراويل
  4. حديد القميص، تجفيف السراويل
  5. أضعاف القميص، (خذ معطف من الرف)
  6. ضع القميص مرة أخرى على الرف، أضعاف السراويل, (اغسل المعطف)
  7. ضع السراويل مرة أخرى على الرف, (تجفيف المعطف)
  8. (حديد معطف)
  9. (ضع معطف الظهر على الرف)

هذا هو خطوط الأنابيب. تسلسل الأنشطة غير المرتبطة بحيث يستخدمون مكونات مختلفة في نفس الوقت. من خلال الحفاظ على الكثير من المكونات المختلفة النشطة عند تعظيم الكفاءة وتسريع وقت التنفيذ، في هذه الحالة تقليل 16 "دورات" إلى 9، تسريع أكثر من 40٪.

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

  1. خذ القميص من الرف، خذ السراويل من الرف
  2. اغسل القميص، اغسل السراويل, (خذ معطف من الرف)
  3. جفف القميص، تجفيف السراويل, (اغسل المعطف)
  4. حديد القميص، أضعاف السراويل, (تجفيف المعطف)
  5. أضعاف القميص، ضع السراويل مرة أخرى على الرف, (حديد معطف)
  6. ضع القميص مرة أخرى على الرف، (ضع معطف الظهر على الرف)

هذا هو تصميم superscalar. مكونات فرعية متعددة قادرة على القيام بنفس المهمة في وقت واحد، ولكن مع تحديد المعالج كيفية القيام بذلك. في هذه الحالة، أدى ذلك إلى زيادة سرعة 50٪ تقريبا (في 18 "دورا"، يمكن أن تعمل الهندسة المعمارية الجديدة من خلال 3 تكرارات لهذا "البرنامج" في حين أن الهندسة المعمارية السابقة لا يمكن أن تعمل فقط عبر 2).

المعالجات الأكبر سنا، مثل 386 أو 486، هي معالجات بسيطة العددية، فإنها تنفذ تعليمات واحدة في وقت واحد بالترتيب الذي تم استلامه بالضبط. معالجات المستهلك الحديثة منذ PowerPC / Pentium هي خط أنابيب و SuperScalar. CORE2 وحدة المعالجة المركزية قادرة على تشغيل نفس الرمز الذي تم تجميعه مقابل 486 بينما لا يزال يستفيد من توازي مستوى التعليمات لأنه يحتوي على منطقها الداخلي الذي يحلل رمز الجهاز وتحديد كيفية إعادة ترتيبه وتشغيله (ما يمكن تشغيله بالتوازي ، ما الذي لا يستطيع، وما إلى ذلك) هذا هو جوهر تصميم SuperScalar ولماذا هو عملي للغاية.

على النقيض من ذلك، يقوم معالج متوازي متجه بالعمليات على عدة قطع من البيانات في وقت واحد (متجه). وبالتالي، بدلا من إضافة X و Ya Vector، ستضيف معالج X و YA، X0، X1، X2 إلى Y0، Y1، Y2 (الناتجة عن Z0، Z1، Z2). المشكلة في هذا التصميم هي أنه مقترن بإحكام إلى درجة محددة من موازية المعالج. إذا قمت بتشغيل رمز العددية على معالج متجه (على افتراض أنك تستطيع)، فلن ترى أي ميزة متوازية ناقلات لأنها تحتاج إلى استخدامها صراحة، مماثلة إذا كنت ترغب في الاستفادة من معالج ناقلات أحدث مع وحدات معالجة متوازية أكثر (على سبيل المثال قادرة على إضافة ناقلات 12 أرقام بدلا من 3 فقط) ستحتاج إلى إعادة ترجمة التعليمات البرمجية الخاصة بك. كانت تصاميم المعالجة المتجهة شعبية في أقدم جيل من أجهزة الكمبيوتر الفائقة لأنها كانت سهلة التصميم وهناك فئات كبيرة من المشاكل في العلوم والهندسة مع قدر كبير من التوازي الطبيعي.

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

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

في CPUS عملية خطوط الأنابيب هي نفسها بالضبط. يتم تقسيم "تعليمات" إلى مراحل مختلفة من التنفيذ، وعادة ما يكون هناك شيء مثل 1. جلب التعليمات، 2. جلب المعاملات (السجلات أو قيم الذاكرة التي تتم قراءتها)، 2. قم بإجراء حساب، 3. كتابة النتائج (إلى الذاكرة أو السجلات) وبعد قد تكون أبطأ هذا الجزء الحساب، وفي هذه الحالة سرعة الإنتاجية الإجمالية للتعليمات من خلال خط الأنابيب هذا هي فقط سرعة الجزء الحسابي (كما لو كانت الأجزاء الأخرى "مجانية".)

يشير Super-Scalar في المعالجات الدقيقة إلى القدرة على تشغيل العديد من التعليمات من مجرى تنفيذ واحد مرة واحدة بالتوازي. لذلك إذا ركضت شركة سيارة خطين التجميع، فمن الواضح أنه بإمكانهم إنتاج مرتين أكبر عدد ممكن من السيارات. ولكن إذا كانت عملية وضع رقم تسلسلي على السيارة كانت في المرحلة الأخيرة ويجب أن يتم ذلك من قبل شخص واحد، فسيتعين عليهم بالتناوب بين الخطاء والضمان الذين يمكنهم القيام به في نصف وقت أبطأ مرحلة من أجل تجنب أن تصبح أبطأ مرحلة أنفسهم.

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

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

هناك العديد من التقنيات التي تستخدمها لتقليل مشكلة الحاجة إلى الكفاءة التي تعقد بعض الشيء لوصفها ولكني سأدرجها: 1. تسجيل إعادة توجيه، (أيضا تخزين لتحميل الشحن) 2. تسجيل إعادة تسمية، 3. النتيجة الصعود، 4 . تنفيذ خارج النظام. 5. تنفيذ المضاربة مع التراجع (والتقاعد) جميع وحدات المعالجة المركزية الحديثة استخدام كل هذه التقنيات إلى حد كبير لتنفيذ السوبر العددية والأنابيب. ومع ذلك، فإن هذه التقنيات تميل إلى تقليل العائدات فيما يتعلق بعدد خطوط الأنابيب في معالج قبل أن تصبح الأكشاك أمرا لا مفر منه. في الممارسة العملية، لا تصنع شركة CPU أكثر من 4 خطوط أنابيب في جوهر واحد.

متعدد النواة لا علاقة له بأي من هذه التقنيات. يتمتع ذلك بشكل أساسي بمعالجتين من المعالجات الصغيرة معا لتنفيذ متعدد المعالجات المتماثلة على رقاقة واحدة ومشاركة فقط هذه المكونات التي تحقق من المنطقي مشاركة (عادة ذاكرة التخزين المؤقت L3، و I / O). ومع ذلك، فإن التقنية التي تدعو Intel "Hyperthreading" هي طريقة في محاولة تنفيذ دلالات النواة المتعددة فعليا ضمن الإطار الفائق العدد الأساسي لبرنامج أساسي واحد. لذلك تحتوي الهندسة المعمارية الصغيرة الواحدة على سجلات اثنين (أو أكثر) النوى الافتراضية وجلب التعليمات من اثنين (أو أكثر) تدفقات التنفيذ المختلفة، ولكن التنفيذ من نظام Super-Superar المشترك. هذه الفكرة هي أنه نظرا لأن السجلات لا يمكن أن تتداخل مع بعضها البعض، إلا أنه سيتم تميل إلى أن تكون أكثر توازية تؤدي إلى عدد أقل من الأكشاك. إلى حد ما ببساطة تنفيذ تدفقان للتنفيذ الاساسي الافتراضي بنصف السرعة، فمن الأفضل بسبب التخفيض الشامل في الأكشاك. يبدو أن هذا يشير إلى أن إنتل قد يزيد من عدد خطوط الأنابيب. ومع ذلك، تم العثور على هذه التقنية قد تفتقر إلى حد ما في التطبيقات العملية. نظرا لأنها جزء لا يتجزأ من تقنيات السوبر العددية، فقد ذكرت ذلك على أي حال.

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

يتم إرسال SuperScaling تعليمات متعددة (أو المباني الصغيرة) إلى وحدات تنفيذ متعددة موجودة في وحدة المعالجة المركزية. ويستند ذلك وبالتالي على الوحدات الزائدة في وحدة المعالجة المركزية.

بالطبع، يمكن أن تكمل هذه النهج بعضها البعض.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top