Intel derleyicileri Microsoft'tan daha iyi mi? [kapalı]


56

Yıllar önce, Intel’in Visual Studio uyumlu derleyiciler sattığını öğrendiğimde şaşırmıştım. Özellikle C / C ++ ve fantastik teşhis araçlarını denedim. Ancak kod basitçe farkı anlamak için hesaplama açısından yoğun değildi. Tek izlenim şuydu: Intel gerçekten şimdi benim için yaptı mı, vay, nanosaniye çözünürlüğe sahip inanılmaz araçlar, inanılmaz. Ancak deneme sona erdi ve takım hiçbir zaman ciddi bir satın alma işlemi olarak değerlendirilmedi.

Deneyiminize göre, lisans maliyeti önemli değilse, hangi satıcı kazanır?

Kutsal bir savaşı körüklemek geniş ya da belirsiz bir soru ya da davranış değildir. Bu tür bir soru iki görünür araç hakkında. Aletlerin gizemleri veya sürprizleri olduğunda kimse sevmez. Ve en iyiyle en iyiler arasındaki seçimler daima acıdır. Ayrıca çimlerin daima yeşil bir argüman olduğunu da anlıyorum . Tüm "eğer varsa" hikayelerini dinlemek istiyorum.

Peki ya Intel bunu yerel olarak ayın çip adımlaması için optimize ediyorsa ve her donanım hedefi aslında Microsoft tarafından derlendiği gibi çalışmayacaksa? AMD donanımı hedefse ve sebepsiz yere her şey yavaşlarsa ne olur? Ya da diğer taraftan, Intel'in donanımında farkedilmeyen birçok fırsat varsa, Microsoft derleyici yazarlarının onu derlemede uygulamak için hiçbir zaman uygulayamayacakları kadar yavaşlarsa? Her ikisi de tamamen aynıysa, aslında iki farklı kutuya henüz sarılmış ve her iki satıcıya da üçüncü taraf bir dükkan tarafından lisanslanan tek bir kod temeli varsa?

Ve bunun gibi. Ama birileri bazı cevaplar biliyor.


17
Intel Compilers, çok verimli sayısal kodlar üretme konusunda ün sahibidir.
quant_dev

2
@honk: Eğer quant_dev bunu destekleyecek bazı bağlantılar sağlayabilirse, evet olmalı!
SinirliFormsDesigner ile

2
@RocketSurgeon: Herkes ifadenize katılmayacaktı. Aslında Eric Raymond, Microsoft'un ticari uygulamalarıyla birkaç yıl geriye dönük işlem yapma sürecini sürdürdüğü için oldukça güçlü bir dava açtı.
Mason Wheeler

2
@RocketSurgeon açık kaynağının parayla ilgisi yok.
kaoD

1
Microsoft derleyici çok iyi kod üretir. Düzeneğin manuel olarak incelenmesi nadiren herhangi bir aptal komut dizisini bulur. Aslında, optimizasyonların ne kadar derinleştiğinden etkilendim, hatta talimatların önbellek hattı sınırlarını geçmesini bile engelliyor.
doug65536

Yanıtlar:


57

UYARI: Kendi deneyimlerime dayanarak cevap - YMMV

Kod gerçekten hesaplama açısından pahalıysa, evet, kesinlikle . Eski Intel C ++ Compiler ile (şimdi doğru hatırlıyorsam Intel Studio) standart Microsoft Visual C ++ Compiler ile 20 kattan fazla bir gelişme olduğunu gördüm . Kodun mükemmel olmaktan çok uzak olduğu ve bir rol oynadığı doğru (aslında Intel derleyicisini kullanmaktan rahatsız ettik, dev kod tabanını yeniden düzenlemekten daha kolaydı), aynı zamanda kodu çalıştırmak için kullanılan CPU da Intel Core 2 idi. Quad, böyle bir şey için mükemmel CPU, ancak sonuçlar şok edici oldu. Derleyicinin kendisi, örneğin SSE yetenekleri açısından belirli bir CPU'yu hedefleme de dahil olmak üzere, kodu optimize etmenin çok çeşitli yollarını içerir . Gerçekten utanıyor -O2/ -O3kaçıyor. Ve bu olduProfil oluşturucu kullanmadan önce .

