2011-09-19 53 views
1

我在gcc中編寫了一個程序,該程序具有性能關鍵部分的asm語言,並且我希望在運行時確保程序在正確的體系結構上運行。特別是,我需要區分Linux上的ia64(Itanium)和x86_64。以編程方式檢測處理器類型(Linux)

我只是讀/ proc/cpuinfo?看起來笨重,但我找不到合適的內核調用。

回答

2

IA64和x86_64是完全不同的體系結構。一個爲其構建的程序不會在另一個上運行,所以你的問題沒有意義(事實上,與x86指令集不兼容是IA64市場滲透率低的原因之一,因爲基於IA64的系統不能運行各種現有的傳統32位基於x86的應用程序)。

您可以做的最好的方法是編譯兩個不同版本的程序,然後在用戶調用程序時使用包裝腳本來選擇適當的二進制文件。

2

/proc/cpuinfo是linux上CPU信息的標準接口。

這是最好的選擇,因爲它打算獨立於架構。

+1

見http://stackoverflow.com/questions/9629850/how-to-get-cpu-info-in-c-on-linux-such-as-number-of-cores樣品碼。 – bleater

2

答案已經發布,但我會補充一點:

如果機器是x86或x64,你可以通過cpuid指令更詳細的信息。

http://en.wikipedia.org/wiki/CPUID

+0

謝謝......這正是我所需要的,因爲我想檢測SSE/MMX是否可用。查看其他響應,看起來像這隻在x86_64與ia32相關。 – Fixee

+0

@Fixee:它可以在x86和x64上運行,但不能在Itanium上運行。 – Mysticial

相關問題