Apakah kompiler Intel benar-benar lebih baik daripada yang Microsoft? [Tutup]


56

Bertahun-tahun yang lalu, saya terkejut ketika saya menemukan bahwa Intel menjual kompiler Visual Studio yang kompatibel. Saya mencobanya secara khusus untuk C / C ++ serta alat diagnostik yang fantastis. Tetapi kode itu tidak begitu intensif secara komputasi untuk melihat perbedaannya. Satu-satunya kesan adalah: apakah Intel benar-benar melakukannya untuk saya sekarang, wow, alat luar biasa dengan resolusi nanodetik, sulit dipercaya. Namun uji coba berakhir dan tim tidak pernah dengan serius mempertimbangkan pembelian.

Dari pengalaman Anda, jika biaya lisensi tidak masalah, vendor mana yang menjadi pemenang?

Ini bukan pertanyaan luas atau tidak jelas atau upaya untuk memicu perang suci. Pertanyaan semacam ini adalah tentang dua alat yang sangat terlihat. Tidak ada yang suka ketika alat memiliki misteri atau kejutan. Dan pilihan antara yang terbaik dan yang terbaik selalu merupakan rasa sakit. Saya juga mengerti bahwa argumen rumput selalu lebih hijau . Saya ingin mendengar semua cerita "bagaimana jika".

Bagaimana jika Intel hanya mengoptimalkannya secara lokal untuk chip bulan ini, dan tidak semua target perangkat keras akan berfungsi sebagaimana Microsoft dikompilasi? Bagaimana jika perangkat keras AMD adalah target dan semuanya akan melambat tanpa alasan? Atau di sisi lain, bagaimana jika perangkat keras Intel memiliki begitu banyak peluang yang tidak terlihat, sehingga penulis kompiler Microsoft terlalu lambat untuk mengadopsi dan tidak pernah mengimplementasikannya dalam kompiler? Bagaimana jika keduanya sama persis, sebenarnya basis kode tunggal hanya dibungkus menjadi dua kotak yang berbeda dan dilisensikan ke kedua vendor oleh beberapa toko pihak ketiga?

Dan seterusnya. Tetapi seseorang tahu beberapa jawaban.


17
Intel Compiler memiliki reputasi untuk menghasilkan kode numerik yang sangat efisien.
quant_dev

2
@honk: Jika quant_dev dapat menyediakan beberapa tautan untuk mendukungnya, maka ya itu seharusnya!
FrustratedWithFormsDesigner

2
@RocketSurgeon: Tidak semua orang akan setuju dengan pernyataan Anda. Bahkan Eric Raymond membuat kasus yang cukup kuat bagi Microsoft setelah mengadakan beberapa dekade terakhir dengan praktik bisnis mereka.
Mason Wheeler

2
@RocketSurgeon open source tidak ada hubungannya dengan uang.
kaoD

1
Kompiler Microsoft menghasilkan kode yang sangat bagus. Inspeksi manual majelis jarang menemukan urutan instruksi idiot. Bahkan, saya terkesan seberapa dalam optimasi berjalan, bahkan mencegah instruksi melewati batas garis cache.
doug65536

Jawaban:


57

PERINGATAN: Jawab berdasarkan pengalaman sendiri - YMMV

Jika kodenya benar-benar mahal secara komputasi, ya, pasti . Saya telah melihat peningkatan lebih dari 20 kali dengan Intel C ++ Compiler (sekarang Intel Studio jika saya ingat dengan benar) vs standar Microsoft Visual C ++ Compiler. Memang benar kode itu sangat jauh dari sempurna dan yang mungkin telah memainkan peran (sebenarnya itu sebabnya kami repot menggunakan kompiler Intel, itu lebih mudah daripada refactoring basis kode raksasa), juga CPU yang digunakan untuk menjalankan kode adalah Intel Core 2 Quad, yang merupakan CPU sempurna untuk hal semacam itu, tetapi hasilnya mengejutkan. Kompiler itu sendiri berisi banyak sekali cara untuk mengoptimalkan kode, termasuk menargetkan CPU tertentu dalam hal, katakanlah, kemampuan SSE . Itu benar-benar membuat -O2/ -O3melarikan diri malu. Dan itu tadisebelum menggunakan profiler.

