هل ما زال Rust Stack فعالاً؟

هل ما زلنا فعالين في المكدس؟ ما هذا؟

هذه مجموعة من الرسوم البيانية التي تعرض جزء نقل ذاكرة المكدس في عينة من كود Rust ورمز C ++. الأرقام الأقل أفضل. ما هو نقل ذاكرة المكدس؟

نقل ذاكرة المكدس عبارة عن زوج من الإرشادات التي تقوم بتحميل قيمة من الذاكرة وتخزينها في حزمة المعالج. يعمل نقل ذاكرة مكدس إلى مكدس على تحميل قيمة من المكدس وتخزينها في الحزمة. يؤدي نقل ذاكرة غير مكدس إلى تحميل قيمة من مكان آخر غير المكدس وتخزينها في المكدس. لماذا نهتم بحركات ذاكرة المكدس؟

غالبًا ما يكون نقل الذاكرة إلى المكدس عملية حسابية غير ضرورية. بالنسبة للجزء الأكبر ، هذه هي دورات وحدة المعالجة المركزية التي يتم إنفاقها في خلط البيانات من مكان إلى آخر بدلاً من القيام بعمل مفيد. تنتقل الذاكرة من المكدس إلى المكدس ، على وجه الخصوص ، من المرجح جدًا أن تمثل الحمل النقي ؛ أحيانًا تكون حركات الذاكرة غير المكدسة إلى المكدس مفيدة وضرورية حقًا ، ولكنها غالبًا ما تكون مهدرة أيضًا. كيف أخذت هذه القياسات؟

استخدم هذا الفرع من LLVM. يمكنك إعادة إنتاجها بنفسك عن طريق بناء هذا الفرع من LLVM ، وربط Clang و / أو rustc بالمكتبة الناتجة ، وبناء الكود باستخدام LLVM_STACK_COPY_STATS = 1. سيتم نقل بيانات CSV إلى stderr حتى تتمكن من تجميعها كما تريد. ما أحمال العمل التي تم اختبارها؟

رمز C ++ المعني هو LLVM و Clang. كود Rust المعني هو rustc. اخترت هذين لأنهما كانا متشابهين في أعباء العمل بسبب كونهما مترجمين. بنية المعالج هي x86-64.

ما هي إصدارات المجمعين التي استخدمتها؟

Trunk Clang و rustc ليلاً في التاريخ المحدد ، وكلاهما مرتبطان بصندوق LLVM.

هل هذا يعني أن الصدأ أبطأ من C ++؟

لا. يمكنك دائمًا كتابة كود Rust بعناية لتجنب النسخ. علاوة على ذلك ، كل هذا ليس سوى نسبة صغيرة من العدد الإجمالي للتعليمات. ومع ذلك ، يجب علينا إصلاح هذا الأمر وأنا أعمل عليه. هل يمكننا إضافة تحسينات حتى يتمكن Rust من القيام بعمل أفضل في المستقبل؟

بالتأكيد ، وهذه الصفحة مخصصة لتتبع هذا التقدم كم مرة يتم تحديث هذه الصفحة؟

يدويًا ، عندما أجري تغييرات أعتقد أنها ستحسن الأمور. عدد قليل جدًا من الأشخاص يعملون في هذا المجال ، لذلك لا أعتقد أن CI تستحق ذلك في الوقت الحالي. هل هناك أي محاذير لهذه الأرقام؟

نعم: توقفت عن قياس حوالي 20 مليون أمر لأن جمع الإحصائيات بطيء جدًا وسيستغرق قياس كل من LLVM و Clang إلى الأبد. لا أعتقد أن قياس أكثر من 20 مليون أمر من المرجح أن ينتج عنه تغيير كبير في الأرقام الإجمالية. أنا لا أقيس مكالمات memcpy أو memmove حتى الآن ، فقط الأحمال والمخازن. الطريقة التي يتم بها التعامل مع حساسية التدفق هي اعتبار العديد من السجلات النشطة في كتلة أساسية "قادمة من المكدس" إذا كان واحد منها يأتي من المكدس. قد يتسبب هذا في المبالغة في تقدير العدد الفعلي للنسخ المكدسة إلى المكدس في بعض الحالات. أنا أحسب فقط عدد المتاجر ، وليس عدد أزواج مخزن التحميل. يمكن القول أن هذا يعني أن العدد الفعلي للتعليمات الضائعة يمكن أن يصل إلى ضعف الكسور المدرجة هنا. أسئلة وتعليقات إلى pcwalton@mimiga.net أوpcwalton.

