Intel derleyiciler. Intel derleyicilerinin sekizinci sürümü FORTRAN ve C'de paylaşım modülleri

Sen köle değilsin!
Seçkin çocuklar için kapalı eğitim kursu: "Dünyanın gerçek düzeni."
http://noslave.org

Vikipedi, özgür ansiklopedi

Intel C++ Derleyici
Modülde Lua hatası: 170. satırdaki Wikidata: "wikibase" alanını indekslemeye çalışın (sıfır değer).
bir tip
yazar

Modülde Lua hatası: 170. satırdaki Wikidata: "wikibase" alanını indekslemeye çalışın (sıfır değer).

geliştirici
geliştiriciler

Modülde Lua hatası: 170. satırdaki Wikidata: "wikibase" alanını indekslemeye çalışın (sıfır değer).

Yazılmış

Modülde Lua hatası: 170. satırdaki Wikidata: "wikibase" alanını indekslemeye çalışın (sıfır değer).

Arayüz

Modülde Lua hatası: 170. satırdaki Wikidata: "wikibase" alanını indekslemeye çalışın (sıfır değer).

İşletim sistemi
Arayüz dilleri

Modülde Lua hatası: 170. satırdaki Wikidata: "wikibase" alanını indekslemeye çalışın (sıfır değer).

İlk baskı

Modülde Lua hatası: 170. satırdaki Wikidata: "wikibase" alanını indekslemeye çalışın (sıfır değer).

donanım platformu
En son sürüm
Sürüm adayı

Modülde Lua hatası: 170. satırdaki Wikidata: "wikibase" alanını indekslemeye çalışın (sıfır değer).

Beta sürümü

Modülde Lua hatası: 170. satırdaki Wikidata: "wikibase" alanını indekslemeye çalışın (sıfır değer).

Alfa sürümü

Modülde Lua hatası: 170. satırdaki Wikidata: "wikibase" alanını indekslemeye çalışın (sıfır değer).

Test sürümü

Modülde Lua hatası: 170. satırdaki Wikidata: "wikibase" alanını indekslemeye çalışın (sıfır değer).

Okunabilir dosya biçimleri

Modülde Lua hatası: 170. satırdaki Wikidata: "wikibase" alanını indekslemeye çalışın (sıfır değer).

Oluşturulan Dosya Biçimleri

Modülde Lua hatası: 170. satırdaki Wikidata: "wikibase" alanını indekslemeye çalışın (sıfır değer).

Belirtmek, bildirmek

Modülde Lua hatası: 170. satırdaki Wikidata: "wikibase" alanını indekslemeye çalışın (sıfır değer).

Lisans

Ana Özellikler:

  • SSE, SSE2, SSE3, SSE4 için vektörleştirme

Derleyici, paralel programlar yazmak için OpenMP 3.0 standardını destekler. Ayrıca, OpenMP'ye uygun olarak yazılmış uygulamaları MPI kullanarak kümeler üzerinde çalıştırabileceğiniz Cluster OpenMP adlı bir OpenMP modifikasyonu içerir.

Intel C ++ Derleyicisi, Edison Tasarım Grubundan bir ön uç (derleyicinin derlenmiş programı ayrıştıran kısmı) kullanır. Aynı ön uç, SGI MIPSpro, Comeau C ++, Portland Group derleyicileri tarafından kullanılır.

Bu derleyici, SPEC CPU kıyaslamalarını derlemek için yaygın olarak kullanılır.

Derleyici içeren 4 seri Intel ürünü vardır:

  • Intel C++ Derleyici Profesyonel Sürümü
  • Intel Cluster Toolkit (Derleyici Sürümü)

İLE Linux'un dezavantajları derleyici sürümleri, bazı programları derlerken sorunlara neden olabilecek GNU C uzantılarıyla (GCC derleyicisi tarafından desteklenen) kısmi uyumsuzluk içerir.

deneysel seçenekler

Aşağıdaki deneysel derleyici varyantları yayınlanmıştır:

  • 17 Eylül 2007 tarihli Intel STM Derleyici Prototip Sürümü. Yazılım İşlem Belleği (STM) desteği. Yalnızca Linux ve Windows için yayınlandı, yalnızca IA-32 (x86 işlemciler);
  • Eylül 2008'den itibaren C / C ++ 0.3 için Intel Eşzamanlı Koleksiyonları. Paralel C ++ programlarının yazılmasını kolaylaştıran mekanizmalar içerir.

Temel bayraklar

pencereler Linux, MacOSX Açıklama
/ Tek -O0 Optimizasyonları devre dışı bırak
/ O1 -O1 Yürütülebilir dosyanın boyutunu en aza indirmek için optimize edin
/ O2 -O2 Daha yüksek hız için optimize edin. Bazı optimizasyonlar dahil
/ O3 -O3 O2'deki tüm optimizasyonları dahil edin. Ayrıca yoğun döngü optimizasyonları gerçekleştirin
/ Oip -Oip Dosya bazında prosedürler arası optimizasyonu etkinleştir
/ Oipo -Oipo Genel prosedürler arası optimizasyonu etkinleştirin
/ QxO -xO Herhangi bir şirket tarafından üretilen işlemciler için SSE3, SSE2 ve SSE uzantılarının kullanımına izin verin
/ hızlı -hızlı "Hızlı mod". Windows'ta “/ O3 / Qipo / QxHost / no-prec-div” ve Linux'ta “-O3 -ipo -static -xHOST -no-prec-div” ile eşdeğerdir. "-xHOST" bayrağının, derleyicinin üzerinde çalıştığı işlemci için optimizasyon anlamına geldiğini unutmayın.
/ Qprof-gen -prof_gen Yürütme profilini toplayacak programın araçlı bir sürümünü oluşturun
/ Qprof kullanımı -bol prof_gen bayrağıyla derlenmiş program başlatmalarından profil bilgilerini kullanın.

"Intel C ++ derleyicisi" hakkında bir inceleme yazın

Notlar (düzenle)

Ayrıca bakınız

Bağlantılar

Intel C ++ derleyicisini karakterize eden bir alıntı

Yine de Beyaz Magus'u son kez görmek için geri döndü... Kocası ve asla unutamadığı sadık arkadaşı. Kalbinde onu affetti. Ama ne yazık ki ona Mecdelli'nin affını getirememiş... Yani, gördüğün gibi, İsidora, "bağışlama" hakkındaki büyük Hıristiyan masalı, saf inananların herhangi bir şey yapmalarına izin vermeleri için sadece çocukça bir yalandır. Kötülük, ne yaparlarsa yapsınlar sonunda affedileceklerini bilerek. Ama sadece gerçekten affedilmeye layık olanı affedebilirsin. Bir kişi, başarılı bir Kötülük için hesap vermesi gerektiğini anlamalıdır ... Ve gizemli bir Tanrı'dan önce değil, kendisinden önce, kendisini acımasızca acı çekmeye zorlar. Magdalene, ona derinden saygı duymasına ve içtenlikle sevmesine rağmen, Vladyka'yı affetmedi. Tıpkı Radomir'in korkunç ölümü için hepimizi affedemediği gibi. Sonuçta, en iyi anlayan O'ydu - ona yardım edebilirdik, onu acımasız bir ölümden kurtarabilirdik ... Ama istemedik. Beyaz Büyücü'nün suçunu çok zalimce düşünerek onu bu suçlulukla yaşamaya terk etti, bir an olsun unutmadı... Ona kolay bir af dilemek istemiyordu. Onu bir daha hiç görmedik. Bebeklerini hiç görmedikleri için. Tapınağının şövalyelerinden biri - büyücümüz - Magdalena, Vladyka'ya bize geri dönme talebine cevabı iletti: “Güneş bir günde iki kez doğmaz ... Dünyanızın sevinci (Radomir) asla geri dönmeyecek sana, tıpkı sana geri dönmeyeceğim gibi. ve ben ... İNANÇ ve GERÇEĞİMİ buldum, onlar CANLI, seninki ÖLDÜ ... Oğullarının yasını tut - seni sevdiler. Ben hayattayken onların ölümlerini asla affetmeyeceğim. Ve suçunun seninle kalmasına izin ver. Belki bir gün sana Işık ve Bağışlama getirir ... Ama benden değil. " Magus John'un başı aynı nedenden dolayı Meteora'ya getirilmedi - Tapınak Şövalyelerinin hiçbiri bize geri dönmek istemedi ... Kurbanlarımızı anlamak ve kabul etmek istemeyen birçok kişiyi kaybettiğimiz için onları kaybettik ... Kim seninle aynı - bizi kınayarak gitti.
Başım dönüyordu! .. Susuz, sonsuz bilgi açlığımı tatmin eden bir susamış gibi, Kuzey'in cömertçe verdiği inanılmaz bilgi akışını hevesle emdim ... Ve çok daha fazlasını istedim! .. Her şeyi sonuna kadar bilmek istedim. . Acı ve sıkıntılarla kavrulmuş çölde taze bir nefesti! Ve içmeye doyamadım...
- Binlerce sorum var! Ama zaman kalmadı... Ne yapayım Sever? ..
- Sor Isidora!.. Sor, sana cevap vermeye çalışacağım...
- Söylesene Sever, neden bana bu hikayede iki hayat hikayesinin bir arada olduğu, benzer olaylarla iç içe geçtiği ve bir kişinin hayatı gibi sunulduğu geliyor? Yoksa yanılıyor muyum?
- Kesinlikle haklısın, Isidora. Size daha önce de söylediğim gibi, insanlığın sahte tarihini yaratan “bu dünyanın gücü”, Mesih'in gerçek yaşamının üzerine, bir buçuk bin yıl önce yaşamış olan Yahudi peygamber Yeşu'nun yabancı yaşamını “koymuştur”. Kuzey'in hikayesi). Ve sadece kendisi değil, ailesi, akrabaları ve arkadaşları, arkadaşları ve takipçileri de. Ne de olsa, bir kız kardeşi Martha ve bir erkek kardeşi Lazar, annesi Maria Jacobe'nin bir kız kardeşi ve Radomir ve Magdalene'e asla yakın olmayan diğerleri olan Yahudi kadın Mary, Peygamber Yeşu'nun karısıydı. Yanlarında başka "havariler" olmadığı gibi - Paul, Matta, Peter, Luke ve diğerleri ...
Bir buçuk bin yıl önce Provence'a (o zamanlar Galya (Transalpine Gaul olarak anılırdı), Yunan şehri Massalia'ya (şimdi Marsilya) taşınan peygamber Joshua'nın ailesiydi, çünkü Massalia o zamanlar Avrupa ve Asya arasındaki "geçit" ve zulüm ve sıkıntılardan kaçınmak için tüm "zulüm" için en kolay yoldu.