Perhatikan bahwa, menyalakan optimisasi yang sangat agresif akan membuat kompilasi memakan waktu cukup lama, dua jam untuk proyek besar bukan tidak mungkin sama sekali. Juga, dengan optimasi tingkat tinggi, ada kemungkinan kesalahan kode yang lebih tinggi untuk memanifestasikan dirinya (ini dapat diamati dengan gcc -O3juga). Untuk proyek yang Anda kenal dengan baik, ini bisa menjadi nilai tambah, karena Anda akan menemukan dan memperbaiki bug yang mungkin tidak Anda temui sebelumnya, tetapi ketika menyusun kekacauan berbulu, Anda cukup menyilangkan jari dan berdoa kepada dewa x86.

Sesuatu tentang kinerja pada mesin AMD: Ini tidak sebagus CPU Intel, tetapi masih jauh lebih baik daripada kompiler MS C ++ (sekali lagi, dari pengalaman saya). Alasannya adalah Anda juga dapat menargetkan CPU generik dengan dukungan SSE2 (misalnya). Maka CPU AMD dengan SSE2 tidak akan banyak dibedakan. Kompiler Intel pada CPU Intel benar-benar mencuri perhatian. Namun, tidak semua pelangi ganda dan unicorn mengkilap. Ada beberapa tuduhan berat tentang binari yang tidak berjalan sama sekali pada CPU non-GenuineIntel dan (yang ini diakui) secara buatan diinduksi kinerja rendah pada CPU oleh vendor lain. Juga perhatikan ini adalah informasi dari setidaknya 3 tahun yang lalu dan validitasnya seperti yang sekarang tidak diketahui, TETAPI deskripsi produk baru memberikan biner carte blanche untuk berjalan selambat yang Intel lihat cocok pada CPU non-Intel.

Saya tidak tahu apa itu tentang Intel dan mengapa mereka membuat alat perhitungan numerik yang sangat bagus, tetapi lihat juga: http://julialang.org/ . Ada perbandingan dan jika Anda melihat baris terakhir, MATLAB bersinar dengan mengalahkan kode C dan Julia , yang mengejutkan saya adalah bahwa menurut penulis alasannya adalah Perpustakaan Matematika Kernel Intel .

Saya menyadari ini kedengarannya sangat mirip iklan untuk toolkit Intel Compiler, tetapi dalam pengalaman saya itu benar-benar melakukan pekerjaan dengan baik, dan bahkan logika sederhana menentukan bahwa orang-orang yang membuat CPU harus tahu cara terbaik memprogram untuk mereka. IMO, kompiler Intel C ++ memeras setiap bit terakhir dari peningkatan kinerja yang mungkin terjadi.


@ K.Steff Apakah Anda membandingkan ini vs MS compiler dengan seluruh program opt dan optimasi profil dipandu.
jalankan kembali

2
Intel terpaksa mengungkapkan bahwa kompiler mereka sengaja menggunakan jalur kode yang tidak dioptimalkan saat runtime jika CPU tidak diproduksi oleh Intel. Intel mendapat masalah dengan FTC . Anda tidak dapat membayar saya untuk menggunakan ICC. Saya tidak akan menyentuh omong kosong anti-persaingan dengan tiang 10 kaki.
doug65536

@ doug65536 Pertanyaan yang ditanyakan adalah "Apakah kompiler Intel benar-benar lebih baik", bukan "Apakah Intel perusahaan monopoli di pasar perangkat keras yang menyalahgunakan monopoli ini untuk semakin mendapatkan dasar dalam perangkat lunak". Saya tidak mengatakan komentar Anda tidak sopan, tetapi bagi saya ideologi tidak memiliki tempat dalam diskusi ini. Gunakan atau tidak - panggilan Anda, tetapi itu tidak akan mengubah fakta bahwa ICC sangat bagus dalam memproduksi binari untuk CPU Intel.
K.Steff

