1

我刚刚开始熟悉 R 中的并行性。

当我计划在我的项目中使用Microsoft Azure 机器学习工作室时,我已经开始研究Microsoft R Open为并行提供了什么,因此,我发现了这个,它说并行是在引擎盖下完成的,它利用了所有可用内核,无需更改 R 代码。本文还展示了一些性能基准,但是,它们中的大多数都展示了进行数学运算的性能优势。

到目前为止这很好。此外,我也有兴趣知道它是否也并行化*apply引擎盖下的功能。我还发现了这 2 篇文章,它们通常描述了如何并行化*apply函数:

  1. 使用雪的并行 R 快速指南:描述使用snow包、par*apply函数族和clusterExport.
  2. R 中并行计算的简要介绍:使用parallel包、par*apply函数族和绑定值到环境。

所以我的问题是什么时候我将*apply在 Microsoft Azure Machine Learning Studio 中使用函数,默认情况下会在后台并行化,还是我需要使用诸如 之类的parallelsnow

4

1 回答 1

5

就我个人而言,我认为我们可以在营销 MRO 方面有所不同,而无需在并行/多线程方面做这么大的事情。呃,好吧。

R 带有一个 Rblas.dll/.so,它实现了用于线性代数计算的例程。这些例程用于不同的地方,但一个常见的用例是拟合回归模型。借助 MRO,我们将标准 Rblas 替换为使用英特尔数学核心库的 Rblas 。当您调用类似lmor的函数时glm,MRO 将使用多个线程和优化的 CPU 指令来适应模型,这可以使您比标准实现显着加速。

MRO 并不是获得这种加速的唯一方法。您还可以编译/下载其他经过类似优化的 BLAS 实现。我们只是让它成为一个简单的一步下载。

请注意,MKL 仅影响涉及线性代数的代码。它不是通用的加速工具;任何不进行矩阵计算的 R 代码都不会看到性能提升。特别是,它不会加速任何涉及显式并行性的代码,例如使用并行包、SNOW 或其他集群计算工具的代码。

另一方面,它也不会降低它们的性能。您仍然可以使用并行、SNOW 等包来创建计算集群并跨多个进程分发代码。在这方面,MRO 的工作方式与普通的 CRAN R 一样。(不过,如果您在一台机器上创建节点集群,您可能想要做的一件事是减少 MKL 线程的数量。否则,您可能会冒着节点之间争用 CPU 内核的风险,这会降低性能。)

披露:我为微软工作。

于 2016-10-09T14:51:38.777 回答