مشاريع مركز تطوير إنتل في روسيا. أساسيات الأداء المتكاملة من Intel

قصتنا عن مشروع إنتل آخر صنع في روسيا. هذه هي مكتبة Intel Integrated Performance Primitives - وهي مجموعة جاهزة للاستخدام ومُحسَّنة للغاية لمختلف هياكل Intel ووظائف أساسية مجانية تمامًا للعمل مع الصور والإشارات والبيانات التعسفية. كيف نشأ هذا المشروع ، وكيف تطور ، وما يحدث في Intel IPP الآن - في المقالة تحت الخفض. وسنبدأ ، كما هو معتاد في الملخص ، بالحاضر.



في KDPV - المدخل إلى أرضية IPP في مكتب Intel في نيجني نوفغورود



ما هو Intel IPP الآن



لذا ، فإن Intel IPP هي اللبنات الأساسية للوظائف الأولية التي يمكن أن تسرع بشكل كبير تشغيل البرامج التي تعالج الوسائط والبيانات ، وذلك بسبب التحسينات الخاصة بالبنى الدقيقة ومنصات Intel ، بالإضافة إلى أوسع استخدام ممكن لمجموعات تعليمات المتجهات Intel SSE و Intel AVX لجميع الإصدارات.

تغطي وظائف IPP أربعة مجالات كبيرة:



  • معالجة الصورة؛
  • ضغط البيانات؛
  • معالجة الإشارات؛
  • التشفير.


يحتوي التحديث 2 الحالي لـ Intel IPP 2020 Update 2 على أكثر من 2500 عنصر أساسي لمعالجة الصور ، و 1300 عنصر أساسي لمعالجة الإشارات ، و 500 رؤية حاسوبية و 300 تشفير.



يتم تحسين المكتبة باستمرار - فقد تم تحسينها لمنصات جديدة ، وتتم إضافة وظائف جديدة وحتمًا إزالة المكتبة القديمة قليلة الاستخدام.

يعمل Intel IPP على أي جهاز x86 يعمل بنظام Linux و macOS و Windows و Android. أي أن المعالجات ليس فقط من Intel ، ولكن أيضًا من الشركات المصنعة الأخرى مدعومة ، علاوة على ذلك ، يعمل IPP عليها بسرعة ، على الرغم من أنها ، بالطبع ، ليست بسرعة فائقة مثل أجهزة Intel.



في الوقت نفسه ، لا يحتاج مستخدمو IPP إلى معرفة متعمقة حول منصة تنفيذ التعليمات البرمجية الخاصة بهم باستخدام IPP والإجراءات المرتبطة بها - سيتم استدعاء الإصدار المطلوب من التحسينات تلقائيًا.



IPP مكتوب بلغة C باستخدام ما يسمى بوظائف المترجم الجوهري. بالنسبة لنماذج مختلفة من استخدام المكتبة ، هناك إصدارات مختلفة منها: خيوط مفردة للمكالمات من خيوط مختلفة للتطبيقات الخارجية ومتعددة الخيوط ، باستخدام موازاة داخلية فعالة.



للمهتمين بسرعة العمل على Intel Xeon و Core - بعض المعايير .



يتوفر IPP حاليًا كجزء من Intel Parallel Studio XE و Intel System Studio ، وفقط من تلقاء نفسه... و - مجاني تمامًا للاستخدام الشخصي والتجاري.



ومن المثير للاهتمام ، أن أكثر المناطق "المغلقة" في حياتنا هي التشفير ، وفي حالة IPP ، فهو الآن الأكثر انفتاحًا - إنه مشروع مفتوح المصدر متاح على Github .



يمكن الآن تسمية الأساس والنهج وواجهة برمجة التطبيقات التي جلبها IPP عندما ظهرت لأول مرة في معالجة الإشارة والصور بمعيار غير معلن - وينطبق الشيء نفسه على التشفير.