Derginin bir önceki sayısında, uygulama geliştiriciler arasında haklı bir şekilde popüler olan ve geliştiricilerin çok fazla işlemci kaynağı tüketen uygulama kodundaki talimatları algılamalarına olanak tanıyan ve geliştiricilerin, benzer kod bölümleriyle ilişkili olası darboğazları belirleyip ortadan kaldırarak uygulama geliştirme sürecini hızlandırır. Bununla birlikte, uygulamaların performansının büyük ölçüde geliştirmelerinde kullanılan derleyicilerin ne kadar verimli olduğuna ve makine kodu oluştururken kullandıkları donanımın hangi özelliklerini kullandıklarına bağlı olduğunu unutmayın.

Windows ve Linux için Intel Intel C ++ ve Intel Fortran derleyicilerinin en son sürümleri, Intel Itanium 2, Intel Xeon ve Intel tabanlı sistemler için uygulama performansı kazanımları sağlar. Intel pentium Hyper-Threading Teknolojisi gibi özelliklerden yararlanarak mevcut üçüncü taraf derleyicilere göre %4 ila %40.

Bu derleyici ailesi tarafından kodun optimizasyonu ile ilişkili farklılıklar arasında kayan nokta işlemlerini gerçekleştirmek için bir yığının kullanılması, prosedürler arası optimizasyon (IPO), uygulama profiline göre optimizasyon (Profil Kılavuzlu Optimizasyon, PGO), verilerin önceden yüklenmesi yer alır. bellek gecikmesini önleyen önbellek (Veri önceden getirme), Intel işlemcilerin belirli özellikleri için destek (örneğin, Intel Pentium 4'e özel Intel Streaming SIMD Extensions 2), kod yürütmenin otomatik paralelleştirilmesi, uygulamaların oluşturulması, birkaç farklı üzerinde çalıştırma bunlardan biri için optimize edildiğinde işlemci türleri, dal tahmini, iş parçacıklarıyla çalışmak için genişletilmiş destek.

Intel derleyicilerinin Alias ​​​​/ Wavefront, Oracle, Fujitsu Siemens, ABAQUS, Silicon Graphics, IBM gibi tanınmış şirketlerde kullanıldığını unutmayın. Birkaç şirket tarafından yapılan bağımsız testler, Intel derleyicilerinin diğer üreticilerin derleyicilerinden önemli ölçüde daha iyi performans gösterdiğini göstermiştir (örneğin, bkz. http://intel.com/software/products/compilers/techtopics/compiler_gnu_perf.pdf).

Aşağıda bazı özelliklere bakacağız en son sürümler Masaüstü ve sunucu işletim sistemleri için Intel derleyicileri.

Microsoft Windows platformu için derleyiciler

Windows için Intel C++ Derleyici 7.1

Intel C ++ Derleyici 7.1, Intel Itanium, Intel Itanium 2, Intel Pentium 4 ve Intel Xeon işlemciler için yüksek düzeyde optimize edilmiş kodun yanı sıra bu yılın başlarında piyasaya sürülen bir derleyicidir. Intel işlemci Intel Centrino teknolojisini kullanan ve mobil cihazlarda kullanılması amaçlanan Pentium M.

Belirtilen derleyici, Microsoft Visual C ++ 6.0 geliştirme araçlarıyla tamamen uyumludur ve Microsoft Görsel Studio .NET: Uygun geliştirme ortamlarına gömülebilir.

Bu derleyici ANSI ve ISO C/C++ standartlarını destekler.

Windows için Intel Fortran Derleyici 7.1

Yine bu yılın başlarında piyasaya sürülen Windows için Intel Fortran Derleyici 7.1, Intel Itanium, Intel Itanium 2, Intel Pentium 4 ve Intel Xeon, Intel Pentium M için optimize edilmiş kod oluşturmanıza olanak tanır.

Bu derleyici, Microsoft Visual C ++ 6.0 ve Microsoft Visual Studio .NET geliştirme araçlarıyla tamamen uyumludur, yani ilgili geliştirme ortamına yerleştirilebilir. Ayrıca bu derleyici, 64 bit Intel Fortran Derleyici kullanarak 32 bit Pentium işlemci üzerinde Microsoft Visual Studio kullanarak Itanium / Itanium 2 işlemciler üzerinde çalışan işletim sistemleri için 64 bit uygulamalar geliştirmenize olanak tanır. Bu derleyici, kodunuzda hata ayıklarken Microsoft .NET platformu için bir hata ayıklayıcı kullanmanıza olanak tanır.

Compaq kuruluysa, derleyiciler kaynak uyumlu olduğundan, orijinal Intel Fortran Compiler 7.1 yerine Visual Fortran 6.6 kullanılabilir.

Windows için Intel Fortran Derleyici 7.1, tamamen ISO Fortran 95 uyumludur ve C ve Fortran kodunu içeren uygulamaların oluşturulmasını ve hatalarının giderilmesini destekler.

Linux derleyicileri

Linux için Intel C++ Derleyici 7.1

Yılın başında piyasaya sürülen diğer bir derleyici, Linux için Intel C ++ Derleyici 7.1, Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M işlemciler için yüksek derecede kod optimizasyonu sağlar.Bu derleyici, aşağıdakilerle tamamen uyumludur. Kaynak kodu ve nesne modülleri düzeyindeki GNU C derleyicisi, ek bir ücret ödemeden GNU C ile oluşturulan uygulamaları ona geçirmenize olanak tanır.Intel C++ Derleyicisi, C++ ABI'yi destekler (Linux çekirdeğine ek olarak erken SCO işletim sistemleri, Sun Solaris'in ilk sürümleri ve diğerleri gibi diğer platformlar için Linux üzerinde çalıştırılacak derlenmiş kod), bu da gcc 3.2 derleyicisiyle tam ikili uyumluluk anlamına gelir. Son olarak, Linux için Intel C ++ Derleyici 7.1 ile, kaynak kodunda birkaç küçük değişiklikle Linux çekirdeğini yeniden derleyebilirsiniz.

Linux için Intel Fortran Derleyici 7.1

Linux için Intel Fortran Derleyici 7.1, Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M için optimize edilmiş kod oluşturmanıza olanak tanır. Bu derleyici, kaynak kodu düzeyinde Compaq Visual Fortran 6.6 derleyicisiyle tam uyumludur ve Compaq Visual Fortran ile oluşturulan uygulamaları onunla yeniden derlemek, böylece performanslarını artırmak.

Ayrıca, belirtilen derleyici, geliştiriciler tarafından emacs düzenleyicisi, gdb hata ayıklayıcısı ve uygulama oluşturmak için make yardımcı programı gibi kullanılan yardımcı programlarla uyumludur.

Bu derleyicinin Windows sürümü gibi, Linux için Intel Fortran Derleyici 7.1 de tamamen ISO Fortran 95 uyumludur ve iki dilde kod içeren uygulamaların oluşturulmasını ve hata ayıklamasını destekler - C ve Fortran.

Listelenen Intel derleyicilerinin oluşturulmasına önemli bir katkının Rus Intel Geliştirme Merkezi'nden uzmanlar tarafından yapıldığı vurgulanmalıdır. yazılım Nizhniy Novgorod'da. Intel derleyicileri hakkında daha fazla bilgi için, www.intel.com/software/products/ adresindeki Intel Web sitesini ziyaret edin.

Bu makalenin ikinci kısmı, mobil cihazlar için uygulamalar oluşturan Intel derleyicilerine odaklanacaktır.

Giriş 2003'ün sonlarında Intel, derleyici koleksiyonunun 8.0 sürümünü tanıttı. Yeni derleyiciler, sunucularda, masaüstlerinde ve masaüstü bilgisayarlarda çalışan uygulamaların performansını artırmak için tasarlanmıştır. mobil sistemler(dizüstü bilgisayarlar, cep telefonları ve PDA'lar) Intel işlemcilere dayalıdır. Bu ürünün Intel Nizhny Novgorod Yazılım Geliştirme Merkezi çalışanlarının ve Sarov'dan Intel uzmanlarının aktif katılımıyla oluşturulduğunu belirtmek hoş.

Yeni seri, Windows ve Linux için Intel C ++ ve Fortran derleyicilerini ve Windows CE .NET için Intel C ++ derleyicilerini içerir. Derleyiciler, aşağıdaki Intel işlemcilerine dayalı sistemleri hedefler: Intel Itanium 2, Intel Xeon, Intel Pentium 4, Intel Kişisel İnternet İstemci Mimarisi cep telefonları ve Cep Bilgisayarları ve Mobil Intel Pentium M İşlemci (Intel Centrino Mobil Teknolojisinin bir bileşeni).

Windows için Intel Visual Fortran Derleyicisi, yüksek performanslı bilgi işlem çözümleri için yeni nesil derleme teknolojileri sunar. Compaq Visual Fortran (CVF) dilinin işlevselliğini Intel'in derleme ve kod oluşturma optimizasyon teknolojilerinin mümkün kıldığı performans kazanımlarıyla birleştirir ve CVF kaynak kodunuzu Intel Visual Fortran ortamına taşımayı kolaylaştırır. Bu derleyici, 32 bit için olduğu gibi ilk kez CVF işlevlerini tanıtır. Intel sistemleri ve Windows ortamında çalışan Intel Itanium işlemci ailesini temel alan sistemler için. Ayrıca bu derleyici, Intel 32 bit işlemciler ve Intel Itanium işlemci ailesini temel alan Linux sistemlerinde CVF dil özelliklerini uygulamanıza olanak tanır. 2004 yılında, bu derleyicinin genişletilmiş bir sürümünün yayınlanması planlanmaktadır - Windows için Intel Visual Fortran Compiler Professional Edition, Visual Numerics, Inc. tarafından geliştirilen IMSL Fortran 5.0 Kitaplığı'nı içerecektir.


"Yeni derleyiciler, grafik ve video performansını ve diğer performans geliştirmelerini iyileştirmek için yeni talimatlar içeren Prescott kod adlı, yakında çıkacak olan Intel işlemcilerini de destekliyor. yeni teknoloji Intel'in Nizhny Novgorod'daki Yazılım Geliştirme Merkezi'nin eş direktörü Alexey Odinokov, benzer şekilde cep telefonları ve cep bilgisayarları için grafik, ses ve video uygulamalarının performansını artıran Mobil MMX (tm) dedi. “Bu derleyiciler, uygulama geliştiricilerine Intel mimarisine dayalı yeni kablosuz uygulamalar oluşturmak için tek bir araç seti sağlıyor. Intel'in yeni derleyicileri, Intel'in Hyper-Threading Teknolojisini ve uygulamalardaki talimat akışını kontrol etmek için yüksek seviyeli direktiflerin kullanımını belirten OpenMP 2.0 endüstri spesifikasyonunu da destekliyor."

