2013-05-09 106 views
3

我正在嘗試在3個不同的主機上建立一個包含120個進程的雪羣。這些AMD服務器每個都有48個核心。建設約第90個奴隸後,我得到這個錯誤:R snow可以創建的奴隸數量是否有限制?

cl = makeSOCKcluster(c(rep("localhost", 44), rep("host2", 46), rep("host3", 45))) 
Error in socketConnection(port = port, server = TRUE, blocking = TRUE, : 
    all connections are in use 
> traceback() 
3: socketConnection(port = port, server = TRUE, blocking = TRUE, 
     open = "a+b") 
2: newSOCKnode(names[[i]], options = options, rank = i) 
1: makeSOCKcluster(c(rep("localhost", 44), rep("host2", 46), 
     rep("host3", 45))) 

我檢查我的系統限制,並沒有看到任何問題:

# cat /proc/sys/fs/file-max 
12897622 
# grep "#define __FD_SETSIZE" /usr/include/*.h /usr/include/*/*.h 
/usr/include/linux/posix_types.h:#define __FD_SETSIZE 1024 
# ulimit -a |grep open 
open files      (-n) 65536 

是否有流程雪的數量限制可以創建?

回答

3

是的,但僅限於R可創建的連接總數(當前爲128)。這不僅僅包括套接字連接,所以這就是爲什麼你只能得到約90個工作節點。

> grep "define NCONNECTIONS" * 
connections.c:#define NCONNECTIONS 128 /* snow needs one per slave node */ 

由於您使用GNU/Linux,我建議使用多核而不是雪。

+1

使用多核不允許他使用3臺主機。但他可以使用帶有雪的MPI羣集。 – 2013-05-09 12:51:36

+0

@SteveWeston:好點。我沒有注意到多個主機... – 2013-05-09 12:53:30

+0

另一種選擇是每個節點使用一個工人與雪,然後在每個工人上使用多核。這是更多的工作,但規模好得多。 – 2013-05-09 12:56:11

相關問題