2009-06-07 76 views
4

Mason問及the advantages of a 64-bit processor64位和存儲器帶寬

那麼,一個明顯的缺點是你必須移動更多的位。考慮到目前內存訪問是一個嚴重的問題[1],對於相當數量的操作來說,移動兩倍的內存並不是一件好事。

但是這個效果有多糟呢?什麼彌補了它?或者我應該在32位機器上運行我所有的小應用程序?

我應該提到,我特別考慮在同一臺機器上可以選擇運行32位或64位的情況,所以在任一模式下,主存的帶寬都是相同的。

[1]:甚至十五年前,就這一點而言。我記得有關優秀緩存行爲的討論,特別是那些贏得所有基準測試的Alpha CPU在當時擁有巨大的8 MB二級緩存。

回答

3

大多數64位編程環境都使用「LP64」模型,這意味着只有指針和long int變量(如果您是C/C++程序員)都是64位。整數(int s)保持32位,除非您處於「ILP64」模式,這種情況非常少見。

我只提出它,因爲大多數int變量沒有用於size_t類似的目的 - 也就是說,它們保持在32位的舒適範圍內。對於這種性質的變量,你將永遠無法分辨出差異。

如果您的數據量大或數據量大且工作量大於4GB的數據,則無論如何都需要64位。如果你不是,除非你習慣於使用long s,否則你不會注意到其中的差異,其中大部分使用int s。

2

我想你在這裏開始時會有一個糟糕的假設。你說:

走動兩倍的內存 了相當數量的操作不能 是一件好事

和第一個問題是問的是「爲什麼不」?在一個真正的64位機器中,數據通路的寬度是64位,因此移動64位需要的精確度(到第一個近似值)與在32位機器上移動32位所需的週期數一樣多。因此,如果您需要移動128個字節,則它將花費比32位機器多一倍的週期。

+6

存儲器總線的寬度比32位寬得多,處理器有64位寄存器和地址空間。製作64位應用程序的真正代價來自於擁有所有指針,並且它的大小是其需要的兩倍,有效地將緩存大小減半。 – user57368 2009-06-07 00:54:44

9

您的應用程序是否應該是64位取決於它的計算類型。如果你需要處理非常大的數據集,你顯然需要64位指針。如果沒有,您需要知道您的應用程序是否花更多時間進行算術或內存訪問。在x86-64上,通用寄存器不僅寬一倍,而且是兩倍,它們更「通用」。這意味着64位代碼可以有更好的整數運算性能。但是,如果您的代碼不需要額外的寄存器空間,由於緩存效率的提高,您可能會通過使用較小的指針和數據來獲得更好的性能。如果您的應用程序由浮點運算佔據主導地位,那麼32位就可能沒有多大意義,因爲大多數內存訪問都是針對寬泛的矢量,並且擁有額外的SSE寄存器將有所幫助。