سؤال

ماسون سئل عن مزايا معالج 64 بت.

حسنا، عيب واضح هو أنه يجب عليك نقل المزيد من البتات حولها. وبالنظر إلى أن الوصول إلى الذاكرة مشكلة خطيرة في هذه الأيام [1]، تتحرك في حوالي ضعف عدد الذاكرة لعدد عادلة من العمليات لا يمكن أن تكون شيئا جيدا.

ولكن ما مدى سوء تأثير هذا، حقا؟ وما الذي يشكل لذلك؟ أو يجب أن أقوم بتشغيل جميع تطبيقاتي الصغيرة على أجهزة 32 بت؟

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

1]: وحتى قبل خمسة عشر عاما، لهذا الأمر. أتذكر التحدث إلى حد بعيد كما هو الحال حول سلوك ذاكرة التخزين المؤقت جيدة، وكذلك أيضا أن وحدة المعالجة المركزية ألفا التي فازت بجميع المعايير عملاقة، في الوقت، 8 ميغابايت من ذاكرة التخزين المؤقت L2.

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

المحلول

تستخدم معظم بيئات البرمجة 64 بت نموذج "LP64"، مما يعني أن المؤشرات فقط و long int المتغيرات (إذا كنت مبرمج C / C ++) هي 64 بت. أعداد صحيحة (intS) لا تزال 32 بت إلا إذا كنت في نموذج "ILP64"، وهو أمر غير شائع إلى حد ما.

أنا فقط طرحها لأكثر من ذلك int المتغيرات غير المستخدمة ل size_tأغراض - أي أنها تبقى داخل النطاقات التي تحتفظ بها 32 بت بشكل مريح. لمتغيرات تلك الطبيعة، لن تكون قادرا أبدا لإخبار الفرق.

إذا كنت تقوم بعمل عددي أو بيانات ثقيلة مع البيانات> 4GB من البيانات، فستحتاج إلى 64 بت على أي حال. إذا لم تكن كذلك، فلن تلاحظ الفرق، إلا إذا كنت في عادة استخدام longS حيث يستخدم معظمهم intس.

نصائح أخرى

ما إذا كان يجب أن يكون تطبيقك 64 بت يعتمد كثيرا على نوع الحساب الذي يقوم به. إذا كنت بحاجة إلى معالجة مجموعات بيانات كبيرة جدا، فمن الواضح أنك تحتاج إلى مؤشرات 64 بت. إذا لم يكن الأمر كذلك، فأنت بحاجة إلى معرفة ما إذا كان تطبيقك ينفق المزيد من الوقت نسبيا في الوصول إلى الذاكرة الحسابية أو الذاكرة. على X86-64، سجلات الغرض العام ليس فقط مرتين على نطاق واسع، وهناك ضعف عددهم وكونهم "غرض عام". هذا يعني أن رمز 64 بت يمكن أن يكون لديه أداء أفضل بكثير من الأصوات. ومع ذلك، إذا كان الكود الخاص بك لا يحتاج إلى مساحة تسجيل إضافية، فمن المحتمل أن ترى أداء أفضل باستخدام مؤشرات وبيانات أصغر، بسبب زيادة فعالية ذاكرة التخزين المؤقت. إذا كانت تطبيقك يهيمن عليه العمليات الفاصلة العائمة، فمن المحتمل أن يكون هناك الكثير من النقاط في صنعه 32 بت، لأن معظم الوصول من الذاكرة ستكون لمواقف واسعة على أي حال، وسوف تساعد سجلات SSE الإضافية.

أعتقد أنك بدأت مع افتراض سيئ هنا. قول انت:

التحرك حوالي ضعف أكبر الذاكرة لعدد عادلة من العمليات لا يمكن أن يكون شيء جيد

والسؤال الأول يسأل هو "لماذا لا"؟ في آلة 64 بت صحيح، يكون مسار البيانات 64 بت واسعة، وبالتالي تتحرك 64 بت يستغرق الأمر بالضبط (تقريب أولى) ككثير من الدورات مثل تحريك 32 بت على آلة 32 بت. لذلك، إذا كنت بحاجة إلى نقل 128 بايت، فإنه يستغرق نصف عدد الدورات حيث ستستغرق آلة 32 بت.

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