Bununla birlikte, gerçekten agresif optimizasyonları açmak, derlemenin oldukça zaman alacağına dikkat edin, büyük bir proje için iki saatin hiç de imkansız olmadığını unutmayın. Ayrıca, yüksek düzeydeki optimizasyonlarla kodda kendini gösterme konusunda daha büyük bir hata olasılığı vardır (bu, gcc ile de gözlemlenebilir -O3). İyi tanıdığınız bir projeye göre, bu bir artı olabilir, çünkü daha önce yakalayamadığınız olası hataları bulur ve düzeltirsiniz, ancak tüylü bir karmaşa oluştururken, sadece parmaklarınızı çarpıp x86 tanrılarına dua edersiniz.

AMD makinelerde performansı hakkında bir şey: Intel CPU'lar kadar iyi değil, ama hala yolu (benim deneyimlerinden, tekrar) MS C ++ derleyici daha iyi. Bunun nedeni, SSE2 desteğiyle genel bir CPU'yu da hedefleyebilmenizdir (örneğin). O zaman SSE2'li AMD işlemciler çok fazla ayırım yapmayacak. Yine de Intel CPU'daki Intel derleyicisi gösteriyi gerçekten çaldı. Ancak, tüm çift gökkuşağı ve parlak tekboynuzlar değil. GenuineIntel olmayan CPU'larda hiç çalışmayan ikili dosyalar hakkında bazı ağır suçlamalar var (ve bu kabul ediliyor), diğer üreticilerin CPU'larında yapay olarak yapay performansın düşmesine neden oldu. Ayrıca, bunun en az 3 yıl öncesinden gelen bilgiler olduğunu ve şu anda bilinmeyen geçerliliği olduğunu unutmayın. AMA, yeni ürün açıklamaları, Intel'e Intel olmayan CPU'lara uygun göründüğü kadar yavaş çalışması için ikili bir alakart durum veriyor.

Intel ile ilgili ne olduğunu ve neden bu kadar iyi sayısal hesaplama araçları yaptıklarını bilmiyorum, ama buna da bir göz atın: http://julialang.org/ . Bir karşılaştırma var ve son satıra bakarsanız, MATLAB hem C kodunu hem de Julia'yı yenerek parlıyor , beni asıl çeken şey, yazarın neden Intel'in Matematik Çekirdeği Kütüphanesi olduğunu düşünmesi .

Bunun Intel Compiler araç setinin bir reklamı gibi göründüğünü biliyorum, ancak deneyimlerime göre bu işi gerçekten iyi bir şekilde yaptı ve basit bir mantık bile CPU'ları yapanların kendileri için en iyi şekilde nasıl programlayacaklarını bilmeleri gerektiğini söylüyor. IMO, Intel C ++ derleyicisi mümkün olan her son performans kazancını sıkıyor.


@ K.Steff Bu vs ms derleyicisini tüm program tercihleri ​​ve profil destekli optimizasyon ile karşılaştırdınız mı?
tekrar yayınlama

2
Intel, CPU tarafından Intel tarafından üretilmemişse, derleyicisinin çalışma zamanında kasıtlı olarak optimize edilmemiş kod yolları kullandığını açıklamaya zorlandı . Intel, FTC ile başını belaya soktu . ICC kullanmam için bana ödeme yapamazsın. Rekabet karşıtı saçmalığa 10 ayak direğine dokunmam.
doug65536

@ doug65536 "Intel derleyicileri gerçekten daha iyi mi" diye sorulan soru, "Intel, bu tekeli yazılımda daha fazla yer kazanmak için kötüye kullanan donanım pazarında bir tekeldir" değil. Yorumunuzun kapalı olduğunu söylemiyorum ama benim için ideolojinin bu tartışmada yeri yok. Kullanın veya kullanmayın - çağrınız, ancak bu, ICC'nin Intel CPU'lar için ikili dosya üretme konusunda oldukça iyi olduğu gerçeğini değiştirmeyecek.
K.Steff

