الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تقييم البرنامج - للمقارنة بين البرامج

مغلق
بدأه baghdadi في 2 أبريل 2007 · 10 رد · 1,255 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ،،،،

نريد أن نقيم في جامعتنا مسابقة صغيرة في برمجة أسرع برنامج بلغة التجميع ،،،

المسابقة هي :

لدينا برنامج صغير يقوم المتسابقون بالعمل عليه و لكن التحدي يكمن في أي البرامج سيكون الأسرع - و السرعة هنا تحدها عدة معايير-

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

نريد طبعا فيما بعد - ليس الآن- تطوير هذا برنامج يقوم بهذه الوظيفة عندنا في الجامعة ،،، فما هي الطريقة الأنسب ،،، لمقارنة برنامجين من حيث السرع

لدي مجموعة من الأفكار ،، سأطرحها فيما بعد و لكن أود أن أترك لكم المجال

سبب ضياع العباد أنهم مسلمون بالوراثة ــ هل فكرت في علة خلقك ؟

شاركني بأفكارك -

على موقعي

#2

بعد تفكير 5 ثوان تبدو الفكرة الكلاسيكية

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

-

لكن ما الذي يقوم به البرنامج ؟

d4baa0.gif
#3

نعم أخ عبد العزيز ،،،،،

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

و لكن ألا توجد طريقة لإجبار النظام على تنفيذ البرنامج لوحده - يعني البرنامج يستأثر و حده بالمعالج -

و أيضا سؤال آخر ،،، ماذا تقصد أخي عبد العزيز بتأخير الوقت الحالي من النظام ؟ ..

سبب ضياع العباد أنهم مسلمون بالوراثة ــ هل فكرت في علة خلقك ؟

شاركني بأفكارك -

على موقعي

#4
baghdadi كتب:
نعم أخ عبد العزيز ،،،،،

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

......

طب ما هو البرامج الأخري ستعمل أيضا في نفس وقت تنفيذ البرنامج الثان والثالث والرابع و ...

#5

هذا سهل

يستخدم نظام Vierge لا يوجد به اي برنامج مثبت

لا يوجد اتصال بالانترنت

ويتم تعطيل كل Service

فقط

-

اقصد اخذ الوقت من النظام Get the System Time

d4baa0.gif
#6

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

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

وجدت دالة في الدوت نت في الكلاس process -أظنها تكتب هكذا- -الكلاس الخاصة بالتعامل مع البرامج processes

و و ظيفتها إعطاء زمن تشغيل البرنامج فعليا - بالميكرو ثانية- ،، قد تكون هذه مفيدة

ولكن هذا الحل قد يضع بعض القيود الأخرى .......

سبب ضياع العباد أنهم مسلمون بالوراثة ــ هل فكرت في علة خلقك ؟

شاركني بأفكارك -

على موقعي

#7

طبعا اللي ذكره الاخ محمد هي طريقة مباشرة.

هناك طريقة اكثر اعتمادية. وهي حساب زمن التعليمة من حيث عدد الدورات .

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

هذه الطريقة استعملتها في تصميم نظام تشغيل (ٌRealTime OS) يشتغل تحت Z80. وكان لزاما على ان احسب كل زمن كل تعليمة . فصممت برنامج اخر على PC يحتوي على جميع تعليمات z80 وزمنها. وكنت ادخل البرنامج علية فيقوم بحساب الزمن لي . حتى لو في تشعب فيحسب لي التشعب في حالة التحقق او في حالة لم تتحقق. واللوب.

هناك برنامج لم استخدمة ولكن اطلعت علية. اسمه Intel VTune

powerful profiler and code analyzer for Intel processors

. هذا البرنامج يحلل البرنامج على اساس الكود وتصميم الماكرو نفسه.

#8

طريقتك أخ pc.2058 جميلة و أنا فكرت في طريقة مشابهة و هي :

تحت كل تعليمة من تعليمات البرنامج الذي أريد تقييمه أقوم بإضافة سطر ،،،، هذا السطر يقوم بزيادة عداد معين increment ،،، بحيث كلما تنفذت تلك التعليمة يزيد العداد ب1 أو 2 أو 3 ..... حسب زمن تنفيذ كل برنامج

طبعا زيادة سطر تحت كل تعليمة ممكن بإحتمالي :

- الأول : أن الكود سورس للبنامج عندي و بالتالي هنا الأمر بسيط

- و لكن إذا كان البرنامج على هيئة ملف تنفيذي فإن التغيير في محتوياته و إظافة أسطر إلى البرنامج قد تخلط adressing ،،، أي قد ينتج عنها تغيير في العناوين ،،،،

سبب ضياع العباد أنهم مسلمون بالوراثة ــ هل فكرت في علة خلقك ؟

شاركني بأفكارك -

على موقعي

#9

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

الطريقة هي: عمل برنامج يعمل DesAssembly لكل برنامج وبالتالي يمكن معرفة الاوامر المستخدمة في كل اجرائية Procedure ومعروف ايضا الوقت الطي تاخذه كل تعليمة و من هنا يمكن حساب الوقت المستغرق من كل Procedure

ثم يتم تحليل خواريزمية عمل البرنامج وكيفية استدعاء تلك Procedure وكم من مرة وغير ذلك

طبعا هناك برامج جاهزة مثل الذي ذكره الاخ pc.2058 والتي تسمى profiler

d4baa0.gif
#10

نعم هي طريقة معقدة من حيث البرمجة ،،،، لأن كتابة disassembler ليست سهلة ،،،، :)

سبب ضياع العباد أنهم مسلمون بالوراثة ــ هل فكرت في علة خلقك ؟

شاركني بأفكارك -

على موقعي

#11

الرياضيين يستخدمون غالباً Big O

http://en.wikipedia.org/wiki/Big_O_notation

لكن كمبرمج, لا ادري ما مدى امكانية تطبيق هذه الطريقة :)

السلام عليكم ورحمة الله

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

هذا الموضوع مغلق.

مواضيع مشابهة