الإصدار الثامن من مترجمي إنتل. برامج التحويل البرمجي لمنصة Microsoft Windows

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

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

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

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

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

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

كتبت في

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

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

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

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

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

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

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

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

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

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

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

نسخة ألفا

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

نسخة تجريبية

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

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

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

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

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

ولاية

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

رخصة

دلائل الميزات:

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

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

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

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

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

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

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

المتغيرات التجريبية

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

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

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

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

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

ملحوظات

أنظر أيضا

الروابط

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

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

مقدمة في أواخر عام 2003 ، قدمت إنتل الإصدار 8.0 من مجموعة المترجم. تم تصميم برامج التحويل البرمجي الجديدة لتحسين أداء التطبيقات التي تعمل على الخوادم وأجهزة سطح المكتب و الأنظمة المتنقلة(أجهزة الكمبيوتر المحمولة والهواتف المحمولة وأجهزة المساعد الرقمي الشخصي) بناءً على معالجات إنتل. يسعدنا أن نلاحظ أن هذا المنتج قد تم إنشاؤه بمشاركة نشطة من موظفي مركز تطوير برامج Nizhny Novgorod Intel ومتخصصي Intel من Sarov.

تتضمن السلسلة الجديدة مترجمي Intel لـ C ++ و Fortran لنظامي التشغيل Windows و Linux ، بالإضافة إلى مترجمي Intel لـ C ++ لنظام التشغيل Windows CE .NET. يستهدف المترجمون الأنظمة القائمة على معالجات Intel التالية: Intel Itanium 2 و Intel Xeon و Intel Pentium 4 ومعالجات Intel Personal Internet Client Architecture للهواتف المحمولة وأجهزة المساعد الرقمي الشخصي ومعالج Intel Pentium M لأجهزة الكمبيوتر المحمولة (أحد مكونات تقنية Intel Centrino للهواتف المحمولة).

يوفر مترجم Intel Visual Fortran لنظام التشغيل Windows تقنيات تجميع من الجيل التالي للحوسبة عالية الأداء. فهو يجمع بين وظائف لغة Compaq Visual Fortran (CVF) مع تحسينات الأداء التي أمكن تحقيقها بفضل تقنيات تحسين التجميع وإنشاء الكود من Intel وتبسط مهمة النقل مصدر الرمز، تم تطويره باستخدام CVF ، في بيئة Intel Visual Fortran. هذا المترجم هو الأول الذي ينفذ وظائف CVF لكل من أنظمة وأنظمة Intel 32 بت القائمة على عائلة معالجات Intel Itanium التي تعمل في بيئة Windows. بالإضافة إلى ذلك ، يسمح لك هذا المترجم بتنفيذ وظائف لغة CVF على أنظمة Linux استنادًا إلى معالجات Intel 32 بت وعائلة معالجات Intel Itanium. في عام 2004 ، من المخطط إطلاق نسخة موسعة من هذا المترجم - مترجم Intel Visual Fortran Compiler Professional Edition لنظام التشغيل Windows ، والذي سيتضمن مكتبة IMSL Fortran 5.0 التي طورتها شركة Visual Numerics ، Inc.


"تدعم المجمعات الجديدة أيضًا معالجات Intel القادمة ، والتي تحمل الاسم الرمزي Prescott ، والتي توفر أوامر جديدة لتحسين أداء الرسومات والفيديو ، بالإضافة إلى تحسينات أخرى في الأداء. كما أنها تدعم تكنولوجيا جديدةقال أليكسي أودينوكوف ، المدير المشارك لمركز تطوير برمجيات إنتل في نيجني نوفغورود ، إن Mobile MMX (tm) ، الذي يحسن بالمثل أداء تطبيقات الرسوم والصوت والفيديو للهواتف المحمولة وأجهزة المساعد الرقمي الشخصي. - توفر هذه المجمعات لمطوري التطبيقات مجموعة واحدة من الأدوات لإنشاء تطبيقات جديدة لـ الشبكات اللاسلكيةعلى أساس معمارية إنتل. تدعم مجمعات Intel الجديدة أيضًا تقنية Hyper-Threading من Intel ومواصفات الصناعة OpenMP 2.0 ، والتي تحدد استخدام التوجيهات مستوى عالللتحكم في تدفق التعليمات في التطبيقات ".

من بين الأدوات الجديدة المضمنة في المجمعات هي Intel Code Coverage و Intel Test Prioritization tools. تساعد هذه الأدوات معًا في تسريع تطوير التطبيقات وتحسين جودة التطبيق من خلال تحسين عملية الاختبار. برمجة.

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

تأتي برامج التحويل البرمجي الجديدة من Intel في مجموعة متنوعة من التكوينات تتراوح من 399 دولارًا إلى 1499 دولارًا. يمكن شراؤها اليوم من شركة Intel أو من البائعين حول العالم ، والتي توجد قائمة بها على الموقع. http://www.intel.com/software/products/reseller.htm#Russia.

دعم معالجات بريسكوت

دعم معالج Intel Pentium 4 (Prescott) في الإصدار الثامن من المترجم كما يلي:

1. دعم أوامر SSE3 (أو PNI ، تعليمات بريسكوت الجديدة). هناك ثلاث طرق لإبرازها هنا:

أ. إدراج المجمع (التجميع المضمن). على سبيل المثال ، سيتعرف المترجم على الاستخدام التالي للأمر SSE3 _asm (addubpd xmm0، xmm1). وبالتالي ، يمكن للمستخدمين المهتمين بالتحسين منخفض المستوى الوصول مباشرة إلى أوامر المجمع.

ب. في مترجم C / C ++ ، تتوفر إرشادات جديدة من مستوى أعلى من استخدام إدراجات المجمّع. وهي من خلال الوظائف المضمنة (الوظائف الجوهرية):

وظائف مدمجة

وظيفة مدمجةولدت الأمر
_mm_addsub_psيضيف
_mm_hadd_psالحدب
_mm_hsub_psمسوبس
_mm_moveldup_psموفسدوب
_mm_movehdup_psموفشدوب
_mm_addsub_pdAddsubpd
_mm_hadd_pdحدبد
_mm_hsub_pdhsubpd
_mm_loaddup_pdموفدوب xmm ، m64
_mm_movedup_pdموفدوب ريج ، ريج
_mm_lddqu_si128Lddqu

يوضح الجدول الوظائف المضمنة وتعليمات المجمع المقابلة من مجموعة SSE3. يوجد نفس الدعم للأوامر من مجموعات MMX \ SSE \ SSE2. يسمح هذا للمبرمج بأداء تحسين الكود منخفض المستوى دون اللجوء إلى برمجة لغة التجميع: يعتني المترجم نفسه بتعيين (تعيين "هـ) الوظائف المضمنة لتعليمات المعالج المقابلة والاستخدام الأمثل للسجلات. يمكن للمبرمج ركز على إنشاء خوارزمية تستخدم بشكل فعال مجموعات تعليمات جديدة.

الخامس. التوليد التلقائي للأوامر الجديدة بواسطة المترجم. تتضمن الطريقتان السابقتان استخدام أوامر جديدة من قبل المبرمج. لكن المترجم قادر أيضًا (باستخدام الخيارات المناسبة - انظر القسم 3 أدناه) على إنشاء تعليمات جديدة تلقائيًا من مجموعة SSE3 لرمز C / C ++ و Fortran. على سبيل المثال ، أمر التحميل المحسن غير المحاذي (lddqu) ، والذي يسمح لك بالحصول على مكاسب في الأداء تصل إلى 40٪ (على سبيل المثال ، في مهام ترميز الفيديو والصوت). تسمح لك الأوامر الأخرى من مجموعة SSE3 بالحصول على تسريع كبير في مهام الرسومات ثلاثية الأبعاد أو المهام الحسابية باستخدام أرقام معقدة. على سبيل المثال ، يوضح الرسم البياني في القسم 3.1 أدناه أنه بالنسبة لتطبيق 168.wupwise من مجموعة SPEC CPU2000 FP ، كانت السرعة التي تم الحصول عليها من الإنشاء التلقائي لتعليمات SSE3 حوالي 25٪. يعتمد أداء هذا التطبيق بشكل كبير على سرعة حساب العدد المركب.

2. استخدام المزايا المعمارية الدقيقة لمعالج بريسكوت. عند إنشاء الكود ، يأخذ المترجم في الاعتبار التغييرات المعمارية الدقيقة في المعالج الجديد. على سبيل المثال ، بعض العمليات (مثل إزاحة الأعداد الصحيحة ، أو مضاعفات الأعداد الصحيحة ، أو تحويلات الأرقام بين تنسيقات الفاصلة العائمة المختلفة في SSE2) تكون أسرع على المعالج الجديد مقارنة بالإصدارات السابقة (على سبيل المثال ، يستغرق التحول الصحيح الآن دورة معالج واحدة مقابل أربعة لـ الإصدار السابق) معالج إنتل بنتيوم 4). يسمح لك الاستخدام المكثف لهذه الأوامر بالحصول على تسريع كبير للتطبيقات.
مثال آخر على التغييرات المعمارية الدقيقة هو آلية إعادة توجيه المتجر المحسّنة (التحميل السريع للبيانات المخزنة مسبقًا في الذاكرة) ؛ لا يحدث الحفظ الحقيقي حتى في ذاكرة التخزين المؤقت ، ولكن في بعض المخزن المؤقت للحفظ الوسيط ، والذي يسمح بعد ذلك بالوصول السريع جدًا إلى البيانات. مثل هذه الميزة في البنية تجعل من الممكن ، على سبيل المثال ، تنفيذ توجيه تلقائي أكثر عدوانية لرمز البرنامج.
يأخذ المحول البرمجي في الاعتبار أيضًا زيادة حجم ذاكرة التخزين المؤقت في المستويين الأول والثاني.

3. تحسين الدعم لتقنية خيوط المعالجة المتعددة. قد يكون هذا العنصر مرتبطًا بالعنصر السابق - التغييرات المعمارية الدقيقة واستخدامها في المترجم. على سبيل المثال ، تم تحسين مكتبة وقت التشغيل التي تدعم مواصفات صناعة OpenMP لتعمل على المعالج الجديد.