1990'larda popüler olan C dili, programcıların daha verimli kod yazmasına izin veren, ancak bazı optimize edici derleyicileri desteklemeyen C dilini birçok yönden genişletti. Microsoft, bu tür uzantılarla uyumsuz olabilecek optimizasyonları sürdürmek için diğer satıcılardan daha az istekli olduğumu söyleyebileceklerime sahip. Bu, derleyicilerini, kodlarını gerektirmeyen kodları işlerken bu tür uyumluluklara dikkat etmeyenlere göre daha az verimli hale getirir, ancak bunları gerektiren kodları doğru şekilde işlemesini sağlar.
SuperCat

35

Intel Compiler, çok verimli sayısal kodlar üretme ününe sahiptir:

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/

Ben o iddia etmiyorum unutmayınız olduğunu orada en hızlı derleyici, ama kesinlikle verimlilik için çok iyi bir üne sahiptir. Windows için "resmi" LAPACK ikili dosyalarının yazarlarının bunları oluşturmak için Intel Fortran derleyicisini kullandıklarına dikkat edin: http://icl.cs.utk.edu/lapack-for-windows/ ve verimlilik hakkında bir iki şey bilmeleri gerektiğini unutmayın.


2
Sadece bu üne sahip olmakla kalmıyor, ona da dayanıyor. CRUD uygulamaları yazmak için kullanıyorsanız bu gerekli değildir, ancak C, C ++ ve FORTRAN ürünleri sayı çatırmaya gelince kesinlikle çiğ .
Blrfl

27

Intel C ++, kod oluşturucuya ek olarak gcc'ye göre birkaç avantaja sahiptir. Bu köklerin her ikisi (büyük ölçüde) EDG ön ucuna dayandığı gerçeğinden kaynaklanmaktadır . Daha iyisi veya kötüsü için, ikisi de (yavaşça) aşındırıyor, bu yüzden avantajlar bir zamanlar olduğu kadar büyük değil.

Birincisi, kural olarak çok daha iyi hata mesajları yayınlamasıdır. Sen Clang ve gcc arasındaki hata mesajları karşılaştırmasını bakmak isteyebilirsiniz . Intel C ++ (EDG ön ucunu temel alan pek çokları ile birlikte) yıllardır Clang’lara benzer bir teşhis koyuyor.

İkincisi, EDG ön ucunun, Intel kod oluşturucunun hızlı kod üretmek için olduğu kadar iyi bir dil uygunluğu için iyi bilinmesidir. Neredeyse tüm makul ölçülere göre, EDG ön ucu C ++ 98, 03 veya (mevcut sürümlerde) C ++ 0x ile mevcut tüm derleyicilere göre daha iyi bir uyum sağlar.

Dediğim gibi, bu avantajların her ikisi de zamanla değişen derecelerde aşınmış. Gcc'nin son sürümleri oldukça iyi bir dil uygunluğuna sahip. Clang önemli ölçüde daha iyi hata mesajlarına sahiptir ve tüm C ++ dilinin uygulanmasında iyi ilerleme kaydetmektedir. Buna rağmen, Intel C ++, her iki konuda da ikisinden de daha iyidir ve iyi teşhis için bir derleyiciye, daha iyi bir uyumluluk ve kod oluşturma için bir diğerine ihtiyaç duymak yerine çoğu şeyi doğru yapan tek bir pakettir.


14

Bunu bir süre önce işte denedik. Kod tabanımızın çoğu Delphi'de, ancak birisinin C ++ DLL yöntemiyle ne zaman yapılacağının iyi bir fikir olacağını düşündüğü yüksek derecede hesaplama ağırlıklı bir işleve sahibiz. İş arkadaşlarımdan biri Intel derleyicisi hakkında harika şeyler duyduğundan denemeye karar verdi. DLL dosyasını Intel derleyicisinden yeniden oluşturduk ve bazı hız testlerini yaptık ve sonuçlar onu çok şaşırttı, yanlış bir şey yapması gerektiğini düşündü.

