تعليمة واحدة وبيانات متعددة
قد تكون دقة هذه المقالة غير دقيقة بسبب المعلومات القديمة . ( مارس 2017 ) |
| تصنيف فلين |
|---|
| دفق بيانات واحد |
| تدفقات بيانات متعددة |
|
| الفئات الفرعية لـ SIMD [1] |
| انظر أيضا |

تعتبر التعليمات الفردية والبيانات المتعددة ( SIMD ) نوعًا من المعالجة المتوازية في تصنيف فلين . يمكن أن تكون SIMD داخلية (جزء من تصميم الأجهزة) ويمكن الوصول إليها مباشرة من خلال بنية مجموعة التعليمات (ISA)، ولكن لا ينبغي الخلط بينها وبين ISA. تصف SIMD أجهزة الكمبيوتر ذات عناصر المعالجة المتعددة التي تؤدي نفس العملية على نقاط بيانات متعددة في وقت واحد.
تستغل هذه الآلات التوازي على مستوى البيانات ، ولكن ليس التزامن : فهناك عمليات حسابية متزامنة (متوازية)، ولكن كل وحدة تؤدي نفس التعليمات بالضبط في أي لحظة معينة (فقط ببيانات مختلفة). SIMD قابلة للتطبيق بشكل خاص على المهام الشائعة مثل ضبط التباين في صورة رقمية أو ضبط مستوى الصوت الرقمي . تتضمن معظم تصميمات وحدة المعالجة المركزية الحديثة تعليمات SIMD لتحسين أداء استخدام الوسائط المتعددة . تحتوي SIMD على ثلاث فئات فرعية مختلفة في تصنيف فلين لعام 1972 ، أحدها هو SIMT . لا ينبغي الخلط بين SIMT وخيوط البرامج أو خيوط الأجهزة ، وكلاهما تقاسم وقت المهمة (تقسيم الوقت). SIMT هو تنفيذ حقيقي متوازي متزامن على مستوى الأجهزة.
غالبًا ما تكون وحدات معالجة الرسومات الحديثة (GPUs) عبارة عن تطبيقات SIMD واسعة النطاق. [ بحاجة لمصدر ]
تاريخ
كان أول استخدام لتعليمات SIMD في ILLIAC IV ، الذي اكتمل في عام 1966.
كانت SIMD هي الأساس لأجهزة الكمبيوتر العملاقة المتجهة في أوائل السبعينيات مثل CDC Star-100 و Texas Instruments ASC ، والتي يمكنها العمل على "متجه" من البيانات بتعليمات واحدة. تم ترويج معالجة المتجهات بشكل خاص بواسطة Cray في السبعينيات والثمانينيات. تعتبر هياكل معالجة المتجهات الآن منفصلة عن أجهزة كمبيوتر SIMD: يتضمنها تصنيف Duncan بينما لا يتضمنها تصنيف Flynn ، بسبب عمل Flynn (1966، 1972) الذي سبق Cray-1 (1977).
تميزت الحقبة الأولى من أجهزة الكمبيوتر الحديثة ذات المعالجات المتوازية الضخمة بأجهزة الكمبيوتر العملاقة ذات الأداء المتوازي مثل أجهزة Thinking Machines CM-1 وCM-2 . كانت هذه الأجهزة تحتوي على العديد من المعالجات ذات الوظائف المحدودة والتي تعمل بالتوازي. على سبيل المثال، كل معالج أحادي البت من بين 65536 معالجًا في جهاز Thinking Machines CM-2 سينفذ نفس التعليمات في نفس الوقت، مما يسمح، على سبيل المثال، بدمج 65536 زوجًا من البتات منطقيًا في وقت واحد، باستخدام شبكة متصلة بمكعب فائق أو ذاكرة وصول عشوائي مخصصة للمعالج للعثور على متغيراتها. ابتعدت الحوسبة العملاقة عن نهج SIMD عندما أصبحت أساليب MIMD القياسية غير المكلفة القائمة على معالجات السلع مثل Intel i860 XP أكثر قوة، وتضاءل الاهتمام بـ SIMD. [2]
نشأ العصر الحالي لمعالجات SIMD من سوق أجهزة الكمبيوتر المكتبية وليس سوق أجهزة الكمبيوتر العملاقة. ومع تزايد قوة معالجات سطح المكتب بما يكفي لدعم الألعاب في الوقت الفعلي ومعالجة الصوت والفيديو خلال تسعينيات القرن العشرين، زاد الطلب على هذا النوع المعين من قوة الحوسبة، ولجأ بائعو المعالجات الدقيقة إلى SIMD لتلبية الطلب. [3] قدمت شركة Hewlett-Packard تعليمات MAX في أجهزة الكمبيوتر المكتبية PA-RISC 1.1 في عام 1994 لتسريع فك تشفير MPEG. [4] قدمت شركة Sun Microsystems تعليمات SIMD الصحيحة في ملحقات مجموعة التعليمات " VIS " الخاصة بها في عام 1995، في المعالج الدقيق UltraSPARC I. وتبعتها شركة MIPS بنظام MDMX المماثل .
كانت أول وحدة تحكم SIMD سطح مكتبية واسعة الانتشار مع ملحقات MMX من Intel للهندسة المعمارية x86 في عام 1996. وقد أدى هذا إلى تقديم نظام AltiVec الأكثر قوة في أنظمة Motorola PowerPC و POWER من IBM . استجابت Intel في عام 1999 بتقديم نظام SSE الجديد تمامًا . ومنذ ذلك الحين، كان هناك العديد من الملحقات لمجموعات تعليمات SIMD لكلا المعماريتين. طورت Intel ملحقات المتجهات المتقدمة AVX و AVX2 و AVX-512 . تدعم AMD AVX و AVX2 و AVX-512 في منتجاتها الحالية. [5]
كانت كل هذه التطورات موجهة نحو دعم الرسومات في الوقت الفعلي، وبالتالي فهي موجهة نحو المعالجة في بعدين أو ثلاثة أو أربعة أبعاد، وعادةً بأطوال متجهات تتراوح بين كلمتين وست عشرة كلمة، اعتمادًا على نوع البيانات والهندسة المعمارية. عندما تكون هناك حاجة إلى التمييز بين بنيات SIMD الجديدة والأخرى الأقدم، فإن البنيات الأحدث تعتبر بنيات "متجهة قصيرة"، حيث كانت أطوال متجهات لأجهزة الكمبيوتر العملاقة SIMD والمتجهة السابقة تتراوح من 64 إلى 64000. يتكون الكمبيوتر العملاق الحديث دائمًا تقريبًا من مجموعة من أجهزة الكمبيوتر MIMD، حيث ينفذ كل منها تعليمات SIMD (المتجهة القصيرة).
المزايا
إن أحد التطبيقات التي قد تستفيد من SIMD هو التطبيق الذي تتم فيه إضافة نفس القيمة إلى (أو طرحها من) عدد كبير من نقاط البيانات، وهي عملية شائعة في العديد من تطبيقات الوسائط المتعددة . ومن الأمثلة على ذلك تغيير سطوع الصورة. تتكون كل بكسل من الصورة من ثلاث قيم لسطوع الأجزاء الحمراء (R) والخضراء (G) والزرقاء (B) من اللون. لتغيير السطوع، تتم قراءة قيم R وG وB من الذاكرة، ثم تتم إضافة قيمة إليها (أو طرحها منها)، ثم تتم كتابة القيم الناتجة مرة أخرى في الذاكرة. وبالمثل، فإن معالجات الإشارات الرقمية الصوتية ، للتحكم في مستوى الصوت، تضاعف كل من القناتين اليسرى واليمنى في نفس الوقت.
مع معالج SIMD، هناك تحسينان لهذه العملية. الأول هو أن البيانات تُفهَم على أنها كتل، ويمكن تحميل عدد من القيم دفعة واحدة. فبدلاً من سلسلة من التعليمات التي تقول "استرجاع هذا البكسل، ثم استرجاع البكسل التالي"، سيحتوي معالج SIMD على تعليمة واحدة تقول فعليًا "استرجاع n بكسل" (حيث n هو رقم يختلف من تصميم إلى آخر). ولعدة أسباب، قد يستغرق هذا وقتًا أقل بكثير من استرجاع كل بكسل على حدة، كما هو الحال مع تصميم وحدة المعالجة المركزية التقليدية.
تتمثل ميزة أخرى في أن التعليمات تعمل على جميع البيانات المحملة في عملية واحدة. بعبارة أخرى، إذا كان نظام SIMD يعمل عن طريق تحميل ثماني نقاط بيانات في وقت واحد، فإن addالعملية التي يتم تطبيقها على البيانات ستحدث لجميع القيم الثماني في نفس الوقت. هذا التوازي منفصل عن التوازي الذي يوفره معالج فائق السلم ؛ تتم معالجة القيم الثماني بالتوازي حتى على معالج غير فائق السلم، وقد يكون المعالج الفائق السلم قادرًا على إجراء عمليات SIMD متعددة بالتوازي.
العيوب
- لا يمكن تحويل جميع الخوارزميات إلى متجهات بسهولة. على سبيل المثال، قد لا تستفيد مهمة تعتمد على التحكم في التدفق مثل تحليل التعليمات البرمجية بسهولة من SIMD؛ ومع ذلك، من الممكن نظريًا تحويل المقارنات و "تدفق الدفعات" إلى متجهات لاستهداف أقصى قدر من الأمثلية للذاكرة المؤقتة، على الرغم من أن هذه التقنية ستتطلب حالة وسيطة أكثر. ملاحظة: أنظمة خطوط الأنابيب الدفعية (على سبيل المثال: وحدات معالجة الرسوميات أو خطوط أنابيب التنقيط البرمجي) هي الأكثر فائدة للتحكم في الذاكرة المؤقتة عند تنفيذها باستخدام عناصر SIMD الجوهرية، لكنها ليست حصرية لميزات SIMD. قد يكون التعقيد الإضافي واضحًا لتجنب الاعتماد داخل السلسلة مثل سلاسل التعليمات البرمجية؛ بينما الاستقلال مطلوب للتحويل إلى متجهات. [ التوضيح مطلوب ]
- ملفات التسجيل كبيرة الحجم مما يزيد من استهلاك الطاقة ومساحة الشريحة المطلوبة.
- في الوقت الحالي، يتطلب تنفيذ خوارزمية باستخدام تعليمات SIMD عادةً عملًا بشريًا؛ على سبيل المثال، لا تقوم معظم المترجمات بإنشاء تعليمات SIMD من برنامج C نموذجي. يعد التوجيه التلقائي في المترجمات مجالًا نشطًا في أبحاث علوم الكمبيوتر. (قارن معالجة المتجهات .)
- يمكن أن تنطوي البرمجة باستخدام مجموعات تعليمات SIMD معينة على العديد من التحديات منخفضة المستوى.
- قد يكون لدى SIMD قيود على محاذاة البيانات ؛ وقد لا يتوقع المبرمجون الذين لديهم خبرة في بنية معينة هذا. والأسوأ من ذلك: قد تتغير المحاذاة من إصدار أو معالج "متوافق" إلى آخر.
- يعد تجميع البيانات في سجلات SIMD وتوزيعها إلى مواقع الوجهة الصحيحة أمرًا صعبًا (يتطلب أحيانًا عمليات تبديل ) وقد يكون غير فعال.
- لا تتوفر تعليمات محددة مثل الدورات أو الجمع ثلاثي المتغيرات في بعض مجموعات تعليمات SIMD.
- تعتمد مجموعات التعليمات على الهندسة المعمارية: فبعض المعالجات تفتقر إلى تعليمات SIMD بالكامل، لذا يجب على المبرمجين توفير تنفيذات غير متجهية (أو تنفيذات متجهية مختلفة) لها.
- توفر البنيات المختلفة أحجام سجلات مختلفة (على سبيل المثال 64 و128 و256 و512 بت) ومجموعات تعليمات، مما يعني أن المبرمجين يجب أن يقدموا تنفيذات متعددة للكود المتجه للعمل بشكل مثالي على أي وحدة معالجة مركزية معينة. بالإضافة إلى ذلك، تنمو مجموعة تعليمات SIMD المحتملة مع كل حجم سجل جديد. لسوء الحظ، لأسباب تتعلق بدعم الإرث، لا يمكن إيقاف الإصدارات الأقدم.
- كانت مجموعة تعليمات MMX المبكرة تشترك في ملف سجل مع مجموعة النقاط العائمة، مما تسبب في عدم الكفاءة عند خلط الكود ذي النقاط العائمة وMMX. ومع ذلك، يعمل SSE2 على تصحيح هذا.
ولإصلاح المشكلتين 1 و5، يستخدم امتداد متجه RISC-V نهجًا بديلًا: فبدلاً من عرض تفاصيل مستوى السجل الفرعي للمبرمج، تقوم مجموعة التعليمات بتلخيصها على هيئة عدد قليل من "سجلات المتجهات" التي تستخدم نفس الواجهات عبر جميع وحدات المعالجة المركزية التي تحتوي على مجموعة التعليمات هذه. ويتولى الجهاز التعامل مع جميع مشكلات المحاذاة و"التعدين التجريدي" للحلقات. وسوف تتمكن الآلات ذات أحجام المتجهات المختلفة من تشغيل نفس التعليمات البرمجية. وتسمي LLVM هذا النوع من المتجهات "vscale". [ بحاجة لمصدر ]
ليس من غير المألوف زيادة حجم الكود بمقدار مرتبة واحدة، عند مقارنته بالكود القياسي المكافئ أو الكود المتجهي المكافئ، ويمكن تحقيق مرتبة واحدة أو فعالية أكبر (العمل المنجز لكل تعليمة) باستخدام Vector ISAs. [6]
يتبنى ملحق المتجه القابل للتطوير من ARM نهجًا آخر، يُعرف في تصنيف فلين باسم "المعالجة الترابطية"، والمعروف اليوم باسم SIMD "المتوقعة" (المقنعة) . هذا النهج ليس مضغوطًا مثل معالجة المتجهات ولكنه لا يزال أفضل بكثير من SIMD غير المتوقعة. يتم تقديم أمثلة مقارنة مفصلة في صفحة معالجة المتجهات .
التسلسل الزمني
| سنة | مثال |
|---|---|
| 1974 | إيلياك الرابع |
| 1974 | معالج المصفوفات الموزعة ICL (DAP) |
| 1976 | معالج بوروز العلمي |
| 1981 | معالج متوازي هندسي حسابي من شركة Martin Marietta (استمر في شركة Lockheed Martin ، ثم في شركة Teranex و Silicon Optix ) |
| 1983-1991 | المعالج المتوازي الضخم (MPP)، من وكالة ناسا / مركز جودارد لرحلات الفضاء |
| 1985 | آلة التوصيل ، الطرازان 1 و2 (CM-1 وCM-2)، من شركة Thinking Machines Corporation |
| 1987-1996 | ماسبار MP-1 وMP-2 |
| 1991 | Zephyr DC من Wavetracer |
| 2001 | Xplor من Pyxsys, Inc. |
الأجهزة
أصبحت تعليمات SIMD صغيرة الحجم (64 أو 128 بت) شائعة على وحدات المعالجة المركزية للأغراض العامة في أوائل التسعينيات واستمرت حتى عام 1997 وبعد ذلك مع تعليمات الفيديو المتحركة (MVI) لـ Alpha . يمكن العثور على تعليمات SIMD، بدرجة أو بأخرى، على معظم وحدات المعالجة المركزية، بما في ذلك AltiVec وSPE من IBM لـ PowerPC ، و PA-RISC Multimedia Acceleration eXtensions (MAX) من HP، و MMX وiwMMXt من Intel ، وSSE و SSE2 و SSE3 SSSE3 و SSE4.x ، و 3DNow! من AMD ، ونظام ARC Video الفرعي، و VIS وVIS2 من SPARC ، و MAJC من Sun ، وتقنية Neon من ARM ، و MDMX ( MaDMaX ) و MIPS-3D من MIPS . تعتمد مجموعة التعليمات SPU لمعالج Cell Processor الذي طورته IBM وSony وToshiba بشكل كبير على SIMD. طورت Philips ، التي أصبحت الآن NXP ، العديد من معالجات SIMD المسماة Xetal . يحتوي Xetal على 320 عنصر معالج 16 بت مصمم خصيصًا لمهام الرؤية.
تعمل تعليمات AVX-512 SIMD من Intel على معالجة 512 بت من البيانات في المرة الواحدة.
برمجة