أداء

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


1.1 تحسين البرامج عن طريق إعادة ترجمة إعدادات المحول البرمجي وتغييرها


غالبًا ما تكون الخطوة الأولى في الانتقال إلى مترجم محسن جديد هي استخدامه مع الإعدادات الافتراضية. الخطوة المنطقية التالية هي استخدام خيارات لتحسين أكثر قوة. توضح الأشكال 1 و 2 و 3 و 4 تأثير التحول إلى الإصدار 8.0 من برنامج التحويل البرمجي Intel مقارنة باستخدام المنتجات الأخرى الرائدة في الصناعة (-O2 - إعدادات المحول البرمجي الافتراضية ، قاعدة - الإعدادات قيد التشغيل الاداء العالي). تم إجراء المقارنة على معماريات 32 بت و 64 بت إنتل. يتم استخدام التطبيقات من SPEC CPU2000 كمجموعة اختبار.


الصورة 1




الشكل 2




الشكل 3




الشكل 4


بعض الخيارات مذكورة أدناه (فيما يلي ، الخيارات لعائلة نظام التشغيل Windows ؛ بالنسبة لعائلة نظام التشغيل Linux ، هناك خيارات لها نفس التأثير ، ولكن قد يختلف الاسم ؛ على سبيل المثال ، -Od أو QxK لنظام التشغيل Windows لهما تأثير مماثل مع -O0 أو -xK لنظام التشغيل Linux على التوالي ، أكثر معلومات مفصلةيمكن العثور عليها في دليل المترجم) بدعم من مترجم إنتل.


التحكم في مستويات التحسين: خيارات -Od (لا توجد تحسينات ؛ تستخدم لبرامج تصحيح الأخطاء) ، -O1 (السرعة القصوى مع تقليل حجم الشفرة) ، -O2 (تحسين سرعة تنفيذ التعليمات البرمجية ؛ تُستخدم افتراضيًا) ، -O3 (تتيح أكثر التحسينات قوة لتنفيذ التعليمات البرمجية السرعة ؛ في بعض الحالات يمكن أن يؤدي إلى تأثير معاكس ، أي إلى تباطؤ ؛ وتجدر الإشارة إلى أنه في IA-64 ، يؤدي استخدام -O3 إلى التسارع في معظم الحالات ، في حين أن التأثير الإيجابي على IA-32 يكون أقل وضوحًا ). من أمثلة التحسينات التي تم تمكينها بواسطة -O3 تبادل الحلقة ، ودمج الحلقة ، وتوزيع الحلقة (تحسين اندماج الحلقة العكسية) ، والجلب المسبق للبيانات. قد يكون السبب في إمكانية البطء عند استخدام -O3 هو أن المترجم استخدم نهجًا إرشاديًا لاختيار التحسين القوي لـ حالة محددة، دون الحصول على معلومات كافية حول البرنامج (على سبيل المثال ، إنشاء تعليمات الجلب المسبق للبيانات المستخدمة في الحلقة ، مع الاعتقاد بأن الحلقة يتم تنفيذها عددًا كبيرًا من المرات ، بينما في الواقع لها عدد قليل من التكرارات). يمكن أن يساعد تحسين التنميط بين الإجراءات ، بالإضافة إلى مجموعة متنوعة من "تلميحات" المبرمجين (انظر القسم 3.2) في هذه الحالة.

التحسين بين الإجراءات: -Qip (داخل ملف واحد) و -Qipo (ضمن العديد من ملفات المشروع أو جميعها). يتضمن تحسينات مثل ، على سبيل المثال ، الاستبدال المضمن للكود المستخدم بشكل متكرر (تقليل تكلفة استدعاء وظيفة / إجراء). يمثل المعلومات لمراحل أخرى من التحسين - على سبيل المثال ، معلومات حول الحد الأعلى للحلقة (على سبيل المثال ، إذا كان ثابتًا لوقت الترجمة محددًا في ملف واحد ، ولكنه مستخدم في العديد) أو معلومات حول محاذاة البيانات في الذاكرة (العديد من MMX تعمل أوامر \ SSE \ SSE2 \ SSE3 بشكل أسرع إذا تمت محاذاة المعاملات في الذاكرة على حد 8 أو 16 بايت). يتم تمرير تحليل إجراءات تخصيص الذاكرة (المنفذة / التي تم استدعاؤها في أحد ملفات المشروع) إلى تلك الوظائف / الإجراءات حيث يتم استخدام هذه الذاكرة (يمكن أن يساعد ذلك المترجم على التخلي عن الافتراض المحافظ بأن البيانات غير محاذاة بشكل صحيح في الذاكرة ؛ ويجب أن يكون الافتراض متحفظًا في حالة عدم وجود معلومات إضافية). يمكن أن يكون توضيح تحليل الأسماء المستعارة للبيانات بمثابة مثال آخر: في حالة عدم وجود معلومات إضافية واستحالة إثبات عدم وجود التقاطعات ، ينطلق المترجم من الافتراض المحافظ بوجود التقاطعات. يمكن أن يؤثر مثل هذا القرار سلبًا على جودة مثل هذه التحسينات ، على سبيل المثال ، التوجيه التلقائي على IA-32 أو خطوط أنابيب البرامج (خطوط أنابيب البرامج أو SWP) في IA-64. يمكن أن يساعد التحسين بين الإجراءات في تحليل وجود تقاطعات الذاكرة.