Derleyicilere dahil edilen yeni araçlar arasında Intel Kod Kapsamı ve Intel Test Önceliklendirme bulunur. Bu araçlar birlikte, yazılım test sürecini iyileştirerek uygulama geliştirmeyi hızlandırmanıza ve uygulama kalitesini artırmanıza olanak tanır.

Kod Kapsamı, uygulama testi sırasında uygulama mantığının kullanımına ve uygulama kaynak kodundaki kullanılan bölümlerin konumuna ilişkin eksiksiz bilgi sağlar. Uygulamada değişiklik yapılması durumunda veya bu test, uygulamanın geliştiriciyi ilgilendiren bir bölümünün kontrol edilmesine izin vermiyorsa, Test Önceliklendirme aracı, program kodunun seçilen bölümünün çalışmasını kontrol etmenizi sağlar.

Intel'in yeni derleyicileri, 399 $ ile 1.499 $ arasında değişen bir dizi trim seviyesinde gelir. Bugün Intel Corporation'dan veya web sitesinde bir listesi bulunan dünyanın dört bir yanındaki satıcılardan satın alınabilirler. http://www.intel.com/software/products/reseller.htm#Rusya.

Prescott işlemci desteği

Derleyicinin sekizinci sürümünde Intel Pentium 4 işlemci (Prescott) desteği aşağıdaki gibidir:

1. SSE3 komutları (veya PNI, Prescott New Instructions) desteği. Burada üç yolu vurgulamaya değer:

a. Satır içi montaj. Örneğin, derleyici SSE3 _asm komutunun (addsubpd xmm0, xmm1) aşağıdaki kullanımını tanır. Böylece, düşük seviyeli optimizasyonla ilgilenen kullanıcılar, montaj talimatlarına doğrudan erişebilirler.

B. C / C++ derleyicisinde, montajcı eklerini kullanmaktan daha yüksek bir seviyeden yeni talimatlar da mevcuttur. Yani, yerleşik işlevler aracılığıyla (iç işlevler):

Yerleşik işlevler

Dahili işlevOluşturulan komut
_mm_addsub_psAddsubps
_mm_hadd_psHaddps
_mm_hsub_psMsubps
_mm_moveldup_psMovsldup
_mm_movehdup_psMovshdup
_mm_addsub_pdAddsubpd
_mm_hadd_pdhaddpd
_mm_hsub_pdhsubpd
_mm_loaddup_pdmovddup xmm, m64
_mm_movedup_pdmovddup kayıt, kayıt
_mm_lddqu_si128Lddqu

Tablo, yerleşik işlevleri ve SSE3 setinden ilgili montaj talimatlarını gösterir. Aynı destek, MMX \ SSE \ SSE2 kümelerinden gelen komutlar için de mevcuttur. Bu, programcının, montaj dili programlamaya başvurmadan düşük seviyeli kod optimizasyonları gerçekleştirmesini sağlar: derleyici, satır içi işlevleri uygun işlemci talimatlarına ve kayıtların optimum kullanımına eşleştirmekle ilgilenir.Programcı, yeniyi verimli bir şekilde kullanan bir algoritma oluşturmaya konsantre olabilir. talimat setleri.

v. Derleyici tarafından otomatik olarak yeni komutlar oluşturma. Önceki iki yöntem, programcı tarafından yeni komutların kullanıldığını varsayar. Ancak derleyici aynı zamanda (uygun seçenekleri kullanırken - aşağıdaki 3. bölüme bakın) C / C++ ve Fortran kodu için SSE3 setinden otomatik olarak yeni komutlar üretebilir. Örneğin, kullanımı %40'a varan performans artışı sağlayabilen optimize edilmiş hizalanmamış yükleme komutu (lddqu) (örneğin, video ve ses kodlama görevlerinde). SSE3 setindeki diğer komutlar, 3B grafik problemlerinde veya karmaşık sayıların kullanıldığı hesaplama problemlerinde önemli bir ivme elde etmenizi sağlar. Örneğin, aşağıdaki bölüm 3.1'deki grafik, SPEC CPU2000 FP setinden 168.wupwise uygulaması için, SSE3 komutlarının otomatik oluşturulmasından elde edilen hızlanmanın ~ %25 olduğunu göstermektedir. Bu uygulamanın performansı, büyük ölçüde karmaşık aritmetiğin hızına bağlıdır.

2. Prescott işlemcinin mikro mimari avantajlarını kullanmak. Kod oluştururken, derleyici yeni işlemcideki mikro mimari değişiklikleri dikkate alır. Örneğin, bazı işlemleri gerçekleştirmek (tamsayı kaydırma, tamsayıları çarpma veya sayılar arasında dönüştürme gibi) farklı formatlar SSE2'deki kayan nokta önceki sürümlere kıyasla yeni işlemcide hızlandı (örneğin, tamsayı kayması şimdi Intel Pentium 4 işlemcinin önceki sürümü için dört işlemci döngüsüne karşılık bir işlemci döngüsü alıyor). Bu tür komutların daha yoğun kullanımı, uygulamada önemli bir hızlanma elde etmenizi sağlar.
Mikromimari değişikliklerin bir başka örneği, geliştirilmiş depo iletme mekanizmasıdır (önceden bellekte depolanan verilerin hızlı yüklenmesi); gerçek tasarruf, önbellekte bile değil, bazı ara depolama arabelleklerinde gerçekleşir, bu da daha sonra verilere çok hızlı erişim sağlar. Bu mimari özellik, örneğin program kodunun daha agresif otomatik vektörleştirmesini gerçekleştirmeyi mümkün kılar.
Derleyici, birinci ve ikinci düzey önbelleklerin artan boyutunu da hesaba katar.

3. Hyper-Threading Teknolojisi için geliştirilmiş destek. Bu nokta, bir önceki mikromimari değişiklikler ve bunların derleyicideki kullanımı ile ilgili olabilir. Örneğin, endüstri spesifikasyonu OpenMP için destek uygulayan bir çalışma zamanı kitaplığı, yeni bir işlemci üzerinde çalışacak şekilde optimize edilmiştir.

Verim

Derleyiciler, Intel işlemci mimarilerinden yararlanmanın basit ve etkili bir yoludur. Aşağıda, koşullu (çok) derleyici kullanmanın iki yolu vurgulanmıştır: a) derleyici ayarlarında olası bir değişiklikle programların yeniden derlenmesi, b) hem derleyici ayarlarında hem de kaynak metinde bir değişiklikle yeniden derleme ve ayrıca gerçekleştirilen optimizasyonlara ve diğerlerinin olası kullanımına dayalı derleyici teşhisi yazılım araçları(profiller gibi).


1.1 Derleyici ayarlarını yeniden derleyerek ve değiştirerek programları optimize etme


Çoğu zaman, yeni bir optimize edici derleyiciye geçişte ilk adım, onu varsayılan ayarlarıyla kullanmaktır. Bir sonraki mantıklı adım, daha agresif optimizasyon için seçenekleri kullanmaktır. Şekil 1, 2, 3 ve 4, diğer endüstri lideri ürünlere kıyasla Intel 8.0 derleyicisine geçişin etkisini göstermektedir (-O2 varsayılan derleyici ayarlarıdır, temel en iyi performans ayarıdır). Karşılaştırma, 32 ve 64 bit Intel mimarilerinde gerçekleştirilir. SPEC CPU2000'den uygulamalar bir test takımı olarak kullanılır.


Resim 1




Resim 2




Figür 3




Şekil 4


Bazı seçenekler aşağıda listelenmiştir (bundan sonra Windows işletim sistemi ailesi için seçenekler verilmiştir; Linux işletim sistemi ailesi için aynı etkiye sahip seçenekler vardır, ancak ad farklı olabilir; örneğin, Windows için -Od veya QxK sırasıyla Linux için -O0 veya -xK ile aynı etki; daha fazla bilgi, Intel derleyicisi tarafından desteklenen derleyici kılavuzunda bulunabilir).


Optimizasyon seviyelerini kontrol etme: Seçenekler -Od (optimizasyon yok; programların hatalarını ayıklamak için kullanılır), -O1 (kod boyutunu en aza indirirken maksimum hız), -O2 (kod yürütme hızı için optimizasyon; varsayılan olarak kullanılır), -O3 (kod yürütme için en agresif optimizasyonları etkinleştirir) hız; bazı durumlarda ters etkiye, yani yavaşlamaya yol açabilir; IA-64'te -O3 kullanımının çoğu durumda hızlanmaya neden olurken, IA-32 üzerindeki olumlu etkinin daha az belirgin olduğu unutulmamalıdır) . -O3 tarafından etkinleştirilen optimizasyon örnekleri: döngü değişimi, döngü füzyonu, döngü dağıtımı (optimizasyon, ters döngü füzyonu), verilerin yazılım tarafından önceden getirilmesi. -O3 kullanılırken yavaşlamanın olası olmasının nedeni, derleyicinin program hakkında yeterli bilgiye sahip olmadan belirli bir durum için agresif optimizasyonları seçmek için buluşsal bir yaklaşım kullanması olabilir (örneğin, döngüde kullanılan veriler için önceden getirme talimatları oluşturmuştur). , döngünün çok sayıda yürütüldüğünü varsayarsak, aslında yalnızca birkaç yinelemeye sahiptir). Prosedürler arası profil oluşturma optimizasyonunun yanı sıra programcıdan çeşitli "ipuçları" (bkz. bölüm 3.2) bu durumda yardımcı olabilir.

