由于多进程环境比较复杂,因此从 MPI 程序收集性能数据时应当注意一些有关存储 MPI 实验的问题。这些问题涉及到数据收集和存储的效率以及实验的命名。有关命名实验(包括 MPI 实验)的信息,请参见数据的存储位置。
用来收集性能数据的每个 MPI 进程都创建其自己的子实验。当 MPI 进程创建实验时,将锁定实验目录;所有其他 MPI 进程必须一直等待,直到解除锁定,这些进程才可以使用该目录。将试验存储在所有 MPI 进程可以访问的文件系统上。
如果未指定实验名称,则使用缺省的实验名称。 在实验中,收集器将为每个 MPI 等级创建一个子实验。收集器使用 MPI 等级以格式 M_rm.er 构造子实验名称,其中 m 是 MPI 等级。
如果打算在实验完成后将其移动到其他位置,则在 collect 命令中指定 –A copy 选项。要复制或移动实验,请勿使用 UNIX cp 或 mv 命令。而应使用 er_cp 或 er_mv 命令,如Chapter 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 设置为 0,collect 不会运行后处理例程。首次在实验上调用 er_print 或 analyzer 时,将运行这些后处理例程。