التحسين التنميط: يتضمن ثلاث مراحل. 1) إنشاء كود آلي باستخدام الخيار -Qprof_gen. 2) يتم تشغيل الكود الناتج على البيانات التمثيلية ، أثناء التشغيل ، يتم جمع المعلومات حول الخصائص المختلفة لتنفيذ الكود (على سبيل المثال ، احتمالات الانتقال أو القيمة النموذجية لعدد تكرارات الحلقة). 3) إعادة التحويل البرمجي باستخدام الخيار -Qprof_use ، والذي يضمن أن يستخدم المترجم المعلومات التي تم جمعها في الخطوة السابقة. وبالتالي ، فإن المترجم لديه القدرة على استخدام ليس فقط التقديرات الثابتة لخصائص البرنامج الهامة ، ولكن أيضًا البيانات التي تم الحصول عليها أثناء التشغيل الحقيقي للبرنامج. يمكن أن يساعد ذلك في الاختيار اللاحق لبعض التحسينات (على سبيل المثال ، ترتيب أكثر كفاءة في ذاكرة الفروع المختلفة للبرنامج ، بناءً على معلومات حول الفروع التي تم تنفيذها وبأي تردد ؛ أو تطبيق تحسين على حلقة بناءً على معلومات حول العدد النموذجي للتكرارات فيه). يعد تحسين التوصيف مفيدًا بشكل خاص عندما يكون من الممكن تحديد مجموعة بيانات صغيرة ولكنها تمثيلية (للخطوة رقم 2) توضح جيدًا حالات الاستخدام المستقبلية الأكثر شيوعًا للبرنامج. في بعض مجالات الموضوعات ، يكون اختيار مثل هذه المجموعة التمثيلية ممكنًا تمامًا. على سبيل المثال ، يستخدم مطورو نظم إدارة قواعد البيانات (DBMS) تحسين التنميط.

التحسينات المذكورة أعلاه هي من النوع العام ، أي سيعمل الكود الذي تم إنشاؤه على جميع المعالجات المختلفة للعائلة (على سبيل المثال ، في حالة بنية 32 بت ، على جميع المعالجات التالية: Intel Pentium-III و Pentium 4 ، بما في ذلك نواة Prescott و Intel Pentium M). هناك أيضًا تحسينات لمعالج معين.

تحسينات خاصة بالمعالج: -QxK (Pentium-III ؛ استخدام أوامر SSE ، خصائص البنية الدقيقة) ، -QxW و -QxN (بنتيوم 4 ؛ استخدام أوامر SSE و SSE2 ، خصائص الهندسة الدقيقة) ، -QxB (بنتيوم M ؛ استخدام أوامر SSE و SSE2 ، تفاصيل الهندسة المعمارية الدقيقة)) ، QxP (بريسكوت ؛ استخدام أوامر SSE و SSE2 و SSE3 وميزات الهندسة الدقيقة). في هذه الحالة ، قد لا يعمل الرمز الذي تم إنشاؤه باستخدام هذه الخيارات مع ممثلين آخرين لعائلة المعالج (على سبيل المثال ، قد يؤدي رمز QxW إلى تنفيذ أمر غير صالح إذا تم تنفيذه على نظام يعتمد على Intel Pentium-III المعالج). أو لا تعمل بأقصى قدر من الكفاءة (على سبيل المثال ، كود QxB على معالج Pentium 4 بسبب الاختلافات في الهندسة المعمارية الدقيقة). باستخدام هذه الخيارات ، من الممكن أيضًا استخدام مكتبات وقت التشغيل المحسّنة لمعالج معين باستخدام مجموعة التعليمات الخاصة به. للتحكم في تنفيذ الكود فعليًا على المعالج الهدف ، يتم تنفيذ آلية إرسال (إرسال وحدة المعالجة المركزية): فحص المعالج أثناء تنفيذ البرنامج. في حالات مختلفة ، يمكن تنشيط هذه الآلية أم لا. يتم استخدام الإرسال دائمًا إذا تم استخدام تباين الخيار -Qax (KWNP). في هذه الحالة ، يتم إنشاء نسختين من الكود: محسن لمعالج معين و "عام" (عام) ، يحدث الاختيار أثناء تنفيذ البرنامج. وبالتالي ، من خلال زيادة حجم الكود ، من الممكن تحقيق تنفيذ البرنامج على جميع معالجات الخط والتنفيذ الأمثل على المعالج الهدف. خيار آخر هو استخدام تحسين الكود للممثل السابق للخط واستخدام هذا الرمز في هذا والمعالجات اللاحقة. على سبيل المثال ، يمكن تشغيل كود -QxN على Pentium 4 مع كل من نواة Northwood و Prescott. لا توجد زيادة في حجم الكود. باستخدام هذا النهج ، يمكنك الحصول على أداء جيد ، ولكن لا يزال غير مثالي على نظام به معالج بريسكوت (نظرًا لعدم استخدام SSE3 وعدم أخذ اختلافات الهندسة الدقيقة في الاعتبار) مع الأداء الأمثل في Northwood. توجد خيارات مماثلة أيضًا لمعالجات هندسة IA-64. على هذه اللحظةيوجد اثنان منهم: -G1 (إيتانيوم) و -G2 (إيتانيوم 2 ؛ الخيار الافتراضي).