prosedürler arası optimizasyon: -Qip (bir dosya içinde) ve -Qipo (birkaç veya tüm proje dosyaları içinde). Sık kullanılan kodun satır içi olarak değiştirilmesi gibi optimizasyonları içerir (bir işlev / prosedür çağırma maliyetini azaltır). Optimizasyonun diğer aşamaları için bilgi sağlar - örneğin, bir döngünün üst sınırı hakkında bilgi (örneğin, bir dosyada tanımlanan ancak birçok dosyada kullanılan bir derleme zamanı sabitiyse) veya bellekteki veri hizalaması hakkında bilgi (birçok MMX) \ SSE \ SSE2 \ SSE3 komutları, işlenenler 8 veya 16 bayt belleğe hizalanmışsa daha hızlı çalışır). Bellek ayırma prosedürlerinin analizi (uygulanan/proje dosyalarından birinde çağrılan), bu belleğin kullanıldığı işlevlere/prosedürlere iletilir (bu, derleyicinin verilerin bellekte düzgün şekilde hizalanmadığına dair muhafazakar varsayımdan vazgeçmesine yardımcı olabilir; ve yokluğunda varsayım muhafazakar olmalıdır ek bilgi). Diğer bir örnek, belirsizliği giderme, veri takma analizidir: ek bilgi yokluğunda ve kesişimlerin olmadığını kanıtlamanın imkansızlığında, derleyici kesişimlerin olduğu şeklindeki muhafazakar varsayımdan hareket eder. Böyle bir karar, örneğin IA-32'de otomatik vektörleştirme veya IA-64'te yazılım boru hattı (SWP) gibi optimizasyonların kalitesini olumsuz etkileyebilir. Prosedürler arası optimizasyon, bellekten kesişimlerin varlığını analiz etmede yardımcı olabilir.

Profil oluşturma optimizasyonu: Üç aşama içerir. 1) -Qprof_gen seçeneğini kullanarak enstrümanlı kod oluşturma. 2) elde edilen kod temsili veriler üzerinde çalıştırılır, işlem sırasında hakkında bilgi toplanır farklı özellikler kod yürütme (örneğin, geçiş olasılıkları veya döngü yinelemelerinin sayısı için tipik bir değer). 3) Derleyicinin önceki adımda toplanan bilgileri kullanmasını sağlayan -Qprof_use seçeneğiyle yeniden derleme. Böylece derleyici, yalnızca programın önemli özelliklerinin statik tahminlerini değil, aynı zamanda programın fiili çalışması sırasında elde edilen verileri de kullanabilir. Bu, daha sonra belirli optimizasyonların seçilmesine yardımcı olabilir (örneğin, hangi dalların hangi sıklıkta yürütüldüğü hakkındaki bilgilere dayalı olarak bellekte çeşitli program dallarının daha verimli tahsisi; veya tipik sayı hakkındaki bilgilere dayalı olarak bir döngüye optimizasyon uygulanması). içindeki yinelemeler) ... Profil oluşturma optimizasyonu, programın en tipik gelecekteki kullanımını iyi gösteren küçük ama temsili bir veri kümesi (2. adım için) bulabileceğiniz durumlarda özellikle yararlıdır. Bazı konu alanlarında, böyle bir temsili setin seçimi oldukça mümkündür. Örneğin, profil oluşturma optimizasyonu DBMS geliştiricileri tarafından kullanılır.

Yukarıda listelenen optimizasyonlar genel türdedir, yani. oluşturulan kod, ailenin tüm farklı işlemcilerinde çalışacaktır (örneğin, 32 bit mimari durumunda, şu işlemcilerin tamamında: Intel Pentium-III, Pentium 4, Prescott çekirdeği dahil, Intel Pentium M). İşlemciye özel optimizasyonlar da var.

İşlemciye özel optimizasyonlar: -QxK (Pentium-III; SSE komutlarının kullanımı, mikromimari özellikleri), -QxW ve -QxN (Pentium 4; SSE ve SSE2 komutlarının kullanımı, mikromimari özellikleri), -QxB (Pentium M; SSE ve SSE2 komutlarının kullanımı, mikro mimari özellikleri ), QxP (Prescott; SSE, SSE2 ve SSE3 komutlarının kullanımı, mikro mimari özellikleri). Bu durumda, bu seçenekler kullanılarak oluşturulan kod, diğer işlemci hattı üyeleri üzerinde çalışmayabilir (örneğin, -QxW kodu, Intel Pentium-III işlemci tabanlı bir sistemde yürütülürse geçersiz bir komutun yürütülmesine neden olabilir). Veya maksimum verimlilikle çalışmaz (örneğin, mikro mimarideki farklılıklar nedeniyle Pentium 4 işlemcide -QxB kodu). Bu seçeneklerle, komut setini kullanarak belirli bir işlemci için optimize edilmiş çalışma zamanı kitaplıklarını kullanmak da mümkündür. Kodun hedef işlemcide gerçekten yürütüldüğünü kontrol etmek için bir gönderme mekanizması (cpu-dispatch) uygulanır: program yürütme sırasında işlemciyi kontrol etmek. Çeşitli durumlarda, bu mekanizma dahil olabilir veya olmayabilir. -Qax (KWNP) seçeneklerinin varyasyonu kullanılıyorsa, gönderme her zaman kullanılır. Bu durumda, kodun iki versiyonu oluşturulur: belirli bir işlemci için optimize edilmiş ve "genel", seçim programın yürütülmesi sırasında gerçekleşir. Böylece kod boyutunu artırarak, hattaki tüm işlemcilerde program yürütülmesini ve hedef işlemcide optimal yürütmeyi sağlamak mümkündür. Diğer bir seçenek ise hattın önceki temsilcisi için kod optimizasyonunu kullanmak ve bu kodu bu ve sonraki işlemcilerde kullanmaktır. Örneğin, -QxN kodu, hem Northwood hem de Prescott çekirdekleriyle Pentium 4'te yürütülebilir. Kod boyutunda herhangi bir artış yoktur. Bu yaklaşımla, Northwood'da en iyi performansla Prescott işlemcili bir sistemde (SSE3 kullanılmadığından ve mikro mimarideki farklılıklar dikkate alınmadığından) iyi, ancak yine de optimal olmayan performans elde edebilirsiniz. IA-64 mimarisi işlemcileri için de benzer seçenekler mevcuttur. Üzerinde şu an iki tane var: -G1 (Itanium) ve -G2 (Itanium 2; varsayılan seçenek).

Aşağıdaki grafik (Şekil 5), Prescott işlemcide yukarıdaki optimizasyonlardan bazılarının (yani -O3 -Qipo -Qprof_use -Qx (N, P)) kullanılmasından kaynaklanan hızlanmayı (1 referans noktası olarak alınmıştır - hızlanma yok) göstermektedir. varsayılan ayarlarla (-O2). -QxP kullanmak, bazı durumlarda -QxN'den daha hızlı olmaya yardımcı olur. En yüksek hızlanma, önceki bölümde bahsedilen 168.wupwise uygulamasında elde edilir (SSE3 komutlarını kullanarak karmaşık aritmetiğin yoğun optimizasyonu nedeniyle).


Şekil 5


Aşağıdaki Şekil 6, Pentium 4 ve Itanium 2 işlemcilerde tamamen optimize edilmemiş koda (-Od) kıyasla optimum ayarlarla kod yürütme hızının oranını (zaman olarak) göstermektedir.Itanium 2'nin işlemciye çok daha fazla bağımlı olduğu görülebilir. optimizasyon kalitesi. Bu, özellikle oranın yaklaşık 36 katı olduğu kayan nokta (FP) hesaplamaları için geçerlidir. Kayan nokta, IA-64 mimarisinin bir gücüdür, ancak en verimli derleyici ayarlarını kullanmaya özen gösterilmelidir. Üretkenlikte ortaya çıkan kazanç, onları bulma çabasının karşılığını verir.


Şekil 6. SPEC CPU200'ün en iyi optimizasyon seçeneklerini uygularken hızlanma


Intel derleyicileri, çok iş parçacıklı uygulamalar oluşturmak için OpenMP endüstri spesifikasyonunu destekler. Açık (-Qopenmp seçeneği) ve otomatik (-Qparallel) paralelleştirme modları desteklenir. Açık mod durumunda, OpenMP standart tesislerinin doğru ve verimli kullanımından programcı sorumludur. Otomatik paralelleştirme durumunda, derleyici program kodunun analiziyle ilişkili ek bir yüke sahiptir. Bu nedenle, şu anda otomatik paralelleştirme yalnızca oldukça basit kodlarda etkin bir şekilde çalışmaktadır.

Şekil 7'deki grafik, Hyper-Threading teknolojisini destekleyen Intel Pentium 4 işlemciye (Prescott) dayalı bir sistemin mühendislik (üretim öncesi) örneğinde açık paralelleştirme kullanmanın hızlandırmasını gösterir: 2.8GHz, 2GB RAM, 8K L1 -Önbellek, 512K L2-Önbellek ... SPEC OMPM2001, bir dizi test olarak kullanılır. Bu set, küçük ve orta ölçekli SMP sistemlerine yöneliktir, bellek tüketimi iki gigabayta kadardır. Uygulamalar, Intel 8.0 C / C ++ ve Fortran kullanılarak iki seçenek grubuyla derlenir: -Qopenmp -Qipo -O3 -QxN ve -Qopenmp -Qipo -O3 -QxP, her biri Hyper-Threading teknolojisi ile uygulamalar başlatıldı açık ve kapalı. Grafikteki hızlanma değerleri, Hyper-Threading teknolojisi devre dışıyken tek iş parçacıklı sürümün performansına normalleştirilmiştir.


Şekil 7: Prescott işlemcideki SPEC OMPM2001 paketinden uygulamalar


OpenMP kullanarak açık paralelleştirme kullanımının, Hyper-Threading teknolojisi etkinleştirildiğinde 11 vakadan 9'unda performans artışı sağladığı görülebilir. Uygulamalardan birinde (312.swim) yavaşlama yaşanıyor. Bu bilinen bir gerçektir: bu başvuru yüksek derecede bağımlılık ile karakterizedir. Bant genişliği hafıza. SPEC CPU2000 örneğinde olduğu gibi, wupwise uygulaması Prescott (-QxP) için optimizasyon uygulamasından büyük ölçüde faydalanır.


1.2 Kaynak kodundaki değişikliklerle ve derleyici tanılama kullanılarak programların optimizasyonu


Önceki bölümlerde, derleyicinin (ve ayarlarının) program kodu yürütme hızı üzerindeki etkisini inceledik. Aynı zamanda, Intel derleyicileri yalnızca ayarları değiştirmekten çok kod optimizasyonu için daha fazla fırsat sunar. Özellikle derleyiciler, programcının program kodunda performans açısından daha verimli kod üretilmesine izin veren "ipuçları" yapmasını sağlar. Aşağıda C / C ++ dili için bazı örnekler verilmiştir (Fortran dili için yalnızca sözdiziminde farklılık gösteren benzer araçlar vardır).

