2013-05-05 61 views
0

讓我們來看一個微不足道的CPU綁定程序,比如暴力破解素數,這可能偶爾會將它們保存到SD卡。使用專門構建的操作系統的性能增益

當今程序中的低效率包括解釋和虛擬機等等。所以,爲了提高速度,我們把它們扔掉,然後使用編譯語言。

現在,雖然我們現在有可以直接在處理器上運行的代碼,但我們仍然擁有操作系統,它將在不同進程之間複用,運行自己的代碼,管理內存並執行其他操作,這會減慢我們的計劃。

如果我們要編寫自己的操作系統來運行我們的程序,那麼我們期望看到什麼樣的加速比?
我確定可能有一些變量,所以請詳細說明,如果你想。

+1

你是如何得出結論:虛擬機和解釋語言是無效的? – aqua 2013-05-05 18:11:50

+0

@aqua一般來說,他們需要更長的時間來加載並且有更大的開銷。爲了這個問題,您可以使用任何語言來保持與ASM相似的處理速度。 – user1277170 2013-05-05 18:25:58

+0

我認爲你的假設是無效的。例如,Python是一種解釋型語言,但Python本身可以從C語言中獲益。虛擬機也有自己的優點和缺點 - 調用虛擬機效率低下是一個糟糕的IMO聲明。 – aqua 2013-05-05 23:20:06

回答

5

看看產品返回Infinity http://www.returninfinity.com/(我不以任何方式附屬)和實驗。

我自己的超級計算經驗表明,通過運行平坦內存模型以及缺乏內核和用戶空間之間的上下文切換,可以並且確實加快了一些任務 - 特別是與消息傳遞有關的任務 - 跳過TLB(幾乎完全)在網絡(MAC級別,甚至沒有TCP,爲什麼打擾),以及蠻力計算(由於缺乏內存管理)。

在超出TLB或緩存大小的蠻力計算上,與基於RAM的轉換表查找相比,性能增益可能會提高5-15% - 這樣做的代價是每個軟件錯誤都完全沒有遵守(你可以用單片鏈接靜態地鎖定一些頁面,你)。在高帶寬的工作中,尤其是在大量小型消息傳遞的情況下,通過進入內核空間,您可以輕鬆獲得甚至500%的加速,無論是通過完全刪除(多任務)操作系統,還是通過加載應用程序作爲內核驅動程序,也繞過了整個抽象。我們已經能夠將MAC層ping的網絡延遲從18us降低到1.3us。

對於L1緩存內部適合的計算,我預計最小的改進(大約1%)。

這一切都很重要嗎?是和不是。如果您的硬件成本大大超出了您的工程成本,並且您已經完成了所有可以考慮的算法改進(更好的是,證明所完成的計算完全是結果所需的計算!) - 這可以帶來有意義的性能優勢。一臺價值約800萬美元的超級計算機的額外3%(整體平均成功率),不包括硬件攤銷,價值24萬美元。足夠支付一個月的工程師來優化它運行的最常見的任務:)。

+0

我是新來的;什麼是TLB? – 2013-05-05 18:57:17

+1

TLB =翻譯旁視緩衝區。一個特殊的表格用於將虛擬內存地址映射到物理內存中的地址。 TLB高速緩存該表的一部分,因此可以快速高效地將內存地址從虛擬映射到物理映射。 – Virtlink 2013-05-05 18:59:35

+0

@Virtlink:謝謝。 – 2013-05-05 19:05:59

1

假設你正在運行一臺體面的機器並且操作系統沒有做太多其他事情:不是一個很大的因素,我預計改進不到10%。

只是操作系統'怠速'沒有(不應該)佔用CPU的大部分處理能力。如果是這樣,你需要更好的機器,更好的操作系統,格式或這些組合。

另一方面,如果你正在運行一堆其他資源密集型的東西,顯然希望這可以通過運行其他東西的而不是加速很多。

如果您不是超級用戶,您可能會驚訝地發現後臺運行大量(非操作系統)進程,這些進程更有可能佔用CPU的處理能力,即操作系統。

稍微偏離主題但相關,請記住,如果您運行8個內核,則可以在完美的世界中通過多線程將速度提高8倍。

期待一個方式從已知問題的解決方案較大改善和更好地利用數據結構和算法,以及,在較小程度上,語言和微優化的選擇。

從我的經驗:

不是最科學的或可信的結果,但最重要的,當我打開任務管理器在Windows上的時候,所有的OS進程低於CPU的1%。

0

有一個超級計算機的答案,並且已經有了多核心答案,所以這裏是GPGPU答案。

當一臺超級計算機過度殺毒,但多核CPU處於供電不足狀態時,您的算法可以明顯地並行化,請考慮將其適配到GPGPU。通過在GPGPU上執行CPU密集型任務,超級計算機解決方案的許多優點都可以通過簡化成本的方式實現。

Here是我在實施執行去年的分析鏈接,和調整,使用計算能力2.0 NVIDIA顯卡,CUDAfy和C#蠻力解決旅行商問題。