المجمعين إنتل. لماذا كانت هناك حاجة للمترجمين الجدد؟

مجمعات Intel C++ وFortran ومكتبة MKL

إلى جانب مترجمات GNU القياسية لنظام التشغيل Linux، يتم تثبيت مترجمات Intel C++ وFortran على مجموعات مجمع الحوسبة NIVC. حاليًا (بداية عام 2006)، تم تثبيت الإصدار 9.1 من المترجمين على كافة المجموعات. هذه الصفحة مخصصة لوصف أهم الخيارات والإعدادات لهذه المترجمات، بالإضافة إلى اختلافاتها الرئيسية عن مترجمات GNU. تستهدف الصفحة بشكل أساسي مستخدمي مجموعات مركز الحوسبة البحثية بجامعة ولاية ميشيغان، ولكنها قد تكون مفيدة أيضًا للمستخدمين الآخرين الناطقين باللغة الروسية. لم يتم تناول المشكلات المتعلقة بالتجميع لمنصة IA-64 هنا.

كما تم تثبيت مكتبة Intel على كافة المجموعات مكتبة نواة الرياضيات(MKL) الإصدار 8.0.2. تقع المكتبة في الدليل /usr/mkl. يرجى ملاحظة أن الدلائل الفرعية 32 و64 وem64t متوفرة في دليل lib. في مجموعة Ant، ​​تحتاج إلى استخدام المكتبات من الدليل الفرعي em64t، وفي المجموعات الأخرى - من الدليل الفرعي 32. يمكن الحصول على جميع الوثائق والأمثلة الضرورية من الدليل /usr/mkl/doc.

لماذا كانت هناك حاجة للمترجمين الجدد؟

نشأت الحاجة إلى مترجمين جدد بشكل أساسي من أجل أ) دعم البرمجة في Fortran 90، وأيضًا ب) لتحسين أقوى لبرامج Fortran مما يوفره المترجم g77، الذي يستخدم الترجمة إلى لغة C ثم التجميع باستخدام gcc.

يلبي مجمعو PGI (Portland Group) أيضًا هذه المتطلبات، لكن الشركة المطورة رفضت توريدها إلى روسيا.

كيف تستعمل؟

يتم استدعاء مترجمات Intel باستخدام الأوامر com.icc(سي أو سي++)، icpc(ج++) و com.ifort(فورتران 77/90). يتم أيضًا تكوين أوامر mpicc وmpiCC وmpif77 لتجميع برامج MPI وتجميعها لاستخدام برامج التحويل البرمجي من Intel.

من الممكن أيضًا استخدام مترجمات GNU باستخدام أوامر mpigcc وmpig++ وmpig77 (Fortran 90 غير مدعوم).

ملفات الإدخال

بشكل افتراضي، الملفات ذات الامتداد .CPPو .cxxتعتبر نصوصًا مصدرية في لغة C++، وملفات ذات امتداد ج- كود مصدر C، ويقوم مترجم icpc أيضًا بتجميع ملفات .c كرمز مصدر C++.

الملفات ذات الامتدادات .F, .ftnو يتم التعرف عليها كنصوص مصدرية في لغة الفوتران، مع شكل ثابت من التدوين والملفات .fppو .Fبالإضافة إلى ذلك، تم تمريرها عبر المعالج المسبق للغة Fortran. الملفات ذات الامتداد .f90تعتبر نصوص مصدر فورتران 90/95 مع تدوين حر الشكل. يمكنك تحديد شكل ثابت أو مجاني من التدوين لبرامج Fortran باستخدام الخيارات -FIو -الابعلى التوالى.

الملفات ذات الامتداد تم التعرف عليه كرمز لغة التجميع لـ IA-32.

ميزات مترجم إنتل

نعرض هنا خصائص مجمعات Intel كما ذكرها المطور في دليل المستخدم مع بعض تعليقاتنا.

  • تحسين كبير
    على ما يبدو، هذا يعني تحسين التعليمات البرمجية على مستوى عال، أي. بادئ ذي بدء، تحويلات الحلقة المختلفة، والتي يقوم بها جميع المترجمين تقريبًا بنجاح أكبر أو أقل
  • تحسين النقطة العائمة
    على ما يبدو، هذا يعني، أولا وقبل كل شيء، الحد الأقصى لاستخدام الأوامر المنفذة على مستوى الأجهزة
  • تحسينات بين الإجراءات
    أولئك. التحسين الشامل للبرنامج بأكمله، على عكس التحسين العادي، الذي يؤثر فقط على كود وظائف محددة
  • التحسين على أساس الملف الشخصي
    أولئك. القدرة على تشغيل برنامج في وضع الاختبار، وجمع البيانات في الوقت الذي يستغرقه تمرير أجزاء معينة من التعليمات البرمجية داخل الوظائف المستخدمة بشكل متكرر، ثم استخدام هذه البيانات للتحسين
  • دعم مجموعة تعليمات SSE في معالجات Pentium III
    ملاحظة: بالنسبة لمهام الحوسبة، تكون أوامر SSE2 أكثر أهمية، أي. يتحكم المتجه في أعداد حقيقية بحجم 64 بت، ولكنها مدعومة فقط على معالجات Pentium 4، والتي لا تتوفر لدينا حتى الآن
  • المتجهات التلقائية
    أولئك. مرة أخرى، باستخدام أوامر SSE وSSE2، التي يتم إدراجها تلقائيًا بواسطة المترجم
  • دعم OpenMP للبرمجة على أنظمة SMP
    ملاحظة: في المجموعة، يوصى باستخدام واجهة MPI بشكل أساسي؛ من غير المتوقع استخدام OpenMP على نطاق واسع في المجموعة ولم يتم تنفيذ مثل هذه التجارب بعد؛ ولكن ربما يكون من المنطقي استخدام المكتبات (BLAS، وما إلى ذلك) المتوازية للذاكرة المشتركة.
  • الجلب المسبق للبيانات
    أولئك. على ما يبدو، يتم استخدام أوامر التحميل المسبق من الذاكرة في ذاكرة التخزين المؤقت للبيانات، والتي ستكون هناك حاجة إليها بعد مرور بعض الوقت
  • رمز "الإرسال" لمعالجات مختلفة
    أولئك. القدرة على توليد التعليمات البرمجية لمعالجات مختلفة في ملف واحد قابل للتنفيذ، مما يتيح لك الاستفادة منها أحدث المعالجاتلتحقيق أعلى أداء عليها، مع الحفاظ على التوافق الثنائي للبرامج مع المعالجات السابقة؛ في مجموعتنا، هذا ليس ذا صلة بعد، لأنه يتم استخدام معالجات Pentium III فقط، وليس من المفترض أن يتم نقل البرامج المجمعة على المجموعة وتشغيلها على أجهزة أخرى

