Penasaran dengan benchmark M1 yang mengesankan, saya mengeluarkan Mac Mini terbaru untuk mengukur kecepatan kompilasi saya di C / C ++.
Kami mengukur build2 lokal (tanpa repositori paket), yang sebagian besar menyertakan kode C ++ (611 unit terjemahan) dengan beberapa blok C (29) dan tautan di antaranya (19). Tolok ukur ini hanya memerlukan kompiler C ++ dan disertakan dalam rangkaian pengujian Phoronix , sehingga dapat dibandingkan dengan sejumlah besar prosesor.
Tolok ukur Phoronix saat ini menggunakan build2 0.12.0, kami memiliki 0.13.0 (rilis saat ini), di sini build tersebut sekitar 10% lebih lambat.
Setelah menyiapkan Mac OS dan menginstal alat baris perintah untuk XCode 12.2, kami memiliki semua yang kami butuhkan:
$ clang++ --version Apple clang version 12.0.0 (clang-1200.0.32.27) Target: arm64-apple-darwin20.1.0
Dilihat
_LIBCPP_VERSION
dari
__version
file judulnya
libc++
, versi Clang Clang vanilla Apple ini menyimpang dari suatu tempat dalam proses pengembangan 10.0.0.
Anda mungkin juga telah memperhatikan bahwa nama prosesor di triplet Apple Clang berbeda dari yang standaraarch64
. Sebenarnyaconfig.guess
menunjukkan yang berikut:
$ ./config.guess aarch64-apple-darwin20.1.0
Untuk menghindari penggunaan dua nama yang sama, build2 dikanonisasiarm64
dalamaarch64
, jadibuildfiles
kita selalu melihat aarch64 in.
Mari kita periksa jumlah utas perangkat keras di
sysctl
:
$ sysctl -n hw.ncpu 8
Ada 8 utas di sini, ini adalah 4 inti produktif dan 4 yang hemat energi. Dalam proses pertama, kami menggunakan semua inti. Jelas ini memberikan hasil terbaik:
$ time sh ./build2-install-0.13.0.sh --local --yes ~/install 163s
Merupakan kejutan yang menyenangkan bahwa build2 0.13.0 berfungsi tanpa masalah, meskipun dirilis lebih awal dari M1. Karena ARM memiliki pengurutan memori yang lemah, ini juga berfungsi sebagai pengujian tambahan untuk implementasi multithreaded dari build2 dan penggunaan atomics yang berat.
Pertama, mari bandingkan M1 dengan workstation saya pada 8-core Intel Xeon E-2288G (pada dasarnya adalah i9-9900K plus ECC). Build yang sama pada vanilla Clang membutuhkan 131 detik. Meski ini hasil terbaik, performa M1 tetap impresif. Terutama jika Anda mempertimbangkan bahwa selama kompilasi, workstation secara harfiah memuntahkan udara panas dan dengungan seperti pesawat terbang, dan M1 berdesir pelan dengan aliran udara hangat yang nyaris tidak terlihat.
Tolok ukur single-threaded mengevaluasi performa CPU dalam build inkremental:
$ time sh. /build2-install-0.13.0.sh --local --yes-j 1 ~ / install 691s
Inti E-2288G membutuhkan waktu 826 detik. Jadi inti 5GHz Xeon sebenarnya lebih lambat dari inti 3.2GHz M1.
Hasil menarik lainnya adalah proses empat thread yang hanya menggunakan inti M1 yang efisien:
$ time sh ./build2-install-0.13.0.sh --local --yes -j 4 ~/install 207s
Meskipun agak lebih lambat dari tes delapan inti, ini menggunakan lebih sedikit memori. Jadi, opsi ini masuk akal pada sistem dengan RAM yang tidak mencukupi (seperti pada semua mesin M1 modern).
Berikut adalah ringkasan dari semua hasil:
CPU CORES / THREADS TIME ------------------------- E-2288G 8/16 131s M1 4 + 4163s M1 4 207s M1 1 691s E-2288G 1 826s
Jelas bahwa dalam banyak hal ini adalah perbandingan apel-ke-jeruk (workstation versus perangkat seluler, desain lama dan teknologi proses versus modern, dll.)
Sekarang mari tambahkan beberapa hasil menarik dari tolok ukur Phoronix. Secara khusus, adalah tepat untuk mengambil indikator workstation dan prosesor seluler terbaru dari Intel dan AMD. Inilah pilihan saya (Anda dapat membuatnya sendiri, ingatlah untuk menambahkan 10% ekstra ke hasil Phoronix; perhatikan juga bahwa sebagian besar tes menggunakan GCC daripada Clang):
CPU CORES / THREADS TIME ------------------------------------------ AMD Threadripper 3990X 64/128 56s AMD Ryzen 5950X 16/32 71s Intel Xeon E-2288G 8/16 131s Apple M1 4 + 4163s 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 * .
Harap dicatat bahwa hasil untuk Intel seluler (1185G) dan AMD (4900HS) terbaik sayangnya belum tersedia, dan angka yang dikutip diekstrapolasi berdasarkan jam dan tolok ukur lainnya.
Dari tabel di atas, mudah untuk melihat bahwa Apple M1 adalah prosesor yang mengesankan, terutama dalam hal konsumsi daya. Selain itu, ini adalah prosesor ARM kelas desktop mainstream pertama. Sebagai perbandingan, build yang sama pada Raspberry Pi 4B membutuhkan waktu 1724 detik, yang lebih dari 10 kali lebih lambat! Meskipun kami tidak dapat mem-boot Linux atau Windows di sini, ada beberapa bukti bahwa mereka berjalan di mesin virtual dengan kinerja yang layak. Akibatnya, pipeline build berkelanjutan berbasis ARM dapat menjadi standar.
Setelah melihat tolok ukur M1, orang bertanya-tanya bagaimana Apple melakukan ini. Meskipun ada banyak spekulasi dengan beberapa elemen ilmu hitam dan sihir, tetapi artikel tentang M1 di Anandtech ini (dan satu lagi di sana melalui tautan) menurut saya merupakan sumber informasi teknis yang cukup baik . Highlight:
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 memiliki kernel yang sangat luas yang menjalankan beberapa instruksi secara paralel dan / atau tidak berurutan. Ada spekulasi bahwa karena pengurutan memori ARM yang buruk dan pengodean instruksi ukuran tetap, Apple dapat membuat kernel yang jauh lebih luas.
Menarik juga untuk melihat bagaimana Apple dapat menskalakan desain ini ke lebih banyak inti.