يوضح الرسم البياني أدناه (الشكل 5) التسريع (بناءً على واحد - بدون تسريع) من استخدام بعض التحسينات المذكورة أعلاه (أي -O3 -Qipo -Qprof_use -Qx (N ، P)) على معالج بريسكوت مقارنة بالإعدادات الافتراضية (-O2). يساعد استخدام -QxP في بعض الحالات في الحصول على تسريع مقارنة بـ -QxN. يتم تحقيق أكبر تسريع في تطبيق 168.wupwise المذكور بالفعل في القسم السابق (بسبب التحسين المكثف للحسابات المعقدة باستخدام تعليمات SSE3).


الشكل 5


يوضح الشكل 6 أدناه نسبة سرعة الكود (في مرات) الإعدادات المثلىمقارنةً بالشفرة غير المحسّنة تمامًا (-Od) في معالجات Pentium 4 و Itanium 2. يمكن ملاحظة أن Itanium 2 يعتمد أكثر على جودة التحسين. هذا واضح بشكل خاص لحسابات النقطة العائمة (FP) ، حيث تكون النسبة حوالي 36 مرة. حسابات الفاصلة العائمة هي نقطة قويةمعماريات IA-64 ، ولكن يجب توخي الحذر لاستخدام إعدادات المترجم الأكثر كفاءة. المكسب الناتج في الإنتاجية يدفع مقابل العمل الذي يتم إنفاقه في العثور عليها.


الشكل 6. التسريع عند استخدام أفضل خيارات التحسين SPEC CPU200


يدعم مترجمي إنتل مواصفات صناعة OpenMP لبناء تطبيقات متعددة الخيوط. يتم دعم الموازاة الصريحة (الخيار -Qopenmp) والتوازي التلقائي (الموازي). في حالة الوضع الصريح ، يكون المبرمج مسؤولاً عن الاستخدام الصحيح والفعال لمعيار OpenMP. في حالة الموازاة التلقائية ، يتحمل المترجم عبئًا إضافيًا مرتبطًا بتحليل كود البرنامج. لهذا السبب ، في الوقت الحاضر ، تعمل الموازاة التلقائية بشكل فعال فقط على أكواد بسيطة إلى حد ما.

يوضح الرسم البياني في الشكل 7 التسارع من استخدام التوازي الصريح في نظام عينة هندسي (ما قبل الإنتاج) استنادًا إلى معالج Intel Pentium 4 (Prescott) مع دعم تقنية Hyper-Threading: 2.8 جيجا هرتز ، ذاكرة وصول عشوائي 2 جيجا بايت ، 8K L1-Cache ، 512K L2-Cache. يتم استخدام SPEC OMPM2001 كمجموعة اختبار. تركز هذه المجموعة على أنظمة SMP الصغيرة والمتوسطة ، يصل استهلاك الذاكرة إلى 2 جيجا بايت. تم تجميع التطبيقات باستخدام Intel 8.0 C / C ++ و Fortran مع مجموعتين من الخيارات: -Qopenmp -Qipo -O3 -QxN و -Qopenmp -Qipo -O3 -QxP ، حيث بدأ كل منها مع تفعيل Hyper-Threading وتعطيله . يتم تسوية قيم التسارع على الرسم البياني لأداء الإصدار أحادي السلسلة مع تعطيل Hyper-Threading.


الشكل 7: تطبيقات من مجموعة SPEC OMPM2001 على معالج بريسكوت


يمكن ملاحظة أنه في 9 من 11 حالة ، فإن استخدام التوازي الصريح باستخدام OpenMP يعطي دفعة للأداء عند تمكين تقنية Hyper-Threading. يواجه تطبيق واحد (312.swim) تباطؤًا. ومن المعروف أن هذا التطبيق يتميز بدرجة عالية من الاعتماد عليه عرض النطاقذاكرة. كما هو الحال مع SPEC CPU2000 ، يستفيد wupwise بشكل كبير من تحسينات Prescott (-QxP).


1.2 تحسين البرامج بالتغييرات في الكود المصدري واستخدام تشخيصات المترجم


في الأقسام السابقة ، درسنا تأثير المترجم (وإعداداته) على سرعة تنفيذ الكود. في الوقت نفسه ، توفر برامج التحويل البرمجي من Intel المزيد من الفرص لتحسين الكود أكثر من مجرد تغيير الإعدادات. على وجه الخصوص ، تسمح المجمعات للمبرمج بعمل "تلميحات" في كود البرنامج ، والتي تسمح بتوليد كود أكثر كفاءة من حيث الأداء. فيما يلي بعض الأمثلة للغة C / C ++ (توجد أدوات مماثلة للغة فورتران ، تختلف فقط في بناء الجملة).

يتم استخدام #pragma ivdep (حيث تعني ivdep تجاهل تبعيات المتجه) قبل حلقات البرنامج لإخبار المترجم بعدم وجود تبعيات للبيانات بالداخل. يعمل هذا التلميح عندما يفترض المحول البرمجي (استنادًا إلى التحليل) بشكل متحفظ أن مثل هذه التبعيات يمكن أن توجد (إذا كان بإمكان المترجم إثبات وجود التبعية نتيجة للتحليل ، فلن يكون لـ "التلميح" أي تأثير) ، بينما مؤلف الكود يعلم أن مثل هذه التبعيات لا يمكن أن تنشأ. باستخدام هذا التلميح ، يمكن للمجمع إنشاء كود أكثر كفاءة: التوجيه التلقائي لـ IA-32 (باستخدام تعليمات المتجه من مجموعات MMX \ SSE \ SSE2 \ SSE3 لحلقات برنامج C / C ++ و Fortran ؛ يمكنك معرفة المزيد حول هذه التقنية ، من أجل المثال التالي مقال في مجلة Intel Technology Journal) ، خطوط الأنابيب البرمجية (SWP) لـ IA-64.

يتم استخدام متجه #pragma دائمًا لإجبار المترجم على تغيير القرار بشأن عدم كفاءة توجيه الحلقة (كلاهما آلي لـ IA-32 و SWP لـ IA-64) ، بناءً على تحليل الخصائص الكمية والنوعية للعمل في كل تكرار.

#pragma novector يفعل عكس # متجه براغما دائمًا.

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

# متجه براغما غير محاذي يقوم بعكس محاذاة براغما. من الصعب التحدث عن مكاسب الأداء في هذه الحالة ، ولكن يمكنك الاعتماد على رمز أكثر إحكاما.

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

يتم استخدام #pragma loop count (N) لإخبار المترجم أن القيمة الأكثر احتمالاً لعدد مرات تكرار الحلقة ستكون N. تساعد هذه المعلومات في اتخاذ قرار بشأن التحسين الأكثر فاعلية لهذه الحلقة (على سبيل المثال ، ما إذا كان سيتم إلغاء التمرير) ، سواء كنت تريد إجراء SWP أو التحويل التلقائي ، سواء لاستخدام أوامر الجلب المسبق لبيانات البرامج ، ...)

يتم استخدام "تلميح" _assume_aligned (p ، base) لإخبار المترجم أن منطقة الذاكرة المرتبطة بالمؤشر p محاذاة على قاعدة = 2 ^ n حد بايت.

هذا بعيد عن القائمة الكاملة"تلميحات" مختلفة للمترجم ، والتي يمكن أن تؤثر بشكل كبير على كفاءة الشفرة المولدة. قد ينشأ السؤال حول كيفية تحديد أن المترجم يحتاج إلى تلميح.

أولاً ، يمكنك استخدام تشخيص المترجم في شكل تقارير يقدمها للمبرمج. على سبيل المثال ، باستخدام الخيار -Qvec_reportN (حيث يختلف N من 0 إلى 3 ويمثل مستوى التفاصيل) يمكنك الحصول على تقرير اتجاهي تلقائي. سيتمكن المبرمج من الوصول إلى المعلومات حول الحلقات التي تم توجيهها والتي لم يتم تحويلها. خلاف ذلك ، يقوم المترجم بالإبلاغ عن أسباب فشل التوجيه. لنفترض أن السبب كان اعتمادًا متحفظًا على البيانات. في هذه الحالة ، إذا كان المبرمج متأكدًا من عدم إمكانية حدوث التبعية ، فيمكن استخدام #pragma ivdep. يوفر المترجم قدرات مماثلة (مقارنة مع Qvec_reportN لـ IA-32) على IA-64 للتحكم في وجود وفعالية SWP. بشكل عام ، توفر برامج التحويل البرمجي لـ Intel فرصًا كبيرة لتشخيص التحسينات.

ثانيًا ، يمكن استخدام منتجات البرامج الأخرى (مثل ملف تعريف Intel VTune) للعثور على معوقات الأداء في الكود. يمكن أن تساعد نتائج التحليل المبرمج في إجراء التغييرات اللازمة.

يمكنك أيضًا استخدام قائمة التعليمات البرمجية المجمعة التي تم إنشاؤها بواسطة المترجم للتحليل.


الشكل 8