خيارات المترجم الأساسية

الأكثر إثارة للاهتمام، بالطبع، هي خيارات تحسين التعليمات البرمجية. معظم الخيارات شائعة لدى مترجمي C++ وFortran. أكثر وصف تفصيليالخيارات في أدلة المستخدم باللغة الإنجليزية.

مستويات التحسين
خياروصف
-O0تعطيل التحسين
-O1 أو -O2التحسين الأساسي للسرعة. تم تعطيل الإدراج المضمن لوظائف المكتبة. بالنسبة لمترجم C++، توفر هذه الخيارات نفس التحسين؛ بالنسبة لمترجم Fortran، يفضل خيار -O2، لأن يتضمن أيضًا الترويج للدورة.
-O3تحسينات أكثر قوة بما في ذلك تحويلات الحلقة والجلب المسبق للبيانات واستخدام OpenMP. قد لا تضمن بعض البرامج تحسين الأداء مقارنة بـ -O2. من المنطقي استخدامه مع خيارات التوجيه -xKو -xW.
-فتح [ن]تمكين تفكيك الحلقة حتى 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 الخاصة بمعالجات Pentium 4
التحسين بين الإجراءات
-ipيتم تمكين التحسين بين الإجراءات في ملف واحد. إذا قمت بتحديد الخيار -ip_no_inlining، ثم يتم تعطيل عمليات إدراج الوظائف المضمنة.
-الاكتتاب العامتمكين التحسين بين الإجراءات بين الملفات المختلفة
التحسينات باستخدام الملفات الشخصية
-prof_genيتم إنشاء رمز "التوصيف" الذي سيتم استخدامه للتوصيف، على سبيل المثال. جمع بيانات عن تكرار اجتياز أماكن معينة في البرنامج
-prof_useيتم إجراء التحسين بناءً على البيانات التي تم الحصول عليها خلال مرحلة التوصيف. من المنطقي استخدامه مع خيار التحسين بين الإجراءات -الاكتتاب العام.
التوازي لأنظمة SMP
-openmpتمكين الدعم لمعيار OpenMP 2.0
-موازيتم تمكين موازاة الحلقة التلقائية

أداء

وفقًا لنتائج تشغيل اختبارات SPEC CPU2000، المنشورة على خادم ixbt.com، كان الإصدار 6.0 من مترجمات Intel أفضل عالميًا تقريبًا مقارنة بإصدارات مترجمات دول مجلس التعاون الخليجي 2.95.3 و2.96 و3.1 وPGI الإصدار 4.0.2. تم إجراء هذه الاختبارات في عام 2002 على جهاز كمبيوتر مزود بمعالج Pentium 4/1.7 جيجا هرتز ونظام RedHat Linux 7.3.

وفقًا للاختبارات التي أجرتها شركة Polyhedron، كان الإصدار 7.0 من مترجم Intel Fortran متفوقًا عالميًا تقريبًا على مترجمات Fortran 77 الأخرى لنظام Linux (Absoft، وGNU، وLahey، وNAG، وNAS، وPGI). فقط في بعض الاختبارات، يكون مترجم Intel أدنى قليلاً من مترجمي Absoft وNAG وLahey. تم إجراء هذه الاختبارات على جهاز كمبيوتر مزود بمعالج Pentium 4/1.8 جيجا هرتز ونظام Mandrake Linux 8.1.

يتفوق الإصدار 9.1 من برامج التحويل البرمجي من Intel أيضًا على مترجمات دول مجلس التعاون الخليجي، ويظهر أداءً مشابهًا لـ Absoft وPathScale وPGI.

سنكون ممتنين للمستخدمين والقراء الذين يرسلون إلينا بيانات حول تأثير اختيار المترجم (دول مجلس التعاون الخليجي أو Intel) وخيارات التحسين على سرعة العمل على مشاكل حياتهم الواقعية.

المكتبات

يستخدم مترجم لغة C مكتبة وقت التشغيل التي تم تطويرها ضمن مشروع GNU ( libc.a).

يتم توفير المكتبات التالية مع برنامج التحويل البرمجي Intel C++:

  • libcprts.a- مكتبة لغة C++ لوقت التشغيل تم تطويرها بواسطة Dinkumware.
  • libcxa.a- مكتبة وقت تشغيل إضافية لتطوير C++ بواسطة Intel.
  • libimf.a- مكتبة الدوال الرياضية التي طورتها شركة إنتل، والتي تتضمن تطبيقات محسنة وعالية الدقة للدوال المثلثية والزائدة والأسية والخاصة والمعقدة وغيرها (لمزيد من التفاصيل، راجع قائمة الوظائف).
  • libirc.a- دعم وقت التشغيل للتوصيف (PGO) وإرسال التعليمات البرمجية اعتمادًا على المعالج (انظر أعلاه).
  • libguide.a- تنفيذ برنامج OpenMP.

تحتوي هذه القائمة على مكتبات ثابتة، ولكن بالنسبة لمعظمها هناك أيضًا مكتبات ديناميكية، أي. الخيارات المتصلة أثناء بدء التشغيل ( .لذا).

