تعليمة واحدة، بيانات متعددة

تعليمة واحدة، بيانات متعددة

تُعدّ تقنية SIMD ( تعليمات واحدة، بيانات متعددة ) نوعًا من الحوسبة المتوازية (المعالجة) في تصنيف فلين . تصف هذه التقنية أجهزة الكمبيوتر التي تحتوي على عناصر معالجة متعددة تُنفّذ العملية نفسها على نقاط بيانات متعددة في آنٍ واحد. يمكن أن تكون تقنية SIMD داخلية (جزءًا من تصميم الأجهزة) ويمكن الوصول إليها مباشرةً من خلال بنية مجموعة التعليمات (ISA)، ولكن يجب عدم الخلط بينها وبين بنية مجموعة التعليمات.

تستغل هذه الأجهزة التوازي على مستوى البيانات ، ولكن ليس التزامن : فهناك عمليات حسابية متزامنة (متوازية)، ولكن كل وحدة تُنفذ نفس التعليمات تمامًا في أي لحظة معينة (مع اختلاف البيانات فقط). مثال بسيط على ذلك هو جمع أزواج متعددة من الأرقام، حيث تُجري جميع وحدات SIMD عملية جمع، ولكن لكل وحدة أزواج مختلفة من القيم لجمعها. تُعد تقنية SIMD مناسبة بشكل خاص للمهام الشائعة مثل ضبط التباين في صورة رقمية أو ضبط مستوى صوت الصوت الرقمي . تتضمن معظم تصميمات وحدات المعالجة المركزية الحديثة (CPU) تعليمات SIMD لتحسين أداء استخدام الوسائط المتعددة . في وحدات المعالجة المركزية الحديثة، ترتبط وحدات SIMD ارتباطًا وثيقًا بتسلسلات ذاكرة التخزين المؤقت وآليات الجلب المسبق، مما يقلل من زمن الاستجابة أثناء عمليات الكتل الكبيرة. على سبيل المثال، يمكن للمعالجات التي تدعم AVX-512 جلب أسطر ذاكرة التخزين المؤقت بالكامل مسبقًا وتطبيق عمليات الضرب والجمع المدمجة (FMA) في دورة SIMD واحدة.

الخلط بين SIMT و SIMD

نظرة عامة على مصفوفة ILLIAC IV ، من الوصف التمهيدي الممول من ARPA بقلم ستيوارد ديننبرغ، 15 يوليو 1971 [ 2 ]

تتضمن تقنية SIMD ثلاث فئات فرعية مختلفة في تصنيف فلين لعام 1972 ، إحداها هي التعليمات المفردة، الخيوط المتعددة (SIMT). يجب عدم الخلط بين SIMT وخيوط البرمجيات أو خيوط الأجهزة ، فكلاهما يعتمد على تقاسم وقت المهمة (تقسيم الوقت). تُعد SIMT تنفيذًا متوازيًا متزامنًا حقيقيًا على مستوى الأجهزة، كما هو الحال في ILLIAC IV .

لا ينبغي الخلط بين تقنية SIMD ومعالجة المتجهات ، التي تميزها معالجات Cray 1 والموضحة في تصنيف دنكان . ويكمن الفرق الرئيسي بين معالجات SIMD ومعالجات المتجهات في وجود SET VECTOR LENGTHتعليمات على غرار معالجات Cray.

تاريخ

كان أول استخدام تشغيلي معروف حتى الآن لتقنية SIMD داخل سجل هو TX-2 ، في عام 1958. وكان قادرًا على إجراء عمليات 36 بت وعمليتين فرعيتين 18 بت أو أربع عمليات فرعية 9 بت.

كان أول استخدام تجاري لتعليمات SIMD في جهاز ILLIAC IV ، الذي تم الانتهاء منه في عام 1972.

كانت الحواسيب العملاقة ذات المعالجة المتجهة في أوائل سبعينيات القرن العشرين، مثل CDC Star-100 و Texas Instruments ASC، قادرة على معالجة "متجه" من البيانات بتعليمات واحدة. وقد شاع استخدام المعالجة المتجهة بشكل خاص بفضل شركة Cray في سبعينيات وثمانينيات القرن العشرين. تُعتبر بنى المعالجة المتجهة الآن منفصلة عن حواسيب SIMD: إذ يشملها تصنيف دنكان، بينما لا يشملها تصنيف فلين ، نظرًا لأن أعمال فلين (1966، 1972) سبقت حاسوب Cray-1 (1977). مع ذلك، ألهم تعقيد معالجات المتجهات تصميمًا أبسط يُعرف باسم SIMD داخل سجل .

