گنجه

# 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- استفاده کرد؟!

  1. Compiler []
  2. Optimization []
  3. Profile-Guided Optimization []
  4. به یاد استاد روحانی رانکوهی! []
  5. Linux []
  6. Windows []
  7. Performance []
  8. Build []
  9. File []
  10. Executable []
  11. Run-time []
  12. Compile-time []
  13. Use case []
  14. Compiling []
  15. Linking []
  16. Build System []

۱۴ نظر به “بهینه‌سازی هدایت‌شده با سابقه”

  1. سعید می گوید:

    در جنتو به سادگی با افزودن گزینه‌هایش در etc/make.conf/ فعال کردم که برای تمامی بسته‌ها اعمال شود. البته بسته‌هایی که کامپایل شان در جنتو بسیار طول میکشد مانند فایرفاکس و اپن آفیس بسته‌های باینری مخصوص جنتو دارند که من از اونها استفاده میکنم ولی الان تهییج شدم که حداقل فایرفاکس رو بسته کامپایل از سورس اش رو بریزم. اپن آفیس نمیشه چون یک روز و نیم روی این سخت افزار سریع کامپایل اش طول میکشه!‌ :دی

    پاسخ

    سید پاسخ:

    سلام سعید! خوبی؟!
    می‌خواستم اشارت کنم که “:دی” مناسب نیست! لطفا از “دی:” استفاده کن!

    پاسخ

    سعید پاسخ:

    ممنون از اشارت ات سید جان، محتوا اش که ان شاالله یکیه! دی: ولی به نظرم :دی برای زبان فارسی که راست به چپ هست درست تر میاد، همونطور که D: برای زبان انگلیسی که چپ به راست هست بکار میره. حالا ببینم آیا می‌توانم این عادت را تغییر دهم؟ دی:

    پاسخ

    سيّد پاسخ:

    ببین، دو نقطه دی انگلیسی رو برای چی گذاشتن؟ برای این که شبیه قیافه ی یه آدمه. خوب :دی که اصلاً شبیه قیافه نیست! اما دی: رو بچرخونی، می بینی که یک صورت با بینی عمل نکرده! جلو چشمت ظاهر می شه! دی: نه؟!

    پاسخ

    سعید پاسخ:

    بسیار عالی! دی:
    حالا یک سوالی برام پیش اومد! آیا این یک قاعده کلی است؟ اگر این D یک چیز دیگر بود مثلا اس، آنوقت چه میکردیم؟! پی:

    پاسخ

  2. جسد زنده می گوید:

    سلام.
    شماره گذاری توی متن اصلی از صفر شروع شده اما توی پانوشت از یک.
    :)

    پاسخ

  3. جسد زنده می گوید:

    آخ ببخشید متاسفانه خوراک‌خوانم متن به‌روز‌رسانی‌نشده شما رو برام نمایش داده بود.
    :(

    پاسخ

    ابراهیم پاسخ:

    متشکر از دقت نظر شما :)

    پاسخ

  4. سلمان می گوید:

    بند آخر رو اشتباه نوشتی یا واقعا به نظرت نکته‌ی جالبیه؟

    پاسخ

    ابراهیم پاسخ:

    اگر ‎–profile-folan رو می‌گی، درست نوشته‌ام و واقعاً برام جالبه! :-D

    پاسخ

    ابراهیم پاسخ:

    منظورت همون بود؟ می‌دونی چرا برام جالبه؟

    پاسخ

    ابراهیم پاسخ:

    احتمالاً نمی‌دونی، پس می‌گم: چون توی manpage حضرت GCC نیومده!

    پاسخ

  5. حمزه می گوید:

    امروز که گفتی مطلب را تو وبلاگم نوشته ام؛ خوندیش یا نه؟ و من گفتم نه؛ نخوندمش! ؛
    باور نمیکردم موضوع همین پست معظم “بهینه‌سازی هدایت‌شده با سابقه” یکی مانده به آخرتان میباشد.

    میدونی خداوکیلی اون توضیحات چند خطی شما که به صورت شفاهی و با عدم استفاده از عبارات “فارسی سازی شده” ارائه شد خیلی گویا تر از این مطلب کتبی اتان هست؛ البته برای این حقیر، از سایر دوستان خبر ندارم.

    واقعیت اینه که من حتا تو خوندن این پستتون هم مشکل دارم؛ یه جور قرائت وبلاگ با اعمال شاقه به حساب می آید.

    همین طوری میگم ها؛ شاید بد نباشه که جای پانویس ها با عبارات اصلی را عوض کنی. (D:)

    رووش فکر کن!

    پاسخ

    ابراهیم پاسخ:

    روش خیلی فکر کرده‌ام ;) همینه که هست داداش!

    پاسخ

نظر شما


بسم الله الرحمن الرحیم

راه‌رو گر صد هنر دارد توکل بایدش

برگه‌ها

رایانه‌ای‌ها

آمار

در کل 52 بیننده برای این صفحه
امروز 2 بیننده
در کل 1927 بیننده
از 2011/02/6