المقابلة: الوعد بـ Intel oneAPI و Direct Parallel C ++
نشرت: 2022-03-11Intel ليست الاسم الأول الذي يتبادر إلى الذهن عندما تفكر في تطوير البرامج ، على الرغم من أنها واحدة من أكثر شركات التكنولوجيا تأثيرًا وابتكارًا على هذا الكوكب. قبل أربعة عقود ، ساعد معالج Intel 8088 في إطلاق ثورة الكمبيوتر الشخصي ، وإذا كنت تقرأ هذا على سطح مكتب أو كمبيوتر محمول ، فمن المحتمل أن يكون لديك Intel Inside. الشيء نفسه ينطبق على الخوادم ومجموعة من الأجهزة الأخرى التي نعتمد عليها كل يوم. هذا لا يعني أن AMD والموردين الآخرين ليس لديهم منتجات تنافسية لأنهم يمتلكون ، لكن Intel لا تزال تهيمن على سوق x86 CPU.
يستخدم مهندسو البرمجيات الأنظمة الأساسية للأجهزة من Intel منذ عقود ، عادةً دون التفكير في البرامج والبرامج الثابتة التي تقف وراءها. إذا كانوا بحاجة إلى مزيد من أداء المحاكاة الافتراضية ، فقد اختاروا منتجات Core i7 أو Xeon متعددة النواة أو فائقة الترابط. لإصلاح قواعد البيانات المحلية ، يمكنهم الحصول على Intel SSD. ولكن الآن ، تريد Intel من المطورين البدء في استخدام المزيد من برامجها أيضًا.
ما هو Intel oneAPI؟
أدخل واجهة برمجة تطبيقات واحدة ، وصفتها إنتل كنموذج برمجة واحد موحد يهدف إلى تبسيط التطوير عبر بنى الأجهزة المختلفة: وحدات المعالجة المركزية ، ووحدات معالجة الرسومات ، و FPGA ، ومسرعات الذكاء الاصطناعي ، والمزيد. كل منهم له خصائص مختلفة للغاية ويتفوق في أنواع مختلفة من العمليات.
تلتزم Intel الآن باستراتيجية "البرامج أولاً" وتتوقع من المطورين الانتباه. تتمثل الفكرة الكبرى وراء oneAPI في تمكين استخدام نظام أساسي واحد لمجموعة من الأجهزة المختلفة ، وبالتالي لن يضطر المطورون إلى استخدام لغات وأدوات ومكتبات مختلفة عندما يقومون بتشفير وحدات المعالجة المركزية ووحدات معالجة الرسومات ، على سبيل المثال. باستخدام oneAPI ، سيكون مربع الأدوات وقاعدة التعليمات البرمجية متماثلين لكليهما.
لجعل هذا ممكنًا ، طورت إنتل Data Parallel C ++ (DPC ++) كبديل مفتوح المصدر للغات الملكية المستخدمة عادةً في البرمجة لأجهزة معينة (على سبيل المثال ، وحدات معالجة الرسومات أو FFPGA). من المفترض أن توفر لغة البرمجة الجديدة هذه إنتاجية ومعرفة C ++ مع تضمين مترجم للنشر عبر أهداف أجهزة مختلفة.
يشتمل Data Parallel C ++ أيضًا على SYCL لمجموعة Khronos لدعم توازي البيانات والبرمجة غير المتجانسة. تقدم Intel حاليًا وصولاً مجانيًا إلى DevCloud ، مما يسمح لمهندسي البرمجيات بتجربة أدواتهم والتلاعب بواحد API و DPC ++ في السحابة دون الكثير من المتاعب.
لكن انتظر ، هل سيعمل على الأجهزة التي صنعها بائعون آخرون؟ ماذا عن الترخيص ، هل هو مجاني؟ نعم ونعم: تم تصميم oneAPI ليكون حياديًا في الأجهزة ومفتوح المصدر ، ولن يتغير ذلك.
لمعرفة المزيد حول oneAPI ، ناقشنا نشأته ومستقبله مع Sanjiv M. Shah ، نائب رئيس مجموعة Intel للهندسة المعمارية والرسومات والبرامج والمدير العام للحوسبة التقنية والمشاريع والحوسبة السحابية في Intel.
سانجيف: من حيث ما هو موجود في oneAPI ، أفكر فيه كأربع قطع. الأول عبارة عن لغة ومكتبة قياسية ، والثاني عبارة عن مجموعة من أدوات التعلم العميق ، والثالث عبارة عن طبقة تجريد للأجهزة وطبقة برنامج تشغيل يمكنها تجريد مسرعات مختلفة ، والقطعة الرابعة عبارة عن مجموعة من المكتبات التي تركز على المجال ، مثل ماتلاب وهلم جرا. هذه هي الفئات الأربع للأشياء الموجودة في واجهة برمجة تطبيقات واحدة ، ولكن يمكننا التعمق أكثر والتحدث عن العناصر التسعة في واجهة برمجة تطبيقات واحدة. هذه العناصر التسعة هي في الأساس اللغة الجديدة التي نقدمها تسمى Data Parallel C ++ ومكتبتها القياسية.
توجد مكتبتان للتعلم ، إحداهما للشبكات العصبية والأخرى للاتصالات. هناك مكتبة نسميها المستوى صفر المخصص لتجريد الأجهزة ، وهناك أربع مكتبات تركز على المجال. نحن نقوم بذلك بطريقة منفتحة للغاية. المواصفات لجميع هذه الميزات مفتوحة ومتاحة بالفعل. نحن نطلق عليهم الإصدار 0.5. نعتزم الوصول إلى الإصدار 1.0 بحلول نهاية عام 2020 ، ولدينا أيضًا تطبيقات مفتوحة المصدر لكل هذه التطبيقات. مرة أخرى ، هدفنا هو تمكين الناس من الاستفادة مما هو موجود بالفعل. إذا أراد بائع الأجهزة تنفيذ هذه اللغة ، فيمكنه أخذ ما هو مفتوح المصدر وتشغيله.
س: فيما يتعلق بالخوارزميات والتنفيذ ، كيف يعمل ذلك؟
ما نقدمه هو الأساسيات التي ستستخدمها الخوارزميات: الأساسيات الرياضية الأساسية وأوليات الاتصال. عادةً ما يحدث ابتكار الخوارزمية على مستوى أعلى من ذلك ، حيث لا يعيدون فعلاً الرياضيات الأساسية ورياضيات المصفوفة ورياضيات الالتفاف وما إلى ذلك. يتعلق الأمر باكتشاف طرق جديدة لاستخدام تلك الرياضيات وطرق جديدة لاستخدام أنماط الاتصال. هدفنا حقًا هو توفير المستوى البدائي ، المستوى صفر ، حتى يتمكن الآخرون من الابتكار فوقه.
س: كيف يعمل على مستوى الأجهزة؟
إذا كنت مزودًا للأجهزة ، فلنأخذ مصفوفة الذكاء الاصطناعي ، أي شخص يقوم ببناء AI ASIC ، على سبيل المثال - هناك طريقتان لبائع الأجهزة هذا "للتوصيل" والاستفادة من النظام البيئي للذكاء الاصطناعي. يتمثل أحدها في توفير واجهة الأجهزة منخفضة المستوى التي نطلق عليها المستوى صفر ، وإذا قدموا نسختهم من المستوى صفر باستخدام واجهة برمجة التطبيقات القياسية ، فيمكنهم الاستفادة من المصدر المفتوح إذا أرادوا ذلك ، ثم جميع طبقات البرامج أعلاه يمكن الاستفادة من ذلك تلقائيًا.
قد يكون ذلك صعبًا بالنسبة لـ ASICs التي تركز على الجزء ، لتوفير العمومية الكاملة للمستوى صفر. لذلك ، كبديل لذلك ، يمكنهم أيضًا توفير نواة الرياضيات ونواة الاتصال الموجودة في مجالنا ومكتبات التعلم العميق ، وبعد ذلك سنقوم بمهمة "توصيل" تلك المكتبات بأطر عمل عالية المستوى ، لذلك سيحصلون على ذلك تلقائيًا.
س: لقد ذكرت أن الإصدار الذي لديك الآن هو 0.5 ، والمواصفات الكاملة يجب أن تكون جاهزة بحلول نهاية عام 2020.
لذلك ، هناك جزأين لمبادرتنا oneAPI. الأول هو جزء الصناعة والآخر هو منتجات إنتل. تبلغ مواصفات الصناعة 0.5 ، وفي منتصف العام تقريبًا ، نود أن نصل إلى 1.0. بالتوازي مع ذلك ، تقوم إنتل ببناء مجموعة من المنتجات ، والمنتجات التي تصنعها إنتل هي اليوم في مرحلة تجريبية وهي تطبق المواصفات 0.5. بحلول نهاية العام ، نود الوصول إلى منتج 1.0.
يتجاوز منتج Intel العناصر التسعة لـ oneAPI لأنه ، بالإضافة إلى عناصر البرمجة الأساسية التي نقدمها ، نريد أيضًا توفير الأشياء التي يحتاجها المبرمجون حقًا ، مثل أدوات تصحيح الأخطاء والمحللات وأدوات التوافق حتى ينتقلوا من اللغات الحالية إلى البيانات لغة C ++ المتوازية.
س: ما مدى صعوبة انتقال المطور؟ هل البيئة الأوسع شبيهة بما كانوا يستخدمونه لسنوات؟
نعم ، إنه مشابه جدًا. اسمحوا لي أن أصف Data Parallel C ++ قليلاً لأن هذا جزء كبير مما نقوم به. DPC ++ ثلاثة أشياء. يعتمد على لغة C ++ القياسية الدولية ISO. هناك مجموعة تسمى Khronos تحدد المعيار المسمى SYCL ، ويتم وضع SYCL في طبقات أعلى C ++. نأخذ SYCL ، ثم نضيف امتدادات أعلى SYCL. الطريقة التي نبني بها Data Parallel C ++ ، إنها في الحقيقة مجرد C ++ مع امتدادات عليها ، وهو ما هو SYCL.
يمكن لأي مترجم C ++ تجميعها. يكمن جمال DPC ++ في أن أي مترجم يمكنه تجميعها ، ويمكن للمترجم واسع المعرفة فقط الاستفادة مما هو موجود في تلك اللغة وإنشاء رمز تسريع. الطريقة التي نتعامل بها مع هذه اللغة ، نقوم بها بشكل علني للغاية ، لذا فإن جميع مناقشاتنا حول Data Parallel C ++ تجري مع لجنة SYCL. التطبيقات مفتوحة المصدر ، وقد تم نشر جميع الامتدادات بالفعل ، ونحن نعمل بعناية فائقة للتأكد من أن لدينا مسار انزلاقي لطيف في معايير SYCL المستقبلية. بالنظر إلى 5-10 سنوات من الآن ، يمكنك الانتقال إلى ISO C ++ أيضًا.
س: فيما يتعلق بالمترجمين والترحيل إلى DPC ++ ، لا ينبغي أن يكون منحنى التعلم مشكلة كبيرة؟
نعم ، هذا يعتمد على المكان الذي تبدأ منه ، بالطبع. بالنسبة لمبرمج C ++ ، سيكون منحنى التعلم صغيرًا جدًا. بالنسبة لمبرمج C ، سيكون عليك تجاوز عقبة تعلم C ++ ، ولكن هذا كل شيء. إنها لغة C ++ مألوفة جدًا. بالنسبة للمبرمج المستخدم للغات مثل OpenCL ، يجب أن يكون متشابهًا جدًا.
الجزء الآخر الذي يجب أن أؤكده هو أننا نقوم بالعمل في مصدر مفتوح باستخدام البنية التحتية LLVM. جميع مصادرنا مفتوحة بالفعل ، وهناك مستودع Intel GitHub حيث يمكنك الذهاب وإلقاء نظرة على تطبيق اللغة ، وحتى تنزيل مترجم مفتوح المصدر. جميع أدوات Intel وعروض منتجاتنا التجريبية متاحة أيضًا مجانًا لأي شخص للعب بها وتنزيلها. لدينا أيضًا سحابة مطورين متاحة ، حيث لا يحتاج الأشخاص إلى تنزيل أو تثبيت أي شيء ، يمكنهم فقط كتابة الكود والبدء في استخدام جميع الأدوات التي تحدثنا عنها.

