الرئيسية المقالات

معيار استهلاك الطاقة TDP في المعالجات يتعرض للموت!

عندما تختلط المفاهيم ..

إليك عادة ما يحدث، انت تشتري المعالج، تقرأ المكتوب في مواصفاته أن استهلاكه للطاقة TDP يكون 65 واط أو 90 واط .. الخ، فتقتنع ان هذا هو الحد الأقصي لاستهلاك المعالج اذا كان بعمل بقدرة  100%، الحد الذي لا يمكن له تخطيه في ظروف التشغيل العادية. لكنك مخطأ، وبشدة! ربما كان هذا صحيحا في الماضي، لكن حاليا ليس هذا هو استهلاك المعالج الحقيقي للطاقة، ولا هو الحد الأقصي لاستهلاكه، اليك أيضا هذه الحقيقة الصادمة، اذا عمل المعالج لديك بنسبة 100% حقا، فلن يكفيه 500 واط لاستهلاك الطاقة!!

ولب المشكلة يكمن في حقيقة ان مصنعي المعالجات يصممونها بحيث لا يمكن استغلال كل أجزاءها جميعا في ذات الوقت .. سواء كانت هذه المعالجات مركزية CPU او رسومية GPU. مما يعني ان المعالج لن يتم استغلاله بنسبة 100% أبدا!

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

games with multi threads

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

وطالما كانت البرمجيات لا تستغل كافة قدرات المعالجات علي اية حال، فلماذا اذن يتعب مصنعي المعالجات أنفسهم في تصميم عتاد وقدرات لن تستغل؟ لقد كان هذا صالحا في العصور البائدة عندما كانت البرمجيات تكتب خصيصا لمعالجات معينة .. لقد كان مصطلح TDP حينها يعني الاستهلاك الأقصي للمعالج بالفعل! كانت المعالجات تقيم علي أساس أسوأ البرمجيات  في سحب الطاقة .. أما الآن فلم يعد أيا من هذا قابلا للتطبيق.

لذا فما يحدث حقا علي أرض الواقع هو ان مصنع المعالجات يبني معالجه وهو يعلم تمام العلم أن العالم لا يحوي برنامج قادر علي تشغيل المعالج بنسبة 100% كاملة أبدا. دوما ستظل هناك أجزاء غير مستغلة في المعالج في أي وقت وفي كل وقت .. لذا يختار مصنعي المعالجات اكثر التطبيقات والبيانات شيوعا واستخداما ويجربونها علي معالجاتهم ويقيسون استهلاك طاقة هذه التطبيقات فيخرجون بقيمة معينة .. (ولتكن 100 واط) …ثم يصممون وسائل تبريد تستطيع تشتيت الحرارة الناتجة من هذا الاستهلاك .. ويطلقون علي هذه العملية كلها اسم Thermal Design Power أو TDP اختصارا .. وهو ما تقرأه انت علي أنه استهلاك طاقة المعالج الكلي! في حين أنه فقط استهلاك المعالج مع التطبيقات الاكثر شيوعا، وليس هذا هو استهلاك المعالج الحقيقي بأية حال!

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

لماذا تظن أن مطوري المعالجات قد ابتكروا تقنية المسارات الاضافية HyperThreading رغم انها تضيف المزيد من التعقيد علي تركيب المعالج؟ السبب ببساطة انها لا تستهلك اي طاقة اضافية تقريبا، لكنها تزيد من سرعة المعالجة في نفس الوقت .. فهي مجرد أداة اصلاح وتقويم .. تتدخل فقط اذا ما حدث خلل ما في معالجة البيانات .. مثل عدم وجود البيانات في الذاكرة المساعدة Cache Miss .. اوحدوث  خطأ أدي لانهيار عملية المعالجة .. او تكون نقطة اختناق أدت لتوقف عملية المعالجة، هنا تتعطل عملية المعالجة ويصبح المعالج شاغرا لا يقوم بأي غمل ولا يستهلك أي طاقة في انتظار استئناف عملية المعالجة .. هنا تتدخل المسارات الاضافية Hyper Threads لتعطيه بيانات جديدة فورا دون تضييع وقت، ليستئنف المعالج عملية المعالجة دون الكثير من التعطيل.

hyper threading

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

ولان البرامج والتطبيقات لا تصمم بشكل مطابق لكل معالج .. فأن عمليات المعالجة تعج بالاخطاء وبنقاط الاختناق دوما .. ويمنع كل هذا أن يقدم المعالج كل ما عنده بنسبة 100% طوال الوقت، كما ينبغي أن يكون!

مثلا يستطيع المعالج المركزي CPU دوما معالجة 6 عمليات حسابية في كل تردد Instructions per Clock، ويحقق هذا استغلال 100% لكل موارده، لكن فقط اذا ما وصله من الذاكرة هذا العدد، لكن هذا لا يحدث علي أرض الواقع، وينتهي الأمر بالمعالج المركزي CPU وهو ينفذ 3 عمليات بحد أقصي ..

