السبت، 8 فبراير 2025

حساب تعليمات وحدة المعالجة المركزية في بايثون

 هل تعلم أن الأمر يتطلب حوالي 17000 تعليمة وحدة المعالجة المركزية لطباعة (“Hello”) في بايثون؟ وأن الأمر يتطلب حوالي 2 مليار منها لاستيراد Seaborn؟

كنت ألعب اليوم باستخدام perf_event_open، وهو نظام Linux الذي يتيح لك إعداد جميع أنواع مراقبة الأداء. إحدى الطرق للتفاعل مع النظام هي من خلال أداة perf CLI. ما المشكلة؟


1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@X:~# cat print.py
print("Hello")
 
root@X:~# perf stat -e instructions:u python3 ./print.py
Hello
 
 Performance counter stats for 'python3 ./print.py':
 
          45713378      instructions:u
 
       0.030247842 seconds time elapsed
 
       0.025787000 seconds user
       0.004282000 seconds sys

45,713,378 هو عدد التعليمات اللازمة لتهيئة بايثون وطباعة Hello وتفكيك الشيء بالكامل مرة أخرى. أريد المزيد من الدقة! أريد فقط قياس هذا السطر الواحد من التعليمات البرمجية.

ومن هنا جاءت هذه الأداة الصغيرة:

1
2
3
4
5
6
7
from cirron import Collector
 
with Collector() as c:
    print("Hello")
 
print(c.counters)
# Sample(instruction_count=17181, time_enabled_ns=92853)

لماذا اريد هذا؟ الأساس مجرد فضول، لكن هذا لا يعني أنه لا يمكن أن يكون مفيدًا: لنفترض أنك تهتم حقًا بأداء foo الخاص بك وتريد الحصول على اختبار انحدار يفشل إذا أصبح أبطأ من حد معين. لذا، تقوم بضبطه على time.time()، وتؤكد أنه أقل من حد معين و… تدرك أن صندوق CI الخاص بك يقوم بتشغيل عدد كبير من الاختبارات المتزامنة وأن التوقيت مزعج للغاية.

ليس (بالقدر الكافي) عدد التعليمات!

يوضح هذا الرسم البياني توزيع قياسات الوقت لنفس القطعة من التعليمات البرمجية باستخدام time.time() وtime.perf_counter() وعدد التعليمات المقاسة باستخدام Cirron، مع تعديل مقياسها لتتناسب مع قياس الوقت. لاحظ مدى دقة توزيع عدد التعليمات (لاحظ أيضًا أنه ليس ثابتًا تمامًا).

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

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

إرسال تعليق

10 مشاريع صعبة للمستوى المتوسط ​​لتعزيز مهاراتك في بايثون ومحفظتك

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