#pragma ivdep (ivdep, vektör bağımlılıklarını yoksaymak anlamına gelir), derleyiciye içinde veri bağımlılığı olmadığını söylemek için program döngülerinden önce uygulanır. Bu ipucu, derleyici (analiz temelinde) muhafazakar bir şekilde bu tür bağımlılıkların olabileceğini varsaydığında çalışır (eğer derleyici, bağımlılığın analiz sonucunda var olduğunu kanıtlayabilirse, o zaman "ipucu" hiçbir etkisi olmaz), kodun yazarı ise bu tür bağımlılıkların ortaya çıkamayacağını bilir. Bu ipucunu kullanarak, derleyici daha verimli kod üretebilir: IA-32 için otomatik vektörleştirme (C / C ++ ve Fortran program döngüleri için MMX \ SSE \ SSE2 \ SSE3 kümelerinden vektör komutlarını kullanarak; bu teknik hakkında daha fazla bilgi edinebilirsiniz) , örneğin, bir sonraki Intel Teknoloji Dergisi'ndeki makale), IA-64 için Yazılım Boru Hattı (SWP).

#pragma vektörü, her yinelemede işin nicel ve nitel özelliklerinin analizine dayalı olarak, döngü vektörleştirmesinin verimsizliği (hem IA-32 için otomatik hem de IA-64 için SWP) hakkındaki kararını değiştirmek için derleyici için her zaman kullanılır.

#pragma novector, #pragma vektörünün her zaman zıt etkisine sahiptir.

#pragma vektör hizalı, derleyiciye döngüde kullanılan verilerin 16 baytlık bir sınıra hizalandığını söylemek için kullanılır. Bu, daha verimli ve/veya kompakt (çalışma zamanı denetimlerinin olmaması nedeniyle) kod oluşturmanıza olanak tanır.

#pragma hizalanmamış vektörü, #pragma hizalamanın zıt etkisine sahiptir. Bu durumda bir performans kazancından bahsetmek zor, ancak daha kompakt bir koda güvenebilirsiniz.

#pragma dağıtım noktası bir program döngüsü içinde kullanılır, böylece derleyici bu noktada döngü dağıtımını birkaç küçük parçaya bölebilir. Örneğin, böyle bir "ipucu", derleyici orijinal döngüyü otomatik olarak vektörleştiremediğinde (örneğin, #pragma ivdep mevcut olsa bile göz ardı edilemeyen bir veri bağımlılığı nedeniyle), her biri (veya bir kısmı) iken kullanılabilir. yeni oluşturulan döngülerin sayısı etkin bir şekilde vektörleştirilebilir.

#pragma döngü sayısı (N), derleyiciye döngü yineleme sayısı için en olası değerin N olacağını söylemek için kullanılır. Yazılımın önceden getirme komutlarının kullanılıp kullanılmayacağını SWP veya otomatik vektörleştirme, ...)

_assume_aligned (p, base) "ipucu", derleyiciye p işaretçisi ile ilişkili bellek bölgesinin hizalı taban = 2 ^ n bayt olduğunu söylemek için kullanılır.

Bu uzak tam liste derleyiciye, oluşturulan kodun verimliliğini önemli ölçüde etkileyebilecek çeşitli "ipuçları". Derleyicinin bir ipucuna ihtiyacı olup olmadığını nasıl belirleyeceğinizi merak edebilirsiniz.

İlk olarak, derleyici tanılamalarını programcıya sağladığı raporlar şeklinde kullanabilirsiniz. Örneğin, -Qvec_reportN seçeneğini kullanarak (burada N, 0 ile 3 arasında değişir ve ayrıntı düzeyini belirtir), otomatik bir vektörleştirme raporu alabilirsiniz. Programcı, hangi döngülerin vektörleştirilip hangilerinin yapılmadığına ilişkin bilgilere erişebilecektir. Olumsuz durumda, derleyici vektörleştirmenin neden başarısız olduğunu raporda bildirir. Nedenin, ihtiyatlı olarak varsayılan bir veri ilişkisi olduğunu varsayalım. Bu durumda programcı bağımlılıkların oluşmayacağından eminse #pragma ivdep kullanılabilir. Derleyici, SWP'nin varlığını ve verimliliğini kontrol etmek için IA-64'te benzer (IA-32 için Qvec_reportN ile karşılaştırıldığında) yetenekler sunar. Genel olarak, Intel derleyicileri, optimizasyonları teşhis etmek için geniş fırsatlar sunar.

İkinci olarak, kodunuzdaki performans darboğazlarını bulmak için diğer yazılım ürünleri (Intel VTune profil oluşturucu gibi) kullanılabilir. Analiz sonuçları, programcının gerekli değişiklikleri yapmasına yardımcı olabilir.

Analiz için derleyici tarafından oluşturulan derleme kodu listesini de kullanabilirsiniz.


Şekil 8


