ریزه میزه – اندازه گیری زمان اجرای یک قسمت از برنامه در C++11

سلام دوستان امیدوارم حالتون خوب باشه.

توی این قسمت قصد دارم که بهتون آموزش بدم چطور می‌تونید مدت زمان اجرای یک تابع (یا هرچیز دیگری) رو توی برنامه تون بر اساس نانوثانیه (یاهر واحد دیگری) بدست بیارید. قصد داریم از کتابخانه chrono که در c++11 اضافه شده استفاده کنیم. دوستان اگر مشتاق باشن میشه در مورد خود chrono یه مقاله مفصل داشت ولی بعید میدونم نیاز باشه. خیلی مختصر بگم که در chrono شما با سه مفهوم duration و timepoint و clock سروکار دارید.

duration

به یه مدت زمان گفته میشه. مثلا سه روز، یک ساعت، دو قیقه، ۱۳۴۵ میلی ثانیه. یا هر چیز دیگری. خب پس duration شامل شده از یه واحد زمان مثلا میلی ثانیه، و تعدادی تیک در آن واحد زمان مثلا ۱۳۴۵

timepoint

مفاهیم timepoint و duration خیلی شبیه هم هستند با یه تفاوت. اونم این که timepoint دارای یک مبدا زمانی است. در duration شما میگید ۱۰ ثانیه و هیچکی هیچ کاریتون نداره ولی در timepoint شما میگید ده ثانیه و بقیه میپرسن : خب از چه مبدا زمانی. مثلا میگید از دیروز ساعت ۲ ظهر ده ثانیه بعدش. این مفهوم timepoint عه!

clock

یا ساعت، خب یه مبدا زمانی داره (timepoint) و یه شمارنده هر تیکش رو داره (duration) . مثلا من می‌تونم یه ساعت داشته باشم از الان یه ساعت یه ساعت شروع کنه به تیک تاک کردن. یا یه ساعت که از اول سال شروع کرده باشه نانوثانیه به نانو ثانیه تیک تاک کرده باشه. در C++11 دو (سه) تا ساعت داریم که معمولا از اینا استفاده می‌کنیم. system_clock واسه گرفتن ساعت فعلی سیستم و steady_clock واسه استفاده به عنوان یه زمان سنج (یا stopwatch)

خب حالا بریم سراغ کار خودمون. یه تابع الکی داریم می‌خوایم اندازه بگیریم اجراش چقدر طول می‌کشه. پس قطعا باید از steady_clock استفاده کنیم:

کافیه قبل و بعد تابع alaki که دوست داریم مدت اجراش رو بفهمیم، با استفاده از now کلاس steay_clock مقدار timepoint فعلی رو بدست بیاریم و بعد با حساب کردن اختلاف این دوتا مدت زمان اجرا رو بدست بیاریم.

با استفاده از مفاهیمی که گفته شد خیلی راحت می‌تونید بازم از chrono استفاده کنید. بدونید که خیلی خوش دسته و خیلی کارا میشه باهاش کرد.

۹,۶۷۷ total views, 103 views today

Print Friendly, PDF & Email

درباره ی سعید دادخواه

یه برنامه نویس !

همچنین ببینید

ریزه میزه – استفاده از Lambda در تابع min

سلام دوستان در پست قبلی در مورد ارسال چندین پارامتر به تابع min برای محاسبه …

2
دیدگاه بگذارید

avatar
1 Comment threads
1 Thread replies
0 دنبال کنندگان
 
Most reacted comment
داغ ترین نخ نظرات
2 کامنت گذاران
سعید دادخواهstasckprogramer کامنت گذاران اخیر
  مشترک شو!  
جدیدترین قدیمی‌ترین دارای بیشترین امتیاز
میخوام باخبر شم از
stackprogramer
Member

سلام بسیار عالی،آقای دادخواه فکر می کنم کپچا بخش کامنت گذاشتن مشکل پیدا کرده است. لاگین نباشی کامنت خطا داره