我正在使用命令"mpirun -np 250 ./hello“在Fortran中运行一个并行的"Hello”代码。这个打印“你好世界”250倍,他们的排名从0到249。
我正在处理的服务器有128个核心和256个线程。"nprocs“命令在我的服务器上提供"128”输出。
我有一个Fortran代码,与250个处理器相比,128的计算时间更短。
所以我有两个问题
发布于 2020-11-04 01:30:25
不,它不是。你可以在一个CPU核心上运行mpirun -np 250 ./hello
,如果你有足够的内存和耐心的话,由于分时的魔力,它仍然会运行。
硬件线程利用以下事实:在许多情况下,单个线程不能充分利用CPU管道,因此另一个线程可以同时运行并“填补空白”。如果一个硬件线程正在等待缓慢的操作,例如内存访问,在这种情况下,第二个硬件线程可以使用ALU或FPU。这就是所谓的延迟隐藏。
当两个硬件线程都需要访问单个单元(如FPU )时,它就不能很好地工作。在这种情况下,只有更多的开销,因此计算速度减慢。
另一个让它在250个线程中变慢的原因是,硬件线程共享核心数据和指令缓存,有效地将每个线程的缓存量减半。在共享内存编程中,这不是什么问题,所有线程都共享一个地址空间,但对于大多数(几乎所有) MPI实现来说,情况并非如此,因为每个级别都是一个单独的进程,有自己的地址空间。
另一个原因可能是内存带宽。如果您的程序正在从CPU读取数据或将数据写入CPU之外,例如,由于它不完全适合缓存,那么更多的MPI级别将需要更高的内存带宽,但是CPU内存控制器只能提供其中的大部分。您应该尝试运行您的程序,只有64排名-也许它会更快。
https://stackoverflow.com/questions/64660721
复制相似问题