2014-07-26 108 views
1

我幾乎不知道有關並行計算的任何內容,所以這個問題可能非常愚蠢,根本無法做到我想做的事。在集羣上使用R進行內存虛擬化

我使用的是具有40個節點的Linux集羣,但是因爲我不知道如何在R中編寫並行代碼,所以我僅限於使用一個。在這個節點上,我試圖分析泛洪內存的數據(arround 64GB)。所以我的問題不是缺乏計算能力,而是內存限制。

我的問題是,是否甚至有可能使用某些R軟件包(如doSnow)進行隱式並行化以使用2-3個節點來增加內存限制,或者我是否必須重寫腳本以使其明確平行?

對不起,如果我的問題是天真的,歡迎任何建議。

感謝,

西蒙

+0

並行編寫代碼不會幫助您限制內存。像'''bigmemory'''這樣的軟件包雖然有幫助。這真的取決於你的需求。你有能力抽樣嗎?你需要操縱數據嗎?我不確定我們是否有足夠的信息。 –

回答

3

我不認爲有這樣的包。原因是有一個沒有太大的意義。內存訪問速度非常快,通過網絡從另一臺計算機訪問數據的速度相對較慢。因此,如果存在這樣的軟件包,它幾乎是無用的,因爲處理器需要一直等待網絡上的數據,這會使計算速度非常慢。

對於通用計算集羣而言,這是成立的,這是從現成的硬件構建而成的。如果你碰巧擁有一個特殊的集羣,遠程內存訪問速度很快,並且作爲操作系統的一項服務提供,那當然可能並不是那麼糟糕。

否則,您需要做的就是嘗試將問題分成多個部分,手動,然後使用R或其他工具進行並行化。

另一種方法是將部分數據保存在磁盤上,而不是將其全部加載到內存中。您仍然需要(類型)分解問題,以確保在加載另一部分數據之前,將內存中的數據部分用於合理的計算時間。

完成這些選項是否值得(或可能)完全取決於您的應用程序。

Btw。 R中的高性能計算工具列表如下: http://cran.r-project.org/web/views/HighPerformanceComputing.html

+0

感謝您提供有用的解釋和鏈接。讓整個集羣都可用並且不能使用它的全部功能讓人感到非常沮喪。我正在使用構建的管道來分析數據,所以除非我完全重寫它,否則我不能並行化。 – Simon

0

您可能想看看TidalScale,它可以讓您聚集羣集上的節點,以集合資源運行單個Linux實例的底層節點。 www.tidalscale.com。儘管R應用程序本質上可以是單線程的,但您可以爲您的R應用程序提供跨應用程序透明的節點上的單個簡單一致的內存空間。

祝您的項目順利!