گنجه
بایگانی برای اسفند, ۱۳۸۷
۱۲ ۳۰م, ۱۳۸۷
چند ساعت قبل از تحویل سال، تلویزیون0 رو روشن کردم ببینم چی داره. آقای مجری از این میگفت که یک سال دیگر هم گذشت و چه بزرگانی که از بین ما رفتند و جایگزینشدنی نیستند و …
با خودم گفتم این برنامهٔ صدا و سیما چه کار خوب و جالبی کرده؛ یادی از بزرگانی که در سال گذشته رحلت کردهاند. رفتم تو فکر که چه بزرگانی در سال ۸۷ از بین ما رفتند؟ آیت الله مشکینی سال ۸۷ وفات کردند یا ۸۶؟1 آیا از آیات عظام کسی امسال وفات کرده؟ … قبل از این که فرصت کنم در مورد شهدای مقاومت اسلامی و غزه در سال ۸۷ فکر کنم، آقای مجری رفت و ویژهبرنامهای با همین موضوعی که در موردش صحبت کرده بود شروع شد.
با دقت، به صفحهٔ سیاه تلویزیون خیره شده بودم و منتظر بودم ببینم امسال سایهٔ چه بزرگانی از سر این ملت رفته. کمکم سیاهی رفت و تصویر شخصی ظاهر شد … فکر میکنی اولین نفر از بزرگان که نشون داد کی بود؟ حدس بزن … آقای خسرو شکیبایی2.
معلومه که نمیخوام بگم آقای خسرو شکیبایی انسان بزرگی نیست. ولی وقتی حرف از بزرگان یک ملت میشه، بزرگتر از امثال ایشون بسیار هست. خیلی تأسفانگیزه که یک ملت، بزرگانش رو بازیگرها، فوتبالیستها، خوانندهها و از این قبیل بدونه.
راستی سال نو مبارک باشه!
۱۲ ۱۳م, ۱۳۸۷
یکی از روشهای نسبتاً متفاوت همگردان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- استفاده کرد؟!
۱۲ ۱۲م, ۱۳۸۷
با پرهیز از Java و .NET (در مقابل C++ و C) در روند گرمایش زمین سهم کمتری داشته باشیم.