تُستخدم تعليمات SIMD على نطاق واسع لمعالجة الرسومات ثلاثية الأبعاد، على الرغم من أن بطاقات الرسومات الحديثة المزودة بـ SIMD مدمجة قد تولت هذه المهمة إلى حد كبير من وحدة المعالجة المركزية. تتضمن بعض الأنظمة أيضًا وظائف تبديل تعيد تعبئة العناصر داخل المتجهات، مما يجعلها مفيدة بشكل خاص لمعالجة البيانات والضغط. كما تُستخدم أيضًا في التشفير. [7] [8] [9] قد يؤدي اتجاه الحوسبة للأغراض العامة على وحدات معالجة الرسومات ( GPGPU ) إلى استخدام أوسع لـ SIMD في المستقبل.
كان تبني أنظمة SIMD في برامج الكمبيوتر الشخصي بطيئًا في البداية، بسبب عدد من المشكلات. كان أحدها أن العديد من مجموعات تعليمات SIMD المبكرة كانت تميل إلى إبطاء الأداء العام للنظام بسبب إعادة استخدام سجلات الفاصلة العائمة الموجودة. قدمت أنظمة أخرى، مثل MMX و 3DNow! ، دعمًا لأنواع البيانات التي لم تكن مثيرة للاهتمام لجمهور واسع وكانت تحتوي على تعليمات تبديل سياق باهظة الثمن للتبديل بين استخدام سجلات FPU وMMX . غالبًا ما تفتقر المترجمات أيضًا إلى الدعم، مما يتطلب من المبرمجين اللجوء إلى ترميز لغة التجميع .
كانت بداية SIMD على x86 بطيئة. وقد أدى تقديم 3DNow! من قبل AMD و SSE من قبل Intel إلى إرباك الأمور إلى حد ما، ولكن يبدو أن النظام قد استقر اليوم (بعد أن تبنت AMD SSE) ومن المفترض أن تؤدي المترجمات الأحدث إلى ظهور المزيد من البرامج التي تدعم SIMD. توفر كل من Intel وAMD الآن مكتبات رياضية مُحسَّنة تستخدم تعليمات SIMD، وبدأت البدائل مفتوحة المصدر مثل libSIMD وSIMDx86 وSLEEF في الظهور (انظر أيضًا libm ). [10]
حققت شركة أبل كمبيوتر نجاحًا أكبر إلى حد ما، على الرغم من دخولها سوق SIMD في وقت متأخر عن بقية الشركات. قدم AltiVec نظامًا غنيًا ويمكن برمجته باستخدام مترجمات متطورة بشكل متزايد من Motorola و IBM و GNU ، وبالتالي نادرًا ما تكون هناك حاجة إلى برمجة لغة التجميع. بالإضافة إلى ذلك، تم توفير العديد من الأنظمة التي ستستفيد من SIMD من قبل شركة أبل نفسها، على سبيل المثال iTunes و QuickTime . ومع ذلك، في عام 2006، انتقلت أجهزة كمبيوتر Apple إلى معالجات Intel x86. تم تعديل واجهات برمجة التطبيقات وأدوات التطوير الخاصة بشركة Apple ( XCode ) لدعم SSE2 و SSE3 بالإضافة إلى AltiVec. كانت شركة Apple هي المشتري المهيمن لشرائح PowerPC من IBM و Freescale Semiconductor . على الرغم من توقف Apple عن استخدام معالجات PowerPC في منتجاتها، إلا أن المزيد من تطوير AltiVec مستمر في العديد من تصميمات PowerPC و Power ISA من Freescale و IBM.
SIMD داخل سجل ، أو SWAR ، عبارة عن مجموعة من التقنيات والحيل المستخدمة لأداء SIMD في سجلات عامة على الأجهزة التي لا توفر أي دعم مباشر لتعليمات SIMD. يمكن استخدام هذا لاستغلال التوازي في خوارزميات معينة حتى على الأجهزة التي لا تدعم SIMD بشكل مباشر.
واجهة المبرمج
من الشائع أن يقوم ناشرو مجموعات تعليمات SIMD بإنشاء ملحقات لغة C/C++ خاصة بهم مع وظائف جوهرية أو أنواع بيانات خاصة (مع التحميل الزائد للمشغل ) مما يضمن إنشاء كود متجه. توفر Intel وAltiVec وARM NEON ملحقات معتمدة على نطاق واسع من قبل المترجمين الذين يستهدفون وحدات المعالجة المركزية الخاصة بهم. (العمليات الأكثر تعقيدًا هي مهمة مكتبات الرياضيات المتجهة.)
يتخذ مُجمِّع GNU C الامتدادات خطوة أبعد من خلال تجريدها في واجهة عالمية يمكن استخدامها على أي منصة من خلال توفير طريقة لتحديد أنواع بيانات SIMD. [11] كما ينفذ مُجمِّع LLVM Clang هذه الميزة أيضًا، بواجهة مماثلة محددة في IR. [12] يستخدم صندوق Rust packed_simd(والنسخة التجريبية std::sims) هذه الواجهة، وكذلك يفعل Swift 2.0+.
تحتوي لغة C++ على واجهة تجريبية std::experimental::simdتعمل بشكل مشابه لامتداد GCC. ويبدو أن مكتبة libcxx التابعة لشركة LLVM تنفذها. [ بحاجة لمصدر ] بالنسبة لـ GCC وlibstdc++، تتوفر مكتبة غلاف مبنية على امتداد GCC. [13]
أضافت Microsoft SIMD إلى .NET في RyuJIT. [14] تنفذ الحزمة System.Numerics.Vectorالمتوفرة على NuGet أنواع بيانات SIMD. [15] تحتوي Java أيضًا على واجهة برمجة تطبيقات مقترحة جديدة لتعليمات SIMD متوفرة في OpenJDK 17 في وحدة حاضنة. [16] كما تحتوي أيضًا على آلية احتياطية آمنة على وحدات المعالجة المركزية غير المدعومة لحلقات بسيطة.
بدلاً من توفير نوع بيانات SIMD، يمكن أيضًا تلميح المجمِّعين إلى تحويل بعض الحلقات تلقائيًا إلى متجهات، مما قد يؤدي إلى بعض التأكيدات حول عدم وجود اعتماد على البيانات. هذا ليس مرنًا مثل معالجة متغيرات SIMD بشكل مباشر، ولكنه أسهل في الاستخدام. يحتوي OpenMP 4.0+ على #pragma omp simdتلميح. [17] لقد حلت واجهة OpenMP هذه محل مجموعة واسعة من الامتدادات غير القياسية، بما في ذلك Cilk 's #pragma simd، [18] GCC's #pragma GCC ivdep، وغير ذلك الكثير. [19]
إصدارات متعددة من SIMD
من المتوقع عادةً أن تعمل برامج المستهلك على مجموعة من وحدات المعالجة المركزية التي تغطي أجيالًا متعددة، مما قد يحد من قدرة المبرمج على استخدام تعليمات SIMD الجديدة لتحسين الأداء الحسابي للبرنامج. والحل هو تضمين إصدارات متعددة من نفس الكود الذي يستخدم تقنيات SIMD الأقدم أو الأحدث، واختيار الإصدار الذي يناسب وحدة المعالجة المركزية للمستخدم في وقت التشغيل ( الإرسال الديناميكي ). هناك مجموعتان رئيسيتان من الحلول:
- تعدد إصدارات الوظائف (FMV): يتم تكرار برنامج فرعي في البرنامج أو المكتبة وتجميعه للعديد من ملحقات مجموعة التعليمات، ويقرر البرنامج أي منها سيتم استخدامه في وقت التشغيل.
- تعدد إصدارات المكتبة (LMV): يتم تكرار مكتبة البرمجة بأكملها للعديد من ملحقات مجموعة التعليمات، ويقرر نظام التشغيل أو البرنامج أي منها سيتم تحميله في وقت التشغيل.
تُستخدم FMV، التي تتم برمجتها يدويًا بلغة التجميع، بشكل شائع في عدد من المكتبات المهمة للأداء مثل glibc وlibjpeg-turbo. يسمح مُجمِّع Intel C++ ومجموعة مُجمِّع GNU منذ GCC 6 و Clang منذ clang 7 باتباع نهج مبسط، حيث يتولى المُجمِّع تكرار الوظائف وتحديدها. يتطلب GCC وclang target_clonesتسميات صريحة في الكود "لاستنساخ" الوظائف، [20] بينما يقوم ICC بذلك تلقائيًا (تحت خيار سطر الأوامر /Qax). تدعم لغة برمجة Rust أيضًا FMV. الإعداد مشابه لـ GCC وClang في أن الكود يحدد مجموعات التعليمات التي يجب تجميعها، ولكن الاستنساخ يتم يدويًا عبر التضمين. [21]
نظرًا لأن استخدام FMV يتطلب تعديل الكود على GCC وClang، فإن البائعين يستخدمون بشكل أكثر شيوعًا إصدارات متعددة للمكتبات: وهذا أسهل في تحقيقه حيث لا يلزم سوى تغيير مفاتيح المترجم. يدعم Glibc LMV ويتم تبني هذه الوظيفة بواسطة مشروع Clear Linux المدعوم من Intel. [22]
SIMD على الويب
في عام 2013، أعلن جون ماكوتشان أنه ابتكر واجهة عالية الأداء لمجموعات تعليمات SIMD للغة برمجة Dart ، مما جلب فوائد SIMD إلى برامج الويب لأول مرة. تتكون الواجهة من نوعين: [23]
- Float32x4، 4 قيم فاصلة عائمة ذات دقة واحدة.
- Int32x4، 4 قيم عددية صحيحة مكونة من 32 بت.
إن حالات هذه الأنواع غير قابلة للتغيير وفي الكود المحسن يتم تعيينها مباشرة إلى سجلات SIMD. يتم عادةً تجميع العمليات المعبر عنها في Dart في تعليمة واحدة دون أي تكلفة إضافية. وهذا يشبه جوهريات C وC++. تُظهر معايير ضرب المصفوفات 4×4 ، وتحويل الرؤوس ثلاثية الأبعاد ، وتصور مجموعة ماندلبروت تسريعًا بنسبة 400% تقريبًا مقارنة بالكود القياسي المكتوب في Dart.
تم اعتماد عمل McCutchan على Dart، والذي يسمى الآن SIMD.js، بواسطة ECMAScript وأعلنت Intel في IDF 2013 أنها تنفذ مواصفات McCutchan لكل من V8 و SpiderMonkey . [24] ومع ذلك، بحلول عام 2017، تم إخراج SIMD.js من قائمة انتظار ECMAScript القياسية لصالح متابعة واجهة مماثلة في WebAssembly . [25] اعتبارًا من أغسطس 2020، تظل واجهة WebAssembly غير مكتملة، لكن ميزة SIMD المحمولة ذات 128 بت شهدت بالفعل بعض الاستخدام في العديد من المحركات.
يمكن لبرنامج Emscripten، وهو برنامج تحويل C/C++-to-JavaScript من Mozilla، مع الامتدادات، تمكين تجميع برامج C++ التي تستخدم عناصر SIMD الجوهرية أو كود متجه على غرار GCC إلى واجهة برمجة تطبيقات SIMD في JavaScript، مما يؤدي إلى تسريعات مكافئة مقارنة بالكود القياسي. [26] كما يدعم (ويفضل الآن) اقتراح SIMD 128 بت من WebAssembly. [27]
التطبيقات التجارية
لقد ثبت بشكل عام أنه من الصعب العثور على تطبيقات تجارية مستدامة لمعالجات SIMD فقط.
أحد هذه التقنيات التي حققت قدرًا من النجاح هو GAPP ، الذي طورته شركة Lockheed Martin وتم نقله إلى القطاع التجاري من خلال شركة Teranex التابعة لها. أصبحت التجسيدات الأخيرة لـ GAPP أداة قوية في تطبيقات معالجة الفيديو في الوقت الفعلي مثل التحويل بين معايير الفيديو المختلفة ومعدلات الإطارات ( NTSC إلى/من PAL ، NTSC إلى/من تنسيقات HDTV ، إلخ)، وإزالة التشابك ، وتقليل تشويش الصورة ، وضغط الفيديو التكيفي ، وتحسين الصورة.
إن التطبيقات الأكثر انتشاراً لـ SIMD توجد في ألعاب الفيديو : حيث إن كل وحدة تحكم في ألعاب الفيديو الحديثة منذ عام 1998 تقريباً تتضمن معالج SIMD في مكان ما من بنيتها. وكان جهاز PlayStation 2 غير عادي من حيث أن إحدى وحداته العائمة المتجهة يمكن أن تعمل كمعالج رقمي رقمي مستقل ينفذ تدفق التعليمات الخاص به، أو كمعالج مساعد مدفوع بتعليمات وحدة المعالجة المركزية العادية. وتميل تطبيقات الرسومات ثلاثية الأبعاد إلى أن تكون ملائمة بشكل جيد لمعالجة SIMD لأنها تعتمد بشكل كبير على العمليات باستخدام متجهات رباعية الأبعاد. والآن يختار برنامج Direct3D 9.0 من Microsoft في وقت التشغيل تنفيذات محددة للمعالج لعملياته الحسابية الخاصة، بما في ذلك استخدام التعليمات القادرة على SIMD.
المعالج الأحدث الذي استخدم معالجة المتجهات هو معالج Cell المستخدم في Playstation 3، والذي طورته IBM بالتعاون مع Toshiba و Sony . يستخدم عددًا من معالجات SIMD ( هندسة NUMA ، كل منها مزود بمخزن محلي مستقل ويتم التحكم فيه بواسطة وحدة معالجة مركزية للأغراض العامة) وهو موجه نحو مجموعات البيانات الضخمة المطلوبة لتطبيقات معالجة الفيديو والرسومات ثلاثية الأبعاد. وهو يختلف عن ISAs التقليدية بكونه SIMD من الألف إلى الياء بدون سجلات قياسية منفصلة.
أنتجت شركة Ziilabs معالجًا من نوع SIMD للاستخدام على الأجهزة المحمولة، مثل مشغلات الوسائط والهواتف المحمولة. [28]
تتوفر معالجات SIMD التجارية الأكبر حجمًا من شركة ClearSpeed Technology, Ltd. وStream Processors, Inc. يحتوي CSX600 (2004) من شركة ClearSpeed على 96 نواة لكل منها وحدتان عائمتان بدقة مزدوجة بينما يحتوي CSX700 (2008) على 192 نواة. يرأس شركة Stream Processors المهندس المعماري للكمبيوتر Bill Dally . يحتوي معالج Storm-1 (2007) الخاص بهم على 80 نواة SIMD يتم التحكم فيها بواسطة وحدة معالجة مركزية MIPS.
انظر أيضا
- ملحقات بث SIMD ، MMX ، SSE2 ، SSE3 ، ملحقات المتجهات المتقدمة ، AVX-512
- هندسة مجموعة التعليمات
- تصنيف فلين
- SIMD داخل السجل (SWAR)
- برنامج واحد وبيانات متعددة (SPMD)
- أوبن سي إل
مراجع
- ^ فلين، مايكل ج . (سبتمبر 1972). "بعض منظمات الكمبيوتر وفعاليتها" (PDF) . معاملات معهد مهندسي الكهرباء والإلكترونيات على أجهزة الكمبيوتر . C-21 (9): 948–960. doi :10.1109/TC.1972.5009071.
- ^ "MIMD1 - XP/S, CM-5" (PDF) .
- ^ Conte, G.; Tommesani, S.; Zanichelli, F. (2000). "The long and winding road to high-performance image processing with MMX/SSE". Proc. Fifth IEEE Int'l Workshop on Computer Architectures for Machine Perception . doi :10.1109/CAMP.2000.875989. hdl :11381/2297671. S2CID 13180531.
- ^ Lee, RB (1995). "فيديو MPEG في الوقت الفعلي عبر فك ضغط البرنامج على معالج PA-RISC". ملخص الأوراق البحثية Compcon '95. تقنيات الطريق السريع للمعلومات . ص 186-192. doi :10.1109/CMPCON.1995.512384. ISBN 0-8186-7029-0. S2CID 2262046.
- ^ "تحليل أداء AMD Zen 4 AVX-512 على Ryzen 9 7950X". www.phoronix.com . تم الاسترجاع في 2023-07-13 .
- ^ باترسون، ديفيد؛ واترمان، أندرو (18 سبتمبر 2017). "تعليمات SIMD تعتبر ضارة". SIGARCH .
- ^ RE: سرعة SSE2، توضح كيفية استخدام SSE2 لتنفيذ خوارزميات التجزئة SHA
- ^ سرعة Salsa20؛ برنامج Salsa20، الذي يُظهر تشفيرًا متدفقًا تم تنفيذه باستخدام SSE2
- ^ الموضوع: ما يصل إلى 1.4x معدل إنتاج RSA باستخدام SSE2، مما يوضح أن RSA تم تنفيذه باستخدام تعليمات ضرب عدد صحيح SSE2 غير SIMD.
- ^ "وظائف الرياضيات في مكتبة SIMD". Stack Overflow . تم الاسترجاع في 16 يناير 2020 .
- ^ "امتدادات المتجهات". استخدام مجموعة GNU Compiler Collection (GCC) . تم الاسترجاع في 16 يناير 2020 .
- ^ "امتدادات لغة Clang". توثيق Clang 11. تم الاسترجاع في 16 يناير 2020 .
- ^ "VcDevel/std-simd". VcDevel. 6 أغسطس 2020.
- ^ "RyuJIT: مُجمِّع JIT من الجيل التالي لـ .NET". 30 سبتمبر 2013.
- ^ "JIT تقدمت أخيراً بعرض زواج. JIT وSIMD يتزوجان". 7 أبريل 2014.
- ^ "JEP 338: واجهة برمجة التطبيقات المتجهة".
- ^ "توجيهات SIMD". www.openmp.org .
- ^ "Tutorial pragma simd". CilkPlus . 18 يوليو 2012. مؤرشف من الأصل في 4 ديسمبر 2020 . تم الاسترجاع 9 أغسطس 2020 .
- ^ كروس، مايكل. "OMP5.1: تحويلات الحلقة" (PDF) .
- ^ "تعدد إصدارات الوظائف في GCC 6". lwn.net .
- ^ "2045-target-feature". كتاب Rust RFC .
- ^ "الاستخدام الشفاف لحزم المكتبات المحسّنة لهندسة Intel®". مشروع Clear Linux* . تم الاسترجاع في 8 سبتمبر 2019 .
- ^ جون ماكوتشان. "إحضار SIMD إلى الويب عبر Dart" (PDF) . مؤرشف من الأصل (PDF) في 2013-12-03.
- ^ "SIMD في JavaScript". 01.org . 8 مايو 2014.
- ^ "tc39/ecmascript_simd: SIMD numeric type for EcmaScript". GitHub . Ecma TC39. 22 أغسطس 2019 . تم الاسترجاع في 8 سبتمبر 2019 .
- ^ جينسن، بيتر؛ جيباجا، إيفان؛ هو، نينغكسين؛ جوهمان، دان؛ ماكوتشان، جون (2015). "SIMD في JavaScript عبر C++ وEmscripten" (PDF) .
- ^ "نقل كود SIMD المستهدف لـ WebAssembly". وثائق Emscripten 1.40.1 .
- ^ "معالج الوسائط ZiiLABS ZMS-05 ARM 9". ZiiLabs . مؤرشف من الأصل في 2011-07-18 . تم الاسترجاع في 2010-05-24 .
روابط خارجية
- هندسة SIMD (2000)
- فتح جهاز Pentium 3 (1999)
- امتدادات المتجهات القصيرة في المعالجات الدقيقة التجارية
- مقالة حول تحسين خط أنابيب عرض النماذج المتحركة باستخدام ملحقات Intel Streaming SIMD
- "Yeppp!": مكتبة SIMD مفتوحة المصدر ومتعددة الأنظمة من معهد جورجيا للتكنولوجيا
- مقدمة في الحوسبة المتوازية من مختبر لورانس ليفرمور الوطني LLNL محفوظ في 10 يونيو 2013 على موقع Wayback Machine
- simde على GitHub : تنفيذ محمول للعناصر الجوهرية الخاصة بالمنصة للأنظمة الأساسية الأخرى (على سبيل المثال، عناصر جوهرية SSE لـ ARM NEON)، باستخدام رؤوس C/C++