Yukarıdaki Şekil 8, IA-64 mimarisi için Intel Fortran derleyicisini (ve diğer yazılım ürünlerini) kullanarak bir uygulamayı optimize etmek için adım adım bir süreci göstermektedir. Örnek olarak, 48 saatlik Roshydromettsentr için adyabatik olmayan bir bölgesel tahmin şeması kabul edilir (bunun hakkında, örneğin bu makalede okuyabilirsiniz. Makale, yaklaşık 25 dakikalık hesaplama süresinden bahsediyor, ancak o zamandan beri önemli değişiklikler meydana geldi. Cray-YMP sisteminde kod performansı başlangıç ​​noktası olarak alınır Varsayılan derleyici seçenekleriyle (-O2) değiştirilmemiş kod, Intel Itanium 2 işlemci 900 MHz tabanlı dört işlemcili bir sistemde %20 performans artışı gösterdi Daha agresif optimizasyon (-O3), esas olarak SWP ve derleyici tanılamalı veri önceden getirme Analizi nedeniyle kod değişikliği olmadan ~ 2.5 kat hızlanma ile sonuçlandı ve Intel VTune profil oluşturucu bazı darboğazları ortaya çıkardı, örneğin, derleyici birkaç performansı borulamadı- kritik döngüler, veri bağımlılığını öneren raporda raporlama .Küçük kod değişiklikleri (ivdep yönergesi) verimli bir sonuca ulaşmaya yardımcı oldu aktif boru hattı VTune profil oluşturucuyu kullanarak, derleyicinin önbelleği daha verimli kullanmak için iç içe döngülerin (döngü değişimi) sırasını değiştirmediği bulundu (ve derleyici raporu bunu doğruladı). Yine, bu, veri bağımlılığı hakkındaki muhafazakar varsayımlardan kaynaklanıyordu. Programın kaynak kodunda değişiklikler yapılmıştır. Sonuç olarak, ilk versiyona göre 4 kat hızlanma elde etmek mümkün oldu. OpenMP direktifleri kullanılarak açık paralelleştirme kullanılarak ve daha sonra daha yüksek frekanslı işlemcilere sahip bir sisteme geçilerek, hesaplama süresi 8 dakikanın altına düşürüldü, bu da ilk versiyona kıyasla 16 kattan fazla hızlanma ile sonuçlandı.

Intel Görsel Fortran

Intel Visual Fortran 8.0 ön ucu (derleyicinin bir programı programlama dilindeki bir metinden, programlama dilinden veya hedef makineden büyük ölçüde bağımsız bir dahili derleyici temsiline dönüştürmekten sorumlu kısmı) CVF derleyici teknolojilerini ve Bir dizi optimizasyondan ve kod üretiminden sorumlu Intel derleyici bileşenleri.


Şekil 9




Şekil 10


Şekil 9 ve 10, Intel Visual Fortran 8.0'ın performansını aşağıdakilerle karşılaştıran grafikleri gösterir: önceki versiyon Windows ve Linux işletim sistemi ailelerinde çalışan Intel Fortran 7.1 ve bu dilden endüstrideki diğer popüler derleyiciler. Karşılaştırma için, kaynak kodları F77 ve F90 standartlarını karşılayan testler kullandık, http://www.polyhedron.com/ sitesinde mevcut. Aynı sitede, derleyicilerin performansını karşılaştırma hakkında daha ayrıntılı bilgi mevcuttur (Win32 Derleyici Karşılaştırmaları -> Fortran (77, 90) Yürütme Süresi Karşılaştırmaları ve Linux Derleyici Karşılaştırmaları -> Fortran (77, 90) Yürütme Süresi Karşılaştırmaları): daha farklı derleyiciler gösterilir ve geometrik ortalama, her test için ayrı sonuçlarla bağlantılı olarak verilir.

Gerçek hack örnekleri: Intel C ++ 7.0 Derleyici - WASM.RU Arşivi

... Intel C ++ 7.0 derleyicisi gece geç saatlerde, sabah saat beş civarında başladı. İnanılmaz derecede uyumak istiyordum ama merakım: savunmanın güçlendirilip güçlendirilmediği de paramparça oldu. Korumayı anlayana kadar hala uykuya dalmayacağıma karar verdikten sonra, yeni bir konsol açtım ve TEMP ve TMP sistem değişkenlerini C: \ TEMP dizinine sıfırladım ve aceleyle W_CC_P_7.0.073 yükleyicisinin uygunsuz uzun adını yazdım. .exe komut satırında (TEMP ve TMP değişkenlerini ayarlama ihtiyacı, Windows 2000'de varsayılan olarak çok derin bir şekilde iç içe geçmiş bir dizine işaret etmeleri ve Intel C ++ yükleyicisinin - ve yalnızca bunu değil - yapmasıyla açıklanır) bu kadar büyük boyuttaki yolları desteklemez).

Koruma politikasının kökten revize edildiği ve şimdi uygulamanın kurulum aşamasında bir lisansın varlığı kontrol edildiği hemen anlaşıldı (5.x sürümünde kurulum sorunsuz bir şekilde gerçekleştirildi). Tamam, dir komutunu veriyoruz ve savaşmak üzere olduğumuz şeyin içeriğine bakıyoruz:

    C:\TMP\IntelC++ Compiler70 klasörünün içeriği

    17.03.2003 05:10

    html

    17.03.2003 05:11

    x86

    17.03.2003 05:11

    ıtanyum

    17.03.2003 05:11

    notlar

    06/05/2002 10:35 45 056 AutoRun.exe

    07/10/2001 12:56 27 autorun.inf

    29.10.2002 11:25 2.831 commpindex.htm

    10.24.2002 08:12 126 976 ChkLic.dll

    18.10.2002 22:37 552 960 chklic.exe

    17.10.2002 04:29 PM 28 663 CLicense.rtf

    17.10.2002 16:35 386 kredit.txt

    10.16.2002 17:02 34 136 Crelnotes.htm

    03/19/2002 14:28 4635 PLSuite.htm

    02/21/2002 12:39 2 478 register.htm

    02.10.2002 14:51 40 960 Setup.exe

    02.10.2002 10:40 151 Kurulum.ini

    07/10/2001 12:56 184 setup.mwg

    19 dosya 2.519.238 bayt

    6 klasör 886 571 008 bayt ücretsiz

Aha! setup.exe kurulum programının boyutu yalnızca kırk küsur kilobayttır. Çok iyi! Böyle bir ciltte ciddi korumayı gizlemeniz pek olası değildir ve öyle olsa bile, bu küçük dosyanın tamamının - sökücü listesinin son baytına kadar - analiz edilmesi gerekmez. Ancak, güvenlik kodunun setup.exe'de bulunduğu bir gerçek değil, başka bir yerde bulunabilir, örneğin ... ChkLic.dll / ChkLic.exe, bunlar birlikte yedi yüz kilobayttan biraz daha az yer kaplar. Bekle, ChkLic nedir? Bu, Check License veya ne için bir kısaltmadır?! Um, Intel'deki adamlar belli ki mizah anlayışlarıyla ciddi sorunlar yaşıyorlar. Sözüm üzerine bu dosyaya "Hack Me" deseler daha iyi olurdu! Tamam, hacme bakılırsa, ChkLic aynı FLEX lm'dir ve biz bununla daha önce karşılaştık ("Intel C ++ 5.0 Derleyici" bölümüne bakın) ve nasıl kırılacağına dair yaklaşık bir fikre sahibiz.

Dışa aktarılan işlevleri incelemek için "dumpbin / EXPORTS ChkLic.dll" komutunu veriyoruz ve ... Klava'ya sandalyeden düşmemek için sıkıca tutun:

    ChkLic.dll dosyasının dökümü

  1. Bölüm, ChkLic.dll için aşağıdaki dışa aktarımları içerir

    0 özellik

    3DB438B4 zaman tarih damgası 21 Ekim Pzt 21:26:12 2002

  2. 1 adet fonksiyon

    1 numara isim

    sıra ipucu RVA adı

    1 0 000010A0 _CheckValidLicense

Lanet olsun! Koruma, harika CheckValidLicense adıyla yalnızca tek bir işlevi dışa aktarır. "Harika" - çünkü işlevin amacı adından anlaşılır hale gelir ve demonte kodun özenli analizinden kaçınmak mümkün hale gelir. Eh, tüm ilgiyi geri çevirdiler ... onu sıralı olarak ihraç etseler veya en azından DES Decrypt gibi korkunç bir adla vaftiz etseler daha iyi olurdu.

… Rüya görmek! Tamam, koçlarımıza dönelim. Mantıklı düşünelim: eğer tüm güvenlik kodu doğrudan ChkLic.dll'de yoğunlaşmışsa (ve korumanın "menteşeli" doğasına bakılırsa, gerçekten öyledir), o zaman tüm "koruma", Setup.exe'den CheckValidLicense'i çağırmaya indirgenir ve tarafından döndürülen sonucu kontrol etmek. Bu nedenle, "hacklemek" için sadece ChkLic.dll'yi bozmak, ChekValidLicense işlevini her zaman geri dönmeye zorlamak yeterlidir ... bu arada, ne döndürmeli? Daha doğrusu: hangi dönüş değeri başarılı bir lisans kontrolüne karşılık gelir? Hayır, belirlemek için setup.exe'yi sökmek için acele etmeyin, çünkü çok fazla olası seçenek yoktur: YANLIŞ veya DOĞRU. TRUE üzerine bahis mi oynuyorsunuz? Pekala, bu bir bakıma mantıklı, ama diğer yandan: neden CheckValidLicense işlevinin bir hata kodu değil de işlemin başarısının bayrağını döndürmesine karar verdik? Sonuçta, derleyiciyi kurmayı reddetme nedenlerini bir şekilde motive etmelidir: lisanslı dosya bulunamadı, dosya hasar gördü, lisansın süresi doldu ve benzeri? Tamam, sıfırı döndürmeyi deneyelim ve bu işe yaramazsa, bir döndüreceğiz.

Tamam, kemerlerinizi bağlayın, gidelim! HIEW'i başlatın, ChkLic.dll dosyasını açın (açılmazsa, gophers'ı üç kez hatırlayarak, geçici olarak kök dizinine veya adında "çok sevmediğim" özel karakterler içermeyen başka bir dizine kopyalayın. Sonra, dumpbin kullanılarak elde edilen dışa aktarma tablosuna tekrar başvurarak, CheckValidLicense fonksiyonunun adresini tanımlıyoruz (bu durumda 010A0h) ve "10A0" üzerinden başlangıcına gidiyoruz. eski kod "XOR EAX, EAX / RETN 4 ". Neden tam olarak" REN 4 "ve sadece" RET " değil? Evet, çünkü işlev stdcall kuralını destekliyor, bu da HIEW'deki sonsözüne bakılarak bulunabiliyor" e ( RET ile karşılaşana kadar sökücü ekranını aşağı kaydırmanız yeterlidir).

Kontrol ediliyor ... Çalışıyor !!! Lisans olmamasına rağmen, yükleyici herhangi bir soru sormadan kurulumu başlatır! Bu nedenle, savunma düştü. Oh, her şeyin bu kadar basit olduğuna inanamıyoruz ve program kurulum işleminin tamamlanmasını beklerken boş boş monitöre bakmamak için en sevdiğimiz IDA sökücüyü setup.exe'ye kurduk. Gözünüze çarpan ilk şey, içe aktarılan işlevler listesinde CheckValidLicense'in olmamasıdır. Belki bir şekilde ChkLic.exe dosyasını başlatır? Otomatik olarak tanınan dizeler arasında uygun bağlantıyı bulmaya çalışıyorum: "~ Adları Görüntüle", "ChkLic" ... evet, "Chklic.exe" dizesi burada değil, ancak "Chklic.dll" bulundu. Evet, anlıyorum, ChkLic kitaplığı LoadLibrary aracılığıyla açık bağlantıyla yükleniyor. Ve çapraz referansın ardından bunu doğrular:

    Metin: 0040175D itme ofseti aChklic_dll; lpLibDosyaAdı

    Metin: 00401762 ds'yi arayın: LoadLibraryA

    Metin: 00401762; ChkLic.dll dosyasını indirin ^^^^^^^^^^^^^^^^^^^

    Metin: 00401762;

    Metin: 00401768 mov esi, eax

    Metin: 0040176A itme ofseti a_checkvalidlic; lpProcName

    Metin: 0040176F itme esi; hModule

    Metin: 00401770 arama ds: GetProcAddress

    Metin: 00401770; CheckValidLicense işlevinin adresini alın

    Metin: 00401770;

    Metin: 00401776 cmp esi, ebx

    Metin: 00401778 jz loc_40192E

    Metin: 00401778; böyle bir kitaplık yoksa, yükleyiciden çıkın

    Metin: 00401778;

    Metin: 0040177E cmp eax, ebx

    Metin: 00401780 jz loc_40192E

    Metin: 00401780; kütüphanede böyle bir fonksiyon yoksa kurulumdan çıkın

    Metin: 00401780;

    Metin: 00401786 ebx'i itin

    Metin: 00401787 çağrı eax

    Metin: 00401787; ChekValidLicense işlevini çağırın

    Metin: 00401787;

    Metin: 00401789 test eax, eax

    Metin: 0040178B jnz loc_4019A3

Metin: 0040178; işlev sıfır döndürmediyse, yükleyiciden çıkın

İnanılmaz bir şekilde, bu korkunç derecede ilkel savunma aynen böyle inşa edilmiş! Üstelik yarım metrelik ChkLic.exe dosyasına hiç gerek yok! Ve neden onu internetin dışına sürüklemeye değerdi? Bu arada, derleyici dağıtıcısını tutmaya karar verirseniz (dikkat: "dağıt" demedim!), Sonra disk alanından tasarruf etmek için ChkLic. * Silinebilir: ya setup.exe'yi ortadan kaldırarak, sonsuza kadar erişimini engelleyerek veya basitçe kendi ChkLic.dll'nizi oluşturarak, stdcall işlevini CheckValidLicence biçiminde dışa aktararak: int CheckValidLicence (int some_flag) (return 0;)

Yani biz tüm bunları tartışırken yükleyici derleyiciyi kurmayı bitirdi ve işini başarıyla tamamladı. Derleyicinin başlaması ilginç mi yoksa tüm eğlence yeni mi başlıyor? Umutsuzca iç içe klasörlerin dallanmış hiyerarşisine iniyoruz, beklendiği gibi bin dizininde bulunan icl.exe'yi buluyoruz, tıklayın ve ... Derleyici doğal olarak başlamıyor, "icl: error: olabilir" gerçeğine atıfta bulunarak. FLEX lm lisansını kontrol etmeyin", bu olmadan çalışmasına devam edemez.

Intel'in çok katmanlı koruma uyguladığı ve ilk seviyenin aptallara karşı kaba bir savunma olduğu ortaya çıktı. Peki! Bu zorluğu kabul ediyoruz ve önceki deneyimlerimize dayanarak derleyici dizininde mekanik olarak LMGR * .DLL dosyasını arıyoruz. Kullanışsız! Bu sefer burada böyle bir dosya yok, ancak icl.exe'nin altı yüz kilobayt işaretini aşarak çok fazla ağırlık kazandığı ortaya çıktı ... Dur! Derleyici geliştiricileri bu FLEX lm'yi statik bağlantıyla ilişkilendirmedi mi? Bakalım: Intel C++ 5.0'da lmgr327.dll ve icl.exe boyutlarının toplamı 598 KB idi ve şimdi sadece icl.exe 684 KB alıyor. Doğal yaşlılık "obezite" için ayarlanan sayılar çok iyi birleşiyor. Sonuçta, FLEX lm! Ah ah! Ama şimdi, fonksiyonların sembolik isimleri olmadan, korumayı kırmak çok daha zor olacak... Ancak şimdiden paniğe kapılmayalım! Sakince düşünelim! Geliştirme ekibinin bu "zarf" korumasıyla etkileşime giren tüm kodu tamamen yeniden yazması olası değildir. Büyük olasılıkla, sadece düzen türünü değiştirerek "iyileştirme" sona erdi. Ve eğer öyleyse, programı hackleme şansı hala harika!

Güvenlik kodunun en son ana işlevde olduğunu akılda tutarak, adresini belirledikten sonra, sadece bir kesme noktası belirledik ve hata ayıklayıcının ortaya çıkmasını bekledikten sonra, dönüşümlü olarak hata ayıklayıcıya bakarak, aptalca kodu izliyoruz, daha sonra program çıktı penceresinde: Kötüye kullanım amaçlı bir mesaj var mı? Aynı zamanda karşılaştığımız tüm koşullu atlamaları ayrı bir kağıda işaretliyoruz (veya dilerseniz kendi hafızamıza koyuyoruz), her bir koşullu atlamanın yapılıp yapılmadığını belirtmeyi unutmadan ... Durmak! Seninle bir şey konuştuk ama taciz edici mesaj çoktan ortaya çıktı! Tamam iyi! Bakalım hangi koşullu atlama buna karşılık geldi. Kayıtlarımız, karşılaşılan son dalın 0401075h'de bulunan ve sub_404C0E tarafından döndürülen sonuca "yanıt veren" bir JNZ koşullu dal olduğunu gösteriyor:

  • Metin: 0040107F loc_40107F:; KOD XREF: _main + 75 ^ j

    Metin: 0040107F mov eax, ofset aFfrps; "FFrps"

    Metin: 00401084 mov edx, 21h

    Metin: 00401089 sub_404C0E'yi arayın

    Metin: 0040108E test eax, eax

    Metin: 00401090 jnz kısa loc_40109A

    Açıkçası, sub_404C0E, lisansın varlığını kontrol eden çok koruyucu prosedürdür. Onu nasıl alt ederim? Pek çok seçenek var ... İlk olarak, tam olarak neyi ve nasıl kontrol ettiğini bulmak için sub_404C0E'nin içeriğini dikkatlice ve titizlikle analiz edebilirsiniz. İkinci olarak, JNZ kısa loc_40107F'yi JZ kısa loc_40107F veya hatta NOP, NOP ile değiştirebilirsiniz. Üçüncüsü, dönüş sonucunu kontrol etme komutu TEST EAX, EAX, sıfır ayarlamak için bir komuta dönüştürülebilir: XOR EAX, EAX. Dördüncüsü, her zaman sıfır döndürmesi için sub_404C0E'nin kendisine yama uygulayabilirsiniz. Sizi bilmem ama ben en çok üç numaralı yöntemi sevdim. İki baytı değiştirin ve derleyiciyi çalıştırın. Korumada "lisanslamasının" başka bir kontrolü yoksa, program çalışacaktır ve buna göre bunun tersi de geçerlidir. (Hatırladığımız gibi, beşinci versiyonda böyle iki kontrol vardı). Şaşırtıcı bir şekilde, derleyici artık küfür etmiyor ve çalışmıyor !!! Gerçekten de, beklendiği gibi, geliştiricileri korumayı hiç artırmadı, aksine tam tersine onu zayıflattı! Chris Kaspersky

  • Intel C ++ ve Fortran Derleyicileri ve MKL Kitaplığı

    Linux için GNU derleyicileri standardı ile birlikte, Intel C ++ ve Fortran derleyicileri, SRCC bilgi işlem kompleksinin kümelerine kurulur. Şu anda (2006'nın başlarında), tüm kümelerde sürüm 9.1 derleyicileri kuruludur. Bu sayfa, bu derleyicilerin en önemli seçenekleri ve ayarlarının yanı sıra bunların GNU derleyicilerinden temel farklarını açıklamaya ayrılmıştır. Sayfa esas olarak Moskova Devlet Üniversitesi Araştırma Bilgi İşlem Merkezi kümelerinin kullanıcılarına yöneliktir, ancak Rusça konuşan diğer kullanıcılar için de yararlı olabilir. IA-64 platformu için derleme sorunları burada ele alınmamaktadır.

    Ayrıca, tüm kümelerde Intel kitaplığı kuruludur Çekirdek matematik kitaplığı(MKL) sürüm 8.0.2. Kütüphane / usr / mkl dizininde bulunur. Lib dizininin 32, 64 ve em64t alt dizinlerini içerdiğine dikkat edin. Ant kümesinde em64t alt dizinindeki kitaplıkları, diğer kümelerde ise 32 alt dizinindeki kitaplıkları kullanmalısınız.Gerekli tüm belgeler ve örnekler /usr/mkl/doc dizininden temin edilebilir.

    Yeni derleyiciler ne için gerekli?

    Yeni derleyicilere duyulan ihtiyaç, temel olarak a) Fortran 90 dilinde programlamayı desteklemek ve ayrıca b) Fortran programlarının C'ye çeviriyi ve ardından gcc ile derlemeyi kullanan g77 derleyicisinden daha güçlü optimizasyonu için ortaya çıktı.

    Derleyiciler PGI (Portland Group) da bu gereksinimleri karşılıyor, ancak geliştirici şirket bunları Rusya'ya tedarik etmeyi reddetti.

    Bu nasıl kullanılır?

    Intel derleyicileri komutlar kullanılarak çağrılır icc(C veya C++), icpc(C++) ve ifort(Fortran 77/90). MPI programlarını derlemek ve oluşturmak için mpicc, mpiCC ve mpif77 komutları da Intel derleyicilerini kullanacak şekilde yapılandırılmıştır.

    GNU derleyicilerini mpigcc, mpig ++ ve mpig77 komutlarıyla kullanmak da mümkündür (Fortran 90 desteklenmez).

    Giriş dosyaları

    Varsayılan olarak, uzantılı dosyalar .cpp ve .cxx C++ 'da kaynak kodlar olarak kabul edilir, uzantılı dosyalar .C- C'deki kaynaklar ve icpc derleyicisi ayrıca .c dosyalarını C ++'daki kaynaklar olarak derler.

    Uzantıları olan dosyalar .F, .ftn ve .için Photran dilinde sabit bir notasyonla kaynak metinler olarak tanınırlar ve dosyalar .fpp ve .F ayrıca Fortran önişlemcisinden geçirilir. Uzantısı olan dosyalar .f90 serbest biçimli Fortran 90/95 kaynakları olarak kabul edilir. Seçenekleri kullanarak Fortran programları yazmanın sabit veya serbest bir biçimini açıkça ayarlayabilirsiniz. -FI ve -FR sırasıyla.

    Uzantısı olan dosyalar .s IA-32 için montaj dili kodu olarak tanınır.

    Intel Derleyici Özellikleri

    Burada, geliştirici tarafından kullanım kılavuzunda belirtildiği gibi Intel derleyicilerinin özelliklerini bazı yorumlarımızla birlikte sunuyoruz.

    • Önemli optimizasyon
      görünüşe göre, bu, yüksek düzeyde kod optimizasyonu anlamına gelir, yani. her şeyden önce, hemen hemen tüm derleyicilerin az çok başarıyla yaptığı çeşitli döngü dönüşümleri
    • Kayan nokta hesaplamalarını optimize etme
      görünüşe göre, demek istediğim, her şeyden önce, donanım düzeyinde uygulanan komutların maksimum kullanımı
    • prosedürler arası optimizasyonlar
      şunlar. Yalnızca belirli işlevlerin kodunu etkileyen olağan optimizasyonun aksine tüm programın genel optimizasyonu
    • Profil tabanlı optimizasyon
      şunlar. programı test modunda çalıştırma, sık kullanılan işlevler içindeki belirli kod parçalarının geçiş süresi hakkında veri toplama ve ardından bu verileri optimizasyon için kullanma yeteneği
    • Pentium III İşlemcilerde SSE Komut Seti Desteği
      not: hesaplama görevleri için, SSE2 komutları daha çok ilgi çeker, yani. 64 bit gerçek sayılarda vektör komutları, ancak bunlar yalnızca henüz elimizde olmayan Pentium 4 işlemcilerde desteklenir
    • Otomatik vektörleştirme
      şunlar. yine derleyici tarafından otomatik olarak eklenen SSE ve SSE2 komutlarını kullanarak
    • SMP sistemlerinde programlama için OpenMP desteği
      not: bir kümede ağırlıklı olarak MPI arabiriminin kullanılması önerilir; OpenMP'nin bir küme üzerinde yaygın olarak kullanılması beklenmemektedir ve bu tür deneyler henüz yapılmamıştır; ancak paylaşılan bellek için paralelleştirilmiş kitaplıkları (BLAS, vb.) kullanmak muhtemelen mantıklıdır.
    • Verileri önceden getirme
      şunlar. görünüşe göre, bir süre sonra ihtiyaç duyulacak olan bellekten veri önbelleğine önceden yükleme talimatlarının kullanılması
    • Farklı işlemciler için "Sevk" kodu
      şunlar. Programların önceki işlemcilerle ikili uyumluluğunu korurken, en son işlemcilerden en yüksek performansı elde etmek için yararlanmanıza olanak tanıyan tek bir yürütülebilir dosyada farklı işlemciler için kod oluşturma yeteneği; bizim kümemizde bu henüz alakalı değil, çünkü yalnızca Pentium III işlemciler kullanılır ve kümede derlenen programları diğer makinelerde aktarması ve çalıştırması beklenmez

    Temel derleyici seçenekleri

    En ilginç olanı elbette kod optimizasyon seçenekleridir. Seçeneklerin çoğu, C++ ve Fortran derleyicilerinde ortaktır. Daha Detaylı Açıklamaİngilizce kullanım kılavuzlarındaki seçenekler.

    Optimizasyon seviyeleri
    SeçenekAçıklama
    -O0Optimizasyonu devre dışı bırakır
    -O1 veya -O2İşin hızı için temel optimizasyon. Kitaplık işlevlerinin satır içi eklenmesini devre dışı bırakın. C++ derleyicisi için bu seçenekler aynı optimizasyonu sağlar; Fortran derleyicisi için -O2 seçeneği tercih edilir, çünkü ayrıca döngülerin açılmasını da içerir.
    -O3OpenMP kullanarak döngü dönüşümleri, verileri önceden getirme dahil daha güçlü optimizasyonlar. Bazı programlar, daha yüksek performansı garanti etmeyebilir. -O2... Vektörleştirme seçenekleriyle birlikte kullanılması mantıklıdır -xK ve -xW.
    - [n] rulosunu açDöngülerin n defaya kadar açılmasını sağlar.
    Belirli bir işlemci için optimizasyon
    SeçenekAçıklama
    -tpp6Penitum Pro, Pentium II ve Pentium III işlemciler için optimize edilmiştir
    -tpp7Penitum 4 işlemciler için optimizasyon (bu seçenek IA-32 derleyicisi için varsayılan olarak etkindir)
    -xMPentium MMX, Pentium II ve Sonraki İşlemcilere Özel MMX Uzantılarını Kullanarak Kod Oluşturma
    -xKPentium III İşlemcilere Özel SSE Uzantılarını Kullanarak Kod Oluşturma
    -xWPentium 4 İşlemcilere Özel SSE2 Uzantılarını Kullanarak Kod Oluşturma
    prosedürler arası optimizasyon
    -ipProsedürler arası optimizasyon tek bir dosyada etkinleştirilir. seçeneği belirtirseniz -ip_no_inlining, ardından satır içi işlev ekleme devre dışı bırakılır.
    -ipoFarklı dosyalar arasında prosedürler arası optimizasyon içerir
    Profilleri kullanarak optimizasyon
    -prof_genProfil oluşturma için kullanılacak bir "profil oluşturma" kodu oluşturulur, yani. programdaki belirli yerleri geçme sıklığı hakkında veri toplama
    -bolOptimizasyon, profil oluşturma aşamasında elde edilen verilere göre gerçekleştirilir. Prosedürler arası optimizasyon seçeneği ile birlikte kullanılması mantıklıdır. -ipo.
    SMP sistemleri için paralelleştirme
    -openmpOpenMP 2.0 standardı için destek içerir
    -paralelDöngülerin otomatik paralelleştirilmesi açılır

    Verim

    ixbt.com sunucusunda yayınlanan SPEC CPU2000 test çalıştırmasının sonuçlarına göre, Intel derleyicileri sürüm 6.0, derleyiciler gcc sürüm 2.95.3, 2.96 ve 3.1 ve PGI sürüm 4.0.2 ile karşılaştırıldığında hemen hemen her yerde daha iyi görünüyordu. Bu testler 2002 yılında Pentium 4/1.7 GHz işlemcili ve RedHat Linux 7.3 işletim sistemine sahip bir bilgisayarda gerçekleştirilmiştir.

    Polyhedron tarafından yürütülen kıyaslamalara göre, Intel Fortran 7.0 derleyicisi, Linux için diğer Fortran 77 derleyicilerine (Absoft, GNU, Lahey, NAG, NAS, PGI) kıyasla hemen hemen her yerde performans gösterdi. Yalnızca bazı testlerde Intel derleyicisi Absoft, NAG ve Lahey derleyicilerinden biraz daha iyi performans gösteriyor. Bu testler, Mandrake Linux 8.1 işletim sistemine sahip bir Pentium 4/1.8 GHz bilgisayarda gerçekleştirilmiştir.

    Intel derleyicileri sürüm 9.1 ayrıca gcc derleyicilerinden daha iyi performans gösterir ve Absoft, PathScale ve PGI ile karşılaştırılabilir performans gösterir.

    Derleyici seçiminin (GCC veya Intel) ve optimizasyon seçeneklerinin gerçek sorunları üzerinde çalışma hızı üzerindeki etkisi hakkında bize veri gönderen kullanıcılara ve okuyuculara minnettar olacağız.

    kütüphaneler

    C derleyicisi, GNU projesi tarafından geliştirilen bir çalışma zamanı kitaplığı kullanır ( libc.a).

    Aşağıdaki kitaplıklar Intel C ++ derleyicisiyle birlikte sağlanır:

    • libcprts.a- Dinkumware C++ çalışma zamanı kitaplığı.
    • libcxa.a- C ++ geliştirme Intel için ek çalışma zamanı kitaplığı.
    • libimf.a- Intel tarafından geliştirilen, trigonometrik, hiperbolik, üstel, özel, karmaşık ve diğer işlevlerin optimize edilmiş ve yüksek hassasiyetli uygulamalarını içeren bir matematik işlevleri kitaplığı (daha fazla ayrıntı için işlev listesine bakın).
    • libirc.a- işlemciye bağlı olarak profil oluşturma (PGO) ve "gönderme" kodu için çalışma zamanı desteği (yukarıya bakın).
    • libguide.a- OpenMP uygulaması.

    Bu liste statik kitaplıklar içerir, ancak çoğu için dinamik olanlar da vardır, yani. başlatma sırasında bağlandı, seçenekler ( .böyle).

    Aşağıdaki kitaplıklar Fortran derleyicisiyle birlikte sağlanır: libCEPCF90.a, libIEPCF90.a, libintrins.a, libF90.a libimf.a matematik fonksiyonlarının kütüphanesi de kullanılır.

    Yürütülebilir bir dosya oluşturma

    Kitaplıkların bağlanması statik (oluşturma zamanında) veya dinamik (program başlangıç ​​zamanında) olabilir. Dinamik yaklaşım, yürütülebilir dosyanın boyutunu küçültmenize izin verir, kitaplığın aynı kopyasını bellekte paylaşmanıza izin verir, ancak bunun için programların çalışacağı her düğümde kullanılan dinamik kitaplıkların tam setini yüklemeniz gerekir. .

    Bu nedenle, Intel derleyicisini Linux makinenize yüklediyseniz ve birleştirilmiş yürütülebilir dosyaları başka makinelerde çalıştırmak istiyorsanız, o zaman ya statik bir yapı kullanmanız (ki bu daha kolaydır) ya da Intel dinamik kitaplıklarını bu makinelere kopyalamanız gerekir (genellikle / opt / intel / compiler70 / ia32 / lib) /etc/ld.so.conf içinde listelenen dizinlerden birine gidin ve bu makinelerde aynı GNU / Linux dinamik bağlantı kitaplıkları kümesinin kurulu olduğundan emin olun.

    Varsayılan olarak, tüm Intel geliştirme kitaplıkları (libcxa.so hariç) statik olarak bağlanır ve tüm Linux sistemi ve GNU kitaplıkları dinamik olarak bağlanır. seçeneği ile -statik toplayıcıyı (bağlayıcı) tüm kitaplıkları statik olarak bağlamaya zorlayabilirsiniz (bu, yürütülebilir dosyanın boyutunu artıracaktır) ve seçeneği kullanarak -i_dinamik tüm Intel geliştirme kitaplıkları dinamik olarak bağlanabilir.

    Gibi bir seçenek kullanarak ek kitaplıkları bağlarken -l kitaplık seçeneği kullanmanız gerekebilir -L dizini kitaplıkların bulunduğu yolu ayarlamak için.

    Seçeneklerle -Bstatik ve -Bdinamik komut satırında belirtilen kitaplıkların her birinin dinamik veya statik bağlantısını açıkça ayarlayabilirsiniz.

    seçeneği ile -C yürütülebilir dosyanın birleştirilmesi devre dışı bırakılır ve yalnızca derleme (nesne modülünün oluşturulması) gerçekleştirilir.

    Fortran ve C'de modülleri paylaşma

    Fortran ve C ile yazılmış modülleri paylaşmak için, nesne modüllerindeki prosedürlerin adlandırılması, parametre geçişi ve varsa global değişkenlere erişim konusunda anlaşmanız gerekir.

    Varsayılan olarak, Intel Fortran derleyicisi prosedür adlarını küçük harfe dönüştürür ve adın sonuna bir alt çizgi ekler. C derleyicisi, işlev adlarını asla değiştirmez. Bu nedenle, bir Fortran modülünden C'de uygulanan bir FNNAME işlevini veya prosedürünü çağırmak istiyorsak, C modülünde fnname_ olarak adlandırılmalıdır.

    Fortran derleyicisi seçeneği destekler -nus [dosya adı], bu, dahili prosedür adlarına alt çizgi eklenmesini devre dışı bırakmanıza olanak tanır. Bir dosya adı belirtilirse, bu yalnızca belirtilen dosyada listelenen prosedürlerin adları için yapılır.

    Varsayılan olarak, Fortran'da parametreler referansa göre iletilir ve C'de her zaman değere göre iletilir. Bu nedenle, bir C modülünden bir Fortran prosedürü çağırırken, gerçek parametrelerin değerlerini parametre olarak içeren ilgili değişkenlere işaretçiler iletmeliyiz. Fortran modülünden çağrılması gereken C'de bir fonksiyon yazarken, biçimsel parametreleri ilgili tiplerin işaretçileri olarak tanımlamalıyız.

    C modüllerinde, Fortran modüllerinde tanımlanan ORTAK blokları kullanmak mümkündür (daha fazla bilgi için Intel Fortran Derleyici Kullanıcı Kılavuzu, C ve Fortran'ı Karıştırma bölümüne bakın).

    Intel ve GCC Derleyicilerini Paylaşma

    Intel C++ derleyicisi tarafından üretilen C nesne modülleri, GCC derleyicisi ve GNU C kitaplığı tarafından üretilen modüllerle uyumludur. Bu nedenle, bu modüller icc veya gcc komutları kullanılarak oluşturulmuş tek bir programda birlikte kullanılabilir, ancak Intel kitaplıklarını doğru şekilde bağlamak için icc kullanılması önerilir.

    Intel Derleyicisi, GNU Projesi tarafından kullanılan ve GCC derleyicisi tarafından desteklenen bir dizi standart olmayan C uzantısını destekler (ancak hepsini değil, daha fazla ayrıntı için buraya bakın).

    Kullanım kılavuzu, nesne modüllerinin C ++ ve Fortran dillerindeki uyumluluğu hakkında hiçbir şey söylemiyor, görünüşe göre desteklenmiyor.

    Standartlar desteği

    Linux için Intel C ++ Derleyici 7.0, ANSI / ISO C dil standardını (ISO / IEC 9899/1990) destekler. ANSI C standardı ile sıkı uyumluluk ayarlamak mümkündür ( -ansi) veya ANSI C Genişletilmiş ( -Xa). Seçeneği kullanırken -c99

  • HTML formatında derleyici kılavuzları (sunucumuzda "çevrimiçi" olarak mevcuttur, ancak Java dil desteği gereklidir)
    • Intel C++ Derleyici Kullanıcı Kılavuzu.
    • Intel Fortran Derleyici Kullanıcı Kılavuzu.
  • Derleyici kılavuzları ingilizce dili PDF (Acrobat Reader gerektirir, PDF'leri bilgisayarınıza indirin)
    • Intel C ++ Derleyici Kullanıcı Kılavuzu (1,3 MB, 395 sayfa).
    • Intel Fortran Derleyici Kullanıcı Kılavuzu (1.1 MB, 285 sayfa).
    • Fortran Programcı Referansı: Intel Fortran Programcı Referansı (7 MB, 566 sayfa).
    • Fortran Kitaplığı Referansı: Intel Fortran Kitaplıkları Referans Kılavuzu (9,5 MB, 881 sayfa).
  • Intel Uygulama Hata Ayıklayıcı Kılavuzu.
  • Derleyicilerin SPEC CPU2000 testlerinde karşılaştırılması (Rusça ixbt.com web sitesindeki makale).
  • Polyhedron web sitesi, farklı derleyicilerin bir karşılaştırmasını sağlar.