DLL, "doğru" yaparsak teknik olarak NP zorlu zorluk sınıfında olan kombinatorik ve topoloji bileşenleri ile ilgili çok zor bazı problemleri hesaplamalıdır, ancak NP performansını önlemek için çeşitli sezgisel yöntemler kullanırız. Buna rağmen, devam eden çok sayıda numara var. Ve yaptığımız testler için VS derleyicisi ile Intel derleyicisi arasındaki fark epsilon içinde ya da Intel derleyicisi genellikle% 20 civarında bir yerde gözle görülür şekilde daha yavaştı. Ve Intel derleyicisinin daha hızlı kod üretmesini sağlamak için derleme ayarlarında ne gibi değişiklikler yaptığının önemi yok. Bu yüzden sonuca geçmedik.

Elbette bu sadece bir gerçek dünya örneğidir. Kilometreniz değişebilir.


Kriterlerin üzerinde çalıştığı CPU'nun ayrıntılarını paylaşır mısınız?
Oak

22
İlk paragrafınızı okuduğumda, hız testi sonuçlarının onu iyi bir şekilde şaşırttığını söylemiştiniz . Görünüşe göre bu ikinci paragrafı okuduktan sonra yanlış. İlk okumada beni neyin yanlış yönlendirdiğinden emin değil; daha yakından incelendikten sonra, aslında beni bu algıya bırakabilecek olumlu kelimeler kullanmıyorsunuz. Başka birinin de aynı hatayı yapması durumunda yorumda bulunabileceğimi düşündüm ve burada ne söylediğiniz hakkında kafası karışıyor.
Cody Gray,

2
Test için bir AMD işlemci mi kullanıyordunuz? Bence bu konuyla ilgili bilgiler (derleyicinin kasıtlı olarak kötü performans gösterip göstermediğini veya elinden gelenin en iyisini yaparken bile bir şey yapamayacağını) düşünüyorum.
Monica

3
Intel Core i7 işlemcisi.
Mason Wheeler

Kısa versiyon: Intel, VS2010'dan daha yavaştı. Ben de bu işte çok uzun zaman önce C ++ 'i sıkıştıran oldukça kısa veri kodları üzerinde denedim. Birçok farklı ayar denedim. Mevcut performans testlerine sahip bazı bireysel algoritmalar gözle görülür şekilde daha hızlı, ancak gözle görülür şekilde yavaşladı. Genel olarak, yazılımla yaptığım tüm üst düzey işlemler tutarlı ve ölçülebilir şekilde daha yavaştı. Bunu Intel'in derleyicisinin 2013 ve 2010 sürümleriyle de denedim, 2010 daha iyi kodlu olduğu gibi ürünlerin daha istikrarlı olması gibi görünüyor. Testlerimin çoğu AVX i7 öncesiydi, ancak bazıları daha eski bir Core2'deydi.
Rich

9

Bir zamanlar üzerinde çalıştığım gömülü bir uygulamada, bir Intel derleyicinin denenmesi, daha yüksek performansla yeni donanımlar döndürmemize neden olacağını gösterdi. Yeni donanımın maliyeti 10 $ / ünite, 1 Milyon adet satış öngörülmüş, Geliştirme maliyeti ve proje gecikmeleri eklenmiştir. Seçenek 2 bir profil / mikro optimizasyon idi ve zaten oldukça iyi bir şekilde profillenmiş / optimize edilmiş bir kod tabanı oldu - bilinmeyen sonuçlar, bilinmeyen zaman.

Patronun derleyiciyi satın almasını istediğimizde patronun ne dedi sence .......

Ancak - bu çok şanslı ve daha nadir bir durumdu - Intel derleyiciden% 10 daha hızlı kod çıktısı bizi performansın doğru tarafına itti. Zaten sağ tarafta olsaydık ya da% 10'un üzerinde olsaydık, fark yaratmazdı. Mühendislerimiz olsaydı, muhtemelen kodu optimize etmiş ve donanımdan tasarruf etmeyi başarmış ve Intel derleyicisine ihtiyaç duymamış olsaydık, ancak risk yüksekti ve Intel derleyicisi mühendislik süresinden daha ucuza çalıştı.

