Sun Studio 12:性能分析器

从 MPI 程序收集数据

收集器可以从那些使用消息传递接口 (Message Passing Interface, MPI) 库的多进程程序中收集性能数据。Open MPI 库包含在 Sun HPC ClusterToolsTM 7 软件中,Sun MPI 库包含在 ClusterTools 5 和 ClusterTools 6 软件中。可从 http://www.sun.com/software/products/clustertools/ 获取 ClusterTools 软件。

要在使用 ClusterTools 7 时启动并行作业,请使用 Open Run-Time Environment (ORTE) 命令 mpirun

要在使用 ClusterTools 5 或 ClusterTools 6 时启动并行作业,请使用 Sun Cluster Runtime Environment (CRE) 命令 mprun

有关更多信息,请参见 Sun HPC ClusterTools 文档

有关 MPI 和 MPI 标准的信息,请参见 MPI Web 站点 http://www.mcs.anl.gov/mpi/。有关 Open MPI 的更多信息,请参见 Web 站点 http://www.open-mpi.org/

由于 MPI 和收集器的实现方式,每个 MPI 进程记录一个单独的实验。每个实验必须具有唯一的名称。实验的存储位置和方式取决于 MPI 作业可用的文件系统类型。有关存储实验的问题将在下一个小节存储 MPI 实验中讨论。

要从 MPI 作业收集数据,可以在 MPI 下运行 collect 命令,也可以在 MPI 下启动 dbx 并使用 dbx collector 子命令。这些任务将在在 MPI 下运行 collect 命令通过在 MPI 下启动 dbx 来收集数据中讨论。

存储 MPI 实验

由于多进程环境比较复杂,因此从 MPI 程序收集性能数据时应当注意一些有关存储 MPI 实验的问题。这些问题涉及到数据收集和存储的效率以及实验的命名。有关命名实验(包括 MPI 实验)的信息,请参见数据的存储位置

用来收集性能数据的每个 MPI 进程都创建其自己的实验。当某个 MPI 进程创建实验时,它会锁定实验目录。所有其他 MPI 进程都必须等到该锁定被释放之后才能使用此目录。因此,如果将实验存储到所有 MPI 进程都可以访问的文件系统,则会按顺序创建这些实验;但是如果将实验存储到每个 MPI 进程的本地文件系统,则会并行创建这些实验。

如果允许收集器创建实验名称,则可以避免与实验名称和存储位置有关的问题。请参见下一节缺省的 MPI 实验名称

缺省的 MPI 实验名称

如果未指定实验名称,则使用缺省的实验名称。收集器使用 MPI 等级以标准格式 experiment.m.er 构造实验名称,其中 m 是 MPI 等级。如果指定了实验组,则主干 experiment 为实验组名称的主干,否则主干为 test。无论使用的是公共文件系统还是本地文件系统,实验名称都是唯一的。因此,如果使用本地文件系统记录实验并将其复制到公共文件系统,则复制这些实验并重新构造任何实验组文件时不必重命名实验。在多数情况下,您应当允许收集器创建实验名称,以确保名称在所有文件系统的范围内是唯一的。

指定非缺省的 MPI 实验名称

如果您将实验存储在公共文件系统上,并以标准格式 experiment. n.er 指定实验名称,那么当每个实验的 n 值递增时,每个实验将被赋予一个唯一的名称。实验是按照 MPI 进程获取实验目录锁的顺序来编号的,因而无法保证与进程的 MPI 等级相对应。如果您将 dbx 附加到正在运行的 MPI 作业中的 MPI 进程,则实验编号由附加的顺序来确定。

如果您将每个实验都存储在其自己的本地文件系统上并指定一个显式的实验名称,则每个实验都可能会获得这个名称。例如,假设您在具有四个单处理器节点的群集中运行 MPI 作业,这四个节点分别标记为 node0node1node2node3。每个节点具有一个名为 /scratch 的本地磁盘,您将实验存储在该磁盘的 username 目录中。由 MPI 作业创建的实验具有下面的全路径名称。


node0:/scratch/username/test.1.er
node1:/scratch/username/test.1.er
node2:/scratch/username/test.1.er
node3:/scratch/username/test.1.er

包括节点名称的全名是唯一的,但在每个实验目录中都有一个名为 test.1.er 的实验。如果在 MPI 作业完成后将实验移到公共位置,则必须确保这些名称仍然是唯一的。例如,要将这些实验移到假设可以从所有节点访问的起始目录并重命名这些实验,请键入以下命令。


rsh node0 ’er_mv /scratch/username/test.1.er test.0.er’
rsh node1 ’er_mv /scratch/username/test.1.er test.1.er’
rsh node2 ’er_mv /scratch/username/test.1.er test.2.er’
rsh node3 ’er_mv /scratch/username/test.1.er test.3.er’

对于大型 MPI 作业,可能需要使用脚本将实验移到公共位置。请不要使用 UNIX® 命令 cpmv;应当使用上例中所示的 er_cper_mv,如处理实验中所述。

如果不知道哪些本地文件系统可用,请使用 df -lk 命令或咨询系统管理员。请始终确保用来存储实验的目录已经存在、其定义是唯一的以及不将其用于任何其他实验,还要确保文件系统具有足够的空间来容纳这些实验。有关如何估计所需空间的信息,请参见估计存储要求


注 –

除非您能够访问用于运行实验的装入对象和源文件或者拥有具备相同路径和时间戳的副本,否则在计算机或节点间复制或移动实验时不能在带注释的反汇编代码中查看带注释的源代码或源代码行。


在 MPI 下运行 collect 命令

要在 MPI 的控制下使用 collect 命令收集数据,,请使用与 ClusterTools 版本相对应的语法,如下所示。

在 Sun HPC ClusterTools 7 上:


% mpirun -np n 
collect [collect-arguments] program-name
 [program-arguments]

在 Sun HPC ClusterTools 6 和更低版本上:


% mprun -np n 
collect [collect-arguments] program-name
 [program-arguments]

在以上两种情况下,n 都表示要由 MPI 创建的进程数。此过程会创建 n 个单独的 collect 实例,每个实例都记录一个实验。有关实验的存储位置和方法的信息,请阅读数据的存储位置一节。

为了确保将来自不同 MPI 运行的实验集存储在不同的位置,可以使用 -g 选项为每个 MPI 运行创建一个实验组。实验组应当存储在所有 MPI 进程都可以访问的文件系统上。创建实验组还有助于将单个 MPI 运行的实验集装入性能分析器。如果不创建组,则可以使用 -d 选项为每个 MPI 运行指定一个单独的目录。

通过在 MPI 下启动 dbx 来收集数据

要在 MPI 的控制下启动 dbx 并收集数据,请使用下面的语法。

在 Sun HPC ClusterTools 7 上:


% mpirun -np n dbx program-name < collection-script

在 Sun HPC ClusterTools 6 或更低版本上:


% mprun -np n dbx program-name < collection-script

在以上两种情况下,n 都表示要由 MPI 创建的进程数,collection-script 都表示包含设置和启动数据收集所必需的命令的 dbx 脚本。此过程会创建 n 个单独的 dbx 实例,每个实例都记录其中一个 MPI 进程上的实验。如果未定义实验名称,则使用 MPI 等级对实验进行标记。有关实验的存储位置和方法的信息,请阅读存储 MPI 实验一节。

通过在程序中使用收集脚本以及对 MPI_Comm_rank() 的调用,可以使用 MPI 等级来对实验进行命名。例如,在 C 程序中插入以下行。


ier = MPI_Comm_rank(MPI_COMM_WORLD,&me);

在 Fortran 程序中插入以下行。


call MPI_Comm_rank(MPI_COMM_WORLD, me, ier)

例如,如果将该调用插入到第 17 行,则可以使用类似以下内容的脚本。


stop at 18
run program-arguments
rank=$[me]
collector enable
collector store filename experiment.$rank.er
cont
quit