يتم استخدام جميع مكونات المكتبة من قبل ملايين المستخدمين في مئات الآلاف من التطبيقات حول العالم. بما في ذلك داخل الشركة نفسها - في مختلف أقسام إنتل. يوفر Intel IPP تسريعًا كبيرًا لمكتبة OpenCV. بالمناسبة ، بناء مخصص Intel IPPمع الوظائف التي يستخدمها OpenCV ، الذي تم إصداره في عام 2015 ، أصبح أول إصدار مجاني ومجاني من IPP.



يمكن العثور على Intel IPP في تطبيقات التعرف على الصور وتحسينها في جميع المجالات ، بما في ذلك الطب ؛ الطابعات ، بما في ذلك 3D ؛ المراقبة بالفيديو الرقمي المركبات ذاتية القيادة؛ التعرف على الكلام والتوليف. ضغط البيانات؛ الاتصالات السلكية واللاسلكية والألعاب. يعمل IPP في كل مكان - من الخوادم إلى الأجهزة القابلة للارتداء. يمكن القول أنه إذا تم اختراع آلة الزمن ، فإن برنامجها سيستخدم بالتأكيد Intel IPP.



تاريخ IPP



بدأ كل شيء بمكتبات معالجة إشارات Intel (SPL) ومعالجة الصور (IPL) ، التي تم تطويرها بأمر من Intel في المركز النووي الفيدرالي VNIIEF في ساروف (كتبنا عن هذا في القصة حول OpenCV ).



في عام 1996 (أو 1997 ، وفقًا لشهود عيان مختلفين) ، في المكتب الرئيسي لشركة Intel Santa Clara ، تم عقد اجتماع حول خطط أخرى لتطوير SPL و IPL بمشاركة القيمين على المشروع الأمريكيين وخبراء مدعوين من Sarov ، من بينهم المهندس المستقبلي والملهم ورئيس فريق IPP بوريس Sabanin ، وكذلك Sergey Kirillov ، الذي يقود حاليًا العمل على تشفير IPP.



قدم فريق ساروف قائمة المقترحات الخاصة بهم ، وكان أحدها فتح واجهات وظائف IPL و SPL منخفضة المستوى للمستخدمين ، حيث تم تنفيذها بالفعل وتحسينها على أي حال ، في حين أن بعض المستخدمين لم يكونوا مرتاحين لتنسيقات بيانات IPL ، فقد كان لديهم بالفعل تنسيقات الصور الخاصة بهم. تم إنشاء النموذج الأولي المقترح لواجهة IPP ، باستخدام هياكل أبسط مقارنة بـ IPL / ISL ، بواسطة Boris Sabanin أثناء مناقشة حرفيًا على منديل. لكن في ذلك الوقت ، لم يحظ اقتراح الجانب الروسي ، على الرغم من عدم رفضه ، بالكثير من الدعم - فقد كان في منتصف القائمة بأولوية منخفضة. ولكن بعد عامين تذكر أحد الأشخاص في Intel هذا (على الأرجح ، Shin Li ، الذي أصبح فيما بعد "المبشر" لـ Intel IPP) وتغيرت الخطط.





كتاب Intel IPP لعام 2004 من تأليف Stewart Taylor ، أحد المشاركين في اجتماع IPP التاريخي (في ذلك الوقت الذي تم تعيينه حديثًا في ستانفورد البكالوريوس من Intel)



لذلك بدأ العمل في مكتبات Intel Performance Primitives ، والتي أعيدت تسميتها فيما بعد بـ Integrated Performance Primitives.



تم إنشاء نسخة داخلية من IPP ، دعنا نسميها 1.0 ، في عام 1999. لقد كان أكثر من إثبات المفهوم ، وهو نموذج أولي لإثبات قابلية المفهوم للتطبيق. لم يتم إصداره كمنتج ، ولكنه سمح بتعريف وصقل مفهوم وبنية ومواصفات IPP. حملت النسخة العامة الأولى على الفور الرقم 2.0 وتم إصدارها في أبريل 2002.



حتى عام 2009 ، تم تنفيذ معظم العمل في مكتبات IPP تحت قيادة بوريس سابانين ، الذي يمكن اعتباره بحق الأب الروحي وروح IPP. لقد بذل الكثير من الجهد في المشروع ، وأنشأ فريقًا من المتخصصين المتعددين ، ولكن لسوء الحظ ، لم يرق إلى الذكرى السنوية العشرين لـ Intel IPP.





رسم "الجسر إلى برج ساروف" بوريس سابانين ، المعروف ليس فقط لـ IPP ( هنا يمكنك رؤية لوحات أخرى لسابانين ، بما في ذلك صورته الذاتية)



ولكن إرث IPL / ISL لم يقتصر على. ظهرت العناصر الأساسية للتشفير وضغط البيانات على الفور تقريبًا. بدأت التجارب في مجال رؤية الكمبيوتر ، والتي نمت لاحقًا إلى مشروع مع OpenCV ، باستخدام تسريع الخوارزميات باستخدام الأساسيات في مجال ippCV.



بالطبع ، لم تكن هذه هي التجربة الوحيدة والفرع في تاريخ إنشاء المكتبة. IPP يواكب كل إنتل. وفقًا لذلك ، على سبيل المثال ، الإصدار الخامس من IPP ، بالإضافة إلى x86 ، يدعم معالج Intel XScale (هندسة ARM) و Intel Itanium (IA-64)! على مر السنين ، تضمن IPP مكونات مثل العرض الواقعي ، وعمليات المصفوفة الصغيرة ، وتكامل البيانات ، وبرامج ترميز الفيديو والصوت.



يمكن استخدام هذه الوظيفة الآن ، إذا رغبت في ذلك ، باستخدام حزمة IPP Legacy Libraries المتاحة للتنزيل.



علاوة على ذلك ، عملت برامج ترميز الفيديو IPP لاحقًا كأساس لمنتج Intel معروف آخر - Intel Media SDK، وتم تنفيذ تتبع الأشعة في مشروع Intel Embree مفتوح المصدر .



من بين التجارب التكنولوجية المثيرة للاهتمام في مجال بنية IPP ، يمكننا أن نلاحظ مثالًا لبرنامج تشغيل Windows لإظهار إمكانية عمل IPP في وضع kernel ، بالإضافة إلى إصدار من IPP للتشغيل على وحدات معالجة رسومات Intel مدمجة مكتوبة بلغة C for Metal .



من الغريب أن أرقام إصدارات IPP انتقلت أولاً بالترتيب من 1 إلى 9 ، ثم بدأ تحديدها بحلول عام الإصدار - 2017-2020.





فريق تطوير Intel IPP في عام 2003



أثناء وجود عائلة مكتبات IPP ، شارك أكثر من 100 شخص في عملهم - في ساروف ونيجني نوفغورود وموسكو. الآن يقع مقر IPP في نيجني نوفغورود ويبدو جذابًا للغاية!





زخرفة أرضية IPP في Intel



IPP ليست مكتبة بدائية على الإطلاق!



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



كما ذكرنا سابقًا ، يحتوي IPP على آلاف الوظائف (ولكل وظيفة عدة إصدارات مُحسّنة لهندسة معينة) ، مما يؤدي إلى أحجام ضخمة من المكتبات الجاهزة ، والتي ليست عنصرًا على الإطلاق في قائمة الفوائد لمستخدمي IPP.

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



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



في حالة أهمية كل نسبة مئوية إضافية من أداء مكتبات IPP ، يصبح من المهم للغاية تحديد مستوى موازاة الكود: داخل وظائف المكتبة ، وهو أمر جيد لمكالمات IPP من مؤشر ترابط مستخدم واحد ، أو خارجها ، على مستوى تطبيقات المستخدم ، وهو أمر جيد لـ التطبيقات متعددة مؤشرات الترابط التي تفصل العمل والبيانات بشكل مستقل عن IPP.



نظرًا لاختلاف التطبيقات ، يتم إجراء IPPs أيضًا. على وجه التحديد ، تتضمن حزمة IPP مجموعتين من المكتبات بإصدارات 32 و 64 بت: أحدهما ذو ترابط فردي داخليًا ، والثاني مع موازاة داخلية لعدد كبير من الوظائف باستخدام OpenMP (القائمة الدقيقة للوظائف مرفقة في المستندات المصاحبة). بالإضافة إلى ذلك ، هناك إصدار آخر لمكتبات معالجة الصور - "طبقة الترابط" ، وهي عبارة عن وظيفة إضافية عبر بروتوكول IPP أحادي الخيط وتستخدم إما OpenMP أو Intel TBB للموازنة الخارجية للعمل على الصور ، والتي تنقسم إلى أجزاء (مربعات) لهذا الغرض ... يتوفر كود مصدر IPP Threading Layer في حزمة IPP لأولئك الذين يريدون أقصى قدر من التحكم في كيفية تشغيل الكود الخاص بهم بشكل متزامن.



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



إن قرار دمج العديد من الوظائف داخل IPP في واحدة في هذه الحالة غير مناسب - فبدلاً من الطوب البدائي ، سنحصل على تفاصيل خيالية من لعبة "Tetris" ، والتي سيكون من الصعب إدراجها في تطبيقات المستخدم ، وسوف يتجاوز تنوع هذه الارتباطات الممكنة جميع الحدود المعقولة.



نتيجة لذلك ، تم تنفيذ وظيفة إضافية C ++ عبر IPP ، والتي قامت ببناء الرسوم البيانية لخطوط الأنابيب ، وتقطيع الصور إلى قطع ، ثم أطلقت حلقة متوازية لا تؤدي عملية واحدة في كل مؤشر ترابط ، ولكن خط أنابيب IPP بأكمله على بلاطة منفصلة. في النهاية ، بالطبع ، بقيت النتائج متماسكة. في البداية تم صنع نموذج أولي ، أظهر تسارعًا لائقًا. ثم تم إنشاء إعداد يسمى DMIP (معالجة الصور ذات الوضع المؤجل). علاوة على ذلك ، في عام 2011 في أحد الاجتماعات الأولى للجنة توحيد OpenVX في Khronos ، تم ذكر DMIP ودعمته بشدة من قبل اللجنة نظرًا لشعبية الرسوم البيانية بين مطوري الأجهزة. لذلك تبين أن معيار OpenVX يعتمد على تقنية الرسم البياني. لأسباب مختلفة ، لم يحظ معيار OpenVX بشهرة كافية ، ولكن الآن يتم دعم نموذج الرسم البياني وتطويره بواسطة فريق Intel Graph API.ونظرًا لأن واجهة برمجة التطبيقات Graph API مضمنة في OpenCV و OpenVINO و Movidius SDK ، فهناك تأثير مباشر لتقنيات IPP على معايير رؤية الكمبيوتر وواجهات برمجة التطبيقات الحديثة.



IPP - روابط مفيدة



مرة أخرى ، إليك أهم الروابط من هذه المقالة.





إنتل IPP أول شخص



دعونا نعطي الكلمة للأشخاص الذين لعبوا دورًا مهمًا في مصير أساسيات أداء Intel على مر السنين.



فلاديمير دودنيك ، رئيس فريق Intel IPP في 2009-2011

-, IPP – , . , - , .. IPP - , - .

, , , , SIMD . , , MKL, IPP .


, OpenCV, IPPCV 2006-2008

IPP , , , . FFT. — ! , IPP , , .

IPP , , OCaml, Spiral, FFT — IPP. IPP. , , , , 13-14 , .



, IPP QA 2011-2015 , IPP 2017-2020

IPP QA 2000. , , .

17 IPP. Intel . waterfall & development agile & DevOps. . , .

– . , , . , , , . , , , .


, Image & Signal Processing Intel IPP, 2020 –

IPP SW 2011 , . , . IPP , , , Resize, WarpAffine, WarpPerspective . . C 2017 , , , 2018 IPP Crypto GitHub. 2018 , 2020 IPP, Image & Signal Processing . , , IPP Intel, .



All Articles