2011-09-14 46 views
2

可能是一個愚蠢的問題,但我在下面的情況:AMD與英特爾處理器,使可執行文件

我們的開發機,目前所有基於Intel的64位系統,在這裏我們生產的32位和64位我們的應用程序的位版本。我們還建議我們的客戶使用基於Intel的系統(而不是基於AMD的系統)。

現在,我們的IT經理想要購買一些新的開發系統,並降低他正在考慮購買(64位)基於AMD的系統的成本。 Visual Studio(2010)可能並不關心它運行在哪個處理器上,生成的代碼可能是相同的,但只是爲了確定:對於在哪個處理器上生成的可執行文件(AMD與Intel)它是建立?

+0

如果系統使用供應商優化庫(例如, MKL或ACML數學庫。但總的來說,這應該不會有太大的區別。 OTOH,[不道德的或非法的編譯器確實存在](http://www.agner.org/optimize/blog/read.php?i=49#49)。 – Iterator

+0

@Iterator:這不會影響編譯的二進制文件,因爲MKL等的CPU調度是在運行時完成的。 – Mysticial

+0

@Mystical:正確的編譯。我認爲OP對整體差異(包括性能)感興趣,而不僅僅是字節碼,因爲這有點窄。 – Iterator

回答

2

.NET和Visual Studio編譯器並不真正關心AFAIK,因爲我之前已經進行過這方面的試驗,並且它所吐出的程序集無論如何都是一樣的。在ICC和GCC的情況下,AMD和英特爾(非常具體的事情)必須區分某些呼叫路徑,您可能不應該擔心這些呼叫路徑。 GCC不如ICC(英特爾C編譯器)那樣嘗試優化英特爾的許多SSE和分支預測提示,但在AMD上留下一些可能不支持某些特性的內容。

還有一些依賴特定體系結構類型(如Intel或AMD)的庫,但它們非常專業化(我只看到它們用於研究目的),例如非常複雜的浮點並行庫和複雜的線程庫。

2

這取決於你如何配置它。我認爲默認情況下,沒有關係。

如果您使用的是英特爾編譯器,並且您使用/QxHost/fast進行編譯,那麼它很重要,因爲它清楚地查看您的系統以瞭解其功能。

但是,如果您指定/arch:XXX或其他選項,它將獨立於您的機器。對於海灣合作委員會,我認爲默認情況下它不看主機。

編輯:

由於只要像MKL庫去,主機仍然沒有在其上MKL的版本編譯的效果。通常,MKL的多個代碼路徑都放入二進制文件中,而CPU調度在運行時完成。

1

沒關係。從軟件角度來看,AMD和Intel是相同的芯片:基於x86的CPU。是的,他們可以有不同的擴展指令集。但是你可以說屬於不同世代的Intel CPU。 Visual Studio編譯器將在所有這些編譯器上運行並生成相同的代碼。

相關問題