يوضح الشكل 8 أعلاه العملية خطوة بخطوة لتحسين تطبيق باستخدام مترجم (وغير ذلك منتجات البرمجيات) Intel بلغة Fortran لهندسة IA-64. على سبيل المثال ، يتم النظر في مخطط تنبؤ إقليمي غير ثابت الحرارة لمدة 48 ساعة من مركز Roshydrometcenter (يمكنك أن تقرأ عنه ، على سبيل المثال ، في هذه المقالة. تتحدث المقالة عن وقت الحساب الذي يبلغ حوالي 25 دقيقة ، ولكن حدثت تغييرات كبيرة منذ أن تمت كتابته. يتم أخذ أداء الكود كنقطة بداية على نظام Cray-YMP أظهر الكود غير المعدل مع خيارات المحول البرمجي الافتراضية (-O2) زيادة في الأداء بنسبة 20٪ على نظام رباعي الاتجاهات يعتمد على Intel Itanium 2900 ميجاهرتز أدى تطبيق المعالج لتحسين أكثر قوة (-O3) إلى تسريع بمقدار 2.5x تقريبًا دون تغيير الكود ، ويرجع ذلك أساسًا إلى SWP وتحليل الجلب المسبق للبيانات باستخدام تشخيصات المجمّع وكشف ملف تعريف Intel VTune عن بعض الاختناقات على سبيل المثال ، لم يقم المحول البرمجي برمجيًا بتوجيه عدة أداء- الحلقات الحرجة ، والإبلاغ في التقرير أنه يشير إلى الاعتماد على البيانات. ساعدت التغييرات الصغيرة في الكود (التوجيه IVDEP) في تحقيق التأثير نقل نشط. باستخدام منشئ ملفات التعريف VTune ، وجد (وأكد تقرير المترجم ذلك) أن المترجم لم يغير ترتيب الحلقات المتداخلة (تبادل الحلقة) لاستخدام أكثر كفاءة لذاكرة التخزين المؤقت. كان السبب مرة أخرى افتراضات متحفظة حول الاعتماد على البيانات. تم إجراء تغييرات في التعليمات البرمجية المصدر للبرنامج. نتيجة لذلك ، تمكنا من تحقيق تسارع بمقدار 4 أضعاف بالنسبة للإصدار الأولي. استخدام الموازاة الصريحة مع توجيهات OpenMP ، ثم الانتقال إلى نظام به أكثر من تردد عاليسمح بتقليل وقت الحساب إلى أقل من 8 دقائق ، مما أعطى أكثر من 16 مرة من السرعة مقارنة بالإصدار الأولي.

إنتل فيجوال فورتران

يستخدم Intel Visual Fortran 8.0 الواجهة الأمامية (جزء من المترجم المسؤول عن تحويل البرنامج من نص في لغة البرمجة إلى التمثيل الداخلي للمترجم ، وهو مستقل إلى حد كبير عن لغة البرمجة أو الجهاز المستهدف) ، مترجم CVF تقنيات ومكونات مترجم إنتل ، المسؤول عن مجموعة من التحسينات وتوليد الكود.


الشكل 9




الشكل 10


يوضح الشكلان 9 و 10 رسوم بيانية للمقارنة أداء إنتل Visual Fortran 8.0 مع الإصدار السابق من Intel Fortran 7.1 ومع برامج التحويل البرمجي الأخرى المشهورة في الصناعة من هذه اللغة والتي تعمل تحت نظام التشغيل عائلات Windowsولينكس. للمقارنة ، تم استخدام الاختبارات ، والنصوص المصدر التي تلبي معايير F77 و F90 ، متاحة على http://www.polyhedron.com/. على نفس الموقع ، تتوفر معلومات أكثر تفصيلاً حول مقارنة أداء المترجم (مقارنات Win32 Compiler -> Fortran (77 ، 90) مقاييس وقت التنفيذ ومقارنات مترجم Linux -> Fortran (77 ، 90) مقاييس وقت التنفيذ): المزيد من المجمعين المختلفين هم كما هو موضح ، ويتم إعطاء المتوسط ​​الهندسي بالاقتران مع النتائج الفردية لكل اختبار.

في العدد السابق من المجلة ، ناقشنا منتجات عائلة Intel VTune Performance Analyzer - أدوات تحليل الأداء التي تستحقها عن جدارة مع مطوري التطبيقات وتسمح لك بالكشف في الكود تطبيقات الفريق، والتي تستهلك الكثير من موارد المعالج ، مما يمنح المطورين الفرصة لتحديد وإزالة الاختناقات المحتملة المرتبطة بمثل هذه الأقسام من التعليمات البرمجية ، وبالتالي تسريع عملية تطوير التطبيق. لاحظ ، مع ذلك ، أن أداء التطبيقات يعتمد إلى حد كبير على مدى كفاءة المجمعات المستخدمة في تطويرها ، وما هي ميزات الأجهزة التي يستخدمونها عند إنشاء رمز الجهاز.

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

تشمل الاختلافات المرتبطة بتحسين الكود بواسطة هذه المجموعة من المجمعين استخدام مكدس لأداء عمليات النقطة العائمة ، والتحسين بين الأجواء (التحسين بين الأجواء ، IPO) ، والتحسين وفقًا لملف تعريف التطبيق (Profile Guided Optimization ، 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.pdf).

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

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

برنامج Intel C ++ Compiler 7.1 لنظام التشغيل Windows

Intel C ++ Compiler 7.1 هو مترجم تم إصداره في وقت سابق من هذا العام والذي يسمح لك بتحقيقه درجة عاليةتحسينات التعليمات البرمجية لمعالجات Intel Itanium و Intel Itanium 2 و Intel Pentium 4 و Intel Xeon ، بالإضافة إلى معالج Intel Pentium M باستخدام تقنية إنتل Centrino ومصممة للاستخدام في الأجهزة المحمولة.

المترجم المحدد متوافق تمامًا مع أدوات تطوير Microsoft Visual C ++ 6.0 و مايكروسوفت البصرية Studio .NET: يمكن دمجه في بيئات التطوير المناسبة.

يدعم هذا المترجم معايير ANSI و ISO C / C ++.

برنامج Intel Fortran Compiler 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 بت. عند تصحيح التعليمات البرمجية ، يسمح لك هذا المترجم باستخدام مصحح الأخطاء للنظام الأساسي لـ Microsoft .NET.

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

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

المجمعين لمنصة لينكس

Intel C ++ Compiler 7.1 لنظام التشغيل Linux

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

برنامج Intel Fortran Compiler 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 ، والأداة المساعدة make application build.

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

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

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

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

... يتم تنزيل برنامج التحويل البرمجي Intel C ++ 7.0 في وقت متأخر من الليل ، حوالي الساعة 5:00 صباحًا. أردت أن أنام بشكل لا يصدق ، لكن الفضول: سواء تم تعزيز الحماية أم لا ، فقد مزقت أيضًا. قررت أنه حتى أتعامل مع الحماية ، ما زلت لن أنام ، بعد أن فتحت وحدة تحكم جديدة، وإعادة تثبيت متغيرات نظام 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 4556 AutoRun.exe

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

    10/29/2002 11:25 صباحًا 2831 ccompindex.htm

    24/10/2002 08:12 1296976 ملف ChkLic.dll

    10/18/2002 10:37552960 chklic.exe

    17/10/2002 04:29 مساءً 28663 CLicense.rtf

    17/10/2002 04:35 مساءً 386 credist.txt

    16.10.2002 17:02 34136 Crelnotes.htm

    19/03/2002 02:28 مساءً 4،635 PLSuite.htm

    21.02.2002 12:39 2478 register.htm

    02.10.2002 14:51 40960 Setup.exe

    02.10.2002 10:40 151 Setup.ini

    10.07.2001 12:56 184 setup.mwg

    19 ملفًا 2،519،238 بايت

    6 مجلدات 886571008 بايت مجانًا

آها! يستغرق مثبّت setup.exe أربعين كيلو بايت فقط. جيد جدًا! لا يمكنك إخفاء الحماية الجادة في مثل هذا المجلد ، وحتى لو كان الأمر كذلك ، فإن هذا الملف الصغير لا يكلف أي شيء لتحليله بالكامل - حتى آخر بايت من قائمة المفكك. ومع ذلك ، ليست حقيقة أن رمز الحماية موجود بالضبط في setup.exe ، يمكن أن يكون موجودًا في مكان آخر ، على سبيل المثال ... ChkLic.dll / ChkLic.exe ، والتي تشغل معًا أقل بقليل من سبعمائة كيلو بايت . انتظر ما هو ChkLic؟ هل هذا اختصار لرخصة الشيك؟ من الواضح أن الرجال في Intel لديهم مشاكل جدية مع روح الدعابة. سيكون من الأفضل لو أطلقوا على هذا الملف اسم "Hack Me" بصدق! حسنًا ، بناءً على الحجم ، فإن ChkLic هو نفس FLEX lm ، وقد واجهناه بالفعل (انظر "مترجم Intel C ++ 5.0") وتخيل تقريبًا كيفية كسره.

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

    تفريغ ملف ChkLic.dll

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

    0 الخصائص

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

  2. عدد واحد من الوظائف

    عدد واحد من الأسماء

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

    1 0 000010A0_CheckValidLicense

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

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

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

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

    النص: 0040175D دفع تعويض aChklic_dll ؛ lpLibFileName

    النص: 00401762 call 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 ؛ استدعاء الوظيفة CheckValidLicense

    النص: 00401787 ؛

    النص: 00401789 اختبار eax ، eax

    النص: 0040178B jnz loc_4019A3

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

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

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

اتضح أن Intel طبقت حماية متعددة المستويات واتضح أن المستوى الأول كان دفاعًا قاسيًا ضد الحمقى. حسنًا! نحن نقبل هذا التحدي ، وبناءً على خبرتنا السابقة ، نبحث تلقائيًا عن ملف 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 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 نفسه بحيث يُرجع صفرًا دائمًا. لا أعرف عنك ، لكنني أحببت الطريقة الثالثة أكثر من غيرها. نغير اثنين بايت ونبدأ المترجم. إذا لم تكن هناك فحوصات أخرى على "ترخيصه" في الحماية ، فسيعمل البرنامج ، وبالتالي ، العكس. (كما نتذكر ، كان هناك فحصان من هذا القبيل في الإصدار الخامس). إنه لأمر مدهش ، لكن المترجم لم يعد يقسم ويعمل !!! في الواقع ، كما هو متوقع ، لم يقم مطوروها بتقوية الحماية على الإطلاق ، بل على العكس من ذلك ، حتى أضعفوها! كريس كاسبيرسكي



  • تحميل...
    قمة