Dengede, bunun bir mikro optimizasyon biçimi olduğunu söyleyebilirim - ihtiyacınız olduğunu bildiğinize kadar yapmayın ve sonra, yalnızca sorunların gerçek nedenini belirledikten ve bulduktan sonra yapın. Özellikle iyi bir seçimdir, profilin 'her yerde' yavaş olduğunu ve hiçbir şişe boynu olmadığını gösterir.


5

Sadece üç avantajla karşılaştım:

  1. Diğer derleyicilerden çok daha yeni Intel CPU'ların özelliklerini desteklemektedir.

  2. Uyarılar vermek ve diğer derleyicilerin kaçırdığı sorunları yakalamak harika bir ek derleyicidir. GCC, ICC'nin yapmadığı bazı şeyleri yakalar ve bunun tersi de geçerlidir. Visual studio, ICC'nin yapmadığı bazı şeyleri yakalar ve bunun tersi de geçerlidir.

  3. Diğer herhangi bir derleyiciden çok daha fazla otomatik-paralelleştirme döngüsü (bunları çoklu iş parçacıklarına otomatik olarak dağıtarak) yapar. Çok fazla kod bundan fayda görmez, ancak bunu yapan bir kodunuz olduğunda, bir fark yaratabilir.


3

İntel derleyicisini kod tabanımızın her performans kritik projesi için kullanıyoruz. Bu konuda harika olan şey, kodu optimize etmenin gerçekten de bakımı yapılabilir hale getirmesi. Her yere __mm çağrıları manüel olarak eklemek ve derleyiciye, bir sonraki sürümde tümü en düşük seviyede olacak olan verileri önceden almasını söylemek yerine, kodunuzu yeniden düzenleyin ve çılgınca bir hız kazanın.

Genellikle, optimize edilmiş kodun, optimize edilmiş elden daha kolay takip edilmesi kolaydır, elden optimize edilmiş elden daha hızlıdır ve yeni bir komut seti yayınlandığında, derleyici bu komut setini kullanır. O fantastik.

Aynı zamanda kol derleyici için de geçerli (koldan, intel'ten değil), eğer kolunuzdaki serbest bırakma, sizin için vectorizing için iyi bir iş çıkarır.


+1. Intel bir ARM derleyicisine sahip mi? Unbeleivable!

1
Hayır, intel’in ARM derleyicisi yok. ARM, harika bir iş çıkaran bir ARM derleyicisine sahip.
martiert

2
"EDIT: kolun bir kol derleyicisi yok." Gerçekten demek istediğin bu mu?
luiscubal

0

Bu kıyaslama sayfasını kontrol edin. Kısacası, intel kazanır.

Ancak marj o kadar büyük olmayabilir: 32 bit'i derlerseniz ve derleme sisteminiz profil destekli optimizasyonu destekleyemiyorsa, kazanç% 10'dur. Böyle bir gelişme sorun ve daha uzun derleme sürelerine değer mi?


URL bağlantısı ölü gibi görünüyor.
Contango

0

Intel’in Android işletim sistemi için Intel C ++ Compiler v13.0’ı piyasaya sürdüğü, özellikle Google’ın mobil platformu için tasarlanmış bir optimizasyon C / C ++ derleyicisi sunmaya çalıştığı söyleniyor.

Geliştiriciler, derleyiciyi Intel® Atom ™ işlemcisi de dahil olmak üzere Intel işlemcilere dayalı Android cihazlar için uygulamalar oluşturmak için Linux * tabanlı sistemlerde kullanabilirler. Intel derleyici Android Native Development Kit'teki (NDK) GNU C ++ ve geliştirici araçları ile uyumludur. Derleyiciyi ya da herhangi bir geliştirme makinesinde kullanamazsınız. Ne Windows, ne de OS X desteklenmiyor; araçlar sadece Ubuntu 10.04 veya 11.04 ile kullanım için onaylanmıştır

Android NDK'nın şu anki sürümü, açık kaynaklı Gnu Compiler Collection (GCC) takım zincirinin 4.6 versiyonunu varsayılan olarak kullanıyor. Ancak Intel'in derleyicileri, kendi yongaları için pek çok özel optimizasyon içerir ve genellikle GCC gibi üçüncü taraf derleyiciler tarafından üretilenlerden daha iyi performans gösteren çalıştırılabilir kodlar verebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.