ترجمة C / C ++ على Apple M1





مفتونًا بمعايير M1 المثيرة للإعجاب ، أخرجت أحدث جهاز Mac Mini لقياس سرعة الترجمة في C / C ++.



نقوم بقياس build2 المحلي (بدون مستودع حزم) ، والذي يتضمن بشكل أساسي كود C ++ (611 وحدة ترجمة) مع بعض كتل C (29) والروابط بينها (19). لا يتطلب هذا المعيار سوى مترجم C ++ ويتم تضمينه في مجموعة اختبار Phoronix ، بحيث يمكن مقارنته بعدد كبير من المعالجات.



يستخدم معيار Phoronix حاليًا الإصدار 2 0.12.0 ، ولدينا 0.13.0 (الإصدار الحالي) ، وهنا يكون الإصدار أبطأ بنحو 10٪.


بعد إعداد نظام التشغيل Mac OS وتثبيت أدوات سطر الأوامر لـ XCode 12.2 ، لدينا كل ما نحتاجه:



$ clang++ --version
Apple clang version 12.0.0 (clang-1200.0.32.27)
Target: arm64-apple-darwin20.1.0
      
      





انطلاقا من ملف _LIBCPP_VERSION



العنوان ، فإن هذا الإصدار من Apple's Clang Clang vanilla اختلف عن مكان ما في عملية التطوير 10.0.0. __version



libc++







ربما لاحظت أيضًا أن اسم المعالج في Apple Clang الثلاثي يختلف عن الاسم القياسي aarch64



. config.guess



يظهر في الواقع ما يلي:



$ ./config.guess
aarch64-apple-darwin20.1.0
      
      





لتجنب استخدام اسمين لنفس الشيء ، تم طوب build2 arm64



في aarch64



، لذلك buildfiles



نرى دائمًا aarch64 في.


دعنا نتحقق من عدد خيوط الأجهزة في sysctl



:



$ sysctl -n hw.ncpu
8
      
      





هناك 8 خيوط هنا ، وهي 4 نوى منتجة و 4 نوى موفرة للطاقة. في الجولة الأولى ، نستخدم جميع النوى. من الواضح أن هذا يعطي أفضل نتيجة:



$ time sh ./build2-install-0.13.0.sh --local --yes ~/install
163s
      
      





كانت مفاجأة سارة أن build2 0.13.0 يعمل بدون أي مشاكل ، على الرغم من أنه تم إصداره قبل M1. نظرًا لأن ARM لديه ترتيب ذاكرة ضعيف ، فقد كان هذا أيضًا بمثابة اختبار إضافي للتنفيذ متعدد مؤشرات الترابط للبناء 2 والاستخدام المكثف للذرات.


أولاً ، دعنا نقارن M1 بمحطة العمل الخاصة بي على معالج Intel Xeon E-2288G ثماني النوى (بشكل أساسي i9-9900K plus ECC). يستغرق البناء نفسه على Vanilla Clang 131 ثانية. على الرغم من أن هذه هي أفضل نتيجة ، إلا أن أداء M1 لا يزال مثيرًا للإعجاب. خاصة عندما تفكر في ذلك أثناء التجميع ، فإن محطة العمل تنفث حرفيًا الهواء الساخن وطنين مثل الطائرة ، وحفيف M1 بهدوء مع تيار هواء دافئ بالكاد ملحوظ.



يقوم معيار أحادي الخيط بتقييم أداء وحدة المعالجة المركزية في عمليات الإنشاء المتزايدة:



$ time sh. /build2-install-0.13.0.sh --local --yes-j 1 ~ / install
691s
      
      





يستغرق قلب E-2288G 826 ثانية. لذا فإن نواة Xeon 5 جيجاهرتز أبطأ من نواة M1 3.2 جيجاهرتز.



نتيجة أخرى مثيرة للاهتمام هي تشغيل رباعي الخيوط يستخدم فقط نوى M1 الفعالة:



$ time sh ./build2-install-0.13.0.sh --local --yes -j 4 ~/install
207s
      
      





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



فيما يلي ملخص لجميع النتائج:



CPU CORES / خيوط الوقت
-------------------------
E-2288G 8/16131 ثانية
M1 4 + 4 163 ثانية
M1 4207s
M1 1691 ثانية
E-2288G 1826s


من الواضح أنه في كثير من النواحي ، هذه مقارنة بين التفاح والبرتقال (محطة العمل مقابل الجهاز المحمول ، التصميم القديم وتكنولوجيا المعالجة مقابل الأحدث ، إلخ.)



الآن دعونا نضيف بعض النتائج المثيرة للاهتمام من معيار Phoronix. على وجه الخصوص ، من المناسب أخذ مؤشرات أحدث محطات العمل والمعالجات المحمولة من Intel و AMD. إليك اختياراتي (يمكنك تحديد اختيارك ، فقط تذكر إضافة 10٪ إضافية إلى نتائج Phoronix ؛ لاحظ أيضًا أن معظم الاختبارات تستخدم GCC بدلاً من Clang):



CPU CORES / خيوط الوقت
------------------------------------------
ماكينة تقطيع AMD Threadripper 3990X 64/128 56s
AMD Ryzen 5950X 16/32 71 ثانية
إنتل زيون E-2288G 8/16131 ثانية
أبل M1 4 + 4163 ثانية
AMD   Ryzen        4900HS   8/16      176s*
Apple                 M1    4         207s
AMD   Ryzen        4700U    8/8       222s
Intel Core         1185G    4/8       281s*
Intel Core         1165G    4/8       295s

* .


يرجى ملاحظة أن النتائج الخاصة بأفضل هاتف محمول Intel (1185G) و AMD (4900HS) ليست متوفرة حتى الآن ، والأرقام المذكورة مستقراء على أساس الساعات والمعايير الأخرى.



من السهل أن نرى من الجدول أعلاه أن Apple M1 معالج مثير للإعجاب ، خاصة عندما يتعلق الأمر باستهلاك الطاقة. علاوة على ذلك ، فهو أول معالج ARM من فئة سطح المكتب السائد. وبالمقارنة ، فإن نفس التصميم على Raspberry Pi 4B يستغرق 1724 ثانية ، أي أكثر من 10 مرات أبطأ! على الرغم من أننا لا نستطيع تشغيل Linux أو Windows هنا ، إلا أن هناك بعض الأدلة على أنها تعمل على أجهزة افتراضية بأداء لائق. نتيجة لذلك ، قد يصبح خط أنابيب البناء المستمر القائم على ARM قياسيًا.



بعد الاطلاع على معايير M1 ، لا يسع المرء إلا أن يتساءل كيف فعلت Apple ذلك. على الرغم من وجود الكثير من التكهنات مع بعض عناصر السحر الأسود والسحر ، إلا أن هذا المقال حول M1 على Anandtech (وآخر هناك من خلال الرابط) بدا لي مصدرًا جيدًا للمعلومات التقنية . يسلط الضوء:



TSMC 5

10 ( 11x5G, 14  E-2288G) 7  AMD/TSMC.



LPDDR4-4266 RAM

Intel AMD .



L1

M1 L1 .



L2

Intel AMD, L2 , L3, M1 L2.





يحتوي M1 على نواة عريضة بشكل غير عادي تنفذ تعليمات متعددة بالتوازي و / أو خارج الترتيب. هناك تكهنات بأنه نظرًا لضعف ترتيب ذاكرة ARM وتعليمات التعليمات ذات الحجم الثابت ، تمكنت Apple من إنشاء نواة أوسع بكثير.


سيكون من المثير للاهتمام أيضًا أن نرى كيف يمكن لشركة Apple توسيع نطاق هذا التصميم ليشمل المزيد من النوى.



All Articles