Bahasa C yang menjadi populer pada 1990-an memperluas bahasa C dalam banyak cara yang memungkinkan pemrogram untuk menulis kode yang lebih efisien, tetapi yang tidak didukung oleh beberapa kompiler pengoptimal. Microsoft dari apa yang saya tahu kurang bersemangat daripada vendor lain untuk mengejar optimasi yang tidak kompatibel dengan ekstensi tersebut. Hal ini membuat kompiler mereka kurang efisien daripada kompiler yang tidak peduli dengan kompatibilitas seperti itu ketika memproses kode yang tidak memerlukannya, tetapi memungkinkannya untuk memproses kode yang membutuhkannya dengan benar.
supercat

35

Intel Compiler memiliki reputasi menghasilkan kode numerik yang sangat efisien:

https://stackoverflow.com/questions/1733627/anyone-here-has-benchmarked-intel-c-compiler-and-gcc

http://www.open-mag.com/754088105111.htm

http://www.freewebs.com/godaves/javabench_revisited/

Harap dicatat bahwa saya tidak mengklaim bahwa itu adalah kompiler tercepat di luar sana, tetapi tentu saja menikmati reputasi yang sangat baik untuk efisiensi. Perhatikan bahwa penulis binari LAPACK "resmi" untuk Windows menggunakan kompiler Intel Fortran untuk membangunnya: http://icl.cs.utk.edu/lapack-for-windows/ dan mereka harus mengetahui satu atau dua hal tentang efisiensi.


2
Tidak hanya memiliki reputasi itu, itu sesuai dengan itu. Ini tidak perlu jika Anda menggunakannya untuk menulis aplikasi CRUD, tetapi produk C, C ++ dan FORTRAN benar-benar mentah dalam hal angka-angka.
Blrfl

27

Intel C ++ memiliki beberapa keunggulan dibandingkan gcc selain dari pembuat kode. Kedua hal ini (sebagian besar) berasal dari fakta bahwa itu didasarkan pada EDG front-end. Baik atau buruk, kedua hal ini (perlahan) terkikis, sehingga keuntungannya tidak sebesar yang dulu.

Yang pertama adalah bahwa ia mengeluarkan pesan kesalahan yang jauh lebih baik sebagai aturan. Anda mungkin ingin melihat perbandingan pesan kesalahan antara Dentang dan gcc. Intel C ++ (bersama dengan yang lainnya berdasarkan EDG front-end) telah mengeluarkan diagnostik yang mirip dengan Clang selama bertahun-tahun.

Kedua, adalah bahwa ujung depan EDG juga terkenal karena kesesuaian bahasa yang sangat baik dengan generator kode Intel untuk menghasilkan kode cepat. Dengan hampir semua ukuran yang masuk akal, EDG front-end memberikan kesesuaian yang lebih baik dengan C ++ 98, 03, atau (dalam versi saat ini) C ++ 0x daripada kompiler lain yang tersedia.

Seperti yang saya katakan, kedua keunggulan ini telah terkikis ke berbagai tingkat dari waktu ke waktu. Versi terbaru gcc memiliki kesesuaian bahasa yang cukup baik. Dentang memiliki pesan kesalahan yang jauh lebih baik, dan membuat kemajuan yang baik menuju implementasi seluruh bahasa C ++ juga. Namun, ketika Anda langsung melakukannya, Intel C ++ masih lebih baik daripada salah satu dari keduanya, dan ini adalah satu paket yang melakukan banyak hal dengan benar daripada membutuhkan satu kompiler untuk diagnostik yang baik dan yang lain untuk kesesuaian dan pembuatan kode yang lebih baik.


14

Kami mencoba ini di tempat kerja beberapa waktu lalu. Sebagian besar basis kode kami ada di Delphi, tetapi kami memiliki beberapa fungsionalitas yang sangat intensif secara komputasi yang menurut seseorang akan menjadi ide yang baik untuk dilakukan dalam C ++ DLL ketika. Dan salah satu rekan kerja saya telah mendengar banyak hal hebat tentang kompiler Intel, jadi dia memutuskan untuk mencobanya. Kami membangun kembali DLL dalam kompiler Intel dan menjalankan beberapa tes kecepatan, dan hasilnya sangat mengejutkannya sehingga ia merasa harus melakukan sesuatu yang salah.

