Oracle Solaris Studio 12.2:性能分析器

存储 MPI 实验

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

用来收集性能数据的每个 MPI 进程都创建其自己的子实验。当 MPI 进程创建实验时,将锁定实验目录;所有其他 MPI 进程必须一直等待,直到解除锁定,这些进程才可以使用该目录。将试验存储在所有 MPI 进程可以访问的文件系统上。

如果未指定实验名称,则使用缺省的实验名称。在实验中,收集器将为每个 MPI 等级创建一个子实验。收集器使用 MPI 等级以格式 M_rm.er 构造子实验名称,其中 m 是 MPI 等级。

如果打算在实验完成后将其移动到其他位置,则使用 collect 命令指定 -A copy 选项。要复制或移动实验,请勿使用 UNIX® cpmv 命令;而是使用 er_cper_mv 命令,如第 8 章中所述。

MPI 跟踪在每个节点的 /tmp/a.*.z 中创建临时文件。MPI_finalize() 函数调用期间将删除这些文件。确保文件系统有足够的空间用于实验。对长时间运行的 MPI 应用程序收集数据之前,执行短期试运行以确认文件大小。有关如何估计所需空间的信息,另请参见估计存储要求

MPI 分析以开源 VampirTrace 5.5.3 版为基础。它可识别多个受支持的 VampirTrace 环境变量以及新的环境变量 VT_STACKS,该环境变量控制调用栈是否记录在数据中。有关这些变量的含义的详细信息,请参见 VampirTrace 5.5.3 文档。

环境变量 VT_BUFFER_SIZE 的缺省值将 MPI API 跟踪收集器的内部缓冲区限制为 64 MB。某一 MPI 进程达到限制的大小时,缓冲区将刷新到磁盘,前提是尚未达到 VT_MAX_FLUSHES 限制。缺省情况下,将 VT_MAX_FLUSHES 设置为 0。该设置将导致 MPI API 跟踪收集器在缓冲区已满时刷新磁盘的缓冲区。如果将 VT_MAX_FLUSHES 设置为正数,就是对允许刷新的次数进行了限制。如果缓冲区已满且无法刷新,不再将该进程的事件写入跟踪文件。结果是试验可能不完整,在某些情况下,实验可能不可读。

要更改缓冲区大小,请使用环境变量 VT_BUFFER_SIZE。该变量的最佳值取决于要跟踪的应用程序。设置较小的值将增加应用程序可以使用的内存,但是将触发 MPI API 跟踪收集器频繁进行缓冲区刷新。这些缓冲区刷新可能会显著改变应用程序的行为。另一方面,设置较大的值(如 2 GB)将可以使 MPI API 跟踪收集器刷新缓冲区的次数降至最低,但是将减少应用程序可以使用的内存。如果没有足够的内存可用来容纳缓冲区和应用程序数据,可能会造成应用程序的某些部分交换至磁盘,这也会导致应用程序的行为发生显著改变。

另一个重要的变量是 VT_VERBOSE,该变量可记录各种错误和状态消息。如果出现问题,请将此变量设置为 2 或更大的值。

通常,当 mpirun 目标存在时,MPI 跟踪输出数据是后处理的;将处理的数据文件写入实验,而将关于后处理时间的信息写入实验标题。如果利用 -m off 显式禁用 MPI 跟踪,就不执行 MPI 后处理。后处理失败时,报告错误,且任何 MPI 标签或 MPI 跟踪度量都不可用。

即使 mpirun 目标没有实际调用 MPI,仍然会记录实验,但不会生成任何 MPI 跟踪数据。该实验报告 MPI 后处理错误,任何 MPI 标签或 MPI 跟踪度量都将不可用。

如果将环境变量 VT_UNIFY 设置为 0collect 不会运行后处理例程。首次在实验上调用 er_printanalyzer 时,将运行这些后处理例程。


注 –

除非您能够访问源文件或者拥有具备相同时间戳的副本,否则在计算机或节点间复制或移动实验时不能在带注释的反汇编代码中查看带注释的源代码或源代码行。可以在当前目录中放置指向原始源文件的符号链接,以便查看带注释的源代码。也可以使用“设置数据显示”对话框中的设置:通过“搜索路径”标签(请参见“搜索路径”标签),您可以管理要用来搜索源文件的目录列表;通过“路径映射”标签(请参见“路径映射”标签),您可以将文件路径的前面部分从一个位置映射到另一个位置。