تميزت الحقبة الأولى من حواسيب SIMD الحديثة بمعالجة متوازية هائلة ، مثل حواسيب Thinking Machines Connection Machine CM-1 وCM-2. احتوت هذه الحواسيب على العديد من المعالجات ذات الوظائف المحدودة التي تعمل بالتوازي. فعلى سبيل المثال، كان كل معالج من معالجات Thinking Machines CM-2 البالغ عددها 65,536 معالجًا أحادي البت يُنفذ نفس التعليمات في الوقت نفسه، مما يسمح، على سبيل المثال، بدمج 65,536 زوجًا من البتات منطقيًا في كل مرة، باستخدام شبكة متصلة بمكعب فائق أو ذاكرة وصول عشوائي مخصصة للمعالج للعثور على معاملاته. ابتعدت الحوسبة الفائقة عن نهج SIMD عندما أصبحت أساليب MIMD ( التعليمات المتعددة والبيانات المتعددة ) منخفضة التكلفة، والمبنية على معالجات تجارية مثل Intel i860 XP، أكثر قوة، وتضاءل الاهتمام بتقنية SIMD. [ 3 ]

نشأ العصر الحالي لمعالجات SIMD من سوق الحواسيب المكتبية وليس من سوق الحواسيب العملاقة. فمع ازدياد قوة معالجات الحواسيب المكتبية بما يكفي لدعم الألعاب في الوقت الفعلي ومعالجة الصوت والفيديو خلال التسعينيات، ازداد الطلب على هذا النوع من القدرة الحاسوبية، واتجه مصنّعو المعالجات الدقيقة إلى تقنية SIMD لتلبية هذا الطلب. [ 4 ] وتزامن هذا الانتعاش مع ظهور نماذج تظليل DirectX وOpenGL، التي اعتمدت بشكل كبير على تقنية SIMD. وشجعت واجهات برمجة التطبيقات الرسومية المبرمجين على تبني أساليب البرمجة المتوازية للبيانات، مما ساهم بشكل غير مباشر في تسريع اعتماد تقنية SIMD في برامج الحواسيب المكتبية. وقدّمت شركة هيوليت-باكارد تعليمات MAX ( امتدادات تسريع الوسائط المتعددة ) في حواسيب PA-RISC 1.1 المكتبية عام 1994 لتسريع فك تشفير MPEG. [ 5 ] وقدّمت شركة صن مايكروسيستمز تعليمات SIMD للأعداد الصحيحة في امتدادات مجموعة تعليمات " VIS " عام 1995، في معالجها الدقيق UltraSPARC I. وحذت شركة MIPS حذوها بنظام MDMX المماثل .

كان أول استخدام واسع النطاق لتقنية SIMD على أجهزة سطح المكتب مع امتدادات MMX من إنتل لبنية x86 في عام 1996. وقد أدى ذلك إلى طرح نظام AltiVec الأكثر قوة في أنظمة Motorola PowerPC وIBM POWER . وردّت إنتل في عام 1999 بإطلاق نظام SSE الجديد كليًا . ومنذ ذلك الحين، أُجريت العديد من التوسعات على مجموعات تعليمات SIMD لكلا البنيتين. وتُطوّر إنتل امتدادات المتجهات المتقدمة AVX و AVX2 و AVX-512 . وتدعم AMD هذه الامتدادات في منتجاتها الحالية. [ 6 ]

العيوب

مع تقنية SIMD، لا يُعدّ ازدياد حجم الكود بمقدار عشرة أضعاف أمرًا غير شائع، مقارنةً بالكود القياسي أو الكود المتجهي المكافئ، ويمكن تحقيق فعالية أكبر بمقدار عشرة أضعاف أو أكثر (العمل المنجز لكل تعليمة) باستخدام مجموعات تعليمات المتجهات. [ 7 ]

تعتمد تقنية Scalable Vector Extension من ARM على نهج مختلف، يُعرف في تصنيف فلين باسم SIMD "المُقنّع" (المُقنّع) . هذا النهج ليس بنفس كفاءة معالجة المتجهات ، ولكنه لا يزال أفضل بكثير من SIMD غير المُقنّع. تجدون أمثلة مقارنة مفصلة في قسم "معالج المتجهات" § "  مثال على تعليمات المتجهات" .

