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

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

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

همچنین کتابخانه اینتل بر روی تمامی کلاسترها نصب شده است کتابخانه ریاضی هسته(MKL) نسخه 8.0.2. کتابخانه در پوشه /usr/mkl قرار دارد. لطفاً توجه داشته باشید که زیر شاخه های 32، 64 و em64t در دایرکتوری lib موجود هستند. در خوشه Ant باید از کتابخانه ها از زیر شاخه em64t استفاده کنید و در خوشه های دیگر - از زیر شاخه 32. تمام اسناد و نمونه های لازم را می توان از پوشه /usr/mkl/doc به دست آورد.

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

نیاز به کامپایلرهای جدید عمدتاً به الف) پشتیبانی از برنامه نویسی در فرترن 90 و همچنین ب) برای بهینه سازی قوی تر برنامه های فرترن نسبت به کامپایلر g77 که از ترجمه به C و سپس کامپایل با استفاده از gcc استفاده می کند، ایجاد شد.

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

چگونه استفاده کنیم؟

کامپایلرهای اینتل با استفاده از دستورات فراخوانی می شوند icc(C یا C++)، icpc(C++) و آیفورت(فرتران 77/90). دستورات mpicc، mpiCC و mpif77 برای کامپایل و مونتاژ برنامه های MPI نیز برای استفاده از کامپایلرهای اینتل پیکربندی شده اند.

همچنین می توان از کامپایلرهای گنو با استفاده از دستورات mpigcc، mpig++ و mpig77 استفاده کرد (فرترن 90 پشتیبانی نمی شود).

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

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

فایل های با پسوند .f, .ftnو .برایبه عنوان متون مبدأ در زبان Fotran، با شکل ثابت علامت گذاری و فایل ها شناسایی می شوند fppو .Fعلاوه بر این، از پیش پردازنده زبان فرترن عبور کرد. فایل های با پسوند f90متون منبع فرترن 90/95 با نماد فرم آزاد در نظر گرفته می شوند. با استفاده از گزینه‌ها می‌توانید صریحاً یک شکل ثابت یا رایگان از نمادگذاری برای برنامه‌های فرترن را مشخص کنید -FIو -FRبه ترتیب.

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

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

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

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

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

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

سطوح بهینه سازی
گزینهشرح
-O0بهینه سازی را غیرفعال می کند
-O1 یا -O2بهینه سازی اولیه برای سرعت درج درون خطی توابع کتابخانه غیرفعال است. برای کامپایلر ++C، این گزینه ها همان بهینه سازی را ارائه می دهند؛ برای کامپایلر فرترن، گزینه -O2 ترجیح داده می شود، زیرا همچنین شامل ارتقای چرخه است.
-O3بهینه‌سازی‌های قوی‌تر از جمله تبدیل حلقه، واکشی اولیه داده و استفاده از OpenMP. برخی از برنامه ها ممکن است عملکرد بهبود یافته را در مقایسه با آن تضمین نکنند -O2. استفاده در ارتباط با گزینه های برداری منطقی است -xKو -xW.
-unroll[n]باز کردن حلقه را تا n بار فعال می کند.
بهینه سازی برای یک پردازنده خاص
گزینهشرح
-tpp6بهینه سازی برای پردازنده های Penitum Pro، Pentium II و Pentium III
-tpp7بهینه سازی برای پردازنده های Penitum 4 (این گزینه به طور پیش فرض برای کامپایلر IA-32 فعال است)
-xMتولید کد با استفاده از پسوندهای MMX مخصوص پردازنده های Pentium MMX، Pentium II و جدیدتر
-xKتولید کد با استفاده از پسوندهای SSE مخصوص پردازنده های Pentium III
-xWتولید کد با استفاده از پسوندهای SSE2 مخصوص پردازنده های پنتیوم 4
بهینه سازی بین رویه ای
-ipبهینه سازی بین رویه ای در یک فایل فعال می شود. اگر گزینه را مشخص کنید -ip_no_inlining، سپس درج تابع درون خطی غیرفعال می شود.
-ipoبهینه سازی بین رویه ای بین فایل های مختلف را فعال می کند
بهینه سازی با استفاده از پروفایل ها
-prof_genیک کد "پروفایل" تولید می شود که برای پروفایل استفاده می شود، یعنی. جمع آوری داده ها در مورد دفعات عبور از مکان های خاص در برنامه
-prof_useبهینه سازی بر اساس داده های به دست آمده در مرحله پروفایل انجام می شود. استفاده از آن همراه با گزینه بهینه سازی بین رویه ای منطقی است -ipo.
موازی سازی برای سیستم های SMP
-openmpپشتیبانی از استاندارد OpenMP 2.0 را فعال می کند
-موازیموازی سازی خودکار حلقه فعال است