DLL harus menghitung beberapa masalah yang sangat sulit dengan komponen kombinatorik dan topologi, yang secara teknis di kelas kesulitan NP-keras jika kita melakukannya "benar", tetapi kami menggunakan berbagai heuristik untuk menghindari kinerja NP. Meski begitu, ada banyak angka yang terjadi. Dan untuk pengujian yang kami jalankan, perbedaan antara kompiler VS dan kompiler Intel ada di dalam epsilon, atau kompiler Intel terasa lebih lambat, umumnya di suatu tempat di lingkungan sekitar 20%. Dan tetap seperti itu tidak peduli perubahan apa pun yang ia buat pada pengaturan kompilasi untuk mencoba membuat kompiler Intel menghasilkan kode yang lebih cepat. Jadi kami akhirnya tidak beralih ke sana.

Ini hanya satu contoh dunia nyata, tentu saja. Jarak tempuh Anda mungkin beragam.


Maukah Anda berbagi rincian CPU yang digunakan oleh benchmark?
Oak

22
Ketika saya membaca paragraf pertama Anda, saya pikir Anda mengatakan bahwa hasil tes kecepatan mengejutkannya dengan cara yang baik . Ternyata itu salah, setelah membaca paragraf kedua. Tidak yakin apa yang menyesatkan saya pada bacaan pertama; setelah diperiksa lebih dekat, Anda tidak benar-benar menggunakan kata-kata positif apa pun yang dapat meninggalkan saya dengan persepsi itu. Hanya berpikir saya akan berkomentar kalau-kalau ada orang yang membuat kesalahan yang sama dan bingung tentang apa yang sebenarnya Anda katakan di sini.
Cody Grey

2
Apakah Anda menggunakan prosesor AMD untuk pengujian? Saya pikir ini informasi yang relevan (apakah kompiler berkinerja buruk dengan sengaja atau jika tidak bisa melakukan apa-apa bahkan ketika itu melakukan yang terbaik).
Pasang kembali Monica

3
Ini adalah prosesor Intel Core i7.
Mason Wheeler

Versi singkat: Intel lebih lambat dari VS2010. Saya juga mencoba ini di tempat kerja belum lama ini pada basis kode dari data C ++ yang cukup singkat. Saya mencoba banyak pengaturan berbeda. Beberapa algoritma individual dengan tes kinerja yang sudah ada terasa lebih cepat, tetapi paling lambat terlihat. Secara keseluruhan, setiap operasi tingkat tinggi yang saya lakukan dengan perangkat lunak lebih lambat secara konsisten dan terukur. Saya juga mencoba ini dengan versi 2013 dan 2010 dari kompiler Intel, 2010 tampaknya menghasilkan kode yang lebih baik dan juga lebih stabil. Sebagian besar tes saya menggunakan pra-AVX i7, tetapi beberapa menggunakan Core2 yang lebih lama.
Kaya

9

Dalam aplikasi tertanam yang pernah saya kerjakan, percobaan dari kompiler Intel menunjukkan itu akan menyelamatkan kita dari keharusan untuk memutar perangkat keras baru dengan kinerja yang lebih tinggi. Biaya perangkat keras baru adalah sekitar $ 10 / unit, proyeksi penjualan 1 Juta unit, Tambahkan biaya pengembangan dan penundaan proyek. Opsi 2 adalah profil / mikro mengoptimalkan basis kode yang sudah diprofilkan / dioptimalkan dengan baik - hasil yang tidak diketahui, waktu yang tidak diketahui.

Menurut Anda apa yang dikatakan bos ketika kami meminta dana untuk membeli kompiler .......

Namun - ini adalah kasus tepi yang sangat beruntung dan jarang - keluaran kode 10% lebih cepat dari kompiler Intel mendorong kami kembali ke sisi kinerja yang benar. Jika kita sudah di sisi kanan, atau lebih dari 10%, itu tidak akan membuat perbedaan. Seandainya kami memiliki insinyur, kami mungkin bisa mengoptimalkan kode dan menyelamatkan putaran perangkat keras dan tidak memerlukan kompiler Intel, Tetapi risikonya tinggi dan kompiler Intel bekerja lebih murah daripada waktu rekayasa.