التسلسل الزمني

أمثلة على الحواسيب العملاقة بتقنية SIMD باستثناء معالجات المتجهات
سنةمثال
1974ILLIAC IV - معالج مصفوفة يتألف من وحدات معالجة عددية 64 بت
1974معالج المصفوفة الموزعة ICL (DAP)
1976معالج بوروز العلمي
1981معالج متوازي هندسي-حسابي من مارتن ماريتا (استمر في لوكهيد مارتن ، ثم في تيرانكس وسيليكون أوبتكس )
1983–1991معالج متوازي ضخم (MPP)، من مركز غودارد لرحلات الفضاء التابع لناسا
1985آلة التوصيل ، الطرازين 1 و2 (CM-1 وCM-2)، من شركة ثينكينج ماشينز.
1987–1996MasPar MP-1 و MP-2
1991زفير دي سي من ويف تريسر
2001إكسبلور من شركة بايكسيس.

الأجهزة

وحدات المعالجة المركزية

أصبحت تقنية SIMD صغيرة الحجم (64 أو 128 بت) شائعة في وحدات المعالجة المركزية للأغراض العامة في أوائل التسعينيات، واستمر استخدامها حتى عام 1997 وما بعده مع تعليمات الفيديو المتحركة (MVI) لمعالج Alpha . ويمكن العثور على تعليمات SIMD، بدرجات متفاوتة، في معظم وحدات المعالجة المركزية، بما في ذلك AltiVec وSignal Processing Engine (SPE) من IBM لمعالجات PowerPC ، و PA-RISC Multimedia Acceleration eXtensions (MAX) من Hewlett-Packard (HP) ، و MMX وiwMMXt من Intel ، و Streaming SIMD Extensions (SSE)، و SSE2 ، و SSE3، و SSSE3، و SSE4.x ، و 3DNow! من AMD ، ونظام الفيديو الفرعي ARC من ARC ، وVIS وVIS2 من SPARC ، و MAJC من Sun ، وتقنية Neon من ARM ، و MDMX (MaDMaX) و MIPS -3D من MIPS .

تقوم تعليمات AVX-512 SIMD من Intel بمعالجة 512 بت من البيانات في وقت واحد.

المعالجات المساعدة

تعتمد مجموعة تعليمات وحدة المعالجة التآزرية (SPE) للمعالج Cell الذي طورته شركات IBM و Sony و Toshiba بشكل مشترك على تقنية SIMD بشكل كبير.

تعتمد بعض وحدات معالجة الرسومات (GPUs)، وليس جميعها، على تقنية SIMD. فوحدات معالجة الرسومات من AMD، منذ معمارية TeraScale (المعمارية الدقيقة)، تعتمد على تقنية SIMD، وهي ميزة استمرت في معماريتي RDNA وCDNA الدقيقتين في العقد الثاني من القرن الحادي والعشرين، [ 8 ] مع طبقة من التعليمات المفردة والخيوط المتعددة (SIMT) في الأعلى. [ 9 ] من ناحية أخرى، تستخدم معمارية CUDA من Nvidia أنوية قياسية مع تقنية SIMT. [ 10 ]

طورت شركة فيليبس ، التي أصبحت الآن NXP ، العديد من معالجات SIMD التي تحمل اسم Xetal . يحتوي معالج Xetal على 320 عنصر معالجة 16 بت مصممة خصيصًا لمهام الرؤية الحاسوبية.

تتضمن رقاقات M1 وM2 من Apple وحدات SIMD مدمجة بشكل عميق مع وحدة معالجة الرسومات (GPU) والمحرك العصبي، باستخدام مسارات SIMD مصممة من Apple ومحسّنة لترشيح الصور والالتفاف وضرب المصفوفات. تساعد بنية الذاكرة الموحدة هذه تعليمات SIMD على العمل بكفاءة أكبر على مجموعات الذاكرة المشتركة. (يُنفذ جزء وحدة المعالجة المركزية (CPU) تقنية NEON العادية).

برمجة

عملية الضرب الثلاثي المعتادة لأربعة أعداد مكونة من 8 بتات. يقوم المعالج بتحميل عدد واحد مكون من 8 بتات في السجل R1، ثم يضربه في السجل R2، ثم يحفظ الناتج من السجل R3 في ذاكرة الوصول العشوائي (RAM). تتكرر هذه العملية لكل عدد.
عملية الضرب الثلاثي لأربعة أرقام من 8 بت باستخدام تقنية SIMD. يقوم المعالج بتحميل الأرقام الأربعة دفعة واحدة، ثم يضربها جميعًا في عملية ضرب SIMD واحدة، ويحفظها جميعًا دفعة واحدة في ذاكرة الوصول العشوائي (RAM). نظريًا، يمكن مضاعفة السرعة أربع مرات.