يتم توفير المكتبات التالية مع مترجم Fortran: libCEPCF90.a, libIEPCF90.a, ليبنترينز.أ, libF90.a، يتم استخدام مكتبة الوظائف الرياضية libimf.a أيضًا.

بناء الملف القابل للتنفيذ

يمكن توصيل المكتبات بشكل ثابت (أثناء الإنشاء) أو ديناميكيًا (أثناء بدء تشغيل البرنامج). يتيح لك النهج الديناميكي تقليل حجم الملف القابل للتنفيذ ويسمح لك بمشاركة نفس نسخة المكتبة في الذاكرة، ولكن لهذا تحتاج إلى تثبيت مجموعة كاملة من المكتبات الديناميكية المستخدمة في كل عقدة حيث سيتم إطلاق البرامج .

وبالتالي، إذا قمت بتثبيت برنامج التحويل البرمجي Intel على جهاز Linux الخاص بك وترغب في تشغيل الملفات القابلة للتنفيذ المجمعة على أجهزة أخرى، فأنت بحاجة إما إلى استخدام بناء ثابت (وهو أسهل) أو نسخ مكتبات Intel الديناميكية إلى هذه الأجهزة (عادةً من دليل مثل /opt/intel /compiler70/ia32/lib) إلى أحد الأدلة المدرجة في الملف /etc/ld.so.conf، وتأكد أيضًا من تثبيت نفس مجموعة مكتبات GNU/Linux الديناميكية على هذه المجلدات آلات.

بشكل افتراضي، ترتبط جميع مكتبات تطوير Intel (باستثناء libcxa.so) بشكل ثابت، ويتم ربط جميع مكتبات نظام Linux ومكتبات GNU ديناميكيًا. باستخدام الخيار -ثابتةيمكنك إجبار المجمع (محرر الارتباط) على توصيل جميع المكتبات بشكل ثابت (مما سيؤدي إلى زيادة حجم الصوت ملف تنفيذي)، واستخدام الخيار -i_dynamicيمكنك ربط جميع مكتبات تطوير Intel ديناميكيًا.

عند توصيل مكتبات إضافية باستخدام خيار العرض -مكتبةقد تحتاج إلى استخدام الخيار -الدليللتحديد المسار حيث توجد المكتبات.

باستخدام الخيارات -بستاتيكو -ديناميكيةيمكنك تحديد اتصال ديناميكي أو ثابت بشكل صريح لكل مكتبة من المكتبات المحددة في سطر الأوامر.

باستخدام الخيار تم تعطيل تجميع الملف القابل للتنفيذ ويتم تنفيذ التجميع فقط (إنشاء وحدة نمطية للكائن).

وحدات المشاركة في Fortran وC

لمشاركة الوحدات المكتوبة بلغة Fortran وC، يتعين عليك الموافقة على تسمية الإجراءات في وحدات الكائنات، وتمرير المعلمات، والوصول إلى المتغيرات العامة، إن وجدت.

افتراضيًا، يقوم برنامج التحويل البرمجي Intel Fortran بتحويل أسماء الإجراءات إلى أحرف صغيرة وإضافة شرطة سفلية إلى نهاية الاسم. لا يغير مترجم C أسماء الوظائف أبدًا. وبالتالي، إذا أردنا استدعاء وظيفة أو إجراء تم تنفيذه في FNNAME في لغة C من وحدة Fortran، فيجب أن يطلق عليه في وحدة C اسم fnname_.

يدعم مترجم Fortran هذا الخيار -nus [اسم الملف]، والذي يسمح لك بتعطيل إضافة الشرطة السفلية إلى أسماء الإجراءات الداخلية. إذا تم تحديد اسم ملف، فسيتم ذلك فقط لأسماء الإجراءات المدرجة في الملف المحدد.

بشكل افتراضي، يتم تمرير المعلمات في Fortran حسب المرجع، وفي لغة C يتم تمريرها دائمًا حسب القيمة. وبالتالي، عند استدعاء إجراء Fortran من وحدة C، يجب علينا تمرير مؤشرات إلى المتغيرات المقابلة التي تحتوي على قيم المعلمات الفعلية كمعلمات. عند كتابة دالة في لغة C والتي يجب استدعاؤها من وحدة Fortran، يجب علينا وصف المعلمات الرسمية كمؤشرات للأنواع المقابلة.

في وحدات C، من الممكن استخدام كتل COMMON المحددة داخل وحدات Fortran (لمزيد من المعلومات، راجع دليل مستخدم Intel Fortran Compiler، الفصل Mixing C وFortran).

تقاسم المترجمين إنتل ودول مجلس التعاون الخليجي

وحدات كائن C التي ينتجها مترجم Intel C++ متوافقة مع الوحدات التي ينتجها مترجم دول مجلس التعاون الخليجي ومكتبة GNU C. وبالتالي، يمكن استخدام هذه الوحدات معًا في برنامج واحد تم تجميعه باستخدام أوامر icc أو gcc، ولكن يوصى باستخدام icc لتضمين مكتبات Intel بشكل صحيح.

يدعم مترجم Intel عددًا من امتدادات لغة C غير القياسية التي يستخدمها مشروع GNU ويدعمها مترجم دول مجلس التعاون الخليجي (ولكن ليس جميعها، انظر هنا لمزيد من التفاصيل).

لا يذكر دليل المستخدم أي شيء عن توافق وحدات الكائنات في لغات C++ وFortran، ويبدو أنه غير مدعوم.

دعم المعايير

