لماذا لا توجد تعارضات مصرفية في الذاكرة العالمية لـ CUDA/OPENCL؟

StackOverflow https://stackoverflow.com/questions/3843032

سؤال

شيء واحد لم أحسبه ولم تساعدني Google ، هو لماذا من الممكن أن يكون لديك تعارضات مصرفية مع ذاكرة مشتركة ، ولكن ليس في الذاكرة العالمية؟ هل يمكن أن يكون هناك تعارضات مصرفية مع السجلات؟

تحديثواو أنا حقًا أقدر الإجابات من Tibbit و Grizzly. يبدو أنه لا يمكنني إلا أن أعطي علامة فحص خضراء لإجابة واحدة. أنا جديد لمكدس الفائض. أعتقد أنني يجب أن أختار إجابة واحدة كأفضل. هل يمكنني فعل شيء لأقوله ، شكرًا للإجابة التي لا أعطيها شيكًا أخضر؟

هل كانت مفيدة؟

المحلول

اجابة قصيرة: لا توجد تعارضات مصرفية في الذاكرة العالمية أو في السجلات.

تفسير:

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

يمكن الوصول إلى الذاكرة المشتركة بواسطة مؤشرات الترابط في وقت واحد. عندما يحاول خيطان الوصول إلى عنوان داخل نفس البنك ، فإن هذا يتسبب في تعارض بنكي.

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

من يمكنه القراءة والكتابة إلى الذاكرة العالمية؟

Only blocks. يمكن لخيط واحد الوصول إلى وصول ، ولكن ستتم معالجة المعاملة على مستوى الكتلة (في الواقع مستوى الاعوجاج / النصف ، لكنني أحاول ألا أكون معقدًا). إذا تصل كتلتين إلى نفس الذاكرة ، فلا أعتقد أن الأمر سيستغرق وقتًا أطول وقد يحدث ذلك من خلال ذاكرة التخزين المؤقت L1 في أحدث الأجهزة - على الرغم من أن هذا ليس واضحًا بشفافية.

من يمكنه القراءة والكتابة إلى الذاكرة المشتركة؟

Any thread within a given block. إذا كان لديك موضوع واحد فقط لكل كتلة ، فلن يكون لديك تعارض بنكي ، لكن لن يكون لديك أداء معقول. تحدث النزاعات المصرفية لأنه يتم تخصيص كتلة مع العديد من الخيوط 512 ، وكلها تتنافس على عناوين مختلفة داخل نفس البنك (وليس العنوان نفسه تمامًا). هناك بعض الصور الممتازة لهذه الصراعات في نهاية دليل برمجة CUDA C - الشكل G2 ، في الصفحة 167 (في الواقع صفحة 177 من PDF). رابط إلى الإصدار 3.2

من يمكنه القراءة والكتابة إلى السجلات؟

Only the specific thread to which it is allocated. وبالتالي فإن موضوع واحد فقط هو الوصول إليه في وقت واحد.

نصائح أخرى

ما إذا كان يمكن أن يكون هناك تعارضات مصرفية على نوع معين من الذاكرة تعتمد بشكل واضح على بنية الذاكرة وبالتالي غرضها.

فلماذا تم تصميم الذاكرة المشتركة بطريقة تسمح بالصراعات المصرفية؟

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

ماذا عن السجلات؟

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

الذاكرة العالمية

بادئ ذي بدء ، تعمل الذاكرة العالمية على جران مختلف ثم تشارك الذاكرة. يتم الوصول إلى الذاكرة في كتل 32 أو 64 أو 128Byte (بالنسبة لـ GT200 على الأقل ، بالنسبة إلى Fermi ، تبلغ 128 ب دائمًا ، ولكن المخزنة مؤقتًا ، تختلف AMD قليلاً) ، حيث يتم الوصول إلى/في كل مرة تريد فيها شيء من كتلة كاملة يتم الوصول إليها/نقلها. هذا هو السبب في أنك تحتاج إلى إمكانية الوصول إلى colles ، لأنه إذا كان كل مؤشر ترابط يصل إلى الذاكرة من كتلة مختلفة ، فيجب عليك نقل جميع الكتل.

لكن من يقول أنه لا توجد صراعات مصرفية؟ لست متأكدًا تمامًا من هذا ، لأنني لم أجد أي مصادر فعلية لدعم ذلك لأجهزة Nvidia ، ولكن يبدو من المنطقي: يتم توزيع الذاكرة العالمية عادة على العديد من رقائق RAM (والتي يمكن التحقق منها بسهولة من خلال النظر في بطاقة مصورات). سيكون من المنطقي ، إذا كانت كل من هذه الرقائق مثل بنك من الذاكرة المحلية ، لذلك ستحصل على تعارضات مصرفية إذا كان هناك العديد من الطلبات المتزامنة على نفس البنك. ومع ذلك ، ستكون التأثيرات أقل وضوحًا لشيء واحد (نظرًا لأن معظم الوقت الذي تستهلكه الوصول إلى الذاكرة هو زمن الوصول للحصول على البيانات من A إلى B على أي حال) ، ولن يكون تأثيرًا "داخليًا" لمجموعة عمل واحدة (نظرًا لأن نصف السوار فقط ينفذ في وقت واحد ، وإذا كان هذا هو الذي يصدر فيه نصف السهم ، فإن أحدهم يطلب أن يكون لديك وصول غير مصقول للذاكرة ، لذلك فأنت تتعرض بالفعل لضرب مما يجعل من الصعب قياس تأثيرات هذا الصراع. تحاول عدة مجموعات عمل للوصول إلى نفس البنك. في الموقف النموذجي الخاص بك لـ GPGPU ، لديك مجموعة بيانات كبيرة تقع في ذاكرة متسلسلة ، وبالتالي لا ينبغي أن تكون التأثيرات ملحوظة حقًا لأن هناك ما يكفي من مجموعات العمل الأخرى للوصول إلى البنوك الأخرى في نفس الوقت ، ولكنها يجب أن يكون من الممكن بناء المواقف التي تتركز فيها مجموعة البيانات على عدد قليل من البنوك ، مما سيحقق نجاحًا كبيرًا على نطاق النطاق الترددي (لأن عرض النطاق الترددي القصوى سيأتي من وصول Equaly لتوزيع جميع البنوك nly لديها جزء من هذا النطاق الترددي). مرة أخرى ، لم أقرأ أي شيء لإثبات هذه النظرية لأجهزة NVIDIA (معظمها يركز كل شيء على الفحم ، وهو أمر أكثر أهمية بالطبع لأنه يجعل هذه المشكلات لمجموعات البيانات الطبيعية). ومع ذلك ، وفقًا لدليل الحوسبة ATI Stream ، فهذا هو الموقف لبطاقات Radeon (لـ 5xxx: البنوك على بعد 2 كيلو بايت وتريد التأكد هل تتخيل أن بطاقات Nvidia تتصرف.

بالطبع بالنسبة لمعظم السينما ، فإن إمكانية النزاعات المصرفية على الذاكرة العالمية هي قضية ، لذلك في الممارسة العملية يمكنك القول:

  • راقب الفحم عند الوصول إلى الذاكرة العالمية
  • راقب النزاعات المصرفية عند الوصول إلى الذاكرة المحلية
  • لا توجد مشاكل في الوصول إلى السجلات

مؤشرات الترابط المتعددة التي تصل إلى نفس البنك لا يعني بالضرورة وجود تعارض بنكي. هناك تعارض إذا كانت المواضيع تريد القراءة في نفس الوقت من صف مختلف داخل نفس البنك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top