تُستخدم تعليمات SIMD على نطاق واسع لمعالجة الرسومات ثلاثية الأبعاد، على الرغم من أن بطاقات الرسومات الحديثة المزودة بتقنية SIMD المدمجة قد حلت محل وحدة المعالجة المركزية (CPU) إلى حد كبير في هذه المهمة. تتضمن بعض الأنظمة أيضًا دوال تبديل تُعيد ترتيب العناصر داخل المتجهات، مما يجعلها مفيدة بشكل خاص لمعالجة البيانات وضغطها. كما تُستخدم أيضًا في علم التشفير. [ 11 ] [ 12 ] [ 13 ] قد يؤدي التوجه نحو الحوسبة للأغراض العامة على وحدات معالجة الرسومات ( GPGPU ) إلى استخدام أوسع لتقنية SIMD في المستقبل. توفر المترجمات الحديثة مثل LLVM و GNU Compiler Collection (GCC) وICC من Intel خيارات متقدمة للتحويل التلقائي إلى متجهات. غالبًا ما يستطيع المطورون تفعيل هذه الخيارات باستخدام علامات مثل ` -O3--` أو ` -ftree-vectorize--`، والتي توجه المترجم لإعادة هيكلة الحلقات لتتوافق مع تقنية SIMD.

كان تبني أنظمة SIMD في برامج الحواسيب الشخصية بطيئًا في البداية، نظرًا لعدد من المشاكل. من بينها أن العديد من مجموعات تعليمات SIMD المبكرة كانت تُبطئ الأداء العام للنظام بسبب إعادة استخدام سجلات الفاصلة العائمة الموجودة. كما أن أنظمة أخرى، مثل MMX و 3DNow!، كانت تدعم أنواع بيانات غير شائعة الاستخدام، وتضمنت تعليمات تبديل سياق مكلفة للتبديل بين استخدام سجلات FPU وMMX . كذلك، غالبًا ما كانت المترجمات تفتقر إلى الدعم، مما اضطر المبرمجين إلى اللجوء إلى كتابة التعليمات البرمجية بلغة التجميع .

شهدت تقنية SIMD على معالجات x86 بدايةً بطيئة. وقد أدى طرح تقنية 3DNow! من AMD وتقنية SSE من Intel إلى بعض الارتباك، ولكن يبدو أن النظام قد استقر اليوم (بعد أن اعتمدت AMD تقنية SSE)، ومن المتوقع أن تُسفر المترجمات الأحدث عن المزيد من البرامج التي تدعم تقنية SIMD. توفر كل من Intel وAMD الآن مكتبات رياضية مُحسّنة تستخدم تعليمات SIMD، وبدأت تظهر بدائل مفتوحة المصدر مثل libSIMD و SIMDx86 و SLEEF (انظر أيضًا libm ). [ 14 ]

حققت شركة آبل نجاحًا أكبر نسبيًا، رغم دخولها سوق تقنية SIMD متأخرًا عن غيرها. قدّمت تقنية AltiVec نظامًا غنيًا ، ويمكن برمجتها باستخدام مُجمّعات برمجية متطورة من موتورولا وآي بي إم وجنو ، ما قلّل الحاجة إلى برمجة لغة التجميع. إضافةً إلى ذلك، وفّرت آبل نفسها العديد من الأنظمة التي تستفيد من تقنية SIMD، مثل iTunes و QuickTime . مع ذلك، في عام 2006، انتقلت حواسيب آبل إلى معالجات Intel x86. وتم تعديل واجهات برمجة التطبيقات (APIs) وأدوات التطوير ( Xcode ) الخاصة بآبل لدعم SSE2 و SSE3 بالإضافة إلى AltiVec. كانت آبل المُشتري الرئيسي لرقائق PowerPC من آي بي إم وفري سكيل سيميكوندكتور . ورغم توقف آبل عن استخدام معالجات PowerPC في منتجاتها، إلا أن تطوير AltiVec مستمر في العديد من تصميمات PowerPC و Power ISA من فري سكيل وآي بي إم.

