我假设一个带有2个处理器的双核(每个处理器2个核心)机器用于解决后面的问题;所以共有4个“核心”。因此,一些天然的问题出现:多核机器上的多个程序实例
假设我写了一个简单的串行程序,并建立了它在,比方说,Visual Studio的..和运行相同程序的两倍,也就是说,在每次运行不同的输入数据。他们会在同一个处理器上运行吗?或独特的处理器?多少RAM内存将分配给每个?它是1处理器(2核心)上的RAM存储器还是总RAM?我相信这两个程序可以在不同的处理器上运行,并且每个应该都有一个处理器(2个内核)的RAM内存。但我不是100%确定的。 Linux上的行为会有什么不同吗?
现在假设我的程序是使用分布式内存并行接口,如MPI书面和我同在NP参数(说)2个处理器跑了一次。该程序是否会使用两个处理器(实际上是全部4个内核)?这是参数-np的最佳值吗?换句话说,如果我对-np 3或-np 4做了同样的处理,假设没有附加优势是正确的吗?再次,我认为是这样,但我不是100%确定的。我还假设我可以高于4(-np 5,-np 6等)。在这种情况下,这些过程如何在np> 4的值处竞争记忆? np> 4的性能会变差吗?我认为是的,也许这部分取决于问题的大小,但也不是100%确定的。
接下来,假设我跑我的MPI内置并行程序的两个实例,都与-np 2,每一个,比如说,不同的输入数据。首先,这可能吗?我认为它是并且它们都在两个处理器上运行?这两个程序是如何同步的?他们如何逐一竞争内存?这应该至少部分地基于启动程序的顺序,据推测?
最后,假设我的程序是使用共享内存并行接口如OpenMP和我跑一次写入。我可以运行多少个“线程”来充分利用共享内存并行性 - 它是2还是4? (因为我有两个处理器,每个处理器有两个核心)。我的猜测是4。因为所有4个内核都是单个共享内存单元的一部分?那是对的吗?如果答案是4;在超过4个线程上运行是否有意义?我不确定这是否有效(与MPI不同,我相信我们可以执行-np 5,-np 6等等)。
最后,假设我运行了2个共享内存并行程序实例,每个实例都有不同的输入数据。我认为这是可能的,并且各个进程会以某种方式竞争记忆,大概是按照程序启动的顺序进行的?
@Cantos:谢谢你的回应;但你是否愿意详细阐述一下;这个问题有3类(串行,MPI和openMP),看起来像你刚刚回答的第一个问题。但再次感谢! –
@Cantos:我刚才看到你编辑过。无论如何,我确实承认它是一个长期的问题。再次感谢。 –
@ user545591:最好的答案将来自您自己的测试。 –