【发布时间】:2018-03-31 11:19:52
【问题描述】:
我想要的是传输一个矩阵,例如一个 1000x1000 的矩阵(实际上比那个大),在 R 中从 NodeA 到 NodeB。现在我使用下面的代码:
节点A:
A<-matrix(0,1000,1000)
Conn1<-socketConnection(port=8000, server=TRUE)
write.table(A,file = Conn1, col.names = FALSE)
节点B:
HostId<-'x.x.x.x'
Conn2<-socketConnection(host=HostId, port=8000, blocking=TRUE)
A<-read.table(file = Conn2,nrows =1000)
但是当我同时运行 4 次传输并且矩阵的维度满足 1.5k(约 20Mb 的矩阵)时,我需要大约 30 秒才能完成数据传输。但是,在我看来,FTP 中的数据传输速度大约是 10Mb/s,应该比 30s 快得多,所以我想知道如何改进我的代码?
提前致谢。
编辑:
尝试Ralf Stubner's Answer后,奇怪的事情发生了:
serialize 在 test1 中覆盖 write.table
t1<-proc.time()
S<-unserialize(Con,refhook = NULL)
t2<-proc.time() -t1
t3<-proc.time()
S<-read.table(file=Con)
t4<-proc.time() -t3
proc.time() 的输出是14s vs 70s:
但是,当我在 this answer (test2) 这样的框架中同时运行 4 段代码时,serialize 比 write.table 花费的时间要多。
serialize 的输出是 101s(ptn 中的第三个数字)
write.table的输出是16s(ptn中的第三个数字)
感谢任何人能够承受这么长的帖子(以及我糟糕的英语)。 如果我只有一段代码要运行,serialize 命令可能是最好的答案,但是 test2 中的奇怪事件确实超出了我的范围。我想知道是否必须使用一些外部工具,例如 MPI。
【问题讨论】:
标签: r sockets data-transfer