تقنية SIMD داخل المسجل ، أو SWAR ، هي مجموعة من التقنيات والأساليب المستخدمة لتنفيذ تعليمات SIMD في المسجلات العامة على الأجهزة التي لا تدعم تعليمات SIMD بشكل مباشر. ويمكن استخدام هذه التقنية لاستغلال التوازي في بعض الخوارزميات حتى على الأجهزة التي لا تدعم SIMD بشكل مباشر.

واجهة المبرمج

من الشائع أن يقوم ناشرو مجموعات تعليمات SIMD بإنشاء امتدادات خاصة بهم للغتين C و C++ تتضمن دوالًا مضمنة أو أنواع بيانات خاصة (مع تحميل زائد للمعاملات ) لضمان توليد شيفرة متجهة. توفر كل من Intel وAltiVec وARM NEON امتدادات معتمدة على نطاق واسع من قبل المترجمات التي تستهدف وحدات المعالجة المركزية الخاصة بها. (أما العمليات الأكثر تعقيدًا فتُنفذ بواسطة مكتبات الرياضيات المتجهة).

أنواع البيانات العامة

يُطوّر مُصرّف GNU C هذه الإضافات خطوةً أخرى بتجريدها إلى واجهة عالمية يُمكن استخدامها على أي منصة، وذلك بتوفير طريقة لتعريف أنواع بيانات SIMD. [15] كما يُطبّق مُصرّف LLVM Clang هذه الميزة ، بواجهة مُماثلة مُعرّفة في IR. [ 16 ] وتستخدم مكتبة Rust (والإصدار التجريبي ) هذه الواجهة، وكذلك Swift 2.0 والإصدارات الأحدث.packed_simdstd::simd

تحتوي لغة C++ على واجهة تجريبية std::experimental::simdتعمل بشكل مشابه لامتداد GCC. ويبدو أن مكتبة libcxx الخاصة بـ LLVM تُنفذها. بالنسبة لـ GCC و libstdc++، تتوفر مكتبة تغليف مبنية على امتداد GCC. [ 17 ]

أضافت مايكروسوفت تقنية SIMD إلى .NET في RyuJIT. [ 18 ]System.Numerics.Vector وتُنفّذ هذه الحزمة، المتوفرة على NuGet، أنواع بيانات SIMD. [ 19 ] كما يتوفر في Java واجهة برمجة تطبيقات جديدة مقترحة لتعليمات SIMD في OpenJDK 17 ضمن وحدة تجريبية. [ 20 ] وتتضمن أيضًا آلية احتياطية آمنة للوحدات المعالجة المركزية غير المدعومة، حيث يتم اللجوء إلى الحلقات البسيطة.

تلميحات حول التحويل إلى متجه

بدلاً من توفير نوع بيانات SIMD، يمكن أيضًا توجيه المترجمات لتفعيل خاصية التوجيه التلقائي لبعض الحلقات، مع إمكانية التحقق من عدم وجود تبعية بين البيانات. هذه الطريقة ليست بنفس مرونة التعامل المباشر مع متغيرات SIMD، ولكنها أسهل استخدامًا. يدعم OpenMP 4.0 والإصدارات الأحدث هذه هذه #pragma omp simdالخاصية. [ 21 ] وقد حلت واجهة OpenMP هذه محل مجموعة واسعة من الامتدادات غير القياسية، بما في ذلك Cilk [ 22#pragma simd ] و GCC [ 23 ] وغيرها الكثير.#pragma GCC ivdep

تتضمن مجموعة "SIMD every"، وهي عبارة عن مجموعة من ملفات رأس C/C++ التي تُنفذ وظائف داخلية خاصة بالمنصة لمنصات أخرى (مثل وظائف SSE الداخلية لمعالج ARM NEON)، استخدام وظائف داخلية خاصة بالمنصة، وواجهات متجهة عامة، وتلميحات للتحويل إلى متجه. ويمكن استخدامها كأداة مرجعية لمقارنة نماذج برمجة SIMD المختلفة هذه. [ 24 ]

SPMD-on-SIMD

ثمة نهج آخر هو SPMD : كتابة برنامج يبدو وكأنه يعالج عنصرًا واحدًا فقط في الوقت، ثم يقوم المترجم بتوسيعه ليتوافق مع عرض متجه SIMD. هذا هو النهج المستخدم في تظليل الرسومات ، والذي اعتمدته مؤخرًا أدوات موجهة لوحدة المعالجة المركزية مثل Intel IPSC. [ 25 ]

