إغلق الإعلان

مايك آش مخصص على مدونته الآثار العملية للتحول إلى بنية 64 بت في iPhone 5S. هذه المقالة تعتمد على النتائج التي توصل إليها.

يرجع سبب هذا النص بشكل أساسي إلى الكم الكبير من المعلومات الخاطئة التي يتم نشرها حول ما يعنيه جهاز iPhone 5s الجديد المزود بمعالج ARM 64 بت للمستخدمين والسوق. سنحاول هنا تقديم معلومات موضوعية حول الأداء والإمكانيات والآثار المترتبة على هذا الانتقال للمطورين.

"64 بت"

هناك جزأين من المعالج يمكن أن تشير إليهما تسمية "X-bit" - عرض سجلات الأعداد الصحيحة وعرض المؤشرات. لحسن الحظ، في معظم المعالجات الحديثة، تكون هذه العروض هي نفسها، لذلك في حالة A7، فهذا يعني تسجيلات أعداد صحيحة 64 بت ومؤشرات 64 بت.

ومع ذلك، من المهم بنفس القدر الإشارة إلى ما لا يعنيه "64 بت": حجم العنوان الفعلي لذاكرة الوصول العشوائي (RAM).. لا يرتبط عدد البتات التي يتم الاتصال بها مع ذاكرة الوصول العشوائي (وبالتالي مقدار ذاكرة الوصول العشوائي التي يمكن للجهاز دعمها) بعدد بتات وحدة المعالجة المركزية. تحتوي معالجات ARM على عناوين تتراوح بين 26 و40 بت ويمكن تغييرها بشكل مستقل عن بقية النظام.

  • حجم ناقل البيانات. كمية البيانات المستلمة من ذاكرة الوصول العشوائي (RAM) أو الذاكرة المؤقتة مستقلة بالمثل عن هذا العامل. قد تطلب تعليمات المعالج الفردية كميات مختلفة من البيانات، ولكن إما يتم إرسالها على شكل أجزاء أو يتم استلامها من الذاكرة أكثر من اللازم. ذلك يعتمد على حجم كمية البيانات. يتلقى iPhone 5 بالفعل البيانات من الذاكرة بكميات 64 بت (ويحتوي على معالج 32 بت)، ويمكننا أن نواجه أحجامًا تصل إلى 192 بت.
  • أي شيء يتعلق بالنقطة العائمة. حجم هذه السجلات (FPU) مستقل مرة أخرى عن الأعمال الداخلية للمعالج. يستخدم ARM FPU 64 بت منذ ما قبل ARM64 (معالج ARM 64 بت).

المزايا والعيوب العامة

إذا قارنا بنيات 32 بت و64 بت المتطابقة، فسنجد أنها ليست مختلفة بشكل عام. وهذا أحد أسباب الحيرة العامة لدى الجمهور الذي يبحث عن سبب انتقال Apple إلى 64 بت في الأجهزة المحمولة أيضًا. ومع ذلك، كل ذلك يأتي من المعلمات المحددة لمعالج A7 (ARM64) وكيفية استخدام Apple له، وليس فقط من حقيقة أن المعالج يتمتع ببنية 64 بت.

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

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

ومع ذلك، فإن هذه "الاختراقات" صعبة للغاية وبطيئة لدرجة أن الحد الأدنى من التطبيقات تستخدمها. من الناحية العملية، في معالج 32 بت، سيستخدم كل برنامج فقط 1-3 جيجابايت من الذاكرة الخاصة به، ويمكن استخدام المزيد من ذاكرة الوصول العشوائي المتوفرة لتشغيل برامج متعددة في نفس الوقت أو استخدام هذه الذاكرة كمخزن مؤقت (التخزين المؤقت). تعتبر هذه الاستخدامات عملية، ولكننا نرغب في أن يكون أي برنامج قادرًا على استخدام أجزاء من الذاكرة أكبر من 4 جيجابايت بسهولة.

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

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

ARM64

إن معالج A7، وهو معالج 64 بت الذي يشغل هاتف iPhone 5s الجديد، ليس مجرد معالج ARM عادي مع سجلات أوسع. يحتوي ARM64 على تحسينات كبيرة مقارنة بالإصدار الأقدم 32 بت.

معالج ابل A7.

سجل

يحتوي ARM64 على ضعف عدد السجلات الصحيحة مثل ARM 32 بت (احرص على عدم الخلط بين عدد وعرض السجلات - تحدثنا عن العرض في قسم "64 بت". لذا فإن ARM64 يحتوي على ضعف السجلات العريضة وضعف العدد السجلات). يحتوي ARM 32 بت على 16 سجلًا صحيحًا: عداد برنامج واحد (كمبيوتر شخصي - يحتوي على رقم التعليمات الحالية)، ومؤشر مكدس (مؤشر إلى وظيفة قيد التقدم)، وسجل ارتباط (مؤشر للعودة بعد النهاية). للوظيفة)، والـ 13 المتبقية مخصصة للاستخدام التطبيقي. ومع ذلك، يحتوي ARM64 على 32 سجلًا صحيحًا، بما في ذلك سجل صفر واحد، وسجل ارتباط، ومؤشر إطار (مشابه لمؤشر المكدس)، وواحد مخصص للمستقبل. وهذا يتركنا مع 28 سجلًا لاستخدام التطبيق، أي أكثر من ضعف ARM 32 بت. وفي الوقت نفسه، ضاعف ARM64 عدد سجلات أرقام الفاصلة العائمة (FPU) من 16 إلى 32 سجل 128 بت.

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

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

مجموعة التعليمات

