多核机器上的多个程序实例

squ*_*boo 5 c++ linux mpi openmp visual-studio-2008

我假设一个双核(每处理器2个核心)机器,带有2个处理器,用于解决后面的问题; 所以共有4个"核心".因此出现了一些自然问题:

  1. 假设我编写了一个简单的串行程序并将其构建在Visual Studio中,并在每次运行中运行相同的程序两次,例如,使用不同的输入数据.他们会在同一个处理器上运行吗?或不同的处理器?每个RAM内存分配多少?它是1个处理器(2个内核)的RAM内存还是总RAM?我相信这两个程序可以在不同的处理器上运行,每个程序都应该有1个处理器的RAM内存(2个内核); 但我并非100%肯定.Linux上的行为会有什么不同吗?

  2. 现在假设我的程序是使用分布式内存并行接口(如MPI)编写的,我在np参数中使用2个处理器运行一次(比如说).该程序是否会使用两个处理器(实际上是所有4个内核)?这是参数-np的最佳值吗?换句话说,如果我用-np 3或-np 4做同样的事情; 假设没有额外的优势是正确的吗?我想是的,但我并非百分之百确定.我还假设我可以高于4(-np 5,-np 6等).在这种情况下,进程如何以np> 4的值竞争内存?对于np> 4,性能会变差吗?我想是的,也许这部分取决于问题的大小,但同样不是100%肯定.

    接下来,假设我运行了两个我的MPI构建的并行程序实例,两个都带有-np 2,每个实例都有不同的输入数据.首先,这可能吗?我假设它们都在两个处理器上运行?这两个程序是如何同步的,它们如何逐个地单独竞争内存?这应该至少部分地基于启动程序的顺序,大概是?

  3. 最后,假设我的程序是使用共享内存并行接口(如OpenMP)编写的,并且我运行了一次.我可以运行多少"线程"来充分利用共享内存并行性 - 是2还是4?(因为我有2个处理器,每个处理器有2个核心).我的猜测是4; 因为所有4个内核都是单个共享内存单元的一部分?那是对的吗?如果答案是4; 在超过4个线程上运行是否有意义?我不确定这是否有效(与MPI不同,我相信我们可以做到-np 5,-np 6等等).

最后,假设我运行共享内存并行程序的2个实例,每个实例都有不同的输入数据.我认为这是可能的,并且各个进程会以某种方式竞争内存,可能是程序启动的顺序?

Mar*_*tos 7

他们运行的处理器完全取决于操作系统,取决于许多因素,包括同一台机器上发生的任何其他因素.然而,常见的情况是,它们倾向于分别坐在一个核心上,偶尔交换到不同的核心("偶尔"可能意味着每秒几次甚至更频繁).

在正常的PC硬件上没有自己的RAM,并且无论他们要求多少RAM,都会给出这些进程.

对于MPI进程,是的,您的并行性应该与核心数相匹配(假设CPU负载很大).如果两个MPI进程使用-np 2运行,它们将只消耗所有四个核心.增加任何东西,他们将开始抗衡.如上所述,RAM与任何此类无关,尽管在存在争用时高速缓存将受到影响.

这个"问题"太长了,所以我现在要停下来.