ومثلا يستطيع المعالج الرسومي GPU رسم كل مضلع رسومي Polygon متوسط الحجم الي 16 نقطة لونية Pixel في كل تردد Polygon per Clock .. ويحقق هذا الاستغلال الأمثل 100% لكل موارده الحوسبية .. لكن هذا اذا وصله في كل تردد مضلعات متوسطة الحجم، لكن المضلعات ليست كلها متساوية الحجم، فهناك منها الصغير والكبير .. هناك ما يرسم الي 8 نقاط لونية، او 10 فقط، او حتي اثنين أو واحد فقط .. ويعني هذا ان الاستغلال الامثل لمورد المعالج الرسومي GPU لن يتحقق في كل تردد ..

ولان كل تردد لا يؤدي الي الاستغلال الامثل لموارد المعالج .. فلقد أصبح لدي مصنعي المعالجات حرية رفع سرعة وتردد التشغيل، مطمئنين الي ان استهلاك الطاقة لن ينفجر الي مستويات غير مسبوقة .. وكيف يحدث هذا وكل تردد لا يشغل المعالج بنسبة 100% من الاساس؟ ومن هنا حصلنا علي تقنيات مثل التردد الزائد Boost Clock.. حيث يرفع المعالج من تردده دون أي قلق من استهلاك الطاقة الزائد، عملا بالقاعدة التي تقول اذا لم تغلبهم فانضم اليهم If you can’t beat them, join them .. فاذا كان كل تردد لا يشغل المعالج بالكامل بسبب نقص قدرة البرمجيات، فان الطريقة الوحيدة لزيادة سرعة المعالج هي زيادة عدد تردداته.

لكن ماذا اذا كانت التطبيقات قادرة فعلا علي الاستغلال الامثل لكل ذرة وكل خلية في المعالج؟ ماذا اذا كان كل مضلع يرسم الي 16 نقطة لونية، واذا كان كل برنامج يسلم المعالج المركزي CPU تعليمات تتعدي ال 6 في كل تردد .. في هذه الحالة فإن استهلاك طاقة المعالج سينتفخ الي مستويات غير مسبوقة ولا معلنة، حينها لن يصير غريبا ان تجد المعالج الرسومي GPU يسحب 400 واط من الطاقة، ومثله المعالج المركزي CPU.

ان مثل تلك التطبيقات موجودة بالفعل، ويطلق عليها اسم جرثومات الطاقة Power Virus .. وهي تطبيقات بسيطة للغاية، وغير معقدة علي الاطلاق .. لكنها قادرة علي اعتصار كل قطرة اداء في اي معالج. مثلا مع المعالج الرسومي تجد تلك البرمجيات ترسم اشكال رسومية مبسطة مثل برنامج FurMark الذي يرسم كرة مغطاة بالفراء .. لكنها تتطابق مع المعدل الأمثل لاستغلال المعالج الرسومي GPU، أي مضلع لكل 16 نقطة لون! أغلب هذه التطبيقات هي برمجيات اختبارية لا أكثر، ولا توجد منها فائدة عملية علي أرض الواقع.

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

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

ولقد أنتج هذا السلوك أسلوبا جديدا في البرمجة .. لماذا تكتب برنامجك بحيث يطحن كل ذرة في المعالج؟ اكتبه بحيث يستغل الترددات العالية التي تأتي مع عدم الاستغلال الأمثل للموارد!

بعض المصنعين يسمح للمستخدم برفع حد استهلاك الطاقة Power Limit، كي يعمل المعالج بتردد عال دون تخفيض ويتجاوز الحد المسموح له في استهلاك الطاقة حتي مع البرمجيات الثقيلة، لكن هذا يضع عبأء أكبر علي المستخدم نفسه، الذي توجب عليه أن يضمن ان نظام التبريد لديه سيستطيع التعامل مع الحرارة الناتجة و ان يضمن ان مزود الطاقة Power Supply سيستطيع توفير الطاقة اللازمة .. تجد هذا شائعا في المعالجات الرسومية GPUs بالذات.

لكن قد يقلل هذا الأمر من عمر المعالج نفسه فيما بعد .. فكلما استهلك المعالج طاقة أكثر كلما قل عمره بمعدل مماثل .. بل إن المثير للأسف أن المعالج يستهلك طاقة أكبر كلما طال عمره وطالت مدة استخدامه حتي لو ظل يعمل بالاعدادات الافتراضية المصنعية! فالمعالج الذي يبلغ عمره 7 سنوات يستهلك طاقة أكبر من المعالج الذي لم يبلغ عاما واحدا .. فمع طول العمر تقل حساسية أجزاء المعالج لفرق الجهد Voltage، ويحتاج الي فرق جهد أعلي لتشغيل نفسه بنفس الكفاءة القديمة، والجهد Voltage الأعلي يعني استهلاك طاقة أعلي وخرج حراري أعلي .. وهو الأمر الذي قد يقلل من أداء المعالج لاحقا اذا لم تكن وسائل التبريد علي قدر المهمة! يحتاج كل مستخدم أن يضع هذا في حسبانه جيدا قبل أن يغامر بتعديل أية اعدادات! بعض المصنعين يضع هذه الظاهرة في حسبانه عند قيامه بتحديد قيمة الـ TDP لمعالجه، بعضم لا يهتم .. وبعضهم يفعل هذا مع معالجات بعينها ويهمل معالجات أخري .. لقد كثر التغافل المتعمد في تقييم الـ TDP بين الجميع حقيقة.

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

إقرأ أيضا: تردد المعالجات المركزية يتعرض للموت