اینترنت پنجره ها اندروید

کامپایلرهای اینتل به اشتراک گذاری کامپایلرهای اینتل و GCC

شماره قبلی مجله، ما در مورد محصولات اینتل VTUNE Performance Analyzer Performance Family - ابزارهای تجزیه و تحلیل بهره وری که با توسعه دهندگان نرم افزار افتخار می کنیم، مورد بحث قرار گرفتیم و اجازه می داد تا در کد برنامه کاربردی شناسایی شود که بیش از حد بسیاری از منابع پردازنده صرف شده است، که می دهد توسعه دهندگان این فرصت را برای شناسایی و از بین بردن تنگناهای بالقوه مرتبط با بخش های مشابه کد، تسریع روند توسعه برنامه های کاربردی. با این حال، ما یادآوری می کنیم که عملکرد برنامه ها تا حد زیادی بستگی دارد که چگونه کامپایلرهای موثر در هنگام توسعه آنها استفاده می شود و چه ویژگی های سخت افزاری هنگام تولید کد دستگاه استفاده می شود.

آخرین نسخه های اینتل اینتل C ++ و کامپایلر اینتل Fortran برای ویندوز و نرم افزار لینوکس به شما این امکان را می دهد که در عملکرد برنامه های کاربردی برای پردازنده های اینتل Itanium 2 2، اینتل Xeon و اینتل پنتیوم 4 تا 40٪ در مقایسه با کامپایلرهای موجود به دست آورید سایر تولید کنندگان از طریق استفاده از چنین ویژگی های پردازنده های مشخص شده مانند تکنولوژی Hyper-Threading.

به تمایز مربوط به بهینه سازی کد توسط این خانواده از کامپایلرها، استفاده از یک پشته برای انجام عملیات نقطه شناور، بهینه سازی بین پردازنده (بهینه سازی بیننده، IPO)، بهینه سازی مطابق با بهینه سازی هدایت شده توسط پروفایل، PGO)، پیش بارگذاری داده ها به حافظه پنهان (پیش تعیین شده داده ها)، که از تاخیر در ارتباط با دسترسی به حافظه جلوگیری می کند، از ویژگی های مشخصه پردازنده های اینتل (به عنوان مثال، پسوند ها برای Extensions Intel Streaming Simd Extensions 2 جریان داده، ویژگی اینتل پنتیوم 4)، موازی سازی اتوماتیک کد اعدام، ایجاد برنامه، انجام چندین انواع متفاوت پردازنده ها هنگام بهینه سازی برای یکی از آنها، ابزارهای پیش بینی کد بعدی (پیش بینی شاخه)، پشتیبانی پیشرفته برای جریان های در حال اجرا.