تعدد إصدارات SIMD

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

  • إصدار الوظائف المتعددة (FMV): يتم تكرار روتين فرعي في البرنامج أو مكتبة وتجميعه للعديد من امتدادات مجموعة التعليمات، ويقرر البرنامج أي منها سيستخدم في وقت التشغيل.
  • إصدار المكتبات المتعددة (LMV): يتم تكرار مكتبة البرمجة بأكملها للعديد من امتدادات مجموعة التعليمات، ويقرر نظام التشغيل أو البرنامج أي منها يتم تحميله في وقت التشغيل.

تُستخدم تقنية FMV، المكتوبة يدويًا بلغة التجميع، بشكل شائع في العديد من المكتبات الحساسة للأداء، مثل glibc وlibjpeg-turbo. يُتيح مُصرّف Intel C++ ، ومجموعة مُصرّفات GNU منذ الإصدار GCC 6، و Clang منذ الإصدار clang 7، منهجًا مُبسطًا، حيث يتولى المُصرّف مهمة تكرار الدوال واختيارها. يتطلب كل من GCC وclang target_clonesتحديدًا صريحًا في الكود لـ"استنساخ" الدوال، [ 26 ] بينما يقوم ICC بذلك تلقائيًا (ضمن خيار سطر الأوامر /Qax). تدعم لغة البرمجة Rust أيضًا تقنية FMV. يشبه الإعداد في Rust كلاً من GCC وClang، حيث يُحدد الكود مجموعات التعليمات المراد تجميعها، ولكن يتم الاستنساخ يدويًا عبر التضمين. [ 27 ]

بما أن استخدام تقنية FMV يتطلب تعديل الكود على GCC وClang، فإن الموردين يستخدمون عادةً تقنية تعدد إصدارات المكتبات: وهي أسهل في التنفيذ حيث لا يتطلب الأمر سوى تغيير خيارات المُصرّف. تدعم مكتبة Glibc تقنية LMV، وقد اعتمد مشروع Clear Linux المدعوم من Intel هذه الوظيفة. [ 28 ]

SIMD على الإنترنت

في عام 2013، أعلن جون ماكوتشان عن ابتكاره واجهة عالية الأداء لمجموعات تعليمات SIMD للغة البرمجة دارت ، مما أتاح مزايا SIMD لبرامج الويب لأول مرة. تتكون الواجهة من نوعين: [ 29 ]

  • Float32x4، 4 قيم فاصلة عائمة أحادية الدقة.
  • Int32x4، 4 قيم عددية صحيحة 32 بت.

تُعدّ هذه الأنواع من البيانات غير قابلة للتغيير، وفي الشيفرة المُحسّنة، تُربط مباشرةً بسجلات SIMD. عادةً ما تُجمّع العمليات المكتوبة بلغة Dart في تعليمة واحدة دون أي تكلفة إضافية، وهو ما يُشابه العمليات المضمنة في لغتي C وC++. تُظهر اختبارات الأداء لعمليات ضرب المصفوفات 4×4 ، وتحويل الرؤوس ثلاثي الأبعاد ، وتصوّر مجموعة ماندلبروت، تسارعًا يقارب 400% مقارنةً بالشيفرة العددية المكتوبة بلغة Dart.

أعلنت شركة إنتل في مؤتمر تطوير البرمجيات الدولي (IDF) عام 2013 أنها بصدد تطبيق مواصفات ماكوتشان لكل من محرك V8 وبرنامج SpiderMonkey . [ 30 ] ومع ذلك، بحلول عام 2017، تم استبعاد SIMD.js من قائمة معايير ECMAScript لصالح تطوير واجهة مماثلة في WebAssembly . [ 31 ]

أُضيفت خاصية دعم SIMD إلى مواصفات WebAssembly 2.0، التي اكتملت في عام 2022 وأصبحت رسمية في ديسمبر 2024. [ 32 ] ويمكن لخاصية التوجيه التلقائي LLVM، عند ترجمة لغات C أو C++ إلى WebAssembly، استهداف WebAssembly SIMD للاستفادة منه تلقائيًا، مع العلم أن وظائف SIMD المضمنة متاحة أيضًا. [ 33 ]

التطبيقات التجارية

لقد ثبت عموماً صعوبة إيجاد تطبيقات تجارية مستدامة للمعالجات التي تعتمد على تقنية SIMD فقط في الحوسبة للأغراض العامة.

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

