2013年10月份开始接触,多半个月的时间基本上都在熟悉Linux的文件操作和R软件的snow包,总算将自己的代码并行化。兴奋之余,感觉有必要将摸索过程中的教训和心得记一下,等将来看自己当时作为初学者是多么矬,也希望能给志同道合者些许帮助。
要说过去一年里最热的网络词汇,恐怕非“大数据”莫数了。数据经过时间的积累,终有一天分析者忍受不了程序运行的时间开销。算法改进不是人人都可为,退而求其次,“强暴”机器同样能够达到缩短时间成本的目的。办公室的电脑多有空闲,在可并行之前,自己常常在N台PC上打开2N个或者3N个R的进程,一天下来,筋疲力竭;每思及此,内流满面。现在好了,妈妈再也不用担心我的学习,so
easy~
闲话少叙,开始正题:
首先当然要求PC和高性能均已安装R、snow包。
其次,关于程序编写。这里要注意的是程序的分割。在实现某个分析目标的时候,尽可能将过程和算法分割为细致的、具体的function。func代表了每个阶段能够解决的问题,这样在并行代码中传入函数的时候比较容易实现。基于snow的并行function相当于apply函数的扩展。如下:
----------------------------------------------------------------------------------
http://s12/mw690/002E7n7Wgy6FG1cLXHZbb&690
----------------------------------------------------------------------------------
其中,cl参数是计算集群,通过makeCluster()定义;x为需要并行的数据集合。直接传入待分析的数据集往往不易实现,我常采用的方法是将待分析的数据做索引,作为x传入。这样在编写传入parRapply()的fun时,定义其参数为待分析的数据索引即可,屡试不爽。并行计算中,需要进行计算中用到的数据集和函数在计算集群中的广播,clusterExport(["FUN"|"DATA"])实现。
最后是程序的提交。qsub作业提交系统很好用,程序调试完毕后,只要qsub
PBS文件,即将并行作业提交到机器队列中,等待着系统分配计算资源。
DONE,并行愉快:-)
加载中,请稍候......