کارایی

با توجه به نتایج اجرای آزمایش‌های SPEC CPU2000، منتشر شده در سرور ixbt.com، کامپایلرهای اینتل نسخه 6.0 تقریباً در مقایسه با کامپایلرهای gcc نسخه‌های 2.95.3، 2.96 و 3.1 و PGI نسخه 4.0.2 بهتر بودند. این تست ها در سال 2002 بر روی کامپیوتری با پردازنده Pentium 4/1.7 GHz و RedHat Linux 7.3 انجام شد.

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

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

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

کتابخانه ها

کامپایلر زبان C از یک کتابخانه زمان اجرا توسعه یافته در پروژه گنو استفاده می کند ( libc.a).

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

  • libcprts.a- کتابخانه زبان C++ اجرا شده توسط Dinkumware.
  • 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) به صورت ایستا و تمام کتابخانه های سیستم لینوکس و کتابخانه های گنو به صورت پویا پیوند داده شده اند. با استفاده از گزینه -استاتیکمی توانید جمع آوری کننده (ویرایشگر پیوند) را مجبور کنید که تمام کتابخانه ها را به صورت ایستا متصل کند (که باعث افزایش حجم می شود فایل اجرایی) و با استفاده از گزینه -i_dynamicشما می توانید به صورت پویا تمام کتابخانه های توسعه اینتل را پیوند دهید.

هنگام اتصال کتابخانه های اضافی با استفاده از گزینه view -کتابخانهممکن است لازم باشد از گزینه استفاده کنید -دایرکتوریبرای تعیین مسیری که کتابخانه ها در آن قرار دارند.

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

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

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

برای به اشتراک گذاشتن ماژول های نوشته شده در Fortran و C، باید در مورد نامگذاری رویه ها در ماژول های شی، عبور پارامترها و دسترسی به متغیرهای سراسری، در صورت وجود، توافق کنید.

به طور پیش‌فرض، کامپایلر فرترن اینتل، نام‌های رویه‌ها را به حروف کوچک تبدیل می‌کند و یک زیرخط به انتهای نام اضافه می‌کند. کامپایلر C هرگز نام توابع را تغییر نمی دهد. بنابراین، اگر بخواهیم تابع یا رویه‌ای را که در C پیاده‌سازی شده در C از ماژول Fortran فراخوانی کنیم، در ماژول C باید fnname_ نامیده شود.

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

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

در ماژول های C، امکان استفاده از بلوک های COMMON تعریف شده در ماژول های فرترن وجود دارد (برای اطلاعات بیشتر، به راهنمای کاربر کامپایلر اینتل، فصل ترکیب C و فرترن مراجعه کنید).

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

ماژول های شی C تولید شده توسط کامپایلر Intel C++ با ماژول های تولید شده توسط کامپایلر GCC و کتابخانه GNU C سازگار هستند. بنابراین، این ماژول ها را می توان در یک برنامه واحد که با استفاده از دستورات icc یا gcc کامپایل شده است، استفاده کرد، اما توصیه می شود از icc برای گنجاندن صحیح کتابخانه های اینتل استفاده کنید.

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

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

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