هل ما زلنا فعالين في المكدس؟ ما هذا؟

هذه مجموعة من الرسوم البيانية التي تعرض جزء نقل ذاكرة المكدس في عينة من كود Rust ورمز C ++. الأرقام الأقل أفضل. ما هو نقل ذاكرة المكدس؟

نقل ذاكرة المكدس عبارة عن زوج من الإرشادات التي تقوم بتحميل قيمة من الذاكرة وتخزينها في حزمة المعالج. يعمل نقل ذاكرة مكدس إلى مكدس على تحميل قيمة من المكدس وتخزينها في الحزمة. يؤدي نقل ذاكرة غير مكدس إلى تحميل قيمة من مكان آخر غير المكدس وتخزينها في المكدس. لماذا نهتم بحركات ذاكرة المكدس؟

غالبًا ما يكون نقل الذاكرة إلى المكدس عملية حسابية غير ضرورية. بالنسبة للجزء الأكبر ، هذه هي دورات وحدة المعالجة المركزية التي يتم إنفاقها في خلط البيانات من مكان إلى آخر بدلاً من القيام بعمل مفيد. تنتقل الذاكرة من المكدس إلى المكدس ، على وجه الخصوص ، من المرجح جدًا أن تمثل الحمل النقي ؛ أحيانًا تكون حركات الذاكرة غير المكدسة إلى المكدس مفيدة وضرورية حقًا ، ولكنها غالبًا ما تكون مهدرة أيضًا. كيف أخذت هذه القياسات؟

استخدم هذا الفرع من LLVM. يمكنك إعادة إنتاجها بنفسك عن طريق بناء هذا الفرع من LLVM ، وربط Clang و / أو rustc بالمكتبة الناتجة ، وبناء الكود باستخدام LLVM_STACK_COPY_STATS = 1. سيتم نقل بيانات CSV إلى stderr حتى تتمكن من تجميعها كما تريد. ما أحمال العمل التي تم اختبارها؟

رمز C ++ المعني هو LLVM و Clang. كود Rust المعني هو rustc. اخترت هذين لأنهما كانا متشابهين في أعباء العمل بسبب كونهما مترجمين. بنية المعالج هي x86-64.

ما هي إصدارات المجمعين التي استخدمتها؟

Trunk Clang و rustc ليلاً في التاريخ المحدد ، وكلاهما مرتبطان بصندوق LLVM.

هل هذا يعني أن الصدأ أبطأ من C ++؟

لا. يمكنك دائمًا كتابة كود Rust بعناية لتجنب النسخ. علاوة على ذلك ، كل هذا ليس سوى نسبة صغيرة من العدد الإجمالي للتعليمات. ومع ذلك ، يجب علينا إصلاح هذا الأمر وأنا أعمل عليه. هل يمكننا إضافة تحسينات حتى يتمكن Rust من القيام بعمل أفضل في المستقبل؟

بالتأكيد ، وهذه الصفحة مخصصة لتتبع هذا التقدم كم مرة يتم تحديث هذه الصفحة؟

يدويًا ، عندما أجري تغييرات أعتقد أنها ستحسن الأمور. عدد قليل جدًا من الأشخاص يعملون في هذا المجال ، لذلك لا أعتقد أن CI تستحق ذلك في الوقت الحالي. هل هناك أي محاذير لهذه الأرقام؟

نعم: توقفت عن قياس حوالي 20 مليون أمر لأن جمع الإحصائيات بطيء جدًا وسيستغرق قياس كل من LLVM و Clang إلى الأبد. لا أعتقد أن قياس أكثر من 20 مليون أمر من المرجح أن ينتج عنه تغيير كبير في الأرقام الإجمالية. أنا لا أقيس مكالمات memcpy أو memmove حتى الآن ، فقط الأحمال والمخازن. الطريقة التي يتم بها التعامل مع حساسية التدفق هي اعتبار العديد من السجلات النشطة في كتلة أساسية "قادمة من المكدس" إذا كان واحد منها يأتي من المكدس. قد يتسبب هذا في المبالغة في تقدير العدد الفعلي للنسخ المكدسة إلى المكدس في بعض الحالات. أنا أحسب فقط عدد المتاجر ، وليس عدد أزواج مخزن التحميل. يمكن القول أن هذا يعني أن العدد الفعلي للتعليمات الضائعة يمكن أن يصل إلى ضعف الكسور المدرجة هنا. أسئلة وتعليقات إلى pcwalton@mimiga.net أوpcwalton.

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow