【发布时间】:2011-10-22 19:25:00
【问题描述】:
对于以下问题,我假设一台具有 2 个处理器的双核(每个处理器 2 个内核)机器;所以总共有4个“核心”。于是自然而然地出现了一些问题:
-
假设我编写了一个简单的串行程序并将其构建在 Visual Studio 中,然后运行相同的程序两次,例如每次运行时使用不同的输入数据。他们会在同一个处理器上运行吗?还是不同的处理器?每个分配多少 RAM 内存?是 1 个处理器(2 个内核)上的 RAM 内存还是总 RAM?我相信这两个程序将在不同的处理器上运行,并且每个程序都应该有 1 个处理器(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 个? (因为我有 2 个处理器,每个处理器有 2 个内核)。我猜是4;因为所有 4 个内核都是单个共享内存单元的一部分?那是对的吗?如果答案是 4;在超过 4 个线程上运行有意义吗?我不确定这是否有效(与 MPI 不同,我相信我们可以执行 -np 5、-np 6 等等)。
最后,假设我运行 2 个共享内存并行程序实例,每个实例都有不同的输入数据。我认为这是可能的,并且各个进程会以某种方式竞争内存,大概是按照程序启动的顺序?
【问题讨论】:
标签: c++ linux visual-studio-2008 mpi openmp