اینتل C++ Compiler 7.0 برای لینوکس از استاندارد زبان ANSI/ISO C (ISO/IEC 9899/1990) پشتیبانی می کند. امکان ایجاد سازگاری دقیق با استاندارد ANSI C ( -ansi) یا گویش گسترده ANSI C ( -خا). هنگام استفاده از گزینه -c99

  • کتابچه راهنمای کامپایلر در قالب HTML (در سرور ما به صورت "آنلاین" موجود است، اما نیاز به پشتیبانی از زبان جاوا دارد)
    • راهنمای کاربر کامپایلر Intel C++.
    • راهنمای کاربر کامپایلر اینتل فرترن.
  • کتابچه راهنمای کامپایلر برای زبان انگلیسیدر قالب PDF (نیاز به Acrobat Reader است، شما باید فایل های PDF را در رایانه خود دانلود کنید)
    • راهنمای کاربر کامپایلر Intel C++: راهنمای کاربر کامپایلر Intel C++ (1.3 مگابایت، 395 صفحه).
    • راهنمای کاربر کامپایلر اینتل فرترن: راهنمای کاربر کامپایلر اینتل فرترن (1.1 مگابایت، 285 صفحه).
    • مرجع برنامه نویس در فرترن: مرجع برنامه نویس اینتل فرترن (7 مگابایت، 566 صفحه).
    • ارجاع به کتابخانه ها برای زبان فرترن: کتابچه راهنمای مرجع کتابخانه های اینتل فرترن (9.5 مگابایت، 881 صفحه).
  • راهنمای دیباگر برنامه اینتل.
  • مقایسه کامپایلرها در تست های SPEC CPU2000 (مقاله در ixbt.com به زبان روسی).
  • وب سایت Polyhedron نتایج مقایسه بین کامپایلرهای مختلف را ارائه می دهد.
  • در شماره قبلی مجله، محصولاتی از خانواده اینتل VTune Performance Analyzer را مورد بحث قرار دادیم - ابزارهای تجزیه و تحلیل عملکرد که به شایستگی در بین توسعه دهندگان برنامه محبوب هستند و امکان شناسایی در کد را فراهم می کنند. برنامه های تیم، که منابع CPU زیادی را هدر می دهد و به توسعه دهندگان فرصت شناسایی و حذف پتانسیل را می دهد مکان های باریک، با بخش های مشابه کد مرتبط است و در نتیجه روند توسعه برنامه را سرعت می بخشد. البته توجه داشته باشید که عملکرد برنامه ها تا حد زیادی به کارآمدی کامپایلرهای مورد استفاده در توسعه آنها و چه ویژگی هایی بستگی دارد. سخت افزارآنها هنگام تولید کد ماشین استفاده می شوند.

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

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

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

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

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

    اینتل C++ Compiler 7.1 برای ویندوز

    Intel C++ Compiler 7.1 کامپایلری است که در اوایل سال جاری منتشر شد که کدهای بسیار بهینه شده ای را برای پردازنده های Intel Itanium، Intel Itanium 2، Intel Pentium 4 و Intel Xeon و همچنین پردازنده Intel Pentium M با استفاده از فناوری Intel Centrino ارائه می دهد و برای استفاده در دستگاه های تلفن همراه

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

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

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

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

    این کامپایلر با ابزارهای توسعه Microsoft Visual C++ 6.0 و Microsoft Visual Studio .NET کاملاً سازگار است، یعنی می توان آن را در محیط های توسعه مربوطه تعبیه کرد. علاوه بر این، این کامپایلر به شما اجازه می دهد تا برنامه های کاربردی 64 بیتی را برای سیستم عامل های در حال اجرا بر روی پردازنده های Itanium/Itanium 2 با استفاده از Microsoft Visual Studio بر روی یک پردازنده Pentium 32 بیتی با استفاده از کامپایلر 64 بیتی Intel Fortran توسعه دهید. هنگام اشکال زدایی کد، این کامپایلر به شما امکان می دهد از یک دیباگر استفاده کنید پلتفرم های مایکروسافت.خالص.

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

    Intel Fortran Compiler 7.1 for Windows کاملاً با استاندارد ISO Fortran 95 سازگار است و از ایجاد و اشکال زدایی برنامه های کاربردی حاوی کد به دو زبان C و Fortran پشتیبانی می کند.

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

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

    کامپایلر دیگری که در ابتدای سال منتشر شد، Intel C++ Compiler 7.1 برای لینوکس، به شما اجازه می دهد تا به درجه بالایی از بهینه سازی کد برای پردازنده های Intel Itanium، Intel Itanium 2، Intel Pentium 4، Intel Pentium M دست پیدا کنید. این کامپایلر کاملاً ساخته شده است. سازگار با کامپایلر GNU C در کد منبع و ماژول های شی، که به شما امکان می دهد برنامه های ایجاد شده با استفاده از گنو سی را بدون هزینه اضافی به آن منتقل کنید. زیر کنترل لینوکسکد کامپایل شده برای پلتفرم های دیگر مانند سیستم عامل های اولیه SCO، نسخه های اولیه Sun Solaris و غیره)، که به معنای سازگاری کامل با کامپایلر gcc 3.2 در سطح کد باینری است. در نهایت، با Intel C++ Compiler 7.1 برای لینوکس، حتی می‌توانید هسته لینوکس را با ایجاد چند تغییر جزئی در کد منبع آن دوباره کامپایل کنید.

    کامپایلر Intel Fortran 7.1 برای لینوکس

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

    علاوه بر این، کامپایلر مشخص شده با ابزارهایی مانند ویرایشگر emacs، دیباگر gdb و ابزار ساخت اپلیکیشن make توسط توسعه دهندگان سازگار است.

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

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

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

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

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

    بلافاصله مشخص شد که سیاست حفاظت به طور اساسی بازنگری شده است و اکنون وجود مجوز در مرحله نصب برنامه بررسی شده است (در نسخه 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

      یادداشت

      06/05/2002 10:35 45 056 AutoRun.exe

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

      29.10.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

      17.10.2002 16:35 386 credist.txt

      16.10.2002 17:02 34 136 Crellnotes.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 فقط چهل و چند کیلوبایت طول می کشد. خیلی خوب! بعید است که بتوانید حفاظت جدی را در چنین حجمی پنهان کنید، و حتی اگر چنین باشد، این فایل کوچک ارزشی برای تجزیه و تحلیل کامل ندارد - تا آخرین بایت فهرست جداکننده. با این حال، این یک واقعیت نیست که کد امنیتیدقیقاً در setup.exe قرار دارد، می توان آن را در جای دیگری قرار داد، مثلاً ... ChkLic.dll/ChkLic.exe که روی هم کمی کمتر از هفتصد کیلوبایت را اشغال می کنند. صبر کنید، ChkLic چیست؟ این مخفف عبارت Check License هست یا چی؟! هوم، بچه های اینتل واضح است که با حس شوخ طبعی مشکل جدی دارند. اگر صادقانه به این فایل می گفتند «مرا هک کن» بهتر است! بسیار خوب، با قضاوت در مورد حجم، ChkLic همان FLEX lm است و ما قبلاً با آن مواجه شده ایم (به "کامپایلر Intel C++ 5.0" مراجعه کنید) و ایده ای تقریبی از نحوه شکستن آن داریم.

    ما دستور "dumpbin /EXPORTS ChkLic.dll" را می دهیم تا توابع صادر شده را بررسی کند و ... را محکم روی Klava نگه دارید تا از روی صندلی نیفتد:

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

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

      0 ویژگی

      مهر تاریخ 3DB438B4 دوشنبه 21 اکتبر 21:26:12 2002

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

      1 تعداد نام

      اشاره ترتیبی نام RVA

      1 0 000010A0 _CheckValidLicense

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

    ...خیال بافی! خوب، بیایید به گوسفندمان برگردیم. بیایید منطقی فکر کنیم: اگر تمام کد امنیتی مستقیماً در ChkLic.dll متمرکز شده باشد (و با قضاوت بر اساس ماهیت "لوله ای" حفاظت، در واقع اینگونه است)، پس تمام "محافظت" به فراخوانی CheckValidLicense از راه اندازی خلاصه می شود. exe و بررسی نتیجه برگردانده شده توسط آن. بنابراین ، برای "هک کردن" فقط کافی است ChkLic.dll را از دست بدهید و تابع ChekValidLicense را مجبور کنید همیشه بازگردد ... و اتفاقاً چه چیزی باید برگرداند؟ به طور دقیق تر: دقیقاً چه مقدار بازگشتی مربوط به یک بررسی موفق مجوز است؟ نه، عجله نکنید تا setup.exe را مشخص کنید، زیرا گزینه های ممکندیگر نه چندان: یا FALSE یا TRUE. آیا روی TRUE شرط بندی می کنید؟ خوب، به یک معنا، این منطقی است، اما از طرف دیگر: چرا ما واقعاً تصمیم گرفتیم که تابع CheckValidLicense دقیقاً پرچم موفقیت عملیات را برگرداند، نه کد خطا را؟ پس از همه، باید به نحوی دلایل خودداری از نصب کامپایلر را ایجاد کند: فایل دارای مجوز پیدا نشد، فایل آسیب دیده است، مجوز منقضی شده است، و غیره؟ خوب، بیایید سعی کنیم صفر را برگردانیم، و اگر این کار نشد، یک را برمی گردانیم.

    باشه، دست و پنجه نرم کن، بریم! HIEW را راه‌اندازی می‌کنیم، فایل ChkLic.dll را باز می‌کنیم (اگر باز نشد، گوفرها را سه بار به خاطر بسپارید، موقتاً آن را در ریشه یا هر دایرکتوری دیگری که شامل کاراکترهای خاصی در نامش نیست کپی کنید و hiew دوست ندارد) سپس با چرخاندن دوباره به جدول صادراتی که با استفاده از dumpbin به دست آمده است، آدرس تابع CheckValidLicense (در این مورد 010A0h) را تعیین می کنیم و از طریق "10A0" به ابتدای آن می رویم.حالا آن را "live" می بریم و روی آن بازنویسی می کنیم. کد قدیمی "XOR EAX, EAX/RETN 4". چرا دقیقا "REN 4" و نه فقط "RET"؟ بله، زیرا این تابع از قرارداد stdcall پشتیبانی می کند، که می توانید با نگاه کردن به پایان آن در HIEW"e متوجه شوید ( فقط صفحه جداکننده را به پایین اسکرول کنید تا RET را ببینید).

    بیایید بررسی کنیم ... کار می کند!!! با وجود نداشتن مجوز، نصاب بدون پرسیدن هیچ سوالی نصب را شروع می کند! بنابراین، دفاع سقوط کرد. اوه، ما نمی توانیم باور کنیم که همه چیز به این سادگی است و برای اینکه احمقانه به مانیتور خیره نشویم و منتظر تکمیل مراحل نصب برنامه باشیم، از disassembler IDA مورد علاقه خود در setup.exe استفاده می کنیم. اولین چیزی که توجه شما را جلب می کند عدم وجود CheckValidLicense در لیست توابع وارداتی است. شاید به نوعی فایل ChkLic.exe را راه اندازی کند؟ ما سعی می کنیم پیوند مربوطه را در بین خطوط شناسایی خودکار پیدا کنیم: "~View aNames"، "ChkLic"... بله، خط "Chklic.exe" اصلاً وجود ندارد، اما "Chklic.dll" شناسایی می شود. بله، می بینم، این بدان معناست که کتابخانه ChkLic با پیوند صریح از طریق LoadLibrary بارگیری می شود. و پیروی از ارجاع متقابل این را تأیید می کند:

      متن:0040175D push offset aChklic_dll ; lpLibFileName

      متن:00401762 با ds:LoadLibraryA تماس بگیرید

      متن:00401762 ; ChkLic.dll را بارگیری کنید ^^^^^^^^^^^^^^^^^

      متن:00401762 ;

      متن:00401768 mov esi, eax

      متن:0040176A push offset a_checkvalidlic ; lpProcName

      متن:0040176F push 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 CheckValidLicence از فرم: int CheckValidLicence(int some_flag) (بازگرداندن 0;)

    خوب، در حالی که ما در مورد همه اینها بحث می کردیم، نصب کننده نصب کامپایلر را به پایان رساند و کار خود را با موفقیت به پایان رساند. آیا جالب است که کامپایلر شروع می شود یا همه سرگرمی ها تازه شروع شده است؟ ما با تب و تاب از سلسله مراتب شاخه‌ای از زیرپوشه‌ها پایین می‌رویم، icl.exe را پیدا می‌کنیم، که همانطور که انتظار می‌رود در پوشه bin قرار دارد، کلیک می‌کنیم و... کامپایلر به‌طور طبیعی شروع نمی‌شود، با استناد به این واقعیت که "icl: error: نمی تواند مجوز FLEX lm را پرداخت کند، بدون آن نمی تواند به کار خود ادامه دهد.

    معلوم شد که اینتل از محافظت چند سطحی استفاده کرده است و سطح اول یک محافظت خام در برابر احمق ها است. خوب! ما این چالش را می پذیریم و بر اساس تجربه قبلی خود، به طور خودکار فایل LMGR*.DLL را در فهرست کامپایلر جستجو می کنیم. بلا استفاده! این بار اینجا چنین فایلی وجود ندارد، اما معلوم شد که icl.exe وزن زیادی پیدا کرده و از مرز ششصد کیلوبایت عبور کرده است... بس کنید! آیا توسعه دهندگان کامپایلر همین FLEX lm را با پیوند ثابت پیوند نداده اند؟ بیایید ببینیم: در Intel C ++ 5.0 مجموع اندازه های lmgr327.dll و icl.exe 598 کیلوبایت بود و اکنون icl.exe به تنهایی 684 کیلوبایت را اشغال می کند. با در نظر گرفتن تعدیل "چاقی طبیعی پیری"، ارقام به خوبی موافق هستند. بنابراین، پس از همه، FLEX lm! اوه اوه! اما اکنون، بدون نام توابع نمادین، شکستن محافظ بسیار دشوارتر خواهد بود... با این حال، بیایید زودتر وحشت نکنیم! بیایید فکر کنیم، فقط با آرامش! بعید است که تیم توسعه تمام کدهایی را که با این محافظت "پاکت" در تعامل است را به طور کامل بازنویسی کرده باشد. به احتمال زیاد ، "بهبود" آن فقط با تغییر در نوع چیدمان به پایان رسید. و اگر چنین است، پس شانس هک کردن برنامه همچنان زیاد است!

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

  • متن:0040107F loc_40107F: ; کد XREF: _main+75^j

    متن:0040107F mov eax, offset aFfrps ; "FFrps"

    متن:00401084 mov edx, 21h

    متن:00401089 با sub_404C0E تماس بگیرید

    متن:0040108E test eax, eax

    متن:00401090 jnz short loc_40109A

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

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

    مطالب از ویکی پدیا - دانشنامه آزاد

    کامپایلر C++ اینتل
    خطای Lua در Module:Wikidata در خط 170: تلاش برای نمایه سازی فیلد "wikibase" (مقدار صفر).
    تایپ کنید
    نویسنده

    خطای Lua در Module:Wikidata در خط 170: تلاش برای نمایه سازی فیلد "wikibase" (مقدار صفر).

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

    خطای Lua در Module:Wikidata در خط 170: تلاش برای نمایه سازی فیلد "wikibase" (مقدار صفر).

    نوشته شده بر روی

    خطای Lua در Module:Wikidata در خط 170: تلاش برای نمایه سازی فیلد "wikibase" (مقدار صفر).

    رابط

    خطای Lua در Module:Wikidata در خط 170: تلاش برای نمایه سازی فیلد "wikibase" (مقدار صفر).

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

    خطای Lua در Module:Wikidata در خط 170: تلاش برای نمایه سازی فیلد "wikibase" (مقدار صفر).

    چاپ اول

    خطای Lua در Module:Wikidata در خط 170: تلاش برای نمایه سازی فیلد "wikibase" (مقدار صفر).

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

    خطای Lua در Module:Wikidata در خط 170: تلاش برای نمایه سازی فیلد "wikibase" (مقدار صفر).

    نسخه بتا

    خطای Lua در Module:Wikidata در خط 170: تلاش برای نمایه سازی فیلد "wikibase" (مقدار صفر).

    نسخه آلفا

    خطای Lua در Module:Wikidata در خط 170: تلاش برای نمایه سازی فیلد "wikibase" (مقدار صفر).

    نسخه آزمایشی

    خطای Lua در Module:Wikidata در خط 170: تلاش برای نمایه سازی فیلد "wikibase" (مقدار صفر).

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

    خطای Lua در Module:Wikidata در خط 170: تلاش برای نمایه سازی فیلد "wikibase" (مقدار صفر).

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

    خطای Lua در Module:Wikidata در خط 170: تلاش برای نمایه سازی فیلد "wikibase" (مقدار صفر).

    حالت

    خطای Lua در Module:Wikidata در خط 170: تلاش برای نمایه سازی فیلد "wikibase" (مقدار صفر).

    مجوز

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

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

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

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

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

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

    • نسخه حرفه ای کامپایلر اینتل C++
    • مجموعه ابزار خوشه اینتل (نسخه کامپایلر)

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

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

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

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

    پرچم های اساسی

    پنجره ها لینوکس، MacOSX شرح
    /Od -O0 بهینه سازی را غیرفعال کنید
    /O1 -O1 بهینه سازی برای به حداقل رساندن اندازه فایل اجرایی
    /O2 -O2 برای سرعت بهینه سازی کنید. برخی از بهینه سازی ها گنجانده شده است
    /O3 -O3 همه بهینه سازی ها را از O2 فعال کنید. همچنین بهینه سازی چرخه فشرده را انجام دهید
    /Oip -اوپی بهینه سازی بین رویه ای فایل به فایل را فعال کنید
    /Oipo اویپو بهینه سازی بین رویه ای جهانی را فعال کنید
    /QxO -xO اجازه استفاده از برنامه های افزودنی SSE3، SSE2 و SSE برای پردازنده های تولید شده توسط هر شرکتی
    /سریع -سریع "حالت سریع". معادل گزینه های "/O3 /Qipo /QxHost /no-prec-div" در ویندوز و "-O3 -ipo -static -xHOST -no-prec-div" در لینوکس. لطفاً توجه داشته باشید که پرچم "-xHOST" به معنای بهینه سازی برای پردازنده ای است که کامپایلر روی آن اجرا می شود.
    /Qprof-gen -prof_gen یک نسخه ابزاری از برنامه ایجاد کنید که نمایه عملکرد را جمع آوری کند
    /Qprof-use -prof_use از اطلاعات نمایه از راه اندازی برنامه های جمع آوری شده با پرچم prof_gen استفاده کنید.

    نظری در مورد مقاله "کامپایلر Intel C++" بنویسید

    یادداشت

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

    پیوندها

    گزیده ای از کامپایلر Intel C++

    و همچنین، او برای آخرین بار برای دیدن مجوس سفید بازگشت... شوهر و واقعی ترین دوستش که هرگز نتوانست او را فراموش کند. در دل او را بخشید. اما با تأسف فراوان او نتوانست آمرزش مجدلیه را برای او به ارمغان بیاورد... بنابراین، همانطور که می بینید، ایزیدورا، افسانه بزرگ مسیحی در مورد "بخشش" فقط یک دروغ کودکانه برای مؤمنان ساده لوح است تا به آنها اجازه دهد. هر کار بدی انجام دهند، زیرا می دانند که هر کاری که انجام دهند، سرانجام بخشیده می شوند. اما شما فقط می توانید چیزی را ببخشید که واقعاً شایسته بخشش باشد. انسان باید بفهمد که باید پاسخگوی هر بدی باشد... و نه در برابر خدای مرموز، بلکه در برابر خودش که خودش را مجبور به رنج ظالمانه کند. ماگدالنا ولادیکا را نبخشید ، اگرچه عمیقاً به او احترام می گذاشت و صمیمانه او را دوست داشت. همانطور که او نتوانست همه ما را به خاطر مرگ وحشتناک رادومیر ببخشد. از این گذشته، او بهتر از هر کس دیگری فهمید - ما می توانستیم به او کمک کنیم، می توانستیم او را از یک مرگ بی رحمانه نجات دهیم ... اما ما نمی خواستیم. از آنجا که گناه مجوس سفید را بیش از حد ظالمانه می دانست، او را رها کرد تا با این گناه زندگی کند و لحظه ای آن را فراموش نکرد... او نمی خواست به راحتی او را ببخشد. ما دیگر او را ندیدیم. همانطور که آنها هرگز نوزادان خود را ندیدند. از طریق یکی از شوالیه های معبد خود - جادوگر ما - مگدالن پاسخ ولادیکا را به درخواست او برای بازگشت به ما رساند: "خورشید در یک روز دو بار طلوع نمی کند ... شادی دنیای شما (رادومیر) خواهد بود. هرگز به سوی تو برنگرد، همانطور که من به سوی تو برنخواهم گشت و من... ایمان و حقیقت خود را یافتم، آنها زنده هستند، اما مال تو مرده است... برای پسرانت سوگوار باش - آنها تو را دوست داشتند. تا زنده ام هرگز تو را به خاطر مرگشان نخواهم بخشید. و ممکن است گناه شما با شما باقی بماند. شاید روزی برای شما نور و بخشش بیاورد... اما نه از من.» سر مجوس جان را به همین دلیل به متئورا نیاوردند - هیچ یک از شوالیه های معبد نمی خواستند به ما برگردند ... ما آنها را از دست دادیم ، همانطور که بیش از یک بار بسیاری دیگر را از دست داده ایم ، که نمی خواستند قربانیان ما را درک کنید و بپذیرید... چه کسی درست مثل شما انجام داد - آنها رفتند و ما را محکوم کردند.
    سرم می چرخید!.. مثل یک تشنه که گرسنگی ابدی خود را برای دانش فرو می نشاند، حریصانه جریان اطلاعات شگفت انگیزی را که سخاوتمندانه شمال داده بود جذب کردم... و خیلی بیشتر می خواستم!.. می خواستم همه چیز را بدانم تا پایان. نفسی بود از آب شیرین در صحرای سوخته از درد و ناراحتی! و من نتونستم ازش سیر بشم...
    - من هزاران سوال دارم! اما فرصتی نمانده... چیکار کنم شمال؟..
    - بپرس، ایسیدورا!.. بپرس، سعی می کنم جوابت را بدهم...
    - به من بگو، سیور، چرا به نظر من این داستان ترکیبی از دو داستان زندگی است که با رویدادهای مشابه در هم تنیده شده است و آنها به عنوان زندگی یک نفر معرفی می شوند؟ یا من درست نیستم؟
    - کاملاً درست می گویی، ایسیدورا. همانطور که قبلاً به شما گفتم، "قدرت های این جهان" که تاریخ نادرست بشریت را ایجاد کردند، زندگی بیگانه یوشع پیامبر یهودی را که یک و نیم هزار سال پیش می زیسته، بر زندگی واقعی مسیح "قرار دادند". از زمان داستان شمال). و نه تنها خودش، بلکه خانواده اش، بستگان و دوستانش، دوستان و پیروانش. از این گذشته، این همسر یوشع نبی، مریم یهودی بود که یک خواهر مارتا و یک برادر لازاروس، خواهر مادرش ماریا یاکوبه و دیگرانی داشت که هرگز به رادومیر و مجدلیه نزدیک نبودند. همانطور که هیچ "حواری" دیگری در کنار آنها وجود نداشت - پولس، متی، پطرس، لوقا و بقیه...
    این خانواده یوشع پیامبر بودند که یک و نیم هزار سال پیش به پروونس (که در آن روزها گال ماوراءالنهر نامیده می شد) به شهر یونانی ماسالیا (مارسیل کنونی) نقل مکان کردند، زیرا ماسالیا در آن زمان "دروازه" بین اروپا و آسیا، و این ساده ترین راه برای همه "آزار و اذیت" بود تا از آزار و اذیت و مشکلات جلوگیری کنند.



    
    بالا