يجلب ARM64 أيضًا تغييرات كبيرة على مجموعة التعليمات. مجموعة التعليمات هي مجموعة من العمليات الذرية التي يمكن للمعالج تنفيذها (على سبيل المثال يضيف 'ADD Register1 Register2' الأرقام الموجودة في سجلين). تتكون الوظائف المتاحة للغات الفردية من هذه التعليمات. يجب أن تنفذ الوظائف الأكثر تعقيدًا المزيد من التعليمات، بحيث تكون أبطأ.

الجديد في ARM64 هو تعليمات تشفير AES ووظائف التجزئة SHA-1 وSHA-256. لذلك بدلاً من التنفيذ المعقد، فإن اللغة فقط هي التي ستطلق هذه التعليمات - مما سيجلب تسريعًا كبيرًا لحساب مثل هذه الوظائف ونأمل أن يضيف الأمان في التطبيقات. على سبيل المثال يستخدم Touch ID الجديد أيضًا هذه التعليمات في التشفير، مما يسمح بالسرعة والأمان الحقيقيين (من الناحية النظرية، سيتعين على المهاجم تعديل المعالج نفسه للوصول إلى البيانات - وهو أمر غير عملي على أقل تقدير نظرًا لحجمه المصغر).

التوافق مع 32 بت

من المهم أن نذكر أن A7 يمكن أن يعمل بشكل كامل في وضع 32 بت دون الحاجة إلى المحاكاة. وهذا يعني أن iPhone 5s الجديد يمكنه تشغيل التطبيقات المجمعة على ARM 32 بت دون أي تباطؤ. ومع ذلك، لا يمكنه استخدام وظائف ARM64 الجديدة، لذلك من المفيد دائمًا إنشاء تصميم خاص لـ A7 فقط، والذي يجب أن يعمل بشكل أسرع بكثير.

تغييرات وقت التشغيل

وقت التشغيل هو الكود الذي يضيف وظائف إلى لغة البرمجة، والتي يمكنه استخدامها أثناء تشغيل التطبيق، حتى بعد الترجمة. نظرًا لأن Apple لا تحتاج إلى الحفاظ على توافق التطبيقات (حيث يعمل البرنامج الثنائي 64 بت على 32 بت)، فيمكنها إجراء بعض التحسينات الإضافية على لغة Objective-C.

واحد منهم هو ما يسمى المؤشر الموسوم (مؤشر ملحوظ). عادةً، يتم تخزين الكائنات والمؤشرات الخاصة بتلك الكائنات في أجزاء منفصلة من الذاكرة. ومع ذلك، تسمح أنواع المؤشرات الجديدة للفئات التي تحتوي على القليل من البيانات بتخزين الكائنات مباشرة في المؤشر. تلغي هذه الخطوة الحاجة إلى تخصيص الذاكرة مباشرة للكائن، فقط قم بإنشاء المؤشر والكائن بداخله. يتم دعم المؤشرات ذات العلامات فقط في بنية 64 بت أيضًا نظرًا لعدم وجود مساحة كافية في مؤشر 32 بت لتخزين ما يكفي من البيانات المفيدة. لذلك، فإن iOS، على عكس OS X، لم يدعم هذه الميزة بعد. ومع ذلك، مع وصول ARM64، بدأ هذا يتغير، وقد لحق نظام iOS بنظام OS X في هذا الصدد أيضًا.

على الرغم من أن المؤشرات يبلغ طولها 64 بت، إلا أنه في ARM64 يتم استخدام 33 بت فقط لعنوان المؤشر الخاص. وإذا تمكنا من كشف بقية بتات المؤشر بشكل موثوق، فيمكننا استخدام هذه المساحة لتخزين بيانات إضافية - كما في حالة المؤشرات الموسومة المذكورة. من الناحية النظرية، يعد هذا أحد أكبر التغييرات في تاريخ Objective-C، على الرغم من أنها ليست ميزة قابلة للتسويق - لذلك لن يعرف معظم المستخدمين كيف تقوم Apple بدفع Objective-C للأمام.

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

يتم أيضًا إدراج معلومات حول الكائنات المرتبطة، سواء تمت الإشارة إلى الكائن بشكل ضعيف، أو ما إذا كان من الضروري إنشاء أداة تدمير للكائن، وما إلى ذلك، حديثًا في المكان المتبقي من المؤشرات إلى الكائنات.وبفضل هذه المعلومات، تم إنشاء لغة Objective-C وقت التشغيل قادر على تسريع وقت التشغيل بشكل أساسي، وهو ما ينعكس في سرعة كل تطبيق. من خلال الاختبار، يعني هذا تسريعًا بنسبة 40-50% لجميع استدعاءات إدارة الذاكرة. فقط عن طريق التبديل إلى مؤشرات 64 بت واستخدام هذه المساحة الجديدة.

záver

على الرغم من أن المنافسين سيحاولون نشر فكرة أن الانتقال إلى بنية 64 بت ليس ضروريًا، إلا أنك ستعرف بالفعل أن هذا مجرد رأي غير مطلع على الإطلاق. صحيح أن التحول إلى 64 بت دون تكييف لغتك أو تطبيقاتك لا يعني شيئًا حقًا - بل إنه يؤدي إلى إبطاء النظام بأكمله. لكن A7 الجديد يستخدم ARM64 حديثًا مع مجموعة تعليمات جديدة، وقد تحملت Apple عناء تحديث لغة Objective-C بالكامل والاستفادة من الإمكانات الجديدة - ومن هنا جاء التسريع الموعود.

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

مصدر: mikeash.com
.