س: C ++ فعالة وبسيطة نسبيًا ، لكننا نعلم جميعًا أنها تتقدم في العمر ، والتنمية بطيئة ، وهناك الكثير من أصحاب المصلحة ، لذا فهم يبطئون كل شيء. من الواضح أن هذا لن يكون هو الحال مع DPC ++. هل سيكون لديك تكرارات وتحديثات أسرع؟
أعتقد أنك وصلت إلى نقطة مهمة للغاية بالنسبة لنا ، وهي التطور السريع الذي لا يتباطأ بالمعايير. لذلك ، نريد إجراء مناقشاتنا بشكل مفتوح مع المعيار ، لذلك هناك طريقة للوصول إلى المعايير ، ولكننا نريد أيضًا القيام بذلك بسرعة.
تعمل اللغات بشكل أفضل عندما يتم تصميمها بشكل مشترك من قبل مستخدميها ومنفذيها ، مع تطور البنى. هدفنا هو حقًا تصميم كود تكراري سريع حيث نمارس الأشياء ، وإيجاد أفضل طريقة للقيام بالأشياء ، وجعلها قياسية. لذا ، بالتأكيد ، التكرار السريع هو هدف كبير.
سؤال: أحد الأسئلة التي أثارها بعض زملائي (ربما تفهم أنهم قلقون إلى حد ما بشأن الانفتاح على أي شيء يأتي من شركة كبيرة): هل سيظل DPC ++ مفتوحًا دائمًا لجميع المستخدمين والبائعين؟
إطلاقا! يتم إجراء المواصفات بترخيص المشاع الإبداعي. يمكن لأي شخص استخدام المواصفات ، وأخذها وتفكيكها إذا أرادوا ، وتطويرها. أريد أن أؤكد أنه ليست كل عناصر واجهة المستخدم الواحدة مفتوحة المصدر ، لكننا نسير على طريق جعل جميع العناصر تقريبًا مفتوحة المصدر. كل ذلك ، يمكن لأي شخص الحصول عليه والاستفادة منه - إنه متاح للتنفيذ.
أعلنت شركة Codeplay ، وهي شركة خارج المملكة المتحدة ، عن تطبيق Nvidia لـ DPC ++ ، ونحن نشجع حقًا جميع بائعي الأجهزة وبائعي البرامج على القيام بمنافذهم. نحن في نقطة فريدة من نوعها في الصناعة حيث أصبحت المسرعات شائعة للعديد من البائعين. عندما يحدث ذلك في التاريخ ، عندما يكون هناك مقدم خدمة واحد فقط ، فإن لغتهم هي المهيمنة. تتطلب صناعة البرمجيات حلاً قياسيًا ومزودي خدمات متعددين.
ما نحاول القيام به هنا هو ما فعلناه منذ حوالي عقدين ونصف مع OpenMP ، حيث كانت هناك عدة لغات متوازية ولكن لا توجد لغة واحدة مهيمنة حقًا. أخذنا كل ذلك ووحدناه في معيار أصبح الآن ، بعد 25 عامًا ، هو السبيل للبرمجة لـ HPC.
س: هل سيكون من الصحيح القول إن DPC ++ سيشهد الكثير من التطور خلال السنوات القليلة القادمة؟ ماذا عن الموترات ، ماذا عن الأجهزة الجديدة التي تخرج؟
نعم ، بالتأكيد أنت على حق. علينا تطوير اللغة لدعم الأجهزة الجديدة التي يتم طرحها. هذا هو الهدف من التكرار بشكل أسرع. هناك نقطة أخرى أود التأكيد عليها وهي أننا نصمم Data Parallel C ++ بحيث يمكنك أيضًا توصيل ملحقات خاصة بالبنية إذا كنت ترغب في ذلك.
لذلك ، في حين أنها لغة قياسية نريد تشغيلها عبر العديد من البنى ، فإننا ندرك أيضًا أنه في بعض الأحيان ، يحتاج الجمهور المهم للغاية إلى أقصى أداء ممكن. قد يرغبون في الغوص في البرمجة منخفضة المستوى جدًا والتي لن تكون بالضرورة محمولة للهندسة المعمارية. نحن نبني امتدادات وآليات حتى تتمكن من الحصول على امتدادات للموترات وما إلى ذلك من شأنها أن تكون خاصة بالبنية.
س: ما مقدار التحكم في الشفرة التي تم إنشاؤها للجهاز الذي يمكن للمطور أن يتمتع به؟ ما مقدار التحكم الذي يمكن أن يتمتعوا به في إدارة الذاكرة بين النظام والمسرعات المختلفة؟
نحن نستعير مفهوم المخازن المؤقتة من SYCL ، والتي تمنح المستخدم تحكمًا واضحًا في الذاكرة ، ولكن بالإضافة إلى ذلك ، نضيف أيضًا فكرة الذاكرة الموحدة . هدفنا هو السماح للمبرمج بمستوى من التحكم يحتاجون إليه ، ليس فقط لإدارة الذاكرة ولكن لإنشاء كود سريع. بعض الامتدادات التي نضيفها عبر SYCL هي أشياء مثل المجموعات الفرعية والتخفيضات والأنابيب وما إلى ذلك. سيتيح لك ذلك إنشاء رمز أفضل بكثير للهياكل المختلفة.
س: هناك نقطة مثيرة للاهتمام وهي توزيع واجهة برمجة التطبيقات (oneAPI) لبايثون — إنتل المدرجة على وجه التحديد NumPy ، SciPy ، SciKit Learn. لدي فضول حول مكاسب الأداء ومزايا الإنتاجية التي يمكن فتحها من خلال oneAPI. هل لديك أي مقاييس على ذلك؟
هذا سؤال ممتاز. نحن ندعم هذا النظام البيئي. لماذا قد ترغب بايثون في استخدام مسرّع؟ إنها الحصول على أداء من مكتبات الرياضيات ومكتبات التحليلات. ما نقوم به هو "سباكة" NumPy ، و SciPy ، و SciKit Learn ، وما إلى ذلك ، حتى نتمكن من الحصول على أداء جيد من خلال الاستفادة من المكتبات التي لدينا فوقها. يمكن أن يحقق التطبيق الافتراضي لـ NumPy و SciPy و SciKit Learn وما إلى ذلك ، مقارنةً بالتطبيق الذي تم توصيله بشكل صحيح مع الحزم الأصلية المحسّنة ، مكاسب كبيرة جدًا. لقد رأينا مكاسب في حدود 200x و 300 x وما إلى ذلك.
هدفنا مع Python هو أننا نرغب في الحصول على جزء معقول ، في حدود 2x ، وربما في حدود 80 بالمائة من أداء الكود الأصلي. أحدث ما توصلت إليه التقنية اليوم هو أنك في كثير من الأحيان بمعدل 10x أو أكثر. نريد حقًا سد هذه الفجوة عن طريق السباكة في جميع المهام عالية الأداء بحيث تكون في حدود 2 ، وفي الواقع أعلى بكثير من ذلك.
س: ما أنواع الأجهزة التي نتحدث عنها؟ هل يمكن للمطورين إطلاق العنان لهذه الإمكانات في محطة عمل عادية ، أم أنها تتطلب شيئًا أكثر قوة؟
لا ، سيكون في كل مكان. إذا كنت تفكر في مصدر المكسب ، فستفهم. لا تستخدم مكتبات Python العادية أيًا من إمكانيات المحاكاة الافتراضية على وحدات المعالجة المركزية. إنهم لا يستخدمون أيًا من القدرات متعددة النواة على وحدات المعالجة المركزية. لم يتم تحسينها ، ونظام الذاكرة وكل ما لم يتم تحسينه. لذلك ، يتعلق الأمر بمضاعفة المصفوفة التي كتبها مبرمج ساذج وتم تجميعها بواسطة مترجم بدون أي تحسين ، ثم قارن ذلك بما يكتبه خبير في كود التجميع. يمكنك أن ترى مكاسب متعددة 100 مرة عند المقارنة بين هذين الأمرين ، وفي عالم بايثون ، هذا ما يحدث بشكل أساسي.
إن مترجمي Python والمكتبات القياسية عالية المستوى لدرجة أن الكود الذي ينتهي به الأمر يصبح كودًا ساذجًا للغاية. عندما تقوم بتثبيته بشكل صحيح مع المكتبات المحسّنة ، فإنك تحصل على تلك المكاسب الضخمة. يحتوي الكمبيوتر المحمول بالفعل على اثنين إلى ستة أو ثمانية نوى لوحدة المعالجة المركزية ، وهي متعددة الخيوط ولديها إمكانات توجيه جيدة ، ربما تكون 256 ، وربما 512. لذلك ، هناك الكثير من الأداء في أجهزة الكمبيوتر المحمولة ومحطات العمل. عندما تقوم بتوسيع نطاق ذلك إلى وحدات معالجة الرسومات ، بمجرد توفر الرسومات ، يمكنك تخيل مصدر المكاسب.
إذا نظرت إلى رسوماتنا المدمجة ، فإنها تزداد قوة أيضًا. أنا متأكد من أنك رأيت Ice Lake Gen 11 ، حيث تكون الرسومات المدمجة أفضل بكثير من الجيل السابق. يمكنك معرفة مصدر الفوائد ، حتى على أجهزة الكمبيوتر المحمولة.
س: ماذا عن توفر DevCloud؟ إذا كنت أتذكر بشكل صحيح ، فهو مجاني للاستخدام للجميع في الوقت الحالي ، ولكن هل سيبقى على هذا النحو بعد أن تحصل على الذهب العام المقبل؟
هذا سؤال جيد. في هذه المرحلة ، سأكون صادقًا ، لا أعرف الإجابة. نيتنا في هذه المرحلة أن تكون مجانية إلى الأبد. إنه من أجل التنمية ، للتلاعب ، وهناك الكثير من القوة الحصانية هناك ، حتى يتمكن الناس بالفعل من القيام بجولاتهم.
س: إذن ، لا تمانع إذا طلبنا من بضعة آلاف من المطورين تجربة ذلك؟
أوه ، بالتأكيد لا. نود أن يحدث ذلك!
يمكنني تلخيص ما نحاول القيام به. أولاً ، نحن متحمسون للغاية بشأن oneAPI. حان الوقت لبدء حل متعدد البائعين ، حيث يوجد العديد من البائعين المتاحين في السوق الآن. إذا ألقيت نظرة على خط المعالجات لدينا ، وليس فقط وحدات معالجة الرسومات القادمة ، والمزيد والمزيد من وحدات معالجة الرسومات المدمجة القوية ، وخريطة طريق FPGA الخاصة بنا ، فهذا وقت مثير لبناء معيار لكل ذلك. هدفنا هو الإنتاجية والأداء والبنية التحتية للصناعة حتى تتمكن من البناء عليها.
بالنسبة للجماهير الثلاثة التي تحدثت عنها ، يمكن لمطوري التطبيقات الاستفادة من الأشياء بسهولة ، لأنها متوفرة بالفعل. يمكن لبائعي الأجهزة الاستفادة من حزمة البرامج وتوصيل أجهزة جديدة ، بينما يمكن لموردي الأدوات واللغات استخدامها بسهولة. لا تستطيع Intel بناء جميع اللغات وجميع الأدوات في العالم ، لذا فهي بنية تحتية مفتوحة المصدر يمكن للآخرين الاستفادة منها والبناء عليها بسهولة بالغة.