يُعدّ استخدام تقنية SIMD أكثر شيوعًا في ألعاب الفيديو ، إذ تحتوي جميع أجهزة ألعاب الفيديو الحديثة تقريبًا منذ عام 1998 على معالج SIMD ضمن بنيتها. وكان جهاز PlayStation 2 فريدًا من نوعه، حيث كان بإمكان إحدى وحدات معالجة المتجهات العائمة فيه العمل كمعالج إشارات رقمية (DSP) مستقل، يُنفّذ سلسلة تعليماته الخاصة، أو كمعالج مساعد يُشغّل بواسطة تعليمات وحدة المعالجة المركزية العادية. وتُعدّ تطبيقات الرسومات ثلاثية الأبعاد مناسبة جدًا لمعالجة SIMD، نظرًا لاعتمادها الكبير على العمليات مع المتجهات رباعية الأبعاد. ويقوم برنامج Direct3D 9.0 من مايكروسوفت الآن باختيار تطبيقات خاصة بالمعالج لعملياته الرياضية أثناء التشغيل، بما في ذلك استخدام التعليمات التي تدعم تقنية SIMD.

من المعالجات اللاحقة التي استخدمت معالجة المتجهات معالج Cell المستخدم في جهاز PlayStation 3، والذي طورته شركة IBM بالتعاون مع شركتي Toshiba و Sony . يستخدم هذا المعالج عددًا من معالجات SIMD (وهي بنية وصول غير موحد للذاكرة NUMA، لكل منها مخزن محلي مستقل ويتم التحكم بها بواسطة وحدة معالجة مركزية للأغراض العامة)، وهو مصمم للتعامل مع مجموعات البيانات الضخمة التي تتطلبها تطبيقات معالجة الرسومات ثلاثية الأبعاد والفيديو. ويختلف عن بنى مجموعات التعليمات التقليدية (ISAs) بكونه معالج SIMD منذ البداية، دون وجود سجلات قياسية منفصلة.

أنتجت شركة زيلابز معالجًا من نوع SIMD للاستخدام في الأجهزة المحمولة، مثل مشغلات الوسائط والهواتف المحمولة. [ 34 ]

تتوفر معالجات SIMD تجارية واسعة النطاق من شركتي ClearSpeed ​​Technology, Ltd. وStream Processors, Inc. يحتوي معالج CSX600 (2004) من ClearSpeed ​​على 96 نواة، كل منها مزود بوحدتي حساب فاصلة عائمة مزدوجة الدقة، بينما يحتوي معالج CSX700 (2008) على 192 نواة. يرأس شركة Stream Processors مهندس الحواسيب بيل دالي . يحتوي معالج Storm-1 (2007) الخاص بهم على 80 نواة SIMD يتم التحكم بها بواسطة وحدة معالجة مركزية MIPS .

انظر أيضاً

