المتابعون للمدونة

الخميس، 5 يناير 2017

Hyper-Threading


ملاحظات هامة عن Hyper-Threading 

قمت مؤخرا بإعداد ويندوز سيرفر 2016 على حاسوب بمشغل دقيق Processor متعدد الأنوية Multi-Core (يمتلك 4 أنوية) ويستخدم تقنية التقسيم الفائق للعمليات Hyper-Threading (اختصار HT) التي تتيح تشغيل عمليتين فرعيتين في نفس الوقت على كل نواة وهذا يجعل المشغل الدقيق يعمل كأنه يمتلك 8 أنوية. 

ملحوظة:
لتفعيل تقنية HT أو تعطيلها، يجب استخدام إعدادات بدء تشغيل الجهاز BIOS. 

لكن عند تجربة الجهاز في عمليات ثقيلة مثل ضغط الفديو ومراقبة الأداء من خلال مدير المهام Task Manager، وجدت كفاءته قليلة، حيث لم يستفد الويندوز إلا بـ 30% فقط من قوة المشغل الدقيق، والباقي خامل، رغم أن ضغط الفديو عملية مجهدة وتستغرق وقتا!

أول سبب توصلت إليه هو استخدام الويندوز لخطة الطاقة المتوازنة Balanced Power Plan وبسببها يوفر المشغل الدقيق جزءا من الطاقة (حوالي 40%) فلا يستفيد نظام التشغيل بكامل قدراته.. هذه الخطة مناسبة لتشغل الحاسوب في الظروف العادية.. وقد قمت بتغييرها إلى خطة الطاقة عالية الأداء High Performance، وهذا جعل الويندوز يستغل حوالي 50% من قدرة المشغل الدقيق، وهذا أعلى مما سبق، لكنه ما زال قليلا، وهو الأمر الذي ظل يحيرني.. لماذا لا يستفيد الويندوز بكامل طاقة الجهاز؟.. هل لهذا علاقة بتفعيلي لتقنية HT؟

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

لحل هذا اللغز، أخذت أقرأ عن HT وتوصلت إلى أنه يحسّن أداء النظام من 15% إلى 30% بحد أقصى في حالة وجود كثير من العمليات الفرعية البطيئة (مثل التي تضيع بعض الوقت في انتظار أجهزة الإدخال والإخراج والإنترنت... إلخ).. لكنه سيكون عبئا على بعض العمليات التي تحتاج سرعة أكبر، لأن تقسيم النواة الواحدة بين عمليتين يبطئهما قليلا (في حدود 5%).

وقد قررت أن أختبر هذا عمليا، فكتبت برنامجا للعد من 1 إلى 8 مليار وقسمت هذه العملية على عدة عمليات فرعية Threads، وجعلت عددها مرة 8 عمليات فرعية، ومرة أخرى 4 عمليات فرعية.. هذا هو المشروع مكتوبا بفيجوال بيزيك:

وقد جربت البرنامج وكانت النتائج كالتالي: 

بدون Hyper-Threading:
4 عمليات فرعية: استغرق تنفيذ البرنامج 14.81 دقيقة
8 عمليات فرعية: استغرق تنفيذ البرنامج 15.05 دقيقة
(العمليات الأربع أكفأ لأن عدد الأنوية أربعة) 

بتشغيل Hyper-Threading:
4 عمليات فرعية: استغرق تنفيذ البرنامج 15.01 دقيقة (قلت الكفاءة بنسبة 1.3%)
8 عمليات فرعية: استغرق تنفيذ البرنامج 11.64 دقيقة (زادت الكفاءة بنسبة 22.6%)

والجدول التالي يلخص هذه النتائج: 

 
بدون Hyper-Threading
بتشغيل Hyper-Threading
4 عمليات فرعية
14.81 دقيقة
15.01 دقيقة
(قلت الكفاءة بنسبة 1.3%)
8 عمليات فرعية
15.05 دقيقة
11.64 دقيقة
(زادت الكفاءة بنسبة 22.6%)

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

لكن معظم الشكوى من مستخدمي الألعاب، لأنها في الغالب تعتمد على عمليتين فرعيتين فقط، وبالتالي تستفيد فقط من نواتين من أنوية الجهاز مهما كان عددها!

كما أن معظم البرامج القديمة لا تراعي هذه الإمكانيات الحديثة، لهذا لا تستغل معظم طاقة الجهاز.

وهكذا اتضح لي سبب كتابة الويندوز أن استخدام المشغل الدقيق 50% فقط:
فالويندوز يرى 8 أنوية، بينما برنامج ضغط الفديو يستخدم أربع عمليات فرعية فقط، تم توزيعها على الأنوية الأربعة الحقيقية وإهمال الأنوية المنطقية (الناشئة من HT)، وهذا معناه أن برنامج الضغط يستخدم فعلا كل طاقة المشغل الدقيق، بينما الويندوز يظن أنه يستخدم نصف طاقته فقط!!

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر