Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 串行程序比并行fortran更快_Linux_Fortran_Mpi_Gfortran - Fatal编程技术网

Linux 串行程序比并行fortran更快

Linux 串行程序比并行fortran更快,linux,fortran,mpi,gfortran,Linux,Fortran,Mpi,Gfortran,我试着测试fortran,看看我能从MPI串行编程中获得多少速度 我首先用以下方法编译程序: mpif90 mpi\u pi\u reduce.f-o mpi\u pi 然后,由于我在本地化mpirun时遇到问题,我启动程序如下: /usr/bin/mpirun-np4./mpi\u pi 现在,当np=1时,我得到: real 0m0.063s user 0m0.049s sys 0m0.017s real 0m1.139s user 0m0.352s sys

我试着测试fortran,看看我能从MPI串行编程中获得多少速度

我首先用以下方法编译程序:

mpif90 mpi\u pi\u reduce.f-o mpi\u pi

然后,由于我在本地化
mpirun
时遇到问题,我启动程序如下:

/usr/bin/mpirun-np4./mpi\u pi

现在,当np=1时,我得到:

real    0m0.063s
user    0m0.049s
sys     0m0.017s
real    0m1.139s
user    0m0.352s
sys     0m0.045s
而如果我使用np=4,我会得到:

real    0m0.063s
user    0m0.049s
sys     0m0.017s
real    0m1.139s
user    0m0.352s
sys     0m0.045s
这是不现实的:-(! 是否可能使用
/usr/bin/mpirun
,MPI不能正常工作?我没有接触示例代码,因此问题不可能是程序本身。 我有一个建议:

ifort(ifort)14.0.1 20131008
版权所有(C)1985-2013英特尔公司。保留所有权利。

和gfortran:

GNU Fortran(Ubuntu/Linaro 4.8.1-10ubuntu9)4.8.1
版权所有(C)2013免费软件基金会,< /代码> /P>
最后:

/usr/bin/mpirun-V
mpirun(开放式MPI)1.4.5

仅使用
mpirun
命令时,我遇到的错误是:

/opt/intel/composer\u xe\u 2013\u sp1.1.106/mpirt/bin/intel64/mpirun:96::无法打开/opt/intel/composer\u xe\u 2013\u sp1.1.106/mpirt/bin/intel64/mpivars.sh

这就是我使用
/usr/bin/mpirun
按建议启动代码的原因


非常感谢您的帮助。

因为您只有一条错误消息要处理,所以您需要了解它无法打开的原因。
/opt/intel/composer\u xe\u 2013\u sp1.1.106/mpirt/bin/intel64/mpivars.sh


检查此文件是否存在,并检查其权限,以允许运行该进程的任何用户执行该文件。

由于您只有一条错误消息可处理,因此您需要了解它无法打开的原因。
/opt/intel/composer\u xe\u 2013\u sp1.1.106/mpirt/bin/intel64/mpivars.sh


检查此文件是否存在,并检查其权限,以允许运行该进程的任何用户执行该文件。

您的测试使用单核执行0.063秒

使用如此短的基准测试,您永远无法获得任何合理的计时:通信成本很高,对于同一主机上的单侧进程间通信,通常为1微秒,而浮点操作的数量级为纳秒。如果添加在屏障等中的等待时间,您会看到进程间通信通信与共享内存中的粒度完全不同

通过增加程序中的ROUNDS变量,您应该尝试在至少10秒的时间内以最快的速度运行基准测试,以消除初始化和最终确定所花费的时间

请注意,MPI_REDUCE是一个代价高昂的调用,它所花费的时间随着进程总数的增加而增加(例如,与MPI_SEND相反)。您应该将其移出循环,以进行比通信多得多的计算

如果您的目标不是学习MPI,而是并行化Monte Carlo代码(或某些“令人尴尬的并行”代码),那么您应该看看ZeroMQ库(),它具有包括Fortran在内的多种语言的绑定。使用该库,您将获得容错能力(如果一个进程崩溃,您的运行将继续),以及拥有灵活资源的可能性(您可以随时附加和分离客户端)。这非常有用,因为您无需等待群集上的所有资源空闲后再开始计算。只需提交连接到同一服务器的多个作业!您可以
查看这些幻灯片:在这里,您使用管道、套接字和XML/RPC实现了Pi的客户机/服务器实现。您可以使用Fortran和ZeroMQ毫不费力地完成同样的工作。

您的测试需要使用单个核心的0m0.063s

使用如此短的基准测试,您永远无法获得任何合理的计时:通信成本很高,对于同一主机上的单侧进程间通信,通常为1微秒,而浮点操作的数量级为纳秒。如果添加在屏障等中的等待时间,您会看到进程间通信通信与共享内存中的粒度完全不同

通过增加程序中的ROUNDS变量,您应该尝试在至少10秒的时间内以最快的速度运行基准测试,以消除初始化和最终确定所花费的时间

请注意,MPI_REDUCE是一个代价高昂的调用,它所花费的时间随着进程总数的增加而增加(例如,与MPI_SEND相反)。您应该将其移出循环,以进行比通信多得多的计算

如果您的目标不是学习MPI,而是并行化Monte Carlo代码(或某些“令人尴尬的并行”代码),那么您应该看看ZeroMQ库(),它具有包括Fortran在内的多种语言的绑定。使用该库,您将获得容错能力(如果一个进程崩溃,您的运行将继续),以及拥有灵活资源的可能性(您可以随时附加和分离客户端)。这非常有用,因为您无需等待群集上的所有资源空闲后再开始计算。只需提交连接到同一服务器的多个作业!您可以
查看这些幻灯片:您有一个使用管道、套接字和XML/RPC的Pi客户机/服务器实现。您可以毫不费力地使用Fortran和ZeroMQ实现同样的功能。

如果您设置
np=2
?@HighPerformanceMark它给我
real 0m0.082s用户0m0.102s sys 0m0.040s
,如果我重新启动,其振荡范围为0.072到0.084多次解算。这个“用户”时间不是每个处理器花费的所有时间的总和吗(因此随进程数线性增加)?此外,链接的MPI程序似乎在每个处理器上进行完全相同的计算,除非random_seed()给出不同的随机数序列…(因此结果总是相同的).如果您设置了
np=2
?@H