يدعم Intel C++ Compiler 7.0 لنظام التشغيل Linux معيار اللغة ANSI/ISO C (ISO/IEC 9899/1990). من الممكن تحقيق توافق صارم مع معيار ANSI C ( -ansi) أو لهجة ANSI C الموسعة ( -Xa). عند استخدام الخيار -c99

  • أدلة المترجم بتنسيق HTML (متوفرة "عبر الإنترنت" على خادمنا، ولكنها تتطلب دعم لغة Java)
    • دليل مستخدم مترجم Intel C++.
    • دليل مستخدم مترجم Intel Fortran.
  • أدلة المترجم ل اللغة الإنجليزيةبتنسيق PDF (يتطلب برنامج Acrobat Reader، وتحتاج إلى تنزيل ملفات PDF على جهاز الكمبيوتر الخاص بك)
    • دليل مستخدم مترجم Intel C++: دليل مستخدم مترجم Intel C++ (1.3 ميجابايت، 395 صفحة).
    • دليل مستخدم مترجم Intel Fortran: دليل مستخدم مترجم Intel Fortran (1.1 ميجابايت، 285 صفحة).
    • مرجع المبرمجين في فورتران: مرجع المبرمجين في إنتل فورتران (7 ميجابايت، 566 صفحة).
    • مرجع إلى المكتبات الخاصة بلغة فورتران: الدليل المرجعي لمكتبات إنتل فورتران (9.5 ميغابايت، 881 صفحة).
  • دليل مصحح أخطاء تطبيقات Intel.
  • مقارنة المترجمين في اختبارات SPEC CPU2000 (مقالة على ixbt.com باللغة الروسية).
  • يعرض موقع Polyhedron نتائج المقارنة بين المترجمين المختلفين.
  • ناقشنا في العدد السابق من المجلة منتجات من عائلة Intel VTune Performance Analyzer - أدوات تحليل الأداء التي تحظى بشعبية كبيرة بين مطوري التطبيقات وتسمح بالكشف في التعليمات البرمجية تطبيقات الفريق، والتي تهدر الكثير من موارد وحدة المعالجة المركزية، مما يمنح المطورين الفرصة لتحديد الإمكانات والقضاء عليها الأماكن الضيقة، المرتبطة بأقسام مماثلة من التعليمات البرمجية، وبالتالي تسريع عملية تطوير التطبيق. ومع ذلك، لاحظ أن أداء التطبيقات يعتمد إلى حد كبير على مدى كفاءة المترجمين المستخدمة في تطويرها، وما هي الميزات المعداتيتم استخدامها عند إنشاء رمز الجهاز.

    تتيح لك أحدث الإصدارات من برامج التحويل البرمجي Intel Intel C++ وIntel Fortran لنظامي التشغيل Windows وLinux الحصول على فوائد أداء التطبيقات للأنظمة المعتمدة على معالجات إنتلإيتانيوم 2، وإنتل زيون و إنتل بنتيوم 4 ما يصل إلى 40% مقارنة بالمترجمين الحاليين من الشركات المصنعة الأخرى بسبب استخدام ميزات هذه المعالجات مثل تقنية Hyper-Threading.

    تتضمن الاختلافات المرتبطة بتحسين التعليمات البرمجية من قبل هذه العائلة من المترجمين استخدام المكدس لتنفيذ عمليات الفاصلة العائمة، والتحسين بين الإجراءات (IPO)، والتحسين وفقًا لملف تعريف التطبيق (التحسين الموجه للملف الشخصي (PGO)، وتحميل البيانات مسبقًا في ذاكرة التخزين المؤقت ( الجلب المسبق للبيانات)، والذي يتجنب الكمون المرتبط بالوصول إلى الذاكرة، ودعم الميزات المميزة لمعالجات Intel (على سبيل المثال، امتدادات معالجة تدفق البيانات Intel Streaming SIMD Extensions 2، المميزة لـ Intel Pentium 4)، والتوازي التلقائي لتنفيذ التعليمات البرمجية، والتطبيق الخلق، ويعمل على عدة أنواع مختلفةالمعالجات عند تحسين أحدها، وأدوات "التنبؤ" بالكود اللاحق (التنبؤ بالفرع)، والدعم الموسع للعمل مع سلاسل التنفيذ.

    لاحظ أنه يتم استخدام مترجمات Intel في شركات معروفة مثل Alias/Wavefront، وOracle، وFujitsu Siemens، وABAQUS، وSilicon Graphics، وIBM. وفقًا للاختبارات المستقلة التي أجراها عدد من الشركات، فإن أداء مترجمات Intel أعلى بكثير من أداء المجمعين من الشركات المصنعة الأخرى (انظر، على سبيل المثال، http://intel.com/software/products/compilers/techtopics/compiler_gnu_perf .بي دي إف).

    أدناه سننظر في بعض الميزات أحدث الإصداراتمجمعات إنتل لسطح المكتب والخادم أنظمة التشغيل.

    المترجمين لمنصة Microsoft Windows

    إنتل C++ مترجم 7.1 لنظام التشغيل Windows

    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 لنظام التشغيل Windows

    يسمح لك برنامج Intel Fortran Compiler 7.1 لنظام التشغيل Windows، الذي تم إصداره أيضًا في وقت سابق من هذا العام، بإنشاء تعليمات برمجية محسنة لمعالجات 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 بت باستخدام مترجم Intel Fortran 64 بت. عند تصحيح التعليمات البرمجية، يسمح لك هذا المترجم باستخدام مصحح الأخطاء منصات مايكروسوفت.شبكة.

    إذا كان لديك منتج Compaq مثبتًا، فيمكن استخدام Visual Fortran 6.6 بدلاً من Intel Fortran Compiler 7.1 الأصلي، نظرًا لأن هذه المترجمات متوافقة على المستوى مصدر الرمز.

    Intel Fortran Compiler 7.1 لنظام التشغيل Windows متوافق تمامًا مع معيار ISO Fortran 95 ويدعم إنشاء وتصحيح التطبيقات التي تحتوي على تعليمات برمجية بلغتين: C وFortran.

    المترجمين لمنصة لينكس

    إنتل C++ مترجم 7.1 لنظام التشغيل Linux

    مترجم آخر تم إصداره في بداية العام، Intel C++ Compiler 7.1 لنظام التشغيل Linux، يسمح لك بتحقيق درجة عالية من تحسين التعليمات البرمجية لمعالجات Intel Itanium وIntel Itanium 2 وIntel Pentium 4 وIntel Pentium M. هذا المترجم كامل متوافق مع مترجم GNU C في الكود المصدري ووحدات الكائن، مما يسمح لك بترحيل التطبيقات التي تم إنشاؤها باستخدام GNU C إليه دون تكاليف إضافية. يدعم مترجم Intel C++ C++ ABI (إضافة إلى Linux kernel الذي يسمح لك بتشغيل تحت السيطرة على لينكسالتعليمات البرمجية المترجمة لمنصات أخرى مثل أنظمة تشغيل SCO المبكرة، الإصدارات المبكرة Sun Solaris، وما إلى ذلك)، مما يعني التوافق الكامل مع مترجم gcc 3.2 على مستوى الكود الثنائي. أخيرًا، باستخدام Intel C++ Compiler 7.1 لنظام التشغيل Linux، يمكنك أيضًا إعادة ترجمة نواة Linux عن طريق إجراء بعض التغييرات الطفيفة على كود المصدر الخاص بها.

    مترجم إنتل فورتران 7.1 لنظام التشغيل Linux

    يتيح لك Intel Fortran Compiler 7.1 لنظام التشغيل Linux إنشاء تعليمات برمجية محسنة لمعالجات Intel Itanium وIntel Itanium 2 وIntel Pentium 4 وIntel Pentium M. هذا المترجم متوافق تمامًا مع مترجم Compaq Visual Fortran 6.6 على مستوى الكود المصدري، مما يتيح لك لإعادة ترجمة التطبيقات التي تم إنشاؤها باستخدام Compaq Visual Fortran، وبالتالي زيادة أدائها.

    بالإضافة إلى ذلك، فإن المترجم المحدد متوافق مع الأدوات المساعدة التي يستخدمها المطورون مثل محرر emacs، ومصحح أخطاء gdb، والأداة المساعدة لإنشاء التطبيق.

    مثل إصدار Windows من هذا المترجم، فإن Intel Fortran Compiler 7.1 لنظام التشغيل Linux متوافق تمامًا مع معيار ISO Fortran 95 ويدعم إنشاء وتصحيح التطبيقات التي تحتوي على تعليمات برمجية بلغتين: C وFortran.

    يجب التأكيد بشكل خاص على أن المساهمة الكبيرة في إنشاء مجمعات Intel المدرجة قد تم تقديمها من قبل متخصصين من مركز تطوير البرمجيات Intel الروسي في نيجني نوفغورود. أكثر معلومات مفصلةيمكن العثور على معلومات حول برامج التحويل البرمجي لشركة Intel على موقع Intel على الويب www.intel.com/software/products/.

    سيتم تخصيص الجزء الثاني من هذه المقالة لمترجمي Intel الذين يقومون بإنشاء تطبيقات للأجهزة المحمولة.

    أمثلة على الاختراقات الحقيقية: مترجم Intel C++ 7.0 - أرشيف WASM.RU

    ...تم تنزيل برنامج التحويل البرمجي Intel C++ 7.0 في وقت متأخر من الليل، في حوالي الساعة الخامسة صباحًا. أردت حقًا أن أنام، لكن الفضول كان يمزقني أيضًا: ما إذا كانت الحماية قد تم تعزيزها أم لا. قررت أنه حتى أكتشف الحماية، ما زلت لن أنام، فتحت وحدة تحكم جديدة، وإعادة تعيين متغيرات النظام TEMP وTMP إلى الدليل C:\TEMP، والتي تمت كتابتها على عجل بطريقة غير لائقة اسم طويلالمثبت W_CC_P_7.0.073.exe على سطر الأوامر (تفسر الحاجة إلى تعيين متغيرات TEMP وTMP من خلال حقيقة أنها في نظام التشغيل Windows 2000 تشير بشكل افتراضي إلى دليل متداخل للغاية، ومثبت Intel C++ - وليس فقط هو - لا يدعم مسارات بهذا الحجم الضخم).

    أصبح من الواضح على الفور أن سياسة الحماية قد تمت مراجعتها بشكل جذري والآن تم التحقق من وجود ترخيص بالفعل في مرحلة تثبيت البرنامج (في الإصدار 5.x تم التثبيت دون مشاكل). حسنًا، نعطي الأمر dir وننظر إلى محتويات ما علينا الآن أن نحاربه:

      محتويات المجلد C:\TMP\IntelC++Compiler70

      17.03.2003 05:10

      لغة البرمجة

      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

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

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

      17/10/2002 16:29 28663 CLicense.rtf

      17.10.2002 16:35 386 credist.txt

      16.10.2002 17:02 34 136 Crellnotes.htm

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

      21/02/2002 12:39 2 478 سجل.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؟ هل هذا اختصار لفحص الترخيص أم ماذا؟! حسنًا، من الواضح أن شباب شركة Intel لديهم مشاكل خطيرة فيما يتعلق بروح الدعابة. سيكون من الأفضل لو أطلقوا على هذا الملف اسم "Hack Me" بصراحة! حسنًا، إذا حكمنا من خلال الحجم، فإن ChkLic هو نفس FLEX lm، وقد واجهناه بالفعل (انظر "Intel C++ 5.0 Compiler") ولدينا فكرة تقريبية عن كيفية كسره.

    نعطي الأمر "dumpbin /EXPORTS ChkLic.dll" لفحص الوظائف المصدرة و... نتمسك بقوة بـ Krav حتى لا تسقط من الكرسي:

      تفريغ الملف ChkLic.dll

    1. يحتوي القسم على عمليات التصدير التالية لـ ChkLic.dll

      0 الخصائص

      3DB438B4 طابع التاريخ الزمني الاثنين 21 أكتوبر 21:26:12 2002

    2. 1 عدد الوظائف

      1 عدد الأسماء

      تلميح ترتيبي اسم RVA

      1 0 000010A0 _CheckValidLicense

    عليك اللعنة! تصدر الحماية وظيفة واحدة فقط بالاسم الرائع CheckValidLicense. "رائع" - لأن الغرض من الوظيفة يصبح واضحًا من اسمها ويصبح من الممكن تجنب التحليل المضني لكود أداة التفكيك. حسنًا، لقد فقدوا كل الاهتمام... سيكون من الأفضل لو قاموا بتصديره بشكل ترتيبي أو شيء من هذا القبيل، أو على الأقل أطلقوا عليه اسمًا مخيفًا مثل DES Decrypt.

    ...احلام اليقظة! حسنا، دعونا نعود إلى أغنامنا. دعونا نفكر بشكل منطقي: إذا كان كل رمز الحماية يتركز مباشرة في ChkLic.dll (وبالنظر إلى الطبيعة "المفصلية" للحماية، فهذا هو الحال بالفعل)، فإن كل "الحماية" تتلخص في استدعاء CheckValidLicense من الإعداد. exe والتحقق من النتيجة التي تم إرجاعها به. لذلك، يكفي "الاختراق" فقط فقدان ChkLic.dll، مما يجبر وظيفة ChekValidLicense على العودة دائمًا... وبالمناسبة، ما الذي يجب أن تعود؟ بتعبير أدق: ما هي بالضبط قيمة الإرجاع التي تتوافق مع فحص الترخيص الناجح؟ لا، لا تتعجل في تفكيك ملف setup.exe لتحديده، لأنه الخيارات الممكنةلم يعد الأمر كثيرًا: إما خطأ أو صحيح. هل تراهن على صحيح؟ حسنًا، هذا أمر منطقي إلى حد ما، ولكن من ناحية أخرى: لماذا قررنا بالفعل أن تقوم وظيفة CheckValidLicense بإرجاع علامة نجاح العملية بالضبط، وليس رمز الخطأ؟ بعد كل شيء، يجب أن تحفز بطريقة أو بأخرى أسباب رفض تثبيت المترجم: لم يتم العثور على الملف مع الترخيص، الملف تالف، انتهت صلاحية الترخيص، وما إلى ذلك؟ حسنًا، دعونا نحاول إعادة الصفر، وإذا لم ينجح ذلك، فسنعيد واحدًا.

    حسنًا، اربطوا حزام الأمان، لنذهب! نقوم بتشغيل HIEW، ونفتح الملف ChkLic.dll (إذا لم يتم فتحه، فتذكر gophers ثلاث مرات، وانسخه مؤقتًا إلى الجذر أو أي دليل آخر لا يحتوي على أحرف خاصة في اسمه لا يحبها hiew) ثم نعود مرة أخرى إلى جدول التصدير الذي تم الحصول عليه باستخدام dumpbin، نحدد عنوان وظيفة CheckValidLicense (في هذه الحالة 010A0h) ومن خلال "10A0" نذهب إلى بدايتها. الآن، نقطعها "live"، ونكتب فوقها الكود القديم "XOR EAX, EAX/RETN 4". لماذا بالضبط "REN 4" وليس "RET" فقط؟ نعم، لأن الوظيفة تدعم اتفاقية stdcall، والتي يمكنك اكتشافها من خلال النظر إلى خاتمتها في HIEW"e ( فقط قم بالتمرير لأسفل شاشة المفكك حتى تقابل RET).

    دعونا نتحقق... إنه يعمل!!! على الرغم من عدم وجود ترخيص، يبدأ المثبت التثبيت دون طرح أي أسئلة! ولذلك سقط الدفاع. أوه، لا يمكننا أن نصدق أن كل شيء بهذه البساطة، ولكي لا نجلس بغباء ونحدق في الشاشة في انتظار اكتمال عملية تثبيت البرنامج، فإننا نستخدم أداة فك التجميع IDA المفضلة لدينا على setup.exe. أول ما يلفت انتباهك هو غياب CheckValidLicense في قائمة الوظائف المستوردة. ربما يقوم بطريقة ما بتشغيل ملف ChkLic.exe؟ نحاول العثور على الرابط المقابل بين الأسطر التي يتم التعرف عليها تلقائيًا: "~View 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 اتصل على اكس

      نص:00401787 ; استدعاء الدالة ChekValidLicense

      نص:00401787 ;

      النص:00401789 اختبار إياكس، إياكس

      النص:0040178B jnz loc_4019A3

    نص:0040178 ; إذا عادت الدالة غير صفرية، فاخرج من برنامج التثبيت

    بشكل لا يصدق، تم بناء هذا الدفاع البدائي الرهيب بهذه الطريقة تمامًا! علاوة على ذلك، فإن ملف ChkLic.exe الذي يبلغ طوله نصف متر ليس ضروريًا على الإطلاق! ولماذا كان يستحق سحبه من الإنترنت؟ بالمناسبة، إذا قررت حفظ توزيع المترجم (انتبه: لم أقل "توزيع"!)، فمن أجل توفير مساحة على القرص، يمكن مسح ChkLic.*: إما عن طريق حذف setup.exe، أو فصله إلى الأبد عن الوصول إليها، أو ببساطة عن طريق إنشاء ChkLic.dll الخاص بك، وتصدير وظيفة stdcall CheckValidLicence من النموذج: int CheckValidLicence(int some_flag) ( return 0;)

    حسنًا، بينما كنا نناقش كل هذا، انتهى المثبت من تثبيت المترجم وأكمل عمله بنجاح. هل من المثير للاهتمام ما إذا كان المترجم سيبدأ أم أن كل المتعة بدأت للتو؟ ننزل بشكل محموم إلى أسفل التسلسل الهرمي المتفرع للمجلدات الفرعية، ونجد icl.exe، والذي، كما هو متوقع، موجود في دليل bin، انقر فوق و... لا يبدأ المترجم بشكل طبيعي، مشيرًا إلى حقيقة أن "icl: خطأ: لم يتمكن من الخروج من ترخيص FLEX lm"، والذي بدونه لا يمكنه مواصلة عمله.

    اتضح أن Intel استخدمت حماية متعددة المستويات وتبين أن المستوى الأول كان بمثابة حماية بدائية ضد الحمقى. حسنًا! نحن نقبل هذا التحدي، واستنادًا إلى خبرتنا السابقة، نبحث تلقائيًا عن ملف LMGR*.DLL في دليل المترجم. عديم الفائدة! هذه المرة لا يوجد مثل هذا الملف هنا، ولكن اتضح أن icl.exe اكتسب وزنًا كبيرًا يتجاوز علامة الستمائة كيلو بايت... توقف! ألم يربط مطورو المترجم نفس فيلم FLEX بربط ثابت؟ دعونا نرى: في 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، إزاحة aFfrps ؛ "FFRPS"

    النص: 00401084 موف إدكس، 21 ساعة

    رسالة نصية: 00401089 اتصل بـ sub_404C0E

    النص:0040108E اختبار eax، eax

    النص:00401090 jnz قصير loc_40109A

    من الواضح أن sub_404C0E هو الإجراء الوقائي للغاية الذي يتحقق من وجود الترخيص. كيف تخدعها؟ حسنًا، هناك العديد من الخيارات... أولاً، يمكنك تحليل محتويات sub_404C0E بشكل مدروس ودقيق لمعرفة ما الذي يتحقق منه بالضبط وكيف يتحقق بالضبط. ثانيًا، يمكنك ببساطة استبدال JNZ القصير loc_40107F بـ JZ القصير loc_40107F أو حتى NOP، NOP. ثالثًا، يمكن تحويل أمر التحقق من نتيجة الإرجاع TEST EAX، EAX إلى أمر صفري: XOR EAX، EAX. رابعًا، يمكنك جعل sub_404C0E نفسه يختفي بحيث يُرجع دائمًا صفرًا. لا أعرف عنك، لكن الطريقة الثالثة أعجبتني أكثر. نقوم بتغيير بايتتين ونطلق المترجم. إذا لم تكن هناك فحوصات أخرى لـ "ترخيصه" في الحماية، فسيعمل البرنامج، وبالتالي العكس. (كما نتذكر، في الإصدار الخامس كان هناك نوعان من هذه الشيكات). والمثير للدهشة أن المترجم لم يعد يشتكي ويعمل !!! في الواقع، كما هو متوقع، فإن مطوريها لم يعززوا الحماية على الإطلاق، بل على العكس من ذلك، حتى أضعفوها! كريس كاسبيرسكي

  • أنت لست عبدا!
    دورة تعليمية مغلقة لأطفال النخبة: "الترتيب الحقيقي للعالم".
    http://noslave.org

    مادة من ويكيبيديا – الموسوعة الحرة

    إنتل C ++ مترجم
    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).
    يكتب
    مؤلف

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    مطور
    المطورين

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    وكتب على

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    واجهه المستخدم

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    نظام التشغيل
    لغات الواجهة

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    الطبعة الأولى

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    منصة الأجهزة
    احدث اصدار
    الافراج عن مرشح

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    النسخة التجريبية

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    نسخة ألفا

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    نسخة تجريبية

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    تنسيقات الملفات القابلة للقراءة

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    تنسيقات الملفات التي تم إنشاؤها

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    ولاية

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    رخصة

    الخصائص الرئيسية:

    • التوجيه لـ SSE، SSE2، SSE3، SSE4

    يدعم المترجم معيار OpenMP 3.0 لكتابة البرامج المتوازية. يحتوي أيضًا على تعديل لـ OpenMP يسمى Cluster OpenMP، والذي يمكنك من خلاله تشغيل التطبيقات المكتوبة وفقًا لـ OpenMP على مجموعات باستخدام MPI.

    يستخدم برنامج Intel C++ Compiler الواجهة الأمامية (جزء من برنامج التحويل البرمجي الذي يقوم بتوزيع البرنامج المترجم) من Edison Design Group. يتم استخدام نفس الواجهة الأمامية بواسطة مترجمي SGI MIPSpro وComeau C++ وPortland Group.

    يستخدم هذا المترجم على نطاق واسع لتجميع معايير SPEC CPU.

    هناك 4 سلاسل من المنتجات من Intel تحتوي على المترجم:

    • الإصدار الاحترافي من برنامج Intel C++ Compiler
    • مجموعة أدوات Intel Cluster (إصدار المترجم)

    تشمل عيوب إصدار Linux من المترجم عدم التوافق الجزئي مع امتدادات GNU للغة C (المدعومة من قبل المترجم الخليجي)، مما قد يسبب مشاكل عند ترجمة بعض البرامج.

    الخيارات التجريبية

    تم نشر الإصدارات التجريبية التالية من المترجم:

    • إصدار النموذج الأولي للمترجم من Intel STM بتاريخ 17 سبتمبر 2007. دعم ذاكرة المعاملات البرمجية (STM). تم إصداره لنظامي التشغيل Linux وWindows، فقط لـ IA-32 (معالجات x86)؛
    • مجموعات Intel المتزامنة لـ C/C++ 0.3 اعتبارًا من سبتمبر 2008. يحتوي على آليات تسهل كتابة برامج C++ المتوازية.

    الأعلام الأساسية

    شبابيك لينكس، ماك أو إس إكس وصف
    /Od -O0 تعطيل التحسينات
    /O1 -O1 الأمثل لتقليل حجم الملف القابل للتنفيذ
    /O2 -O2 الأمثل للسرعة. وشملت بعض التحسينات
    /O3 -O3 تمكين كافة التحسينات من O2. قم أيضًا بإجراء تحسينات الدورة المكثفة
    /Oip -Oip تمكين تحسين الإجراءات لكل ملف على حدة
    / أويبو -أويبو تمكين التحسين العالمي بين الإجراءات
    /QxO -xO السماح باستخدام امتدادات SSE3 وSSE2 وSSE للمعالجات المصنعة من قبل أي شركة
    /سريع -سريع "وضع سريع". يعادل الخيارين "/O3 /Qipo /QxHost /no-prec-div" على نظام التشغيل Windows و"-O3 -ipo -static -xHOST -no-prec-div" على نظام التشغيل Linux. يرجى ملاحظة أن علامة "-xHOST" تعني تحسين المعالج الذي يعمل عليه المترجم.
    /Qprof-gen -prof_gen قم بإنشاء نسخة مُجهزة من البرنامج والتي ستقوم بتجميع ملف تعريف الأداء
    /Qprof-use -prof_use استخدم معلومات الملف الشخصي من عمليات إطلاق البرنامج التي تم جمعها باستخدام علامة prof_gen.

    اكتب مراجعة عن مقالة "مترجم Intel C++"

    ملحوظات

    أنظر أيضا

    روابط

    مقتطف يميز مترجم Intel C++

    وأيضًا، عادت لرؤية الساحر الأبيض للمرة الأخيرة... زوجها وصديقها الحقيقي، الذي لا يمكن أن تنساه أبدًا. في قلبها غفرت له. لكن، ولأسفه الشديد، لم تستطع أن تقدم له مغفرة المجدلية... لذا، كما ترى، يا إيسيدورا، فإن الحكاية المسيحية العظيمة عن "المغفرة" هي مجرد كذبة طفولية للمؤمنين الساذجين، من أجل السماح لهم بذلك. لفعل أي شر، مع العلم أنه بغض النظر عما يفعلونه، فسوف يغفر لهم في النهاية. لكن لا يمكنك أن تسامح إلا ما يستحق المغفرة حقًا. يجب على الإنسان أن يفهم أنه يجب عليه الرد على أي شر يرتكب... وليس أمام إله غامض، ولكن أمام نفسه، مما يجبر نفسه على المعاناة بقسوة. لم تغفر ماجدالينا فلاديكا، رغم أنها تحترمه بشدة وأحبته بصدق. تمامًا كما فشلت في مسامحتنا جميعًا على الموت الرهيب لرادومير. بعد كل شيء، لقد فهمت أفضل من أي شخص آخر - كان بإمكاننا مساعدته، وكان بإمكاننا إنقاذه من الموت القاسي... لكننا لم نرغب في ذلك. نظرًا لأن ذنب الساحر الأبيض كان قاسيًا للغاية، فقد تركته ليعيش مع هذا الذنب، دون أن ينساه لمدة دقيقة... لم ترغب في منحه العفو السهل. لم نرها مرة أخرى. تمامًا كما لو أنهم لم يروا أطفالهم أبدًا. ومن خلال أحد فرسان معبدها - ساحرنا - نقلت المجدلية إجابة الرب على طلبه بالعودة إلينا: "الشمس لا تشرق مرتين في نفس اليوم... فرحة عالمك (رادومير) سوف لن أعود إليك أبدًا، تمامًا كما لن أعود إليك وأنا... لقد وجدت إيماني وحقيقتي، إنهما على قيد الحياة، لكن إيمانك مات... احزن على أبنائك - لقد أحبوك. لن أسامحك أبدًا على موتهم وأنا على قيد الحياة. وليبقى ذنبك معك. ربما تأتيك يومًا ما بالنور والمغفرة... لكن ليس مني." لم يتم إحضار رأس المجوس جون إلى ميتيورا لنفس السبب - لم يرغب أي من فرسان المعبد في العودة إلينا... لقد فقدناهم، كما فقدنا العديد من الآخرين أكثر من مرة، الذين لم يرغبوا في ذلك. افهم واقبل ضحايانا... من فعل مثلك تمامًا - لقد غادروا وأدانونا.
    كان رأسي يدور!.. مثل شخص عطشان، أروي جوعي الأبدي للمعرفة، استوعبت بجشع تدفق المعلومات المذهلة التي قدمها لي الشمال بسخاء... وأردت المزيد!.. أردت أن أعرف كل شيء لكي أعرفه. النهاية. لقد كانت نسمة ماء عذبة في صحراء محروقة بالآلام والمتاعب! ولم أكتفي منه..
    – لدي آلاف الأسئلة! لكن لم يبق وقت... ماذا أفعل يا شمال؟..
    - اسأل يا إيسيدورا!.. اسأل سأحاول أن أجيبك...
    – أخبرني يا سيفر، لماذا يبدو لي أن هذه القصة تبدو وكأنها تجمع بين قصتين من قصص الحياة، تتشابكان مع أحداث متشابهة، ويتم تقديمهما على أنها حياة شخص واحد؟ أم أنني لست على حق؟
    - أنت على حق تماما، إيزيدورا. كما قلت لك سابقًا، فإن "قوى هذا العالم"، التي خلقت التاريخ الزائف للبشرية، "وضعت" على حياة المسيح الحقيقية الحياة الغريبة للنبي اليهودي يشوع، الذي عاش قبل ألف ونصف عام ( من زمن قصة الشمال). وليس نفسه فقط، بل أيضًا عائلته وأقاربه وأصدقائه وأصدقائه وأتباعه. بعد كل شيء، كانت زوجة النبي جوشوا، مريم اليهودية، التي كان لها أخت مارثا وأخ لعازر، أخت والدته ماريا يعقوب، وغيرهم ممن لم يكونوا بالقرب من رادومير وماجدالين. كما لم يكن هناك "رسل" آخرين بجانبهم: بولس ومتى وبطرس ولوقا والبقية...
    لقد كانت عائلة النبي يشوع هي التي انتقلت منذ ألف ونصف سنة إلى بروفانس (التي كانت تسمى في تلك الأيام بلاد الغال العابرة لجبال الألب)، إلى مدينة ماساليا اليونانية (مارسيليا الحالية)، إذ كانت ماساليا في ذلك الوقت هي المدينة "البوابة" بين أوروبا وآسيا، وكانت الطريق الأسهل لجميع "المضطهدين" لتجنب الاضطهاد والمتاعب.



    
    قمة