تدعم بعض أحدث معالجات Intel مجموعة تعليمات المتجهات AVX-512. يتم تنفيذها في كتل من 512 بت (64 بايت). تتمثل ميزة دعم الأجهزة لمثل هذه التعليمات الكبيرة في أن المعالج يعالج المزيد من البيانات في كل دورة على مدار الساعة.
إذا تم تحميل التعليمات البرمجية بكلمات 64 بت (8 بايت)، فمن الناحية النظرية، إذا لم تأخذ عوامل أخرى في الاعتبار، فيمكنك تسريع تنفيذها بمقدار ثماني مرات إذا كنت تستخدم تعليمات AVX-512.
يدعم ملحق مجموعة التعليمات AVX-512 x86 8 تسجيلات للأقنعة، وتنسيقات وعمليات أعداد صحيحة وكسرية 512 بت، والتحكم الدقيق في أوضاع التقريب (يسمح لك بتجاوز الإعدادات العامة)، وعمليات البث، وقمع الأخطاء في العمليات الجزئية، والتجميع/التشتت العمليات، العمليات الحسابية السريعة، الترميز المدمج للإزاحات الكبيرة.
تشتمل مجموعة AVX-512 الأولية على ثماني مجموعات من التعليمات:
بطبيعة الحال، لا يمكن تحويل كل التعليمات البرمجية إلى تعليمات متجهة، ولكنك لا تحتاج إلى القيام بذلك مع كل التعليمات البرمجية، كما كتب دانييل ليمير، أستاذ علوم الكمبيوتر في جامعة كيبيك، في مدونته. ووفقا له، من المهم تحسين "الكود الساخن"، الذي يستهلك معظم موارد المعالج. في العديد من الأنظمة، يتم إنشاء الكود الساخن من سلسلة من الحلقات التي يتم تكرارها مليارات المرات. هذا هو بالضبط ما ينبغي تحسينه، وهذه هي الفائدة الرئيسية.
على سبيل المثال، إذا تمت إعادة ترجمة كود Python من تعليمات 64 بت القياسية إلى AVX-512 باستخدام MKL Numpy، فسيتم تقليل وقت التنفيذ من 6-7 ثوانٍ إلى ثانية واحدة على نفس المعالج.
استيراد numpy كـ np np.random.seed(1234) xx = np.random.rand(1000000).reshape(1000, 1000) %timeit np.linalg.eig(xx)
هناك الآن تفاهم بين المستثمرين المغامرين على أن المخطط الأكثر فعالية لتحقيق الثراء السريع هو إطلاق شركة ناشئة في مجال التعلم العميق، والتي سيتم شراؤها على الفور من قبل شركة من الشركات الخمس الكبرى (فيسبوك، وجوجل، وأبل، ومايكروسوفت، أمازون). وقد شهدت هذه الشركات مؤخراً تنافساً شرساً في مجال شراء المواهب، بحيث تغادر الشركة الناشئة على الفور وبسعر رائع بمعدل لا يقل عن 10 ملايين دولار لكل موظف. أصبحت خطة العمل هذه أسهل الآن مع قيام الشركات بإصدار أدوات تطوير مفتوحة المصدر، مثلما فعلت Google مع TensorFlow.
لسوء الحظ بالنسبة لشركة Intel، فإن الشركة متخلفة هنا وبالكاد تدخل اللعبة. يعترف البروفيسور ليمير بأن وحدات معالجة الرسوميات Nvidia تعتبر الآن معيار الصناعة. يتم تشغيل التعليمات البرمجية لبرامج التعلم الآلي عليها.
ليس الأمر أن مهندسي إنتل ناموا خلال هذا الاتجاه. كل ما في الأمر هو أن وحدات معالجة الرسومات نفسها، دون أي تعليمات خاصة، هي أكثر ملاءمة لحسابات التعلم العميق.
ومع ذلك، تستعد شركة إنتل لهجوم مضاد قد يقلب الوضع رأسًا على عقب. في سبتمبر، نشرت الشركة مرجعًا جديدًا لبرمجة مجموعة تعليمات هندسة Intel، والذي يوضح جميع التعليمات التي سيتم دعمها في المعالجات المستقبلية. إذا نظرت إلى هذه الوثيقة، تنتظرنا مفاجأة سارة. اتضح أن عائلة تعليمات AVX-512 تم تقسيمها إلى عدة مجموعات وتم توسيعها.
على وجه الخصوص، تم تصميم مجموعتين من التعليمات خصيصًا للتعلم العميق: AVX512_4VNNIW وAVX512_4FMAPS. إذا حكمنا من خلال الوصف، يمكن أن تكون هذه التعليمات مفيدة ليس فقط في التعلم العميق، ولكن أيضًا في العديد من المهام الأخرى.
معالجة السلسلة
مجموعات التعليمات SSE4.2
قراءة ذاكرة مرحاض
عملية قراءة تسمح لك بتسريع (حتى 7.5 مرات) العمل مع مناطق الذاكرة المدمجة للكتابة.
تقوم هذه التعليمات بإجراء مقارنات حسابية بين جميع أزواج الحقول الممكنة (64 أو 256 مقارنة!) من كلا السلسلتين المعطاة بواسطة محتويات xmm1 وxmm2/m128. تتم بعد ذلك معالجة النتائج المنطقية للمقارنات للحصول على النتائج المرجوة. تتحكم الوسيطة المباشرة imm8 في الحجم (سلاسل البايت أو Unicode، حتى 16/8 عنصر لكل منها)، وتوقيع الحقول (عناصر السلسلة)، ونوع المقارنة، وتفسير النتائج.
يمكنهم البحث في سلسلة (منطقة الذاكرة) عن أحرف من مجموعة معينة أو في نطاقات معينة. يمكنك مقارنة السلاسل (مناطق الذاكرة) أو البحث عن سلاسل فرعية.
تؤثر جميعها على إشارات المعالج: يتم تعيين SF إذا لم تكن xmm1 سلسلة كاملة، ويتم تعيين ZF إذا لم تكن xmm2/m128 سلسلة كاملة، ويتم تعيين CF إذا كانت النتيجة ليست صفرًا، ويتم تعيين OF إذا كانت البتة الأقل أهمية من والنتيجة ليست صفر. تتم إعادة ضبط علامتي AF وPF.
ملحقات المتجهات المتقدمة(AVX) هو امتداد لمجموعة تعليمات x86 لمعالجات Intel وAMD الدقيقة، اقترحته شركة Intel في مارس 2008.
يوفر AVX العديد من التحسينات والتعليمات الجديدة ونظام ترميز رمز الجهاز الجديد.
تحسينات:
يزداد حجم سجلات ناقل SIMD من 128 (XMM) إلى 256 بت (يسجل YMM0 - YMM15). ستستخدم تعليمات 128 بت الموجودة النصف المنخفض من سجلات YMM الجديدة. في المستقبل، من الممكن التوسع إلى 512 أو 1024 بت.
العمليات غير التدميرية تسمح مجموعة تعليمات AVX باستخدام أي تعليمات XMM ذات معاملين في نموذج ثلاثي المعاملات دون تعديل السجلين المصدريين، مع وجود سجل منفصل للنتيجة. على سبيل المثال، بدلاً من a = a + b، يمكنك استخدام c = a + b، بينما يظل تسجيل a بدون تغيير. لا يدعم AVX أشكال العمليات غير المتلفة على سجلات الأغراض العامة العادية مثل EAX، ولكن يمكن إضافة هذا الدعم في الامتدادات المستقبلية.
تم تخفيف متطلبات محاذاة البيانات لمعاملات SIMD في الذاكرة.
يوفر نظام ترميز رمز الجهاز VEX الجديد مجموعة جديدة من بادئات التعليمات البرمجية التي تعمل على توسيع مساحة رموز الجهاز المحتملة. تمت إضافة تعليمات بأكثر من ثلاثة معاملات. يمكن أن تكون سجلات متجهات SIMD أكبر من 128 بت.
تعليمات جديدة:
تصف مواصفات AVX أيضًا مجموعة من التعليمات تسمى PCLMUL (الضرب المتوازي بدون حمل، Parallel CLMUL)
طلب:
مناسبة للتطبيقات المكثفة للفاصلة العائمة في الوسائط المتعددة والتطبيقات العلمية والمالية. يزيد من التوازي والإنتاجية في حوسبة SIMD الحقيقية. يقلل الضغط (الحمل) على السجلات بفضل العمليات الثلاثية غير المدمرة.
اليوم أريد أن أبدأ محادثة حول ما هي تعليمات avx الموجودة في المعالج، وأين يتم استخدامها وما هي الأغراض التي تستخدم من أجلها.
يذهب المتسوق العادي إلى المتجر ويريد شراء جهاز كمبيوتر/كمبيوتر محمول للعمل واللعب. من الناحية العملية، من الأقوى والأرخص كتابة مقال في برنامج Word ثم اللعب.
أما بالنسبة للمعالجات، فهناك جذوع غاضبة على الرفوف تساوي قوة i-3s. هل i3 مؤامرة تسويقية؟ هل بنتيوم حقًا "نفس النوع 3 أرخص فقط"؟ نعم و لا. هنا الحاجة.
لكتابة مقال في Word، سيكفي أرخص Celeron (ويمكنك الحصول على "معالج توصيل" أرخص إذا قمت بشرائه من سوق للسلع الرخيصة والمستعملة مع إيصال وبقية الضمان).
لتشغيل جميع الألعاب بعد الملخص، فإن Pentium مع مكونات i-3 (2 نواة و4 خيوط) مناسب. بالنسبة للألعاب، تعليمات AVX ليست مطلوبة (طالما أن عناصر SSE الضرورية موجودة).
ولكن بالنسبة للمهام المهنية، ستكون المحاكاة الافتراضية للأجهزة ودعم تعليمات AVX مفيدة، لذلك من الأفضل أن تأخذ i-3 على الأقل.
لماذا نحتاج إلى تعليمات AVX؟
ما هو مدرج في عدد من المهام المهنية؟ كقاعدة عامة، تفتقر الحجارة التي لا تحتوي على AVX أيضًا إلى تسريع المحاكاة الافتراضية للأجهزة.
التطوير لنظام Android، والذي سيتطلب جهازًا افتراضيًا من نفس المجموعة (بعض المحاكيات لن تبدأ حتى، وبعضها سيعمل للأسف، مما يؤدي إلى تحميل النواة بشكل كبير).
مضغ بيانات الوسائط المتعددة (من معالجة الصور إلى تشفير الفيديو وتقطيع الرسومات ثلاثية الأبعاد، لذا يجب على اللاعبين في لعبة هيا نلعب أن ينفقوا المزيد على معالج أكثر تكلفة).
إذا كان بدون AVX
المعالج لديه سجلات للتعليمات.
سجل SSE هو 128 بت، وسجل AVX هو 256 بت.
وبالتالي، لكي لا تذهل أي شخص بتشريح الحجر، دعنا نقول فقط - 256 لن يتناسب مع 128.
بدون AVX، يمكنك أيضًا معالجة الصور ومضغ مقاطع الفيديو والقص ثلاثي الأبعاد. ولكن هناك فروق دقيقة ...
لتبسيط الأمر، فإن معالج Xeon القديم ثماني النواة (غير القادر على AXV) سيقطع مقاطع الفيديو بنفس سرعة معالج i3 الحديث (القادر على AVX).
يحتوي المعالج على خط أنابيب: فهو يكتشف مكان أخذه من الذاكرة، ويأخذه من الذاكرة، ويحسبه، ويرسل النتائج إلى الذاكرة.
يمكن تصوير خط أنابيب مبسط مع AVX وبدونه على النحو التالي.
كما ترون، هناك عمليات أقل في الحالة الثانية. ومن المنطقي أن نفترض أن عداد AVX يعمل بشكل أسرع (في كل دورة حسابية). وبما أنه أسرع في كل دورة على مدار الساعة، فإن وجود عدد أقل من جيجاهيرتز يمكنك الحساب بشكل أسرع.
شيء جيد آخر في AVX هو المعامل الإضافي. لا يتم استخدام معاملين، بل 3، مما يؤدي أيضًا إلى تقصير خط الأنابيب. لنفترض أننا نريد إضافة X وY.
الكود: عملية عادية، حيث سيؤدي معاملان (X=X+Y) إلى الكتابة فوق أحد المعاملات.
عملية AVX، حيث تتيح لك 3 معاملات (Z=X+Y) كتابة النتيجة إلى المعامل الثالث.
صعب؟ حسنًا، لنبقي الأمر بسيطًا.
سيكون إنشاء مقاطع الفيديو باستخدام AVX أسرع. لأنه، بالإضافة إلى ما سبق، تتم إضافة مكافأة الانهيار الأمثل للإطار.
لا يقوم الكمبيوتر بإعادة حساب كل إطار. يقوم بتقسيم الإطار إلى مستطيلات ومقارنتها، وإذا وجد المناسب يستخدم القطعة النهائية.
هنا تعلمت AVX العمل مع مقاطع الفيديو بشكل أكثر مثالية (للمهتمين، اقرأ من المحترفين، وسأقتصر على صورة جميلة).
سابقا، كان الانهيار كما هو مبين على اليسار. يمكن لتقسيم AVX القيام بأشياء أكثر ذكاءً - كما هو موضح على اليمين.
تلخيص
لكتابة ملخص في Word، فإن أي معالج مناسب.
من أجل لعب لعبة بدلاً من كتابة مقال بعد ذلك، فإن الجذع الذي يحتوي على ما يصنعه I-third سيفي بالغرض.
لقص المحتوى، من الأفضل الاستغناء عن الثلث.
يستخدم كود C++ الخاص بي SSE وأريد الآن تحسينه لدعم AVX عندما يكون متاحًا. لذلك اكتشفت أن AVX متاح وقمت باستدعاء وظيفة تستخدم أوامر AVX. أنا أستخدم Win7 SP1 + VS2010 SP1 ووحدة المعالجة المركزية مع AVX.
لاستخدام AVX، يجب عليك تمكين ما يلي:
#تشمل "immintrin.h"
وبعد ذلك يمكنك استخدام وظائف AVX المضمنة مثل _mm256_mul_ps و _mm256_add_ps وما إلى ذلك. تكمن المشكلة في أن VS2010 ينتج بشكل افتراضي تعليمات برمجية تعمل ببطء شديد وتظهر تحذيرًا:
تحذير C4752: تم العثور على امتدادات ناقل Intel(R)؛ فكر في استخدام /arch:AVX
يبدو أن VS2010 لا يستخدم تعليمات AVX فعليًا، ولكنه يحاكيها بدلاً من ذلك. أضفت /arch:AVX إلى خيارات المترجم وحصلت على نتائج جيدة. لكن هذا الخيار يخبر المترجم باستخدام أوامر AVX عندما يكون ذلك ممكنًا. لذلك قد يتعطل الكود الخاص بي على وحدة المعالجة المركزية التي لا تدعم AVX!
لذا فإن السؤال هو كيفية جعل المترجم VS2010 ينتج كود AVX، ولكن فقط عندما أقوم بتحديد مكونات AVX المضمنة بشكل صريح. بالنسبة إلى SSE، فهو يعمل، أنا فقط أستخدم وظائف SSE الداخلية ويقوم بإنشاء كود SSE دون أي خيارات مترجم مثل /arch:SSE . لكن بالنسبة لـ AVX فهو لا يعمل لسبب ما.
2 إجابات
السلوك الذي تراه هو نتيجة تبديل الحالة المكلف.
انظر الصفحة 102 من دليل Agner Fog:
في كل مرة تقوم فيها بالتبديل بين أوامر SSE وAVX بشكل غير صحيح، فإنك تدفع غرامة عالية للغاية (~70).
عند التحويل البرمجي بدون /arch:AVX ، سيقوم VS2010 بإنشاء تعليمات SSE، لكنه سيظل يستخدم AVX أينما كان لديك وظائف AVX مدمجة. لذا، سينتهي بك الأمر بالحصول على تعليمات برمجية تحتوي على تعليمات SSE وAVX والتي ستترتب عليها عقوبات تبديل الحالة. (يعرف VS2010 ذلك، ولهذا السبب يصدر التحذير الذي تراه.)
ولذلك يجب عليك استخدام كل SSE أو كل AVX. الإعداد /arch:AVX يخبر المترجم باستخدام كافة ملفات AVX.
يبدو أنك تحاول إنشاء مسارات تعليمات برمجية متعددة: واحد لـ SSE والآخر لـ AVX. للقيام بذلك، أقترح عليك تقسيم كود SSE وAVX الخاص بك إلى وحدتي تجميع مختلفتين. (واحد تم تجميعه باستخدام /arch:AVX والآخر بدونه). ثم قم بتجميعها معًا وقم بإنشاء مرسل للاختيار بناءً على الأجهزة التي يعمل عليها.
إذا كنت بحاجة إلى الجمع بين SSE وAVX، فتأكد من استخدام _mm256_zeroupper() أو _mm256_zeroall() لتجنب عقوبات تبديل الحالة.
/* استخدم VZEROUPPER لتجنب عقوبة التبديل من AVX إلى SSE. راجع دليل تحسين Intel (أبريل 2011، الإصدار 248966)، القسم 11.3 */ #define VLEAVE _mm256_zeroupper
ثم VLEAVE(); يتم استدعاؤها في نهاية كل وظيفة باستخدام تعليمات AVX المضمنة.
يستخدم نظام ترميز تعليمات VEX الجديد البادئة VEX. يوجد حاليًا بادئتان VEX بطول 2 و3 بايت. بالنسبة لبادئة VEX ذات 2 بايت، فإن البايت الأول هو 0xC5، ولبادئة VEX ذات 3 بايت، 0xC4. في وضع 64 بت، يكون البايت الأول من بادئة VEX فريدًا. في وضع 32 بت، يوجد تعارض مع تعليمات LES وLDS، والذي يتم حله بواسطة البت الأكثر أهمية من البايت الثاني؛ وهو ذو معنى فقط في وضع 64 بت، من خلال النماذج غير المدعومة لتعليمات LES وLDS. لا يتجاوز طول تعليمات AVX الموجودة، بما في ذلك بادئة VEX، 11 بايت. ومن المتوقع وجود تعليمات أطول في الإصدارات المستقبلية.
تعليمات | وصف |
---|---|
VBROADCASTSS، VBROADCASTSD، VBROADCASTF128 | نسخ معامل 32 أو 64 أو 128 بت من الذاكرة إلى كافة عناصر سجل المتجهات XMM أو YMM. |
فينسيرتف128 | يستبدل النصف المنخفض أو العالي من تسجيل YMM 256 بت بقيمة معامل 128 بت. لم يتم تغيير الجزء الآخر من سجل الوجهة. |
فيكستراكتف128 | استرداد النصف المنخفض أو العالي من سجل YMM 256 بت ونسخه إلى معامل وجهة 128 بت. |
VMASKMOVPS، VMASKMOVPD | يقرأ بشكل مشروط أي عدد من العناصر من المعامل المتجه من الذاكرة إلى سجل الوجهة، ويترك العناصر المتبقية غير مقروءة ويمسح العناصر المقابلة لسجل الوجهة إلى الصفر. يمكنه أيضًا كتابة أي عدد من العناصر بشكل مشروط من سجل متجه إلى معامل متجه في الذاكرة، مع ترك العناصر المتبقية من معامل الذاكرة دون تغيير |
فبيرميلبس، فبيرميلبد | يعيد ترتيب العناصر المتجهة ذات 32 أو 64 بت وفقًا لمعامل التحديد (من الذاكرة أو من السجل). |
VPERM2F128 | إعادة ترتيب 4 عناصر 128 بت من مسجلين 256 بت في معامل وجهة 256 بت باستخدام ثابت فوري (imm) كمحدد. |
فيزروال | مسح جميع سجلات YMM ووضع علامة عليها على أنها غير مستخدمة. يُستخدم عند التبديل بين وضع 128 بت ووضع 256 بت. |
VZEROUPPER | يعيد تعيين النصف الأعلى لجميع تسجيلات YMM إلى الصفر. يُستخدم عند التبديل بين وضع 128 بت ووضع 256 بت. |
تصف مواصفات AVX أيضًا مجموعة من التعليمات تسمى PCLMUL (الضرب المتوازي بدون حمل، Parallel CLMUL)
مناسبة لإجراء العمليات الحسابية المكثفة للفاصلة العائمة في برامج الوسائط المتعددة والمهام العلمية. عندما تكون درجة أعلى من التوازي ممكنة، يزيد الأداء مع الأعداد الحقيقية.
يتطلب استخدام سجلات YMM دعمًا من نظام التشغيل. تدعم الأنظمة التالية سجلات YMM:
تمت مناقشة التوافق بين تطبيقات Intel وAMD في مجموعة تعليمات XOP.
يسمح نظام ترميز تعليمات VEX بسهولة بتوسيع مجموعة تعليمات AVX. في الإصدار التالي، AVX2، من المخطط إضافة تعليمات للعمل مع الأعداد الصحيحة، FMA3 (سيزيد الأداء عند معالجة أرقام الفاصلة العائمة بمقدار 2 مرات)، وتحميل المتجه الموزع في الذاكرة (التجميع)، وما إلى ذلك.
العديد من الإضافات المخطط لها لمجموعة تعليمات x86:
مجموعات ملحقات التعليمات الأساسية لمعالجات عائلة x86 |
---|
ام ام اكس | ممكسكست | سس | SSE2 | SSE3 | SSSE3 | SSE4 | آتا | 3 دي ناو! | 3DNowExt | SSE5 | AVX| الخدمات المعمارية والهندسية |
مؤسسة ويكيميديا. 2010.
أفكس- (((صورة))) Sigles d une seule letter Sigles de deux letters > Sigles de trois letters AAA à DZZ EAA à HZZ IAA à LZZ MAA à PZZ QAA à TZZ UAA à XZZ … Wikipédia باللغة الفرنسية
AVX- Sigles d’une seule letter Sigles de deux letters > Sigles de trois letters Sigles de quatre letters Sigles de cinq letters Sigles de six letter Sigles de sept… … Wikipédia en Français