GCC man sayfasını bunun için fırçalamayı denedim, ama yine de anlamıyorum.GCC: marş, mtune'den nasıl farklıdır?
-march
ve -mtune
arasındaki farklar nelerdir?
Ne zaman sadece -march
kullanıyorsunuz, her ikisi de? Sadece -mtune
mümkün mü?
GCC man sayfasını bunun için fırçalamayı denedim, ama yine de anlamıyorum.GCC: marş, mtune'den nasıl farklıdır?
-march
ve -mtune
arasındaki farklar nelerdir?
Ne zaman sadece -march
kullanıyorsunuz, her ikisi de? Sadece -mtune
mümkün mü?
-march
kullanırsanız, GCC, belirtilen CPU üzerinde çalışan ancak mimari ailede (genellikle) önceki CPU'larda çalışmayan yönergeleri oluşturmakta serbest olacaktır. Eğer -mtune
kullanırsanız, derleyici herhangi birinde çalışan bir kod üretecektir, ancak belirttiğiniz belirli CPU üzerinde en hızlı çalışan komut dizilerini tercih edecektir.
Bu şimdiye kadar google'dan budur:
-march=X
seçenek CPU adı X
alır ve GCC X
tüm özelliklerini kullanan bir kod oluşturmasına olanak sağlar. GCC kılavuzu, hangi CPU isimlerinin hangi CPU ailesi ve özellikleri anlamına geldiğini tam olarak açıklar. özellikler genellikle kaldırıldı eklenmişse ancak Çünkü
, CPU X
çalışacağını -march=X
ile oluşturulmuş bir ikili, X
daha yeni CPU çalıştırmak için iyi bir şansı var, ama neredeyse kesinlikle X
daha eski bir şey üzerinde çalışmaz. Bazı komut setleri (3DNow !, sanırım?) Belirli bir CPU satıcısına özel olabilir, bunlardan faydalanmak, muhtemelen daha yeni veya başka bir şekilde rakip CPU'larda çalışmayan ikili dosyaları size ulaştırır.
-mtune=Y
seçeneği, Y
üzerinde çalışmakta olan diğer CPU'lardan daha hızlı çalışacak şekilde oluşturulan kodu ayarlar. -march=X
, -mtune=X
anlamına gelir. -mtune=Y
, -march=X
'u geçersiz kılmayacaktır, bu nedenle, -march=core2
ve -mtune=i686
için bir anlam ifade etmeyecektir - 'dan beri kodunuz core2
'dan daha eski bir şeyle çalışmaz, bu nedenle neden daha eski bir şey için optimize etmek istiyorsunuz? core2'den daha az özellik? -march=core2 -mtune=haswell
daha mantıklı: core2
öğesinin sağladığı özelliklerin (-march=i686
'un size verdiği değerden çok daha fazlası) herhangi bir özelliği kullanmayın, ancak core2
için değil, çok daha yeni haswell
CPU'lar için kodu optimize edin. Ayrıca, -mtune=generic
da bulunmaktadır. generic
, GCC'nin mevcut CPU'larda en iyi çalışan kodu üretmesini sağlar (generic
'un GCC'nin bir sürümden diğerine değiştirilmesi anlamına gelir). Gentoo forumlarında -march=X -mtune=generic
'un X
üzerinde daha hızlı çalışan kod ürettiği söylentileri vardır. -march=X -mtune=X
tarafından üretilen kodlar (veya sadece -march=X
, -mtune=X
belirtilmiştir). Bunun doğru olup olmadığı hakkında bir fikir yok. Eğer tam olarak neye ihtiyacınız bilmedikçe
Genellikle, (muhtemelen en eski CPU için optimize etmek istemediğimiz için, -mtune=generic
örtülü -mtune=<oldest CPU you want to run on>
karşı burada) en iyi ders -march=<oldest CPU you want to run on>
ve -mtune=generic
belirtmektir görünüyor . Veya sadece -march=native
, sadece inşa ettiğiniz aynı makinede çalışacaksanız.
Her ikisini birden kullanmanın mantıklı olup olmadığını veya aynı değere ayarlandığında mtune'un gereksiz olup olmadığını yanıtlamıyor. –
@ PavelŠimerda Sezgisel cevap, 2 özelliğin tanımında gizlidir. Ayrıca, belgeleme açıkça 'mart' 'mtune' ima eder. Dolayısıyla, itirazlarınızın cevapları sırasıyla hayır ve evet. –
Bunu çok zarif bir şekilde açıkladığınız için teşekkür ederiz! Anlamanızı kolaylaştırıyorsunuz. –