Pada keseimbangan saya akan mengatakan itu adalah bentuk optimasi mikro - jangan lakukan sampai Anda tahu Anda perlu, dan kemudian, hanya setelah Anda membuat profil dan menemukan penyebab sebenarnya dari masalah. Ini adalah pilihan yang sangat baik dari profil Anda menunjukkan Anda lambat 'di mana-mana' dan tidak memiliki leher botol yang diidentifikasi.


5

Saya hanya menemukan tiga keuntungan:

  1. Ini memiliki dukungan untuk fitur-fitur dari CPU Intel yang lebih baru jauh lebih cepat daripada kompiler lain.

  2. Ini adalah kompiler tambahan yang bagus untuk mengeluarkan peringatan dan menangkap masalah yang dilewatkan oleh kompiler lain. GCC menangkap beberapa hal yang tidak dimiliki ICC, dan sebaliknya. Studio visual menangkap beberapa hal yang tidak dimiliki ICC, dan sebaliknya.

  3. Ia melakukan pekerjaan yang jauh lebih baik dari loop penjajaran otomatis (mendistribusikannya melalui beberapa utas secara otomatis) daripada kompiler lainnya. Tidak banyak manfaat kode dari ini, tetapi ketika Anda memiliki kode itu, itu bisa membuat perbedaan.


3

Kami menggunakan kompiler intel untuk setiap proyek kritikal kinerja basis kode kami. Yang hebat tentang itu adalah, itu membuat kode mengoptimalkan benar-benar dipertahankan. Alih-alih secara manual menambahkan __mm panggilan di mana-mana, dan memberi tahu kompiler untuk mengambil data sebelumnya, yang semuanya akan menjadi kurang optimal pada rilis berikutnya lagi, Anda hanya mengatur ulang kode Anda dan mendapatkan speedup yang gila.

Seringkali, kode yang dioptimalkan lebih mudah diikuti daripada yang dioptimalkan dengan tangan, lebih cepat daripada yang dioptimalkan dengan tangan, dan ketika set instruksi baru dilepaskan, kompiler akan menggunakan set instruksi itu. Fantastis.

Hal yang sama juga berlaku untuk kompiler lengan (dari lengan, bukan intel), jika Anda melepaskannya di lengan, melakukan pekerjaan yang baik dalam membuat vektor untuk Anda.


+1. Intel memiliki kompiler ARM? Tidak bisa dipercaya!

1
Tidak, intel tidak memiliki kompiler ARM. ARM memiliki kompiler ARM, yang melakukan pekerjaan yang fantastis.
martiert

2
"EDIT: arm tidak memiliki arm compiler." Benarkah ini yang Anda maksud?
luiscubal

0

Periksa halaman benchmark ini. Singkatnya, intel menang.

Tetapi marginnya mungkin tidak sebesar itu: jika Anda mengkompilasi hingga 32 bit, dan sistem build Anda tidak dapat mendukung pengoptimalan yang dipandu profil, keuntungannya adalah di urutan 10%. Apakah peningkatan seperti itu sepadan dengan kesulitan dan waktu kompilasi yang lebih lama?


Tautan URL tampaknya sudah mati.
Contango

0

Dikatakan bahwa Intel telah merilis Intel C ++ Compiler v13.0 untuk Android OS, upaya pertamanya untuk memberikan kompiler C / C ++ yang dioptimalkan yang dirancang khusus untuk platform mobile Google.

Pengembang dapat menggunakan kompiler pada sistem berbasis Linux * untuk membuat aplikasi untuk perangkat Android berdasarkan pada prosesor Intel, termasuk prosesor Intel® Atom ™. Kompiler Intel kompatibel dengan GNU C ++ dan alat pengembang di Android Native Development Kit (NDK) Anda juga tidak dapat menggunakan kompiler pada mesin pengembangan apa pun. Baik Windows maupun OS X tidak didukung; alat hanya disertifikasi untuk digunakan dengan Ubuntu 10.04 atau 11.04

Versi Android NDK saat ini menggunakan versi 4.6 dari toolchain Gnu Compiler Collection (GCC) open source secara default. Tetapi kompiler Intel menyertakan banyak optimisasi kepemilikan untuk chipnya sendiri, dan seringkali dapat menghasilkan kode yang dapat dieksekusi yang berkinerja lebih baik daripada yang dihasilkan oleh kompiler pihak ketiga seperti GCC.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.