与Microsoft R open(MKL)并行,但没有任何改进

时间:2016-09-12 17:32:25

标签: r parallel-processing intel-mkl

我正在运行MCMC算法,并且在Windows 7上打开Microsoft R已经提高了我的速度。但是现在我需要使用我的算法运行大量的模拟,所以我使用R snow包来并行我的代码。但是,它不起作用。

具体来说,我的PC上打开的Microsfot R使用4个核心进行计算,而总共有8个核心。所以我想我会在我的PC上并行2个进程,因为每个进程需要4个核心用于MKL库。但并行并不是真的。我在并联时设置了所有8个内核。我的测试程序需要5分钟才能运行。但如果我将我的程序与我的程序并列,我希望这个过程也需要5分钟。但实际上花了10分钟,就像按顺序运行2个流程一样。

如果我尝试打开两个R会话并在两个R会话中运行程序,则会发生同样的事情。通常它只需要5分钟,但现在每个都需要10分钟。

那我在哪里弄乱?是关于两层平行的问题吗?一个是我的水平,另一个是英国MKL水平?

1 个答案:

答案 0 :(得分:0)

在不知道有关代码的某些细节的情况下,有很多因素可以解决这个问题。例如,对每个进程有效的亲和力掩码是什么?并发进程中线程的Tread理想处理器是什么?您的流程可能正在尝试竞争相同的核心。您可以通过查看SetThreadIdealProcessor和SetProcessAffinityMask API找到更多详细信息。您的代码也可能使用受关键部分或其他同步对象保护的共享资源。我首先从Sysinternals下载Process Explorer并查看每个进程的线程列表。这将告诉您正在运行的物理线程数以及每个线程有多少个上下文切换。这将为您提供一些开始。