در Acovea پیاده سازی الگوریتم ژنتیک برای پیدا کردن "بهترین" گزینه برای کامپایل برنامه با شورای همکاری خلیج فارس C و C ++ کامپایلر.
ACOVEA (تجزیه و تحلیل گزینه های کامپایلر از طریق الگوریتم تکاملی) پیاده سازی الگوریتم ژنتیک برای پیدا کردن "بهترین" گزینه برای کامپایل برنامه با جیسیسی (GCC) C و کامپایلر C ++.
"بهترین"، در این زمینه، به عنوان این گزینه ها است که برای تولید سریع ترین برنامه های اجرایی از یک کد منبع داده تعریف شده است. Acovea C ++ چارچوب است که می توان توسعه یافته برای تست زبان های برنامه نویسی دیگر کامپایلر و غیر شورای همکاری خلیج فارس است.
من تصور Acovea به عنوان یک ابزار بهینه سازی، در هدف به پروفایل های مشابه است. سنتی پروفایل سطح عملکرد الگوریتم ترین موثر در عملکرد یک برنامه مشخص. Acovea است و سپس به آن دسته از الگوریتم های اعمال شده برای پیدا کردن پرچم کامپایلر و گزینه هایی که تولید سریع ترین کد.
Acovea نیز برای آزمایش ترکیبی از پرچم برای تعامل بدبین، و برای آزمایش قابلیت اطمینان از کامپایلر مفید است.
به درک و بررسی با استفاده از نرم افزار سنتی مدرن دشوار است. میلیون ها نفر از خط کد تولید برنامه های کاربردی شامل فعل و انفعالات پیچیده، هجوم توضیح ساده و یا بررسی حیوان نیروی.
هدایت، رویکرد قطعی به تست متکی بر تست انسان به تصور هر ترکیب ممکن از اقدامات - گزاره غیر واقعی داده پیچیدگی نرم افزار. با این حال، با وجود که پیچیدگی، ما پاسخ به سوالات مهم در مورد مدرن، نرم افزار در مقیاس بزرگ نیاز دارید.
چه نوع از سوالات مهم است؟ در نظر بگیرید کامپایلر GNU مجموعه. من نوشتن مقالات که تولید کد معیار، یک کار دستخوش مشکلات ناشی از گزینه های بی شمار ارائه شده توسط کامپایلر های مختلف. برای معیار من معنائی داشته باشد، من باید بدانند که ترکیبی از گزینه های تولید سریع ترین کد برای یک برنامه داده شده است.
پیدا کردن "بهترین" مجموعه ای از گزینه برای تلفن های موبایل مانند یک کار ساده، با توجه به میزان اسناد شورای همکاری خلیج فارس و عقل متعارف از جامعه توسعه شورای همکاری خلیج فارس. آه، اگر آن را تنها بسیار آسان بود! مستندات شورای همکاری خلیج فارس، در حالی که گسترده است، نیز صادقانه مبهم است.
من این سبک از اسناد قدردانی. بر خلاف بسیاری از فروشندگان تجاری، که اظهارات مطلق در مورد "کیفیت" از محصولات خود، اسناد شورای همکاری خلیج فارس اعتراف عدم قطعیت در چگونه گزینه های مختلف را تغییر دهد تولید کد. در واقع، نسل فعال است به طور کامل وابسته به نوع برنامه در حال تدوین است و پلت فرم هدف. گزینه ای است که تولید کد اجرایی سریع برای یک کد منبع ممکن است مضر به عملکرد یک برنامه دیگر.
"عقل متعارف" می رسد در صندوق من هر زمان که من یک مقاله جدید منتشر می شود. اعم از مودب به اصرار به بی ادب، این ایمیل ها حاوی پیشنهادات متناقض برای تولید کد سریع می باشد.
در اکثریت قریب به اتفاق موارد، از جمله اظهارات حدیثی فاقد هر گونه مدرک رسمی اعتبار خود را، و، بیشتر از نیست، پیشنهاد "بهبود" بی اثر است یا مضر باشد. آن را تبدیل به طور فزاینده آشکار است که هیچ کس --myself شامل - می داند دقیقا چگونه همه این گزینه شورای همکاری خلیج فارس با هم در تولید کد برنامه کار می کنند.
من به دنبال جام مقدس از بهینه سازی - اما دقیقا همان چیزی است بهینه سازی است؟ درک مشکل این است که اولین گام در پیدا کردن یک راه حل است.
بهینه سازی تلاش برای تولید "بهترین" کد ماشین از کد منبع. "بهترین" به معنای چیزهای مختلفی را برای کاربردهای مختلف. بیل پایگاه داده تکه از اطلاعات، در حالی که یک برنامه علمی است که با نتایج سریع و دقیق مربوط. اولین نگرانی برای سیستم های جاسازی شده ممکن است اندازه کد.
و آن را کاملا امکان پذیر است که کد کوچک سریع می باشد، و یا کد سریع و دقیق است. بهینه سازی است به دور از یک علم دقیق، با توجه به تنوع از سخت افزار و نرم افزار تنظیمات.
الگوریتم بهینه سازی ممکن است به عنوان ساده به عنوان از بین بردن یک حلقه ثابت، و یا به پیچیدگی بررسی برنامه برای از بین بردن تمام جهانی مشترک زیر عبارات. بسیاری از بهینه سازی تغییر برنامه نویس نوشت را به یک فرم کارآمد تر، تولید همان نتیجه در حالی که تغییر جزئیات اساسی برای بهره وری. دیگر "بهینه سازی" کد تولید که با استفاده از ویژگی های خاص از سخت افزاری زیرین، مانند مجموعه آموزش خاص.
معماری حافظه، خطوط لوله، انبارهای بر روی و خارج از تراشه - همه بر عملکرد کد در راه است که به برنامه نویسان با استفاده از یک زبان سطح بالا آشکار نیست. بهینه سازی است که ممکن است به نظر می رسد برای تولید کد سریع تر ممکن است، در واقع، ایجاد کد های بزرگ است که باعث می شود نتواند کش بیشتر، عملکرد در نتیجه تحقیر آمیز.
حتی بهترین کد دست کوک C شامل مناطق تفسیر. هیچ مطلق، یک به یک بین مکاتبات اظهارات C و دستورالعمل ماشین وجود دارد. تقریبا هر دنباله از کد منبع را می توان به مختلف وارد - اما عملکرد معادل - آموزش دستگاه جریان با اندازه های مختلف و ویژگی های عملکرد.
Inlining توابع یک مثال کلاسیک از این پدیده است: جایگزین کردن یک فراخوانی تابع با کد تابع خود را ممکن است یک برنامه سریع تر تولید کنیم، اما همچنین ممکن است اندازه برنامه را افزایش دهد. افزایش اندازه برنامه، ممکن است، به نوبه خود، جلوگیری از یک الگوریتم از اتصالات در داخل با سرعت بالا حافظه کش، در نتیجه کاهش یک برنامه به دلیل نتواند کش.
توجه استفاده من از کلمه جانوران پستاندار شبیه راسو "ممکن است" - inlining توابع کوچک گاهی اوقات اجازه می دهد تا دیگر الگوریتم های بهینه سازی یک فرصت برای بهبود بیشتر کد برای شرایط محلی، تولید سریع تر و کد کوچکتر است.
بهینه سازی است ساده یا آشکار نیست، و ترکیبی از الگوریتم می تواند به نتایج غیر منتظره منجر شود. که من به ارمغان می آورد به این سوال: برای هر برنامه داده می شود، چه گزینه های بهینه سازی موثر ترین؟
چه جدید در این نسخه:
· تغییرات جزئی در مجوز غیر آزاد.
· پشتیبانی برای آخرین نسخه از libcoyotl و libevocosm اضافه شده است.
جزئیات نرم افزار:
نظر یافت نشد