این مطلب ارسال شده است در روز سه شنبه, اسفند ۱۳م, ۱۳۸۷ و در ساعت ۷:۲۷:۴۵ تحت دسته رایانه. شما می توانید نظرات این مطلب را با استفاده از RSS 2.0 خوراک دنبال کنید. همچنین می توانید نظر بدهید یا، بازتاب از سایت خود ارسال کنید.
گنجه
# tail -f /var/log/experience
یکی از روشهای نسبتاً متفاوت همگردان0ها برای بهینهسازی1، روش «بهینهسازی هدایتشده با سابقه»2 است که گاهی اون رو کوتاهانه3 PGO هم میگویند.
مؤثر بودن این روش رو میشه به چشم دید. مثلاً اگر از مرورگر Firefox هم در لینوکس4 و هم در ویندوز5 استفاده کرده باشید، حتماً تفاوت فاحش کارآیی6 رو حس کردهاید. دلیل این تفاوت فاحش، استفاده از PGO در ساخت7 پروندهٔ8 اجرایی9 ویندوز و عدم استفاده ازش در ساخت اجرایی لینوکس بیان شده.
خوب، حالا که به اندازهٔ کافی انگیزوندمتون (!)، ببینیم این روش اصلاً چی هست و چهجوری میتونیم ازش استفاده کنیم.
اساس این روش، استفاده از اطلاعات کسبشده در زمان اجرا10ی برنامه، برای بهینهسازی در زمان همگردانی11 هست. پس همگردانی با این روش، سه مرحله خواهد داشت:
۱. همگردانی برای تولید اجرایی مخصوص جمعآوری اطلاعات مورد نیاز برای بهینهسازی
۲. اجرای برنامهٔ تولیدشده در مرحلهٔ ۱ و استفاده از موارد کاربرد12 مورد نظر برای بهینهسازی
۳. همگردانی با بهینهسازی به کمک اطلاعات جمعآوریشده در مرحلهٔ ۲
همگردانها برای مراحل ۱ و ۳ گزینههای مخصوصی دارند که اینجا فقط GCC رو میبینیم.
درGCC برای مرحلهٔ ۱ از گزینهٔ -fprofile-generate و برای مرحلهٔ ۳ از گزینهٔ -fprofile-use استفاده میکنیم. دقت کنید که گزینهٔ -fprofile-generate رو هم باید برای همگردانی13 بدید، و هم برای پیوند14.
من که معمولاً از CMake به عنوان سامانهٔ ساخت15 استفاده میکنم، برای به کارگیری این روش، این چند خط رو به CMakeLists.txt اضافه میکنم:
# profile::generate
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --profile-generate")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --profile-generate")
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --profile-generate")
# profile::use
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --profile-use")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --profile-use")
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --profile-use")برای مرحلهٔ ۱، سه تا set اول و برای مرحلهٔ ۳، سه تا set دوم رو فعال میکنم. راستی دقت کردید که به جای -fprofile-folan میشه از -profile-folan- استفاده کرد؟!
- Compiler [↩]
- Optimization [↩]
- Profile-Guided Optimization [↩]
- به یاد استاد روحانی رانکوهی! [↩]
- Linux [↩]
- Windows [↩]
- Performance [↩]
- Build [↩]
- File [↩]
- Executable [↩]
- Run-time [↩]
- Compile-time [↩]
- Use case [↩]
- Compiling [↩]
- Linking [↩]
- Build System [↩]
اسفند ۱۳م, ۱۳۸۷ at ۱۴:۵۰:۵۲
در جنتو به سادگی با افزودن گزینههایش در etc/make.conf/ فعال کردم که برای تمامی بستهها اعمال شود. البته بستههایی که کامپایل شان در جنتو بسیار طول میکشد مانند فایرفاکس و اپن آفیس بستههای باینری مخصوص جنتو دارند که من از اونها استفاده میکنم ولی الان تهییج شدم که حداقل فایرفاکس رو بسته کامپایل از سورس اش رو بریزم. اپن آفیس نمیشه چون یک روز و نیم روی این سخت افزار سریع کامپایل اش طول میکشه! :دی
پاسخ
سید پاسخ:
اسفند ۱۳م, ۱۳۸۷ در ۱۹:۱۴:۰۸
سلام سعید! خوبی؟!
میخواستم اشارت کنم که “:دی” مناسب نیست! لطفا از “دی:” استفاده کن!
پاسخ
سعید پاسخ:
اسفند ۲۵م, ۱۳۸۷ در ۱۰:۳۴:۰۲
ممنون از اشارت ات سید جان، محتوا اش که ان شاالله یکیه! دی: ولی به نظرم :دی برای زبان فارسی که راست به چپ هست درست تر میاد، همونطور که D: برای زبان انگلیسی که چپ به راست هست بکار میره. حالا ببینم آیا میتوانم این عادت را تغییر دهم؟ دی:
پاسخ
سيّد پاسخ:
اسفند ۲۵م, ۱۳۸۷ در ۱۵:۱۳:۲۲
ببین، دو نقطه دی انگلیسی رو برای چی گذاشتن؟ برای این که شبیه قیافه ی یه آدمه. خوب :دی که اصلاً شبیه قیافه نیست! اما دی: رو بچرخونی، می بینی که یک صورت با بینی عمل نکرده! جلو چشمت ظاهر می شه! دی: نه؟!
پاسخ
سعید پاسخ:
اسفند ۲۷م, ۱۳۸۷ در ۲۲:۵۶:۴۲
بسیار عالی! دی:
حالا یک سوالی برام پیش اومد! آیا این یک قاعده کلی است؟ اگر این D یک چیز دیگر بود مثلا اس، آنوقت چه میکردیم؟! پی:
پاسخ
اسفند ۱۳م, ۱۳۸۷ at ۱۸:۳۹:۰۲
سلام.
شماره گذاری توی متن اصلی از صفر شروع شده اما توی پانوشت از یک.
پاسخ
اسفند ۱۳م, ۱۳۸۷ at ۱۸:۳۹:۴۹
آخ ببخشید متاسفانه خوراکخوانم متن بهروزرسانینشده شما رو برام نمایش داده بود.
پاسخ
ابراهیم پاسخ:
اسفند ۱۳م, ۱۳۸۷ در ۱۹:۱۴:۲۰
متشکر از دقت نظر شما
پاسخ
اسفند ۱۹م, ۱۳۸۷ at ۱۶:۴۳:۲۱
بند آخر رو اشتباه نوشتی یا واقعا به نظرت نکتهی جالبیه؟
پاسخ
ابراهیم پاسخ:
اسفند ۲۰م, ۱۳۸۷ در ۱۰:۳۶:۰۸
اگر –profile-folan رو میگی، درست نوشتهام و واقعاً برام جالبه!
پاسخ
ابراهیم پاسخ:
اسفند ۲۵م, ۱۳۸۷ در ۱۶:۰۸:۴۳
منظورت همون بود؟ میدونی چرا برام جالبه؟
پاسخ
ابراهیم پاسخ:
فروردین ۱۳م, ۱۳۸۸ در ۲:۰۷:۰۲
احتمالاً نمیدونی، پس میگم: چون توی manpage حضرت GCC نیومده!
پاسخ
فروردین ۱۳م, ۱۳۸۸ at ۰:۳۲:۳۱
امروز که گفتی مطلب را تو وبلاگم نوشته ام؛ خوندیش یا نه؟ و من گفتم نه؛ نخوندمش! ؛
باور نمیکردم موضوع همین پست معظم “بهینهسازی هدایتشده با سابقه” یکی مانده به آخرتان میباشد.
میدونی خداوکیلی اون توضیحات چند خطی شما که به صورت شفاهی و با عدم استفاده از عبارات “فارسی سازی شده” ارائه شد خیلی گویا تر از این مطلب کتبی اتان هست؛ البته برای این حقیر، از سایر دوستان خبر ندارم.
واقعیت اینه که من حتا تو خوندن این پستتون هم مشکل دارم؛ یه جور قرائت وبلاگ با اعمال شاقه به حساب می آید.
همین طوری میگم ها؛ شاید بد نباشه که جای پانویس ها با عبارات اصلی را عوض کنی. (D:)
رووش فکر کن!
…
پاسخ
ابراهیم پاسخ:
فروردین ۱۳م, ۱۳۸۸ در ۲:۰۸:۰۲
روش خیلی فکر کردهام
همینه که هست داداش!
پاسخ