2011-11-07 40 views
1

我有64位機器和一些數據集範圍-32000:32000,所以int16_t足以存儲它。64位機器,性能爲int64和int16

問題:

  1. 如果它是64位計算機,則操作上是的int64_t原子和費用(在速度方面)相同上int16_t操作?如果是這樣,以64位存儲數據可以節省空間,但不會加快速度?

  2. 對於並行應用程序,我可以實際上由在int16_t存儲保存的速度,因爲緩存也是64位,和Te更多數據I存儲在高速緩存 - 越快線程可以訪問它?

是嗎?

回答

2

如果您的編譯器可以將您的代碼轉換爲使用SSE或AVX,則使用64位整數而不是16位整數將會使您的代碼在理論上減慢至4倍。 即使您的編譯器無法對其進行優化自己,你可以手動轉換你的代碼,以便使用SSE,並以這種方式獲得很好的加速。

如果你不能使用SSE,使用32位整數可能是最好的選擇,因爲你仍然需要更少的內存,並且64位CPU仍然被優化來處理32位值,與64位值一樣快,因爲許多程序尚未使用64位。

2

如果不知道算法和某些時機,就無法確定。你忘記了對16位整數更重要的錯誤分享。

所以,要回答這個問題,你將不得不做一些時間。

1

由於有很多64位體系結構,所以沒有可以給出的一般答案。 有不同的x86版本,Itanium,舊的Alpha,Sparc,現在是ARM。

一般來說,它是正確的,更小的數據類型意味着您可以將更多數據放入緩存中,這對速度(以及空間也是如此)非常有用。

操作速度是否相同取決於體系結構。正如已經提到的那樣,cpus有矢量單位,可以用於64位數據類型或4倍於16位的值。可能會減慢16位操作的一點是對齊。某些64位處理器要求其數據是8字節對齊的(未對齊是可能的,但較慢)。