2011-10-05 64 views
4

我注意到一個有趣的問題。如果我運行下面的代碼在2.12.0(32位)的Windows 3.00 GHz的Core 2 Duo CPU與2GB的RAM,它運行在不到一秒鐘。如果我使用sparc-sun-solaris2.10(也是32位,但unix盒可以運行64位)在unix-box上運行它,則需要84秒。 unix盒的處理速度是2.5 gHz。如果我在代碼運行的時候運行top,我注意到我的R進程只佔用了大約3.2%的可用CPU狀態,即使有更多可用的狀態。這可能是問題的一部分嗎?我閱讀了安裝手冊,但是沒有任何東西可以作爲我的問題的明顯解決方案跳出來。 unix操作系統在某種程度上限制了可用資源,而Windows不是?或者,有沒有一些更好的方法來從源代碼編譯R沒有完成?如果我沒有提供足夠的信息來回答問題,我很抱歉,這不是我的專業領域。R性能差異(Solaris vs Windows)

t0 <- proc.time()[[3]] 
x <- rnorm(10000) 
for(i in 1:10000){ 
    sd(x) 
} 
print(proc.time()[[3]]-t0) 
+1

編寫一個CPU密集型C程序,編譯它,運行它,看看是否也得到3.2%的CPU。如果是這樣,它不是R的錯,我們可以在其他地方看看......另外,請檢查proc.time的CPU時間使用情況以及經過的時間... – Spacedman

+0

計算密集型C程序的上限爲3.2%。另外,我只是在MATLAB中進行了相同的測試,循環在Windows上運行約1秒,而在UNIX上運行約3秒。這轉向了相當難題。 – rlh2

+0

你確定系統上沒有別的東西在運行? – Spacedman

回答

1

處理器,如T1或T2具有數量的核,並且每個核心具有許多線股(硬件級上下文切換)的。如果您可以運行多線程應用程序,您將獲得大吞吐量。典型的預期用例是基於Java的web服務器,例如處理20-40個連接在同一時間。

這種類型的處理器的缺點是這些SPARC芯片的單線程性能非常低。它看起來像這個問題的Oracle is aware;目前T4上的發展重點是提高單線程速度。

T1 processor向操作系統公開32個邏輯CPU。如果這是你的情況,顯示的值是總計算能力的百分比,1/32〜= 3.125%,這與你所看到的接近。

要擠出T1處理器的所有性能,您需要使R使用多個CPU,例如通過multicore package