مراجع

  1. فلين، مايكل ج. (سبتمبر 1972). "بعض تنظيمات الحاسوب وفعاليتها" (ملف PDF) . معاملات IEEE في مجال الحواسيب . C-21 (9): 948-960 . doi : 10.1109/TC.1972.5009071 .
  2. "نسخة مؤرشفة" (PDF) . مؤرشفة من النسخة الأصلية (PDF) بتاريخ 27-04-2024.{{cite web}}: CS1 maint: archived copy as title ( link )
  3. "MIMD1 - XP/S, CM-5" (PDF) .
  4. كونتي، ج.؛ توميساني، س.؛ زانيكيلي، ف. (2000). "الطريق الطويل والمتعرج نحو معالجة الصور عالية الأداء باستخدام MMX/SSE". وقائع ورشة العمل الدولية الخامسة لمعهد مهندسي الكهرباء والإلكترونيات حول بنى الحاسوب للإدراك الآلي . doi : 10.1109/CAMP.2000.875989 . hdl : 11381/2297671 . S2CID 13180531 . 
  5. لي، آر بي (1995). "فيديو MPEG في الوقت الحقيقي عبر فك ضغط البرمجيات على معالج PA-RISC". ملخص أوراق مؤتمر Compcon '95. تقنيات الطريق السريع للمعلومات . الصفحات 186-192 . doi : 10.1109/CMPCON.1995.512384 . ISBN  0-8186-7029-0. S2CID 2262046 . 
  6. "تحليل أداء معالج AMD Zen 4 AVX-512 على جهاز Ryzen 9 7950X" . www.phoronix.com . تاريخ الاطلاع: 13 يوليو 2023 .
  7. باترسون، ديفيد؛ ووترمان، أندرو (18 سبتمبر 2017). "تعليمات SIMD تعتبر ضارة" . SIGARCH .
  8. لام، تشيستر. "GCN، تحديث بنية معالجات الرسومات من AMD" . chipsandcheese.com .
  9. لام، تشيستر. "Hot Chips 34 – AMD's Instinct MI200 Architecture" . chipsandcheese.com . في كل من NVIDIA و AMD، تكسر تعليمات المصفوفة نموذج تجريد SIMT وتعمل عبر جبهة موجة كاملة (أو "warp" في NVIDIA).
  10. "الإصدار 2.3 27/8/2009 دليل برمجة OpenCL لبنية CUDA" (PDF) .
  11. ردًا على: سرعة SSE2 ، يوضح كيفية استخدام SSE2 لتنفيذ خوارزميات تجزئة SHA
  12. سرعة Salsa20؛ برنامج Salsa20 ، يعرض تشفيرًا متدفقًا مُنفذًا باستخدام SSE2
  13. الموضوع: زيادة إنتاجية RSA إلى 1.4x باستخدام SSE2 ، مع توضيح تنفيذ RSA باستخدام تعليمات ضرب الأعداد الصحيحة غير SIMD SSE2.
  14. "وظائف الرياضيات في مكتبة SIMD" . موقع Stack Overflow . تم الاطلاع عليه بتاريخ 16 يناير 2020 .
  15. "امتدادات المتجهات" . باستخدام مجموعة مترجمات جنو (GCC) . تم الاسترجاع في 16 يناير 2020 .
  16. "امتدادات لغة Clang" . وثائق Clang 11. تم الاطلاع عليه بتاريخ 16 يناير 2020 .
  17. "VcDevel/std-simd" . VcDevel. 6 أغسطس 2020.
  18. "RyuJIT: الجيل التالي من مترجم JIT لـ .NET" . 30 سبتمبر 2013.
  19. "أخيراً تقدم فريق التحقيق المشترك بالزواج. فريق التحقيق المشترك ومعهد إدارة التنمية الصناعية سيتزوجان" . 7 أبريل 2014.
  20. "JEP 338: Vector API" .
  21. "توجيهات SIMD" . www.openmp.org .
  22. "دليل استخدام pragma simd" . CilkPlus . ١٨ يوليو ٢٠١٢. مؤرشف من الأصل في ٤ ديسمبر ٢٠٢٠. تم الاطلاع عليه في ٩ أغسطس ٢٠٢٠ .
  23. كروس، مايكل. "OMP5.1: تحويلات الحلقات" (PDF) .
  24. "simd-everywhere/simde: تطبيقات لمجموعات تعليمات SIMD للأنظمة التي لا تدعمها أصلاً" . GitHub . SIMD Everywhere. 6 نوفمبر 2025.
  25. فار، مات؛ مارك، ويليام ر. (مايو 2012). ispc: مُصرّف SPMD لبرمجة وحدة المعالجة المركزية عالية الأداء (ملف PDF) . مؤتمر الحوسبة المتوازية المبتكرة 2012 (InPar). الصفحات 1-13 . doi : 10.1109/InPar.2012.6339601 . 
  26. "وظيفة تعدد الإصدارات في GCC 6" . lwn.net . 22 يونيو 2016.
  27. "2045-target-feature" . كتاب Rust RFC .
  28. "استخدام شفاف لحزم المكتبات المُحسّنة لبنية Intel®" . مشروع Clear Linux* . تم الاطلاع عليه بتاريخ 8 سبتمبر 2019 .
  29. جون مكوتشان. "تقديم SIMD إلى الويب عبر Dart" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 2013-12-03.
  30. "SIMD في جافا سكريبت" . 01.org . 8 مايو 2014.
  31. "tc39/ecmascript_simd: نوع SIMD الرقمي لـ EcmaScript" . GitHub . Ecma TC39. 22 أغسطس 2019. تم الاطلاع عليه في 8 سبتمبر 2019 .
  32. "تم إكمال Wasm 2.0 - WebAssembly" .
  33. "استخدام SIMD مع WebAssembly" . وثائق Emscripten 4.0.11-git (dev) .
  34. "معالج الوسائط ZMS-05 ARM 9 من ZiiLABS" . ZiiLabs . مؤرشف من الأصل بتاريخ 18 يوليو 2011. تم الاطلاع عليه بتاريخ 24 مايو 2010 .