使R包中的函数可并行化的最佳实践是什么?

时间:2017-02-21 17:33:35

标签: r parallel-processing r-package parallel-foreach

我开发了一个包含embarassingly parallel函数的R包。

我想以对用户透明的方式实现这些功能的并行化,无论他/她的操作系统如何(至少理想情况下)。

我环顾四周看其他包裹作者如何导入foreach-based Parallelism。例如,Max Kuhn的caret包导入foreach以使用%dopar%relies用户指定并行后端。 (有几个示例使用doMC,这在Windows上无效。)

注意doParallel适用于Windows和Linux / OSX并使用内置的parallel包(请参阅注释here进行有用的讨论),导入{{}是否有意义只要用户指定doParallel作为参数,我的函数就会调用registerDoParallel()吗?

1 个答案:

答案 0 :(得分:3)

作为未来套餐的作者,我建议你看一下。未来的软件包将所有并行/集群功能统一到一个API中。

https://cran.r-project.org/package=future

它的设计使您作为开发人员编写代码并且用户决定在后端,例如plan(multiprocess)plan(cluster, workers = c("n1", "n3", "remote.server.org"))等。

如果用户可以访问具有常见调度程序(如Slurm,TORQUE / PBS和SGE)的HPC群集,那么他们可以使用future.BatchJobs包,该包在BatchJobs之上实现未来的API,例如: plan(batchjobs_slurm)。您的代码保持不变。 (很快就会有批处理工具之上的future.batchtools包))。