توجه داشته باشید که کامپایلرهای اینتل در چنین شرکت های معروف به عنوان نام مستعار / Wavefront، Oracle، Fujitsu Siemens، Abaqus، گرافیک سیلیکون، آی بی ام استفاده می شود. با توجه به تست مستقل انجام شده توسط تعدادی از شرکت ها، عملکرد کامپایلرهای اینتل به طور قابل توجهی بیش از عملکرد کامپایلرها از سایر تولید کنندگان (به عنوان مثال، به عنوان مثال، http://intel.com/software/products/compilers/techtopics/compiler_gnu_perf. PDF).

در زیر ما به برخی از ویژگی های آخرین کامپایلرهای اینتل برای دسکتاپ و سرور نگاه خواهیم کرد سیستم های عامل.

کامپایلر برای پلت فرم مایکروسافت ویندوز

اینتل C ++ کامپایلر 7.1 برای ویندوز

اینتل C ++ کامپایلر 7.1 یک کامپایلر منتشر شده در ابتدای سال جاری است که به شما امکان می دهد تا بهینه سازی کد های بالایی از پردازنده های اینتل Itanium، اینتل Itanium 2، اینتل پنتیوم 4 و اینتل Xeon و همچنین آن را به دست آورید پردازنده اینتل پنتیوم M با استفاده از تکنولوژی اینتل Centrino و در نظر گرفته شده برای استفاده در دستگاه های تلفن همراه.

کامپایلر مشخص شده به طور کامل با مایکروسافت ویژوال C ++ 6.0 و مایکروسافت سازگار است ویژوال استودیو .NET: این را می توان به محیط های توسعه مناسب ساخته شده است.

این کامپایلر از استانداردهای ANSI و ISO C / C ++ پشتیبانی می کند.

اینتل فورتن کامپایلر 7.1 برای ویندوز

کامپایلر کامپایلر Intel Fortran 7.1 برای ویندوز، همچنین در ابتدای سال جاری منتشر شد، به شما امکان می دهد کد بهینه سازی شده برای پردازنده های اینتل Itanium، Intel Itanium 2، اینتل پنتیوم 4 و اینتل Xeon، اینتل پنتیوم م.

این کامپایلر به طور کامل با مایکروسافت ویژوال C ++ 6.0 و مایکروسافت ویژوال استودیو .NET سازگار است، یعنی می توان آن را در محیط های توسعه مناسب جاسازی کرد. علاوه بر این، این کامپایلر به شما امکان می دهد برنامه های 64 بیتی را برای سیستم های عامل در حال اجرا بر روی پردازنده های Itanium / Itanium 2 با استفاده از مایکروسافت ویژوال استودیو در یک پردازنده 32 بیتی پنتیوم با استفاده از یک کامپایلر کامپایلر 32 بیتی INTEL استفاده کنید. هنگامی که اشکال زدایی کد، این کامپایلر به شما اجازه می دهد تا یک اشکال زدایی برای پلت فرم مایکروسافت دات نت استفاده کنید.

در حضور محصولات نصب شده Compaq Visual Fortran 6.6، می توان آن را به جای کامپایلر منبع کامپایلر اینتل فورتن 7.1 استفاده کرد، زیرا کامپایلرهای مشخص شده در سطح کد منبع سازگار هستند.

کامپایلر اینتل Fortran 7.1 کامپایلر برای ویندوز به طور کامل با استاندارد ISO Fortran 95 سازگار است و از ایجاد و اشکال زدایی برنامه های کاربردی حاوی کد در دو زبان - C و FORTRAN پشتیبانی می کند.

کامپایلر برای پلت فرم لینوکس

اینتل C ++ کامپایلر 7.1 برای لینوکس

یکی دیگر از کامپایلر که نور را در ابتدای سال دیده است، اینتل C ++ کامپایلر 7.1 برای لینوکس، به شما امکان می دهد تا بهینه سازی کد بالا برای پردازنده های اینتل Itanium، Intel Itanium 2، اینتل پنتیوم 4، اینتل پنتیوم 4، به دست آورید. این کامپایلر به طور کامل با کامپایلر GNU C در سطح کد منبع و ماژول های شیء سازگار است، که بدون هزینه های اضافی به شما اجازه می دهد تا برنامه های کاربردی ایجاد شده با استفاده از GNU C را مهاجرت کنید. کامپایلر کامپایلر اینتل C ++ از C ++ ABI پشتیبانی می کند (علاوه بر هسته لینوکس، به شما این امکان را می دهد که یک کد کامپایل شده برای سیستم عامل های دیگر مانند سیستم عامل های اولیه SCO، نسخه های اولیه Sularis، و غیره اجرا کنید)، که به معنی سازگاری کامل با کامپایلر GCC 3.2 در سطح است کد دودویی. در نهایت، با استفاده از کامپایلر اینتل C ++ کامپایلر 7.1 برای لینوکس، شما حتی می توانید کرنل لینوکس را با ایجاد چندین تغییر جزئی به آن بازگردانید. کد منبع.

اینتل فورتن کامپایلر 7.1 برای لینوکس

کامپایلر اینتل Fortran 7.1 کامپایلر برای لینوکس اجازه می دهد تا شما را به ایجاد یک کد بهینه سازی برای پردازنده های اینتل Itanium، اینتل Itanium 2، اینتل پنتیوم 4، اینتل پنتیوم 4، این کامپایلر به طور کامل با کامپایلر Compaq Visual Fortran 6.6 در سطح کد منبع سازگار است به شما اجازه می دهد تا مجددا برنامه های کاربردی ایجاد شده با استفاده از Compaq Visual Fortran را انجام دهید، در نتیجه عملکرد آنها افزایش می یابد.

علاوه بر این، کامپایلر مشخص شده سازگار با توسعه دهندگان مورد استفاده توسط Utilities به عنوان Emacs Editor، Debugger GDB، ابزار برای مونتاژ برنامه های کاربردی است.

مانند نسخه ویندوز این کامپایلر، اینتل فورتن کامپایلر 7.1 برای لینوکس کاملا سازگار است استاندارد ISO FORTRAN 95 و پشتیبانی از ایجاد و اشکال زدایی برنامه های کاربردی حاوی کد در دو زبان - C و FORTRAN.

لازم به ذکر است که متخصصان مرکز روسیه اینتل در توسعه نرم افزار در Nizhny Novgorod نقش مهمی در ایجاد کامپایلرهای ذکر شده اینتل داشتند. اطلاعات بیشتر در مورد کامپایلرهای اینتل را می توان در وب سایت اینتل در www.intel.com/software/products/ یافت.

بخش دوم این مقاله به کامپایلرهای اینتل اختصاص خواهد یافت که برنامه های کاربردی را برای دستگاه های تلفن همراه ایجاد می کنند.

نمونه هایی از هک واقعی: COMPILER اینتل C ++ 7.0 - بایگانی WASM.RU

... کامپایلر اینتل C ++ 7.0 به شدت در شب، ساعت در جایی پنجم صبح اعتراض کرد. من می خواستم به طور باور نکردنی بخوابم، بلکه کنجکاوی: این که آیا حفاظت تقویت شد یا نه، علف هرز. تصمیم می گیرید تا زمانی که من نتوانم با دفاع برخورد کنم، هنوز نمی توانم به خواب بروم، من، باز کردن یک کنسول جدید، و نصب مجدد متغیرهای سیستم TEMP و TMP به دایرکتوری C: \\ TEMP، Naskoro نام طولانی از نصب W_CC_P_7.07.073.exe در خط فرمان (نیاز به نصب متغیرهای TEMP و TMP با این واقعیت توضیح داده شده است که در ویندوز 2000 آنها پیش فرض دایرکتوری بسیار عمیق توزیع شده را نشان می دهند و Instel C ++ Installer - و نه تنها از مسیرهای این اندازه بزرگ پشتیبانی نمی کند) .

بلافاصله معلوم شد که سیاست حفاظت به طور اساسی تجدید نظر شده است و در حال حاضر مجوز در حال حاضر در مرحله نصب برنامه (در نسخه 5.x، نصب و راه اندازی بدون مشکل انجام شده است) بررسی شده است. خوب، اجازه دهید فرمان Dir و نگاهی به محتویات آنچه که ما باید با آن مبارزه کنیم:

    پوشه محتوا C: \\ TMP / Intelc ++ Compiler70

    17.03.2003 05:10

    HTML

    17.03.2003 05:11

    x86

    17.03.2003 05:11

    ایتانیوم

    17.03.2003 05:11

    یادداشت.

    05.06.2002 10:35 45 056 Autorun.exe

    07/10/2001 12:56 27 Autorun.inf

    10.29.2002 11:25 2 831 ccompindex.htm

    10/24/2002 08:12 126 976 chklic.dll

    10/18/2002 22:37 552 960 chklic.exe

    10/17/2002 16:29 28 663 CLICENSE.RTF

    10/17/2002 16:35 386 credist.txt

    10/16/2002 17:02 34 136 Crelnotes.htm

    03/19/2002 14:28 4 635 plsuite.htm

    02/21/2002 12:39 2 478 register.htm

    02.10.2002 14:51 40 960 Setup.exe

    02.10.2002 10:40 151 Setup.ini

    07/10/2001 12:56 184 setup.mwg

    19 فایل 2 519 238 بایت

    6 پوشه 886 571 008 بایت رایگان

بله برنامه نصب Setup.exe تنها چهل و با استفاده از Kilobyte تسویه حساب می شود. خیلی خوب! در چنین جلد، حفاظت جدی بعید است که پنهان شود، و حتی این فایل کوچک نباید به طور کامل تجزیه و تحلیل شود - به آخرین بایت لیست جداسازی. با این حال، این واقعیت نیست کد امنیتی به عنوان مثال، در Setup.exe واقع شده است، می تواند هر دو در مکان دیگری، به عنوان مثال ... chklic.dll / chklic.exe، مشغول به جمع شدن کمی کمتر از هفت کیلوبایت. صبر کنید، چنین چرک چیست؟ آیا آن را از گواهینامه چک یا چه؟! UM، بچه ها از اینتل به وضوح مشکلات جدی با حس شوخ طبعی. بهتر خواهد بود که آنها این فایل را "هک من" صادقانه کلمه! خوب، قضاوت بر اساس حجم، chklic همان فلکس LM و آنجا است، و با او ما در حال حاضر مواجه شده است (به "کامپایلر اینتل C ++ 5.0" مراجعه کنید) و تقریبا تصور کنید که چگونه آن را شکستن.

اجازه دهید تیم "dumpbin / exports chklic.dll" را برای مطالعه توابع صادر شده و ... نگه داشتن سخت برای Clave، به طوری که از صندلی سقوط نمی کند:

    تخلیه فایل chklic.dll

  1. بخش شامل صادرات زیر برای chklic.dll است

    0 مشخصات

    3DB438B4 تاریخ زمان تمبر Mon Oct 21:26:12 2002

  2. 1 تعداد توابع

    1 تعداد نام

    نام و نام خانوادگی اشاره RVA

    1 0 000010A0 _checkvalidlicense

لعنتی! حفاظت از صادرات تنها یک ویژگی تنها با نام فوق العاده CheckValidLicense صادرات است. "فوق العاده" - از آنجا که هدف از این تابع از نام آن واضح است و امکان اجتناب از تجزیه و تحلیل دقیق کد Disassembler ظاهر می شود. خوب، آنها همه علاقه ها را ضرب و شتم ... بهتر خواهد بود اگر آنها آن را به فرمانداران صادر کنید، اگر یا حداقل آنها آن را به هیچ وجه نامیده می شود اگر نام DES Decrypt نوع خواهد بود.

... ازدواج کرد! خوب، بازگشت به شاخه های ما. بیایید منطقی صحبت کنیم: اگر کل کد محافظ به طور مستقیم در chklic.dll متمرکز شده است (و با توجه به ویژگی "نصب شده" حفاظت، این درست است)، سپس تمام "حفاظت" به تماس CheckValidLicense از Setup.exe می آید و بررسی نتیجه. بنابراین، برای "هک کردن" به اندازه کافی فقط برای ناپدید شدن chklic.dll، مجبور کردن تابع Chekvalidlicense به همیشه بازگشت ... بله، به هر حال، چه باید او را بازگشت؟ دقیق تر: چه نوع ارزش بازگشتی تأیید مجوز موفقیت آمیز است؟ نه، عجله نکنید تا از setup.exe جدا شود تا تعیین شود، زیرا هیچ گزینه ای ممکن برای هر گونه گزینه ممکن وجود ندارد: یا نادرست یا درست باشد. آیا شما شرط بندی می کنید؟ خوب، به نوعی منطقی است، اما از سوی دیگر: چرا ما در واقع تصمیم گرفتیم که عملکرد CheckValidLicense دقیقا پرچم موفقیت عملیات را بازبینی کند و نه کد خطا؟ پس از همه، این باید به نحوی دلایل عدم نصب کامپایلر را تحریک کند: فایل با مجوز یافت نشد، فایل آسیب دیده است، مجوز از دست رفته و غیره؟ خوب، بیایید سعی کنیم صفر را بازگردانیم، و اگر آن را سوار نشویم، واحد را بازپرداخت خواهیم کرد.

خوب، بستن، برو! ما این را اجرا می کنیم، فایل chklic.dll را باز می کنیم (اگر آن را باز نمی کند - پرتاب Gophers سه بار، ما به طور موقت آن را به ریشه یا هر دایرکتوری دیگر کپی می کنیم که به نام شما از متخصصانی که هیچ راهنمایی را دوست ندارند، کپی نمی کنند "Y). سپس، با تماس دوباره به جدول صادرات به دست آمده با استفاده از Dumpbin، تعیین آدرس تابع CheckValidLicense (در این مورد، 010A0H) و از طریق،" 10A0 "به آغاز آن بروید. در حال حاضر، - برش" زندگی " ، نوشتن بیش از کد قدیمی "XOR EAX، EAX / RETN 4". چرا آن را "REN 4"، و نه فقط "RET"؟ بله، زیرا این تابع از توافق STDCALL پشتیبانی می کند، که می توانید در نگاهی به خبرگزاری پشتیبانی کنید " E در مورد epilogue خود (فقط از طریق صفحه نمایش disassembler پایین بروید تا زمانی که RET ملاقات کنید).

بررسی کنید ... این کار می کند !!! علیرغم عدم وجود مجوز، نصب کننده، بدون درخواست سوالات اضافی، نصب را شروع می کند! بنابراین، حفاظت کاهش یافت. اوه، من نمی توانم باور کنم که همه چیز خیلی ساده است و نه به نشستن، احمقانه در مانیتور تماشا می کند، در حالی که منتظر تکمیل فرآیند نصب برنامه، ما Rauraly در setup.exe disassembler مورد علاقه خود را ida. اولین چیزی که به چشم می خورد، کمبود CheckValidLicense در لیست توابع وارد شده است. شاید این یک فایل chklic.exe به نوعی شروع شود؟ ما سعی می کنیم لینک مناسب را در میان خطوط به طور خودکار شناخته شده پیدا کنیم: "~ مشاهده Anames"، "chklic" ... آره، خطوط "chklic.exe" در اینجا نیست، اما آن را "chklic.dll" یافت می شود. بله، روشن است، به این معنی است که کتابخانه Chklic با یک طرح صریح از طریق LoadLibrary بارگذاری می شود. و انتقال به پیوند صلیب این را تایید می کند:

    متن: 0040175D فشار افست Achklic_dll؛ lplibfilename.

    متن: 00401762 تماس DS: LoadLibrarya

    متن: 00401762؛ ما بارگیری chklic.dll ^^^^^^^^^^^^^^^^^^^^

    متن: 00401762؛

    متن: 00401768 MOV ESI، EAX

    متن: 0040176A فشار افست A_CheckValidlic؛ lpprocname

    متن: 0040176F فشار ESI؛ hmodule

    متن: 00401770 تماس DS: GetProcaddress

    متن: 00401770؛ ما آدرس تابع CheckValidLicense را دریافت می کنیم

    متن: 00401770؛

    متن: 00401776 CMP ESI، EBX

    متن: 00401778 jz loc_40192e

    متن: 00401778؛ اگر چنین کتابخانه ای وجود نداشته باشد، ما نصب را ترک می کنیم

    متن: 00401778؛

    متن: 0040177E CMP EAX، EBX

    متن: 00401780 jz loc_40192e

    متن: 00401780؛ اگر چنین عملکرد در کتابخانه وجود نداشته باشد، نصب را ترک می کنیم

    متن: 00401780؛

    متن: 00401786 فشار ebx

    متن: 00401787 تماس EAX

    متن: 00401787؛ با عملکرد ChekvalidLicense تماس بگیرید

    متن: 00401787؛

    متن: 00401789 آزمون EAX، EAX

    متن: 0040178b jnz loc_4019A3

متن: 0040178؛ اگر تابع به صفر بازگردد، ما از برنامه نصب خارج می شویم

فوق العاده، اما این به حفاظت از ابتلا به وحشتناک دقیقا ساخته شده است! علاوه بر این، فایل نیمه متر chklic.exe مورد نیاز نیست! و چرا ارزش آن را از اینترنت کشیدند؟ به هر حال، اگر شما تصمیم به نگه داشتن توزیع کامپایلر (توجه: من نمی گویم "توزیع"!)، برای صرفه جویی در فضای دیسک chklic. * شما می توانید پاک کنید: یا با راه اندازی setup.exe، پس از آن را مطالعه کرد با آنها تماس بگیرید، یا به سادگی ایجاد chklic.dll خود، صادرات STDCALL تابع CheckValidLicense مشاهده: int CheckValidLicense (int some_flag) (بازگشت 0؛)

بنابراین، در حالی که همه ما این همه را مورد بحث قرار دادیم، نصب کننده نصب کامپایلر را به پایان رساند و کار خود را به طور کامل تکمیل کرد. آیا جالب توجه است که آیا کامپایلر شروع خواهد شد یا همه جالب ترین ها شروع می شود؟ من به شدت سقوط سلسله مراتب شاخه ای از پوشه های توزیع شده، ما پیدا کردن icl.exe، که، به عنوان انتظار می رود، در کاتالوگ BIN، کلیک کنید و ... کامپایلر به طور طبیعی شروع نمی شود، با اشاره به این واقعیت است که "ICL: خطا : نمی توان مجوز Flex LM را پرداخت کرد "بدون اینکه او نمیتواند کار خود را ادامه دهد.

به نظر می رسد که اینتل حفاظت چند سطح را اعمال می کند و سطح اول به عنوان محافظت ناخالص از احمق ها محافظت می شود. خوب! ما این تماس را قبول می کنیم و بر اساس تجربه قبلی شما، اتوماتیک به دنبال فایل LMGR * .dll در کاتالوگ کامپایلر است. بلا استفاده! این بار این فایل در اینجا نمی شود، اما معلوم می شود که ICL.EXE به شدت در وزن اضافه شده است، عبور ششم Kilobyte مارک ... توقف! و آیا توسعه دهندگان کامپایلر این طرح ترین طرح استاتیک فلکس LM را پیوند دادند؟ ما نگاه می کنیم: در اینتل C ++ 5.0 مقدار ابعاد LMGR327.DLL و ICL.EXE به 598 کیلوبایت رسید، و در حال حاضر تنها ICL.exe 684 کیلوبایت طول می کشد. با توجه به اصلاحات به "چاقی" طبیعی طبیعی، اعداد بسیار همگرا هستند. بنابراین، هنوز فلکس LM! آه آه! اما در حال حاضر، - بدون نام نمادین توابع، حفاظت از شکستن بسیار سخت تر خواهد شد ... با این حال، ما هراس نخواهیم شد! بیایید فکر کنیم، فقط آرام! تیم توسعه بعید است که کل کد را با استفاده از حفاظت از پاکت به طور کامل بازنویسی کند. به احتمال زیاد، "بهبود" آن فقط یک تغییر در نوع طرح است و به پایان رسید. و اگر چنین است، پس احتمال شانس هک کردن برنامه هنوز عالی است!

MANTING که آخرین بار کد محافظ در عملکرد اصلی است، ما، ما، با تعریف آدرس آن، فقط نقطه توقف را نصب می کنیم و در انتظار کاهش Debugger، احمقانه ردیابی کد، به طور متناوب نگاهی به اشکال زدایی، سپس در پنجره خروجی برنامه: به نظر نمی رسد یک پیام دلپذیر وجود دارد؟ در عین حال، تمام تغییرات مشروط با ما ملاقات می کنیم، ما در یک قطعه کاغذ جداگانه جشن می گیریم (یا در حافظه خودمان به تعویق افتادم، اگر شما خیلی زیاد می خواهید)، فراموش نکنید که آیا هر گونه انتقال شرطی یا نه ... توقف! چیزی با عرض پوزش ما با شما هستیم، اما پیام Crucible قبلا پرید! باشه خب! بیایید ببینیم چه اتفاقی برای او مربوط می شود. سوابق ما نشان می دهد که آخرین جلسه با انتقال، انتقال JNZ مشروط واقع در 0401075H بود و "واکنش" به نتیجه، روش حاصل sub_404C0E:

  • متن: 0040107F LOC_40107F:؛ کد xref: _main + 75 ^ j

    متن: 0040107F MOV EAX، افست افست؛ "FFRPS"

    متن: 00401084 MOV EDX، 21 ساعت

    متن: 00401089 تماس sub_404c0e

    متن: 0040108E تست EAX، EAX

    متن: 00401090 JNZ کوتاه LOC_40109A

    بدیهی است، Sub_404C0E روش محافظتی ترین است که مجوز دسترسی به آن را انجام می دهد. چگونه انجامش بدهیم؟ خوب، گزینه های بسیاری وجود دارد ... در مرحله اول، ممکن است، به طرز تفکر و دقیق محتویات sub_404C0E را برای توضیح تجزیه و تحلیل: دقیقا و دقیقا چه دقیق آن را بررسی می کند. ثانیا، شما می توانید به سادگی JNZ کوتاه LOC_40107F را در JZ کوتاه LOC_40107F یا حتی NOP، NOP جایگزین کنید. سوم، فرمانده GROUNT EAX EAX، EAX را می توان به یک دستور صفر تنظیم کرد: XOR EAX، EAX. چهارم، شما می توانید خود را از دست ندهید sub_404c0e خود را به طوری که آن را همیشه صفر را باز می گرداند. من نمی دانم که چگونه شما، اما من بیشترین تعداد کل را دوست داشتم. ما دو بایت را تغییر می دهیم و کامپایلر را راه اندازی می کنیم. اگر هیچ چک دیگری در "صدور مجوز" در دفاع وجود نداشته باشد، این برنامه کار خواهد کرد و بر این اساس، بر خلاف آن. (همانطور که ما به یاد می آوریم، دو نسخه پنجم این چک ها وجود داشت). شگفت انگیز، اما کامپایلر دیگر سوگند و کار نمی کند !!! در واقع، همانطور که انتظار می رفت، توسعه دهندگان او دفاع را تقویت نکردند، اما برعکس، حتی او را تضعیف کرد! کریس کسپرسکی

  • کامپایلر اینتل C ++ و Fortran و MKL کتابخانه

    همراه با کامپایلرهای استاندارد GNU برای لینوکس، بر روی خوشه های مجتمع محاسباتی NIVC، کامپایلرهای اینتل C ++ و فورتران نصب شده اند. در حال حاضر (اوایل 2006)، کامپایلر نسخه 9.1 بر روی تمام خوشه ها نصب شده است. این صفحه به شرح مهمترین گزینه ها و تنظیمات این کامپایلرها، و همچنین تفاوت های اصلی آنها از کامپایلرهای GNU اختصاص داده شده است. این صفحه به طور عمده بر روی کاربران خوشه های NIVZ MSU متمرکز شده است، اما می تواند برای سایر کاربران روسی زبان مفید باشد. هیچ سؤالی مربوط به تدوین برای پلت فرم IA-64 وجود ندارد.

    همچنین در تمام خوشه ها کتابخانه اینتل است کتابخانه ریاضی هسته (MKL) نسخه 8.0.2. کتابخانه در دایرکتوری / USR / MKL واقع شده است. ما به این واقعیت اشاره می کنیم که کاتالوگ LIB در دسترس است 32، 64 و زیر شاخه های EM64T. در خوشه مورچه، شما باید از کتابخانه ها از زیر شاخه EM64T استفاده کنید، و بر روی خوشه های دیگر - از زیر شاخه 32. تمام مستندات و نمونه های لازم را می توانید از دایرکتوری / USR / MKL / DOC بدست آورید.

    چه کامپایلرهای جدید مورد نیاز بود؟

    نیاز به کامپایلرهای جدید به طور عمده، A) برای پشتیبانی از برنامه نویسی در فورتن 90، و همچنین ب) برای بهینه سازی برنامه های قدرتمند قدرتمند در Fortran، که یک کامپایلر G77 را با استفاده از پخش در زبان C و سپس کامپایل با استفاده از GCC فراهم می کند.

    این الزامات همچنین کامپایلرهای PGI (گروه پورتلند) را برآورده می کند، اما شرکت توسعه دهنده حاضر به ارائه آنها به روسیه نیست.

    نحوه استفاده؟

    کامپایلرهای اینتل با استفاده از دستورات نامیده می شوند. iCC (C یا C ++) iCPC (C ++) و ازار (Fortran 77/90). دستورات MPICC، MPICC و MPIF77 برای کامپایل و مونتاژ برنامه های MPI نیز برای استفاده از کامپایلرهای اینتل پیکربندی شده اند.

    توانایی استفاده از کامپایلرهای GNU با استفاده از MPIGCC، MPIG ++ و MPIG77 (FORTRAN 90 پشتیبانی نمی شود).

    فایل های ورودی

    پیش فرض، فایل های فرمت .cpp و .cxx در نظر گرفته شده به عنوان متون منبع در C ++، فایل ها با گسترش .c.c - متون منبع در زبان SI، و کامپایلر ICPC همچنین فایل ها را کامپایل می کند. C به عنوان متون منبع در C ++.

    فایل ها با افزونه ها .f, .ftn و .برای به عنوان متون منبع در یک زبان فوتونی شناخته شده است، با یک فرم ثابت ضبط، و فایل ها .fp و .f علاوه بر این از طریق پیش پردازنده زبان فورتران گذشت. فایل ها با فرمت .f90. این متون اولیه از فورتن 90/95 با یک فرم رایگان ضبط محسوب می شود. به روش صریح، شما می توانید یک فرم ثابت یا رایگان از ضبط برنامه های Fortra را با استفاده از گزینه ها مشخص کنید. -فی و -fr. به ترتیب.

    فایل ها با فرمت .s.s به عنوان کد در زبان اسمبلر برای IA-32 شناخته شده است.

    ویژگی های کامپایلر اینتل

    در اینجا ما ویژگی های کامپایلرهای اینتل را ارائه می دهیم، زیرا آنها توسط توسعه دهنده در کتابچه راهنمای کاربر با برخی از نظرات ما اعلام می شود.

    • بهینه سازی قابل توجه
      ظاهرا، در اینجا به معنای بهینه سازی کد در سطح بالا، به عنوان مثال اول از همه، تبدیل مختلف چرخه هایی که تقریبا تمام کامپایلرها با موفقیت بیشتر یا کمتر می پردازند
    • بهینه سازی محاسبات نقطه شناور
      ظاهرا، در ابتدا از تمام حداکثر استفاده از دستورات اجرا شده در سطح سخت افزاری، در نظر گرفته شده است
    • بهینه سازی متقابل
      کسانی که. بهینه سازی جهانی کل برنامه، در مقایسه با بهینه سازی متعارف، که تنها بر کد توابع خاص تاثیر می گذارد
    • بهینه سازی مشخصات
      کسانی که. توانایی رانندگی یک برنامه در حالت تست، جمع آوری داده های زمان برای عبور از آن ها یا سایر قطعات کد در داخل توابع اغلب استفاده شده، و سپس از این داده ها برای بهینه سازی استفاده کنید
    • پشتیبانی از سیستم فرمان SSE در پردازنده های پنتیوم III
      نکته: دستورات SSE2 بیشتر برای محاسبه وظایف مورد علاقه بیشتر هستند. تیم های بردار بیش از 64 بیت واقعی، اما آنها تنها در پردازنده های پنتیوم 4 پشتیبانی می شوند، که در اختیار ما هنوز نیست
    • بردار اتوماتیک
      کسانی که. باز هم، با استفاده از دستورات SSE و SSE2 وارد شده توسط به طور خودکار کامپایلر
    • پشتیبانی OpenMP برای برنامه های SMP Systems
      توجه: خوشه توصیه می کند به طور سودمند از رابط MPI استفاده کنید. استفاده گسترده از OpenMP بر روی خوشه فرض نشده است و چنین آزمایش هایی هنوز انجام نشده است؛ اما احتمالا منطقی است که از کتابخانه ها استفاده کنید (Blas et al.)، مولکول برای حافظه کلی.
    • موقعیت داده ها
      کسانی که. ظاهرا، با استفاده از دستورات پیش فرض از حافظه به حافظه پنهان داده، که بعد از مدتی مورد نیاز است
    • "ارسال" کد برای پردازنده های مختلف
      کسانی که. توانایی تولید کد برای پردازنده های مختلف در یک فایل اجرایی، که به شما امکان می دهد از مزایای استفاده کنید جدیدترین پردازنده ها برای رسیدن به بزرگترین عملکرد بر روی آنها، در حالی که حفظ سازگاری باینری برنامه ها با پردازنده های قبلی؛ در خوشه ما هنوز مربوط نیست، زیرا فقط پردازنده های پنتیوم III استفاده می شود، و قرار نیست انتقال و اجرا بر روی ماشین های دیگر کامپایل شده بر روی خوشه

    گزینه های اصلی کامپایلر

    جالب ترین، البته، گزینه هایی برای بهینه سازی کد هستند. اکثر گزینه ها برای کامپایلرهای C ++ و فورتن رایج هستند. بیشتر توصیف همراه با جزئیات گزینه های کتابچه راهنمای کاربر انگلیسی.

    سطوح بهینه سازی
    گزینهشرح
    -o0.بهینه سازی را غیرفعال می کند
    -O1 یا -O2.بهینه سازی اولیه برای سرعت. Inline-Insert از توابع کتابخانه غیر فعال است. برای کامپایلر C ++، این گزینه ها بهینه سازی مشابهی را ارائه می دهند، برای گزینه کامپایلر فیتران -O2 ترجیح داده می شود، زیرا شامل ارتقاء چرخه ها می شود.
    -O3بهینه سازی قدرتمندتر، از جمله تبدیل چرخه، انتخابات داده ها، با استفاده از OpenMP. برخی از برنامه ها ممکن است تضمین عملکرد را در مقایسه با -O2.. این منطقی است که با گزینه های برداري استفاده شود -کسک و -XW.
    nroll [n]شامل ارتقاء چرخه به N زمان است.
    بهینه سازی یک پردازنده خاص
    گزینهشرح
    -TPP6.بهینه سازی برای پردازنده های Penitum Pro، Pentium II و Pentium III
    -TPP7بهینه سازی برای پردازنده های Penitum 4 (این گزینه به طور پیش فرض برای کامپایلر در IA-32 فعال شده است)
    -xmتولید کد با استفاده از پسوند MMX خاص به پردازنده های Pentium MMX، Pentium II و بعد
    -کسکتولید کد با استفاده از Extensions SSE خاص برای پردازنده های پنتیوم III
    -XWتولید کد با استفاده از Extensions SSE2 خاص برای پردازنده های پنتیوم 4
    بهینه سازی متقابل
    -ipشامل بهینه سازی دخالت در یک فایل واحد است. اگر گزینه را مشخص کنید -ip_no_inlining، درج های درون خطی قطع شده اند.
    وابسته بهشامل بهینه سازی بیننده بین فایل های مختلف
    بهینه سازی با استفاده از پروفیل ها
    -PROF_GEN."Profiling" کد تولید شده است که برای پروفایل استفاده می شود، I.E. جمع آوری داده ها در مورد فرکانس عبور از کرسی های خاص در برنامه
    -Prof_useبهینه سازی بر اساس داده های به دست آمده در مرحله تشکیل تشکیل شده است. این منطقی است که با استفاده از گزینه بهینه سازی بین الملل استفاده شود وابسته به.
    موازی سازی برای سیستم های SMP
    -Openmpپشتیبانی OpenMP 2.0 گنجانده شده است.
    -موازیشامل موازی سازی خودکار چرخه

    کارایی

    با توجه به نتایج آزمون CPU2000، منتشر شده در سرور iXBT.com، کامپایلرهای نسخه 6.0 اینتل تقریبا در همه جا بهتر از کامپایلرهای GCC 2.95.3، 2.96 و 3.1 و PGI نسخه 4.0.2 بود. این آزمایش ها در سال 2002 بر روی یک کامپیوتر با پردازنده Pentium 4 / 1.7 گیگاهرتز و Redhat Linux 7.3 انجام شد.

    بر اساس نتایج آزمایش های انجام شده توسط polyhedron، نسخه کامپایلر اینتل Fortran 7.0 تقریبا در همه جا بهتر از سایر کامپایلر Fortran 77 برای لینوکس (Absoft، GNU، LAHEY، NAG، NAS، PGI) بود. فقط در برخی از آزمایشات، کامپایلر اینتل کمی کامپایلر Absoft، NAG و LAHEY را از دست می دهد. این آزمایش ها بر روی پردازنده پنتیوم 4 / 1.8 گیگاهرتز و Mandrake Linux 8.1 برگزار شد.

    اینتل نسخه 9.1 کامپایلر همچنین کامپایلر GCC را از بین می برد و عملکرد قابل مقایسه با Absoft، Pathscale و PGI را نشان می دهد.

    ما از آن دسته از کاربران و خوانندگان سپاسگزاریم که داده های ما را بر اثر انتخاب کامپایلر (GCC یا اینتل) و گزینه های بهینه سازی برای سرعت کار بر روی وظایف واقعی خود ارسال می کنیم.

    کتابخانه ها

    کامپایلر زبان SI از کتابخانه زمانبندی طراحی شده به عنوان بخشی از پروژه GNU استفاده می کند ( libc.a.).

    کتابخانه های زیر با کامپایلر اینتل C ++ عرضه می شوند:

    • libcprts.a. - کتابخانه Runtime کتابخانه C ++ Dinkumware Development.
    • libcxa.a. - کتابخانه زمانبندی اضافی برای توسعه C ++ اینتل.
    • libimf.a. - کتابخانه توابع ریاضی توسعه اینتل، که شامل پیاده سازی های بهینه شده و با دقت بالا از مثلثاتی، هیپربولیک، نمایشی، ویژه، پیچیده و دیگر توابع (برای جزئیات، لیست توابع را ببینید).
    • libirc.a - برنامه های کاربردی پشتیبانی از زمان اجرا (PGO) و "ارسال" کد بسته به پردازنده (نگاه کنید به بالا).
    • libguide.a - پیاده سازی OpenMP.

    این لیست کتابخانه های استاتیک را فهرست می کند، اما برای بسیاری از آنها نیز پویا هستند، به عنوان مثال متصل شده در طول گزینه های راه اندازی ( .بنابراین).

    همراه با کامپایلر فیتران، کتابخانه های زیر عرضه می شوند: libcepcf90.A., libiepcf90.A., libintrins.a., libf90.A.همچنین با استفاده از Libimf.a کتابخانه ریاضی کتابخانه.

    مونتاژ فایل اجرایی

    اتصال کتابخانه امکان پذیر است (در طول مجمع) یا پویا (در طول برنامه شروع). رویکرد پویا به شما امکان می دهد تا اندازه فایل اجرایی را کاهش دهید، به شما امکان می دهد تا همان کپی کتابخانه را در حافظه جدا کنید، اما برای این که شما باید بر روی هر گره نصب کنید که برنامه ها راه اندازی می شود، مجموعه ای کامل از کتابخانه های پویا استفاده می شود .

    بنابراین، اگر کامپایلر اینتل را بر روی دستگاه خود با لینوکس نصب کرده اید و می خواهید فایل های اجرایی جمع آوری شده را بر روی ماشین های دیگر اجرا کنید، پس از آن نیاز به استفاده از یک مونتاژ استاتیک (که آسان تر از آن است) یا کپی کردن به این ماشین ها کتابخانه های اینتل پویا (معمولا از دایرکتوری نوع / OPT / Intel / CompiLer70 / IA32 / LIB) به یکی از دایرکتوری های ذکر شده در فایل /etc/ld.so.conf، و همچنین مراقب باشید که همان مجموعه ای از کتابخانه های پویا پویا / لینوکس پویا نصب شده است بر روی این ماشین ها.

    به طور پیش فرض، تمام کتابخانه های توسعه اینتل (به جز libcxa.so) به صورت ایستا متصل هستند، و تمام کتابخانه های سیستم لینوکس و کتابخانه های GNU به صورت پویا متصل می شوند. با استفاده از گزینه ستارگان شما می توانید جمع کننده (مدیر پیوند) را مجبور کنید تا تمام کتابخانه ها را به صورت ایستا (که مقدار فایل اجرایی را افزایش می دهد) و استفاده از گزینه را افزایش می دهد -i_dynamic شما می توانید تمام کتابخانه های توسعه اینتل را به صورت پویا متصل کنید.

    هنگام اتصال کتابخانه های اضافی با استفاده از گزینه نوع -Libeleboard ممکن است نیاز به استفاده از گزینه خطیبرای تنظیم مسیری که کتابخانه ها نوشته شده است.

    با گزینه ها بهبودی و -Bdynamic شما می توانید به طور صریح اتصال پویا یا استاتیک هر یک از کتابخانه های مشخص شده بر روی خط فرمان را تنظیم کنید.

    با استفاده از گزینه -c مونتاژ فایل اجرایی غیر فعال است و تنها تلفیقی (تولید ماژول شیء) انجام می شود.

    به اشتراک گذاری ماژول ها در قلعه و سی

    برای به اشتراک گذاشتن ماژول های نوشته شده در زبان های FORTRAN و SI، شما نیاز به هماهنگ کردن نام مراحل در ماژول های شی، انتقال پارامترها، و همچنین دسترسی به متغیرهای جهانی اگر چنین است.

    به طور پیش فرض، کامپایلر اینتل فورتران نام روش را به ثبت نام پایین تر ترجمه می کند و تا انتهای نام را برجسته می کند. کامپایلر C هرگز نام های توابع را تغییر نمی دهد. بنابراین، اگر ما از ماژول در فیتران می خواهیم، \u200b\u200bاز تابع تابع یا fnname اجرا شده در C، سپس در ماژول در Si، باید به عنوان fnname_ نامگذاری شود.

    کامپایلر فیتران از گزینه پشتیبانی می کند -nus [نام فایل]که اجازه می دهد تا شما را به غیر فعال کردن اضافه کردن برجسته به نام داخلی روش ها. اگر نام فایل مشخص شود، این فقط برای نام های روش ذکر شده در فایل مشخص شده انجام می شود.

    به طور پیش فرض، بر روی قلعه، پارامترها توسط مرجع منتقل می شوند، و در C همیشه ارزش است. بنابراین، هنگام فراخوانی روش ForTrans، ما باید اشاره گرها را به متغیرهای مربوطه که حاوی مقادیر پارامترهای واقعی به عنوان پارامترها هستند، انتقال دهیم. هنگام نوشتن یک تابع که باید از ماژول در فورتران نامیده شود، باید پارامترهای رسمی را به عنوان اشاره گر انواع مربوطه توصیف کنیم.

    در ماژول های Si، ممکن است از بلوک های مشترک تعریف شده در داخل ماژول ها در Fortran (اطلاعات بیشتر در مورد این، راهنمای کاربر Compiler Intel Fortran، Compiler Compiler، Compiler C و Fortran را ببینید).

    به اشتراک گذاری کامپایلرهای اینتل و GCC

    ماژول های شیء در زبان SI، که توسط کامپایلر اینتل C ++ بدست می آید، با ماژول های به دست آمده توسط کامپایلر GCC و کتابخانه GNU برای زبان C سازگار است. بنابراین، این ماژول ها را می توان در یک برنامه جمع آوری شده با استفاده از دستورات ICC یا GCC به اشتراک گذاشت، اما برای اتصال به درستی اتصال کتابخانه های اینتل، توصیه می شود از ICC استفاده کنید.

    کامپایلر اینتل از تعدادی از تکمیلی های غیر استاندارد SI استفاده می کند که در پروژه GNU استفاده می شود و توسط کامپایلر GCC پشتیبانی می شود (اما نه همه آنها، برای جزئیات بیشتر، اینجا را ببینید).

    سازگاری ماژول های شیء در زبان های C ++ و Fortran در کتابچه راهنمای کاربر گفته نمی شود، ظاهرا پشتیبانی نمی شود.

    استانداردهای پشتیبانی

    کامپایلر اینتل C ++ 7.0 برای کامپایلر لینوکس پشتیبانی از ANSI / ISO (ISO / IEC 9899/1990). امکان نصب سازگاری دقیق با ANSI C شروع وجود دارد ( -Asi) یا یک گویش ANSI C تمدید شده ( -Axa) هنگام استفاده از گزینه -C99

  • دستورالعمل های کامپایلر HTML (موجود در "آنلاین" در سرور ما، اما نیاز به پشتیبانی از زبان جاوا)
    • راهنمای کاربر COMPILER اینتل C ++.
    • راهنمای کاربر Compiler Intel Fortran.
  • دست ها با کامپایلرها به زبان انگلیسی در فرمت PDF (Acrobat Reader مورد نیاز است، شما باید فایل های PDF را به کامپیوتر خود دانلود کنید)
    • اینتل C ++ Compiler راهنمای کاربر: اینتل C ++ Compiler کاربر راهنمای کاربر (1.3 مگابایت، 395 صفحه).
    • Intel Fortran: Intel Fortran Compiler راهنمای کاربر: Intel Fortran Compiler کاربر راهنمای کاربر (1.1 مگابایت، 285 صفحه).
    • دایرکتوری برنامه نویس در فورتران: مرجع برنامه نویس اینتل فورتن (7 مگابایت، 566 صفحه).
    • کتابخانه کتابخانه FORTRAN: کتابخانه های مرجع کتابخانه های اینتل (9.5 مگابایت، 881 صفحه).
  • راهنمای Debugger Debugger برنامه Intel.
  • کامپایلرهای مقایسه در آزمون های CPU2000 مشخصات (مقاله IXBT.com در روسیه).
  • وب سایت Polyhedron نتایج مقایسه کامپایلرهای مختلف را ارائه می دهد.
  • معرفی پایان سال 2003، اینتل نسخه 8.0 مجموعه ای از کامپایلرها را ارائه داد. کامپایلرهای جدید طراحی شده اند تا عملکرد برنامه های کاربردی در حال اجرا بر روی سرورها، رایانه های شخصی دسکتاپ و سیستم های موبایل (لپ تاپ ها، تلفن های همراه و رایانه های جیبی) بر اساس پردازنده های اینتل. لذت بخش است که توجه داشته باشید که این محصول با مشارکت فعال کارکنان مرکز Nizhny Novgorod اینتل در توسعه نرم افزار و متخصصان اینتل از ساروف ایجاد شده است.

    سری جدید شامل کامپایلرهای اینتل برای زبان های C ++ و Fortran برای ویندوز و لینوکس، و همچنین کامپایلرهای اینتل برای زبان C ++ برای ویندوز CE دات نت است. کامپایلرها بر روی سیستم های مبتنی بر اینتل تمرکز می کنند: اینتل Itanium 2، اینتل Xeon، اینتل پنتیوم 4، پردازنده هایی با معماری معماری مشتری اینترنت اینتل تلفن های همراه و PC و PC و پردازنده اینتل پنتیوم M برای رایانه های شخصی موبایل (کامپوننت فناوری اینتل Centrino برای رایانه های شخصی موبایل).

    در کامپایلر ویژوال بین المللی اینتل برای ویندوز، یک تکنولوژی تدوین نسل جدید برای راه حل های محاسباتی با کارایی بالا اجرا می شود. این قابلیت عملکرد زبان Compaq Visual Fortran (CVF) را متصل می کند و بهبود عملکرد را که ممکن است به لطف فن آوری های بهینه سازی کامپایل و کد شرکت اینتل تولید شده است، و ساده سازی مشکل انتقال کد منبع توسعه یافته توسط CVF به بصری اینتل را محدود می کند محیط فورتان در این کامپایلر، توابع CVF برای اولین بار برای سیستم های 32 بیتی اینتل و برای سیستم های مبتنی بر پردازنده های خانواده اینتل Itanium که در محیط ویندوز عمل می کنند، اجرا می شوند. علاوه بر این، این کامپایلر به شما اجازه می دهد تا توابع زبان CVF را در سیستم های اجرای لینوکس بر اساس پردازنده های 32 بیتی اینتل و پردازنده های خانواده اینتل Itanium اجرا کنید. در سال 2004، برنامه ریزی شده برای انتشار یک نسخه گسترده از این کامپایلر - کامپایلر حرفه ای کامپایلر حرفه ای Intel Visual Fortran برای ویندوز، که شامل IMSL Fortran 5.0 کتابخانه کتابخانه، توسعه یافته توسط Visual Numerics، Inc.


    "کامپایلرهای جدید همچنین از پردازنده های اینتل آینده پشتیبانی می کنند که برای نام Codename Prescott شناخته شده است که برای تیم های جدید برای افزایش گرافیک و عملکرد ویدئو، و همچنین سایر ابزارهای بهره وری، پشتیبانی می کند. آنها همچنین پشتیبانی می کنند تکنولوژی جدید موبایل MMX (TM)، به طور مشابه افزایش عملکرد برنامه های گرافیکی، صدا و ویدئو برای تلفن های همراه و رایانه های جیبی، - که توسط مدیر کل COLA مرکز توسعه اینتل در Nizhny Novgorod، Alexey Lockers اشاره شده است. - این کامپایلرها توسعه دهندگان نرم افزار را یک مجموعه یکپارچه از ابزارهای سازنده برای ساخت برنامه های جدید ارائه می دهند شبکه های بی سیم بر اساس معماری اینتل. کامپایلرهای جدید اینتل همچنین از تکنولوژی فوق العاده Threading Intel و Sectional OpenMP 2.0 پشتیبانی می کنند که استفاده از دستورالعمل های سطح بالا را برای مدیریت جریان های آموزشی در برنامه ها تعریف می کند.

    در میان ابزارهای جدید موجود در کامپایلرها، پوشش کد اینتل و اولویت بندی آزمون اینتل است. با هم، این ابزار به شما این امکان را می دهد تا توسعه برنامه های کاربردی را افزایش دهید و کیفیت خود را با بهبود فرایند تست نرم افزار بهبود دهید.

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

    کامپایلرهای اینتل جدید در مجموعه های مختلف تر از 399 دلار به 1499 دلار تولید می شوند. آنها امروز می توانند در اینتل یا نمایندگان فروشندگان در سراسر جهان خریداری شوند، لیست آن در سایت واقع شده است. http://www.intel.com/software/products/Reseller.htm#Russia..

    پشتیبانی پردازنده PressCott

    پشتیبانی پردازنده اینتل پنتیوم 4 (PRESCOTT) در نسخه هشتم کامپایلر به شرح زیر است:

    1. پشتیبانی SSE3 (یا PNI، دستورالعمل های جدید Prescott). در اینجا ارزش سه راه را برجسته می کند:

    ولی. اسمبلر inserts (مجمع درون خطی). به عنوان مثال، کامپایلر استفاده زیر از دستور را از SSE3 _ASM (addsubpd xmm0، xmm1) را به رسمیت می شناسد. بنابراین، کاربران علاقه مند به بهینه سازی سطح پایین می توانند دسترسی مستقیم به تیم های مونتاژ را دریافت کنند.

    ب در کامپایلر C / C ++، دستورالعمل های جدید در سطح بالاتری از استفاده از Inserts Assembler در دسترس هستند. یعنی، از طریق توابع جاسازی شده (توابع ذاتی):

    ویژگی های ساخته شده است

    تابع ساخته شده ساخته شده تیم تولید شده
    _mm_addsub_ps addsubps
    _mm_hadd_ps haddps
    _mm_hsub_ps msubps
    _mm_moveldup_ps movsldup
    _mm_movehdup_ps movshdup
    _mm_addsub_pd. addsubpd
    _mm_hadd_pd. haddpd
    _mm_hsub_pd. hsubpd
    _mm_loaddup_pd. MOVDDUP XMM، M64
    _mm_movedup_pd. MOVDDUP REG، REG
    _mm_lddqu_si128. lddqu

    جدول ویژگی های ساخته شده را نشان می دهد و دستورات اسمبلر مربوطه از مجموعه SSE3 را نشان می دهد. همان پشتیبانی برای دستورات از مجموعه MMX / SSE \\ SSE2 وجود دارد. این به برنامه نویس اجازه می دهد تا بهینه سازی کد پایین سطح را بدون توسل به برنامه نویسی اسمبلر انجام دهد: کامپایلر خود را از صفحه نمایش (نقشه برداری "E) از توابع ساخته شده به دستورات پردازنده مربوطه و استفاده بهینه از ثبت نام مراقبت می کند. این برنامه نویس می تواند بر ایجاد یک الگوریتم تمرکز کند که به طور موثر از مجموعه های فرمان جدید استفاده می کند.

    که در. تولید خودکار کامپایلر دستورات جدید. دو راه قبلی پیشنهاد استفاده از دستورات جدید توسط برنامه نویس. اما کامپایلر همچنین قادر به استفاده از گزینه های مناسب است - به بخش 3 زیر مراجعه کنید) به طور خودکار دستورات جدید را از شماره گیری SSE3 برای کد نرم افزار در C / C ++ و زبان های FORTRAN تولید کنید. به عنوان مثال، یک دستور بار بهینه سازی نشده (LDDQ)، استفاده از آن به شما اجازه می دهد تا عملکرد عملکرد را تا 40٪ (به عنوان مثال، در وظایف رمزگذاری ویدئو و صوتی) دریافت کنید. تیم های دیگر از مجموعه SSE3 امکان دستیابی به شتاب قابل توجهی را در وظایف گرافیکی 3D یا وظایف حل و فصل با استفاده از اعداد پیچیده فراهم می کند. به عنوان مثال، یک گراف در بخش 3.1 زیر نشان می دهد که برای برنامه 168.wupWise از مجموعه ای از SPEC از Spec CPU2000 FP شتاب به دست آمده از نسل اتوماتیک دستورات SSE3 ~ 25٪ بود. عملکرد این نرم افزار به طور قابل توجهی بستگی به سرعت اعداد یکپارچه حساب دارد.

    2. استفاده از مزایای میکروارچوستال پردازنده Prescott. هنگام تولید کد، کامپایلر تغییرات میکروآرکاچرکتوال را در پردازنده جدید می گیرد. به عنوان مثال، انجام برخی از عملیات (مانند تغییرات عدد صحیح، ضرب اعداد صحیح یا تبدیل اعداد بین فرمت های مختلف شناور مختلف در SSE2) بر روی یک پردازنده جدید با توجه به نسخه های قبلی شتاب گرفت (بیایید بگوییم، یک تغییر عدد صحیح توسط یک پردازنده اشغال شده است تاکتیک در برابر چهار نسخه قبلی پردازنده اینتل پنتیوم 4). استفاده شدید از این دستورات، امکان دستیابی به شتاب قابل توجهی از برنامه ها را فراهم می کند.
    مثال دیگری از تغییرات میکروارچرکتوال مکانیسم بازاریابی فروشگاه بهبود یافته است (اطلاعات سریع دانلود شده در حافظه ذخیره شده در حافظه)؛ صرفه جویی در واقعی حتی در حافظه پنهان نیست، بلکه در برخی از بافر ذخیره می شود، که به شما اجازه می دهد تا دسترسی بسیار سریع به داده ها را انجام دهید. به عنوان مثال، این ویژگی معماری امکان پذیر است، به عنوان مثال، برای انجام ویکتوری اتوماتیک اتوماتیک تهاجمی کد برنامه را انجام می دهد.
    کامپایلر همچنین میزان افزایش میزان ذخیره سازی سطح اول و دوم را در نظر می گیرد.

    3. بهبود پشتیبانی فن آوری Hyper-Threading. این مورد ممکن است به تغییرات قبلی - میکروآرکارچرکتال و استفاده از آنها در کامپایلر نسبت داده شود. به عنوان مثال، یک کتابخانه از زمان اجرای، که پشتیبانی از مشخصات صنعت OpenMP را اجرا می کند، برای اجرای یک پردازنده جدید بهینه سازی شده است.

    کارایی

    استفاده از کامپایلرها ساده و روش موثر از معماری پردازنده اینتل استفاده کنید. دو راه برای استفاده از کامپایلرها برجسته شده اند: الف) برنامه های مجتمع با تغییر احتمالی در تنظیمات کامپایلر، ب) بازسازی با تغییر در هر دو تنظیمات کامپایلر و متن منبع، و همچنین استفاده از تشخیص کامپایلر بر روی بهینه سازی و امکان پذیر است استفاده از نرم افزار های دیگر (به عنوان مثال، پروفیلزر).


    1.1 بهینه سازی برنامه ها با بازپرداخت و تغییر تنظیمات کامپایلر


    اغلب، اولین گام در انتقال به یک کامپایلر بهینه سازی جدید، استفاده از آن با تنظیمات پیش فرض است. گام منطقی بعدی این است که از گزینه ها برای بهینه سازی تهاجمی بیشتر استفاده کنید. ارقام 1، 2، 3 و 4 نشان دهنده اثر انتقال به یک کامپایلر اینتل 8.0 نسبت به استفاده از سایر محصولات پیشرو در صنعت (-O2 - تنظیمات کامپایلر پیش فرض، پایه - تنظیمات حداکثر بهره وری) مقایسه در معماری های اینتل 32 و 64 بیتی انجام شده است. برنامه های کاربردی از Spec CPU2000 به عنوان یک شماره آزمون استفاده می شود.


    تصویر 1




    شکل 2.




    شکل 3




    شکل 4


    برخی از گزینه ها در زیر ذکر شده اند (به این ترتیب به عنوان خانواده سیستم عامل ویندوز نامیده می شود؛ برای خانواده سیستم عامل لینوکس، گزینه هایی با همان عمل وجود دارد، اما ممکن است نام ممکن باشد؛ به عنوان مثال، -Od یا QXK برای ویندوز اقدام مشابهی با آن را ارائه می دهد O0 یا -XK برای لینوکس بر این اساس، اطلاعات بیشتر را می توان در کتابچه راهنمای کامپایلر استفاده کرد) پشتیبانی شده توسط کامپایلر اینتل.


    سطح کنترل بهینه سازی: گزینه ها -OD (بدون بهینه سازی؛ به برنامه های اشکال زدایی اعمال می شود)، -O1 (حداکثر سرعت زمانی که به حداقل رساندن اندازه کد)، -O2 (بهینه سازی با سرعت اجرای کد؛ به طور پیش فرض اعمال می شود)، -O3 (شامل بهینه سازی تهاجمی ترین سرعت کد؛ در بعضی موارد، می تواند منجر به اثر متضاد شود، یعنی به کاهش سرعت؛ لازم به ذکر است که در استفاده از IA-64 -O3 در اغلب موارد منجر به شتاب می شود، در حالی که تأثیر مثبت بر IA- 32 کمتر تلفظ شده است) نمونه هایی از بهینه سازی موجود در -O3: جایگزینی نظم دوره های توزیع شده (حلقه حلقه)، ترکیب چرخه ها (فیوژن حلقه)، جداسازی چرخه (توزیع حلقه؛ بهینه سازی، فیوژن حلقه معکوس)، داده های پیشفرض نرم افزار. دلیل آن که در هنگام استفاده از -O3 امکان پذیر است، ممکن است کامپایلر از رویکرد اکتشافی به انتخاب بهینه سازی تهاجمی برای یک مورد خاص استفاده کند، بدون اینکه اطلاعات کافی در مورد این برنامه (به عنوان مثال، دستورات پیش از انتخاب را تولید کند داده های مورد استفاده در چرخه، معتقد است که چرخه اجرا می شود تعداد زیادی از یک بار، در حالی که در واقع او تنها چند تکرار دارد). بهینه سازی بین پردازش برای پروفایل، و همچنین انواع "پیشنهادات" برنامه نویس (به بخش 3.2 مراجعه کنید) می تواند در این وضعیت کمک کند.

    بهینه سازی بین پردازش: -QiP (در یک فایل تک) و -QIPO (در چند یا چند فایل پروژه). شامل بهینه سازی مانند، به عنوان مثال، جایگزینی درون خطی از کد اغلب استفاده شده (کاهش هزینه های هزینه تماس / روش ها). به عنوان مثال، اطلاعات مربوط به مراحل بهینه سازی دیگر را ارائه می دهد - به عنوان مثال، اطلاعات مربوط به حد بالای چرخه (بیایید بگوییم، اگر یک زمان تلفیقی ثابت در یک فایل تعریف شده و در بسیاری از آنها استفاده شود) یا اطلاعاتی در مورد هماهنگ کردن داده ها در حافظه (بسیاری از MMX \\ دستورات SSE \\ sse2 \\ sse3 سریعتر کار می کنند اگر اپراتورها در حافظه به مرز در 8 یا 16 بایت تراز شوند). تجزیه و تحلیل روش های تخصیص حافظه (اجرا شده در یکی از فایل های پروژه) به آن دسته از توابع \\ روش هایی که از این حافظه استفاده می شود منتقل می شود (این می تواند به کامپایلر کمک کند تا فرضیه محافظه کارانه را رها کند که داده ها به درستی در حافظه هماهنگ نیستند؛ ولی این فرض باید زمانی که کمبود اطلاعات اضافی حفظ شود، حفظ شود). مثال دیگری، تجزیه و تحلیل تقاطع های حافظه (تجزیه و تحلیل، تجزیه و تحلیل داده ها aliasing) است: در غیاب اطلاعات اضافی و ناتوانی در اثبات فقدان تقاطعات، کامپایلر از فرض محافظه کار می آید که تقاطع وجود دارد. چنین تصمیمی می تواند بر کیفیت چنین بهینه سازی ها تاثیر بگذارد، مثلا، به عنوان مثال، برد سازی اتوماتیک بر روی IA-32 یا تسویه حساب نرم افزار (خط لوله نرم افزار یا SWP) در IA-64. بهینه سازی بین پردازنده می تواند به تجزیه و تحلیل حضور تقاطع های حافظه کمک کند.

    بهینه سازی پروفایل: شامل سه مرحله است. 1) تولید کد ابزار با استفاده از گزینه -QPROF_GEN. 2) کد به دست آمده بر روی داده های نمایندگی آغاز شده است، اطلاعات مربوط به ویژگی های مختلف اجرای کد (به عنوان مثال، احتمال انتقال یا ارزش معمول برای تعداد تکرارهای چرخه) جمع آوری شده است. 3) دوباره کامپایل با گزینه -QProf_use، که استفاده از کامپایلر اطلاعات جمع آوری شده در مرحله قبلی را فراهم می کند. بنابراین، کامپایلر توانایی استفاده نه تنها تخمین های استاتیک از ویژگی های مهم برنامه را دارد، بلکه داده های به دست آمده در طول اجرای واقعی برنامه را نیز استفاده می کند. این می تواند به انتخاب بعدی از بهینه سازی های خاص کمک کند (به عنوان مثال، یک مکان کارآمدتر در حافظه شاخه های مختلف برنامه، بر اساس اطلاعاتی که شاخه ها در چه فرکانس انجام می شود؛ یا استفاده از بهینه سازی به یک چرخه بر اساس اطلاعات مربوط به تعداد نمونه های تکراری در آن). بهینه سازی پروفیل به ویژه در مواردی مفید است که ممکن است یک مجموعه داده کوچک، اما یک نماینده را انتخاب کنید (برای مرحله دوم شماره 2)، که نشان دهنده موارد معمولی استفاده از برنامه آینده است. در برخی از زمینه های موضوعی، انتخاب چنین نماینده مجموعه ای کاملا امکان پذیر است. به عنوان مثال، بهینه سازی پروفایل توسط توسعه دهندگان DBMS استفاده می شود.

    بهینه سازی ذکر شده در بالا متعلق به نوع عمومی (Generic)، I.E. کد تولید شده بر روی تمام پردازنده های مختلف خانواده کار خواهد کرد (می گویند، در مورد معماری 32 بیتی - در تمام پردازنده های زیر: اینتل پنتیوم III، پنتیوم 4، از جمله هسته Prescott، اینتل پنتیوم M). همچنین برای یک پردازنده خاص بهینه شده است.

    بهینه سازی پردازنده خاص: -QXK (پنتیوم-III؛ با استفاده از دستورات SSE SSE، ویژگی های میکروارچینکتال)، -QXW و -QXN (پنتیوم 4؛ با استفاده از دستورات SSE و SSE2، ویژگی های میکروارچینتیک)، -QXB (پنتیوم M؛ با استفاده از دستورات SSE و SSE2، ویژگی های میکروارچینتیک ) QXP (Prescott؛ با استفاده از دستورات SSE، SSE2، و SSE3، ویژگی های میکروارکاری). در این مورد، کد تولید شده با استفاده از چنین گزینه ها ممکن است بر روی نمایندگان دیگر خط پردازنده کار نکند (به عنوان مثال، کد -QXW می تواند به یک فرمان غیر قابل قبول منجر شود، اگر در سیستم پردازنده اینتل پنتیوم III انجام شود). یا نه به کار با حداکثر کارایی (به عنوان مثال، -QXB کد در پردازنده پنتیوم 4 به دلیل تفاوت های میکروارساحی) کار می کند. با چنین گزینه هایی، همچنین ممکن است از کتابخانه های زمان اجرا بهینه شده برای یک پردازنده خاص با استفاده از سیستم فرماندهی آن استفاده کنید. برای کنترل این واقعیت که کد در پردازنده هدف معتبر است، مکانیزم اعزام (CPU-dispatch) اجرا می شود: بررسی پردازنده در طول اجرای برنامه. در موقعیت های مختلف، این مکانیسم می تواند درگیر باشد یا نه. اعزام همیشه مورد استفاده قرار می گیرد اگر گزینه های تغییر گزینه -Qax (KWNP) اعمال شود. در این مورد، دو نسخه از کد تولید می شوند: بهینه سازی شده برای یک پردازنده خاص و "عمومی" (عمومی)، انتخاب در طول اجرای برنامه رخ می دهد. بنابراین، به دلیل افزایش اندازه کد، برنامه را می توان بر روی تمام پردازنده های خط و اجرای مطلوب بر روی پردازنده هدف انجام داد. یکی دیگر از گزینه های استفاده از بهینه سازی کد تحت نماینده قبلی خط و استفاده از این کد در این و پردازنده های بعدی است. به عنوان مثال، کد -QXN را می توان در Pentium 4 با هسته Northwood و Prescott انجام داد. افزایش اندازه کد رخ نمی دهد. با این رویکرد، ممکن است یک خوب بدست آورید، اما هنوز هم عملکرد مطلوب در سیستم با پردازنده Prescott (از آنجا که SSE3 مورد استفاده قرار نمی گیرد و تفاوت های در میکروارساحیان در نظر گرفته نمی شود) با توجه به عملکرد مطلوب در شمالود. برای پردازنده های معماری IA-64 نیز گزینه های مشابهی وجود دارد. در حال حاضر دو وجود دارد: -G1 (Itanium) و -G2 (Itanium 2؛ گزینه پیش فرض).

    نمودار زیر (شکل 5) شتاب را نشان می دهد (برای ابتدای مرجع یک واحد دریافت شده - عدم وجود هر شتاب) از استفاده از برخی از بهینه سازی بالا (یعنی -O3 -QIPO -QPROF_USE -QX (n، P)) پردازنده Prescott در مقایسه با تنظیمات پیش فرض (-O2). استفاده از -QXP کمک می کند تا در برخی موارد شتاب را در مقایسه با -QXN دریافت کنید. بزرگترین شتاب در ضمیمه 168.wupwise به دست آمده است که قبلا در بخش قبلی ذکر شده است (با توجه به بهینه سازی شدید محاسبات پیچیده با استفاده از دستورات SSE3).


    شکل 5


    شکل 6 زیر نسبت (مقادیر) سرعت کد را نشان می دهد تنظیمات بهینه در مقایسه با تمام کد های غیر بهینه سازی شده (-OD) بر روی پردازنده های پنتیوم 4 و Itanium 2. می توان دید که Itanium 2 بسیار قوی تر وابسته به کیفیت بهینه سازی است. این به خصوص برای محاسبات نقطه شناور (FP)، جایی که نسبت تقریبا 36 برابر است، تلفظ می شود. محاسبات نقطه شناور قدرت معماری IA-64 است، اما لازم است که با دقت استفاده از تنظیمات کامپایلر کارآمدتر را مورد دقت قرار دهیم. افزایش عملکرد حاصل از هزینه های کار برای جستجوی آنها هزینه می شود.


    شکل 6. شتاب هنگام استفاده از بهترین گزینه های بهینه سازی مشخصات CPU200


    کامپایلرهای اینتل از مشخصات بخش OpenMP بخش پشتیبانی می کنند تا برنامه های چند رشته ای ایجاد کنند. روشن (گزینه -qopenmp) و اتوماتیک (-QParallel) با حالت موازی پشتیبانی می شود. در مورد یک حالت صریح، برنامه نویس مسئول استفاده صحیح و کارآمد استاندارد OpenMP است. در مورد موازی سازی اتوماتیک، کامپایلر یک بار اضافی مرتبط با تجزیه و تحلیل کد برنامه را نشان می دهد. به همین دلیل، موازی سازی اتوماتیک به طور موثر بر روی کدهای ساده به اندازه کافی کار می کند.

    نمودار در شکل 7 شتاب را از استفاده از موازی صریح بر روی سیستم نمونه مهندسی (پیش تولید) بر اساس پردازنده اینتل پنتیوم 4 (Prescott) با پشتیبانی از تکنولوژی Hyper-Threading نشان می دهد: 2.8 گیگاهرتز، 2 گیگابایت رم، 8K L1- کش، 512K L2-cache. Spec Ompm2001 به عنوان آزمون تست استفاده می شود. این مجموعه بر روی سیستم های کوچک و متوسط \u200b\u200bSMP متمرکز شده است، مصرف حافظه تا دو گیگابایت است. برنامه های کاربردی با استفاده از اینتل 8.0 C / C ++ و Fortran با دو مجموعه از گزینه ها جمع آوری می شوند: -QOPENMP -QIPO -O3 -QXN و -QOPENMP -QIPO -O3 -QXP، با هر کدام از آنها با استفاده از ON و OFF تکنولوژی موضوع مقادیر شتاب در نمودار، زمانی که تکنولوژی Hyper-Threading خاموش می شود، به عملکرد نسخه تک رشته ای عادی می شود.


    شکل 7: برنامه های کاربردی از Spec Ompm2001 بر روی پردازنده Prescott تنظیم شده است


    می توان دید که در 9 مورد از 11 مورد، استفاده از موازی صریح با استفاده از OpenMP، هنگامی که تکنولوژی Hyper-Threading روشن می شود، به دست می آید. در یکی از برنامه های کاربردی (312.swwim) کاهش می یابد. این یک واقعیت معروف است: این برنامه مشخص شده توسط درجه بالایی از وابستگی به پهنای باند حافظه همچنین، همانطور که در مورد مشخصات CPU2000، برنامه WUPWIWE به طور قابل توجهی از استفاده از بهینه سازی Prescott (-QXP) به طور قابل توجهی افزایش می یابد.


    1.2 بهینه سازی برنامه ها با تغییرات متن منبع و استفاده از تشخیص کامپایلر


    در بخش های قبلی، ما اثر کامپایلر (و تنظیمات آن) را بر سرعت کد برنامه در نظر گرفتیم. در عین حال، کامپایلرهای اینتل فرصت های بیشتری را برای بهینه سازی کد از تغییرات در تنظیمات ارائه می دهند. به طور خاص، کامپایلرها برنامه نویس را قادر می سازد تا "نکات" را در کد برنامه ایجاد کنند، که اجازه می دهد تولید یک کد کارآمدتر از لحاظ عملکرد. در زیر برخی از نمونه هایی برای زبان C / C ++ (برای زبان فورتران، معنی مشابهی وجود دارد که تنها با نحو متفاوت است).

    #Pragma IVDEP (جایی که IVDEP به معنای نادیده گرفتن وابستگی های بردار) به چرخه های نرم افزاری اعمال می شود تا به کامپایلر اطلاع دهد که در داخل هیچ وابستگی داده ای وجود ندارد. این نکته در مورد زمانی که کامپایلر (بر اساس تجزیه و تحلیل) محافظه کارانه نشان می دهد، نشان می دهد که چنین وابستگی ها ممکن است (اگر کامپایلر ممکن است به عنوان یک نتیجه از تجزیه و تحلیل اثبات شود، اعتیاد وجود دارد، و سپس "نوک" هیچ گونه عمل را ندارد) ، در حالی که نویسنده کد می داند که چنین وابستگی ها نمی توانند بوجود آیند. با استفاده از این نکته، کامپایلر می تواند یک کد کارآمدتر تولید کند: برداري خودکار برای IA-32 (با استفاده از دستورات بردار از MMX \\ SSE \\ SSE2 \\ SSE3 مجموعه ای برای چرخه های نرم افزاری در C / C ++ و FORTRAN؛ آن را آشنا می کند تکنیک در جزئیات بیشتر با این تکنیک، به عنوان مثال، در موارد زیر مقاله در مجله فناوری اینتل)، تسویه حساب نرم افزار (SWP) برای IA-64.

    بردار #Pragma همیشه برای ساخت کامپایلر برای تغییر محلول در ناکارآمدی برداري چرخه (هر دو اتوماتیک IA-32 و SWP برای IA-64)، بر اساس تجزیه و تحلیل ویژگی های کمی و کیفی کار در هر تکرار استفاده می شود .

    #pragma Novector یک عملکردهای معکوس #pragma را همیشه انجام می دهد.

    #Pragma Vector aligned برای اطلاع رسانی به کامپایلر استفاده می شود که داده های مورد استفاده در چرخه در مرز در 16 بایت قرار گرفته است. این به شما اجازه می دهد تا کارآمدتر و / یا جمع و جور تر (به علت عدم چک کردن در هنگام اجرای کد) تولید کنید.

    #Pragma Vector Unaligned یک عمل معکوس #pragma هم تراز شده است. دشوار است در مورد برنده شدن در عملکرد در این مورد صحبت کنید، اما می توانید بر روی یک کد فشرده تر حساب کنید.

    #pragma توزیع نقطه در داخل چرخه برنامه استفاده می شود، به طوری که کامپایلر می تواند چرخه (توزیع حلقه) را در این نقطه به یک کمی کوچکتر شکست. به عنوان مثال، چنین "نوک" می تواند مورد استفاده قرار گیرد زمانی که کامپایلر نتواند بردار اتوماتیک چرخه منبع را انجام دهد (به عنوان مثال، به دلیل وابستگی داده ها، حتی اگر #Pragma IVDEP وجود داشته باشد)، در حالی که هر یک از آنها نادیده گرفته می شود (یا بخشی) از چرخه های تازه شکل گرفته می تواند به طور موثر بر روی آن قرار گیرد.

    تعداد حلقه #Pragma (N) برای اطلاع رسانی به کامپایلر استفاده می شود که به احتمال زیاد ارزش تعداد تکرارهای چرخه N خواهد بود. این اطلاعات به تصمیم گیری در مورد بهینه سازی کارآمد برای این چرخه کمک می کند (به عنوان مثال، آیا باید اسکن، شما باید SWP یا بردار اتوماتیک را انجام دهید، آیا شما باید از دستورالعمل های پیش از انتخاب برنامه استفاده کنید ...)

    "نکته" _ASSUME_ALIGNED (P، BASE) برای اطلاع رسانی به کامپایلر استفاده می شود که منطقه حافظه مرتبط با اشارهگر P به مرز در Base \u003d 2 ^ n بایت قرار می گیرد.

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

    اول، شما می توانید از تشخیص کامپایلر در قالب گزارش هایی که برنامه نویس را فراهم می کند، استفاده کنید. به عنوان مثال، هنگام استفاده از گزینه -qvec_reportn (که در آن N از 0 تا 3 متغیر است و به معنی سطح جزئیات است) شما می توانید یک گزارش را در مورد ویکتور خودکار دریافت کنید. برنامه نویس اطلاعاتی در مورد آن در مورد چرخه ها در دسترس خواهد بود و نه. در مورد منفی، کامپایلر نشان می دهد که دلایلی که بردار سازی شکست خورده است. فرض کنید دلیل آن، وابستگی پیش بینی شده محافظه کارانه به داده ها بود. در این مورد، اگر برنامه نویس مطمئن باشد که وابستگی ها ممکن است رخ نداده باشد، استفاده از #Pragma IVDEP امکان پذیر است. مشابه (مقایسه Qvec_Reportn برای IA-32)، کامپایلر ممکن است بر روی IA-64 برای کنترل دسترسی و کارایی SWP ارائه دهد. به طور کلی، کامپایلرهای اینتل فرصت های فراوانی را برای تشخیص بهینه سازی ارائه می دهند.

    ثانیا، سایر محصولات نرم افزاری (مانند Profiler اینتل Vtune) می توانند برای جستجو برای "تنگناها" در کد از نظر عملکرد استفاده شوند. نتایج تجزیه و تحلیل می تواند به برنامه نویس کمک های لازم را کمک کند.

    شما همچنین می توانید کد لیست نصب شده توسط کامپایلر را استفاده کنید.


    شکل 8.


    در شکل 8، یک فرآیند بهینه سازی برنامه گام به گام را با استفاده از کامپایلر (و سایر محصولات نرم افزاری) اینتل در زبان Fortran برای معماری IA-64 نشان می دهد. به عنوان مثال، طرح پیش بینی غیرقابل پیش بینی منطقه ای برای 48 ساعت مرکز Roshydromet در نظر گرفته شده است (شما می توانید در مورد آن بخوانید، به عنوان مثال، در این مقاله. مقاله به زمان محاسبه حدود 25 دقیقه اشاره دارد، اما تغییرات قابل توجهی دارد از زمان نوشتن آن رخ داده است. به عنوان یک نقطه مرجع، عملکرد کد در سیستم CRAY-YMP. کد بدون تغییر با گزینه های کامپایلر پیش فرض (-O2) افزایش عملکرد را در 20٪ در یک سیستم چهار پردازنده بر اساس اینتل Itanium نشان داد 2 900 MHZ پردازنده. استفاده از بهینه سازی تهاجمی بیشتر (-O3) منجر به شتاب در حدود 2.5 برابر بدون تغییر کد به طور عمده به دلیل SWP و پیش انتخابات داده ها شد. تجزیه و تحلیل با استفاده از تشخیص کامپایلر و Profiler اینتل Vtune نشان داد برخی از "تنگناها "به عنوان مثال، کامپایلر برنامه حمل و نقل چند چرخه های مهم را منتشر نکرده است، گزارشگری در گزارش، که به معنای اعتیاد به داده ها است. کدهای کوچک (IVDEP Directive) به دست آوردن Effene کمک کرد نوار نقاله Kivny. با کمک پروفيل VTUNE، آن را قادر به تشخیص آن بود (و گزارش کامپایلر این را تایید کرد) که کامپایلر سفارش چرخه های توریستی (تبادل حلقه) را برای استفاده کارآمدتر از حافظه پنهان تغییر نمی دهد. دلیل دوباره فرضیه های محافظه کارانه در مورد وابستگی به داده ها بود. تغییرات در متن منبع برنامه ساخته شده است. به عنوان یک نتیجه، امکان دستیابی به شتاب 4 برابر با توجه به نسخه اولیه امکان پذیر بود. با استفاده از موازی سازی صریح با استفاده از دستورالعمل های استاندارد OpenMP، و سپس انتقال به سیستم با پردازنده های فرکانس بالاتر امکان کاهش زمان حساب را به شاخص کمتر از 8 دقیقه کاهش داد، که بیش از 16 بار شتاب را نسبت به نسخه اولیه کاهش داد.

    Intel Visual Fortran

    Intel Visual Fortran 8.0 از قسمت جلویی (بخشی از کامپایلر که مسئول تبدیل یک برنامه از متن در زبان برنامه نویسی به نمایندگی داخلی کامپایلر است، استفاده می کند که در بسیاری جهات به زبان برنامه نویسی بستگی ندارد و نه از دستگاه هدف) تکنولوژی کامپایلر CVF و اجزای کامپایلر اینتل، مسئول مجموعه بهینه سازی و تولید کد است.


    شکل 9




    شکل 10


    در شکل های 9 و 10، Intel Visual Visual Fortran 8.0 گرافیک مقایسه عملکرد با نسخه قبلی اینتل Fortran 7.1 و با سایر صنایع در کامپایلرهای صنعت از این زبان در حال اجرا ویندوز و خانواده های لینوکس داده شده است. برای مقایسه، آزمون ها مورد استفاده قرار گرفت، متون منبع که استانداردهای F77 و F90 را برآورده می کنند در سایت http://www.polyhedron.com/ در دسترس هستند. اطلاعات دقیق تر در مقایسه با عملکرد کامپایلر در همان سایت موجود است (مقایسه کامپایلر Win32 -\u003e Fortran (77، 90) معیارهای زمان اجرا و مقایسه کامپایلر لینوکس -\u003e Fortran (77، 90) معیارهای زمان اجرا): کامپایلرهای مختلف بیشتر نشان داده شده است ، و میانگین هندسی در ترکیب با نتایج فردی هر آزمون داده می شود.

    شما برده ای نیستید!
    یک دوره آموزشی بسته برای نخبگان کودکان: "ترتیب واقعی جهان".
    http://noslave.org.

    Wikipedia materials - دانشنامه آزاد

    کامپایلر اینتل C ++
    خطای LUA در ماژول: Wikidata در رشته 170: تلاش برای فهرست فیلد "Wikibase" (مقدار NIL).
    یک نوع
    نویسنده

    خطای LUA در ماژول: Wikidata در رشته 170: تلاش برای فهرست فیلد "Wikibase" (مقدار NIL).

    توسعه دهنده
    توسعه دهندگان

    خطای LUA در ماژول: Wikidata در رشته 170: تلاش برای فهرست فیلد "Wikibase" (مقدار NIL).

    نوشته شده در

    خطای LUA در ماژول: Wikidata در رشته 170: تلاش برای فهرست فیلد "Wikibase" (مقدار NIL).

    رابط

    خطای LUA در ماژول: Wikidata در رشته 170: تلاش برای فهرست فیلد "Wikibase" (مقدار NIL).

    سیستم عامل
    زبان های رابط

    خطای LUA در ماژول: Wikidata در رشته 170: تلاش برای فهرست فیلد "Wikibase" (مقدار NIL).

    نسخه اول

    خطای LUA در ماژول: Wikidata در رشته 170: تلاش برای فهرست فیلد "Wikibase" (مقدار NIL).

    پلت فرم سخت افزار
    آخرین نسخه
    نامزد انتشار

    خطای LUA در ماژول: Wikidata در رشته 170: تلاش برای فهرست فیلد "Wikibase" (مقدار NIL).

    نسخه بتا

    خطای LUA در ماژول: Wikidata در رشته 170: تلاش برای فهرست فیلد "Wikibase" (مقدار NIL).

    نسخه آلفا

    خطای LUA در ماژول: Wikidata در رشته 170: تلاش برای فهرست فیلد "Wikibase" (مقدار NIL).

    نسخه آزمایشی

    خطای LUA در ماژول: Wikidata در رشته 170: تلاش برای فهرست فیلد "Wikibase" (مقدار NIL).

    فرمت های فایل قابل خواندن

    خطای LUA در ماژول: Wikidata در رشته 170: تلاش برای فهرست فیلد "Wikibase" (مقدار NIL).

    فرمت های فایل ایجاد شده

    خطای LUA در ماژول: Wikidata در رشته 170: تلاش برای فهرست فیلد "Wikibase" (مقدار NIL).

    وضعیت

    خطای LUA در ماژول: Wikidata در رشته 170: تلاش برای فهرست فیلد "Wikibase" (مقدار NIL).

    مجوز

    ویژگی های اصلی:

    • Vectorization برای SSE، SSE2، SSE3، SSE4

    کامپایلر از استاندارد OpenMP 3.0 برای نوشتن برنامه های موازی پشتیبانی می کند. این همچنین شامل یک اصلاح OpenMP به نام OpenMP خوشه ای است که می توانید برنامه های کاربردی نوشته شده را مطابق با OpenMP بر روی خوشه ها با استفاده از MPI اجرا کنید.

    کامپایلر اینتل C ++ از Frontand (بخشی از کامپایلر درگیر تجزیه و تحلیل نحوی برنامه کامپایل شده) از گروه طراحی ادیسون استفاده می کند. همان Frontand توسط کامپایلرهای SGI MIPSPRO، Comeau C ++، Portland Group استفاده می شود.

    این کامپایلر به طور گسترده ای برای کامپایل معیارهای CPU ویژه استفاده می شود.

    4 سری از محصولات از اینتل حاوی کامپایلر وجود دارد:

    • اینتل C ++ Compiler نسخه حرفه ای
    • Intel Cluster Toolkit (نسخه کامپایلر)

    معایب نسخه لینوکس کامپایلر عبارتند از ناسازگاری جزئی با GNU-Extensions از زبان SI (پشتیبانی شده توسط کامپایلر GCC)، که می تواند مشکلات را هنگام جمع آوری برخی از برنامه ها ایجاد کند.

    گزینه های تجربی

    گزینه های کامپایلر تجربی زیر منتشر شد:

    • نسخه نمونه اولیه کامپایلر اینتل STM در تاریخ 17 سپتامبر 2007. پشتیبانی از حافظه تراکنش نرم افزار (STM). منتشر شده برای لینوکس و ویندوز، فقط برای IA-32 (پردازنده های x86)؛
    • اینتل مجموعه های همزمان برای C / C ++ 0.3 از سپتامبر 2008. شامل مکانیسم هایی است که تسهیل نوشتن برنامه های موازی C ++ را تسهیل می کنند.

    پرچم های پایه

    پنجره ها لینوکس، MacOSX شرح
    / od. -o0. غیر فعال کردن بهینه سازی
    / o1. -o1. بهینه سازی برای به حداقل رساندن اندازه فایل اجرایی
    / o2. -O2. بهینه سازی برای افزایش سرعت. برخی از بهینه سازی گنجانده شده است
    / o3 -O3 تمامی بهینه سازی از O2 را فعال کنید. همچنین بهینه سازی دوره های فشرده انجام دهید
    / oip -OIP شامل بهینه سازی پچ متقابل
    / oipo -Oipo بهینه سازی جهانی Intercelace را فعال کنید
    / QXO -xo اجازه استفاده از SSE3، SSE2 و SSE Extensions برای پردازنده های تولید هر شرکت
    / سریع. -سریع. « حالت سریع" معادل گزینه های "/ o3 / qipo / qxhost / no-prec-div" در ویندوز و "-o3 -po -static -xhost -no-prec-div" در لینوکس. توجه داشته باشید، پرچم "-xost" بهینه سازی برای پردازنده ای است که کامپایلر در حال اجرا است.
    / QPROF-GEN -PROF_GEN. یک نسخه ابزار کاربردی از برنامه ایجاد کنید که نمایه اجرایی را جمع آوری می کند
    / QPROF استفاده -Prof_use از اطلاعات پروفایل از ابتدای برنامه جمع آوری شده با پرچم prof_gen استفاده کنید.

    یک بررسی در مورد مقاله "Compiler اینتل C ++" بنویسید

    یادداشت

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

    پیوندها

    یک گزیده ای که کامپایلر اینتل C ++ را مشخص می کند

    و او بازگشت به آخرین بار ذره بین سفید را ببینید ... همسر شما و یک دوست وفادار که هرگز نمی تواند فراموش کند. او در قلب او او را بخشید. اما، به پشیمانی بزرگ او، نمی تواند او را بخشش ماجدالن را به ارمغان بیاورد .... بنابراین، همانطور که می بینید، ایزیدور، افسانه های مسیحی بزرگ درباره "همه ی گفتن" فقط دروغ کودکان برای مؤمنان ساده لوحانه به آنها اجازه می دهد تا آنها را ایجاد کنند هر گونه بد، دانستن اینکه چه کاری انجام می دهند، در نهایت ببخشند. اما شما می توانید تنها بخشی از بخشش مناسب را ببخشید. یک فرد باید درک کند که برای هر گونه بدبختی او باید پاسخ دهد ... و نه در مقابل برخی از خدای اسرار آمیز، بلکه در مقابل او، خود را مجبور به شدت رنج می برد. مجدالن ولادیکو را ببخشید، هرچند او عمیقا احترام گذاشت و صمیمانه او را دوست داشت. درست همانطور که او نتوانست ما را ببخشد و همه ما را برای مرگ وحشتناک Radomir ببخشد. پس از همه، او بهترین چیز را درک کرد - ما می توانیم به او کمک کنیم، می تواند آن را از مرگ بی رحمانه نجات دهد ... اما نمی خواستم. با توجه به گناه ویلت های سفید بیش از حد بی رحمانه، او را ترک کرد تا با این گسل زندگی کند، نه برای یک دقیقه فراموش نکنید او را فراموش نکنید ... او نمی خواست او را بخشش کمی بدهد. ما هرگز او را ندیده ایم. چگونه بچه های خود را ندیده بودند. از طریق یکی از شوالیه های معبد خود - Maggdalene ما پاسخ به Vladyka را به درخواست خود برای بازگشت به ما تحویل داد: "خورشید در یک روز دو بار افزایش می یابد ... شادی جهان شما (Radomir) هرگز به شما باز نخواهد گشت من به تو برگشتم و من ایمان من و حقیقت من را پیدا کردم، آنها زنده هستند، خودشان - مرده اند ... فرزندان خود را - آنها را دوست داشتند. من هرگز شما را از مرگ خود در حالی که زنده نخواهم آمد. و اجازه دهید شراب خود را با شما باقی بماند. شاید روزی او نور و بخشش را به ارمغان بیاورد ... اما نه از من. " رئیس Maulana از جان به همین دلیل به Matera به ارمغان آورد - هیچکدام از شوالیه های معبد می خواستند به ما بازگردند ... ما آنها را از دست دادیم، چند نفر دیگر از دست دادند، که نمی خواستند فهمیدند و قربانیانمان را از دست دادند ... چه کسی همانند شما - چپ، ما را محکوم کرد.
    من یک سر داشتم! .. مانند یک تشنه، خنک کردن دانش معروف معروف ابدی خود، من به طرز شگفت انگیزی از جریان اطلاعات شگفت انگیز جذب کردم، سخاوتمندانه از شمال ... و من خیلی بیشتر خواستم! .. من می خواستم همه چیز را بدانم پایان. این یک سوزن آب شیرین در درد سوزانده شده بود و مشکلات متداول! و من نمی توانستم مست را نکنم ...
    - من هزاران سوال دارم! اما هیچ وقت باقی مانده بود ... چه باید بکنم، شمال؟ ..
    - بپرسید، ایزیدور! .. بپرسید، سعی خواهم کرد به شما پاسخ دهم ...
    - به من بگویید، شمال، چرا به نظر من این است که در این داستان، چگونه دو داستان از زندگی به هم پیوست، با وقایع مشابه بافته شده، و آنها ارائه شده، زندگی یک نفر چگونه است؟ یا من اشتباه میکنم؟
    - شما کاملا درست است، ایزیدور. همانطور که قبلا به شما گفتم، "دنیای قوی این"، که تاریخ دروغین انسان را ایجاد کرد، "به" زندگی واقعی مسیح به آخرین زندگی عیسی جاشوا (جاشوا)، که یکی را به دست آورد، به زندگی واقعی مسیح تبدیل کرد و نیم سال پیش (از زمان داستان شمال). و نه تنها خود، بلکه خانواده اش، بستگانش و عزیزانش، دوستان و پیروانش. پس از همه، آن را در همسر پیامبر جاشوا، یهودیان مریم، خواهر مارس و برادر لازار، خواهر مادر خود ماریا یعقوب، و دیگران که هرگز نزدیک به Radomir و Magdalina وجود دارد، وجود دارد. درست همانطور که نزدیک آنها و دیگر مردم "رسولان" بود - پل، متی، پیتر، لوک و بقیه ...
    این خانواده پیامبر جاشوا بود که یک و نیم هزار سال پیش در پرونس نقل مکان کرد (که Gaul (Transalpine Gaul نامیده می شود) در شهرستان یونان (مارسی کنونی)، از آنجایی که در آن زمان "گیتس" بین اروپا بود، "گیتس" بود و آسیا، و این ساده ترین راه برای همه "مورد آزار و اذیت" بود تا از آزار و اذیت و مشکل جلوگیری شود.