• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

البحث في المنتدى

Showing results for tags 'rdtsc'.

  • البحث بالتاقات

    اكتب الكلمات المفتاحيه بينها علامه الفاصله
  • البحث بكاتب الموضوع

تم إيجاد 1 نتيجة

  1. السلام عليكم اليوم كنت أقرا عن الـ D Language http://www.digitalmars.com/d و بالصدفة وجدت معلومة فريدة اجدها لأول مرة: معالجات البنتيوم فيها امر لمعرفة الوقت! الأمر عبارة عن سطر اسمبلي واحد يخزن القيمة في الرجستر eax تلقائيا, و هذا الأمر (حسب ما فهمت) يعطيك عدد دقات ال.. كيف يقولوها .. processor cycles اظن دقات ساعة المعالج, يعني ادق شي مكن تحصل عليه. هذا الأمر هو rdtsc و لتسهيل استخدامه نستطيع بكل بساطة كتابة فنكشن صغير هكذا: inline unsigned int tick(){    __asm    {        rdtsc;    }    //no need for a return statement,    //time is already stored in eax, which is what return does}و عند ترجمة هذا الكود فستصبح مجرد سطر واحد في الأسمبلي, يعني عند استدعاء هذا الفنكشن فكل ما سيحصل هو تنفيذ الأمر rdtsc, فهو inline يعني لا يوجد حتى استدعاء لأي فنكشن, اللهم الا اذا كان الكومبايلر معد عالـ debug, في الفجول سي بلص بلص مثلا, اذا كنت تعمل في الـdebug configuration فسيكون هناك استدعاء لفنكشن حتى مع وجود كلمة inline, اما لو كنت في الـ release configuration, فسيتم تحويل الفنكشن الى inline حتى لو تكن هناك كلمة inline. طبعا انا ضعيف في الأسمبلي, فلا أعرف إذا ما كان هذا السطر مثلا سينفذ كأمر واحد ام كعدة اوامر .. ولا اعرف شي عن طبيعة عمل بنتيوم ولا غيره من هذا الكلام. تستطيع استخدام التوقيت لحساب الفرق بين زمنين هكذا:      unsigned int cpu = tick();    //do something here ..    //basically what you want to time    cpu = tick() - cpu;    cout << "CPU time: " << cpu << endl;اعتقد لا توجد طريقة اسرع او ادق من هذه لحساب الوقت المتغرق لتنفيذ كمية معينة من الكود, فهي اولا تعطيك الوقت نسبة الى المعالج, و ثانيا الكود اللذي يحضر الوقت ليس سوى سطر واحد في الأسمبلي, يعني لا يوجد احتمال ان الكود اللذي ياخذ الوقت هو نفسه يستغرق وقتا اضافيا. الحكاية شفتها اليوم بالصدفة و استفاديت منها, و بصراحة لم اسمع بها ابدا من قبل مع اني بحثت طويلا عن أساليب لاسترجاع قيمة دقيقة لوقت, الا انني لم اجد ابدا اي اشارة لهذا الأمر في البنتيوم. المشكلة الوحيدة هي ان هذا الأمر خاص بالبنتيوم, و قد لا يعمل على اي معالج آخر. ان شاء الله تستفيدون منه.