3.6 第一个并行PIConGPU实现
下一步,用Vampir打开追踪文件trace.otf2,如图3-8所示。追踪缩略图(右上角)显示只选择了整个程序执行的0.2s,并且重复模式显示了模拟的大概2.5个迭代步骤。中间用颜色编码的活动是主时间轴,它显示了MPI、主机进程(进程1~4)和相应的CUDA上下文(线程1/1-4)。右下角的图例显示了颜色的含义。进程之间的黑线代表MPI消息。进程和线程之间的黑线代表CUDA内存拷贝。可以看出,MPI活动占据了大部分的程序执行时间,而CUDA活动所占时间很少。
通过图3-8左上方的工具栏图标选择Vampir要显示的性能数据。有两组显示方式,时间轴显示和统计显示。“时间轴显示”展示沿着水平方向随着时间演化的活动,本例中的主时间轴显示了颜色编码的所有事件流活动(可以是进程、线程或CUDA流)。
默认情况下,颜色代码基于图3-8右下方的功能图例中所示的功能组。对一个事件流,进程时间轴显示调用上下文的时间。计数器时间轴显示与事件流相关联的性能计数器的值。例如,这个值可以是PAPI计数器,也可以是诸如内存分配之类的派生计数器,或者使用Vampir度量编译器创建的任何东西。性能监视器显示所有事件流的时间上下文计数器。
第二种组显示包含表示各种分析数据的统计显示。函数摘要实现函数或函数组之间的运行时间或调用次数的分布。信息摘要提供所有数据传输的统计(主机与设备或MPI进程间数据传输)。其他是进程摘要,例如信息度量、I/O摘要和调用关系。Vampir特性详细说明可以在手册里找到。
Vampir区别于其他标准分析工具的最重要特性,是可以在程序执行时间轴上以任意时间间隔放大。如图3-8右上方缩略视图所示的轨迹摘要(所选间隔由两条黑色条表示)。包含统计信息的所有显示一直会被更新到当前显示的时间间隔。因此,Vampir可以对应程序的任何阶段和极高时间分辨率进行应用程序分析。通过右键单击显示来配置Vampir如何显示信息。左键单击显示中的任何东西都会出现上下文视图,将会显示所选项目的详细信息(包含开始/结束时间、持续时间、函数名称、文件名、行号、消息大小等)。
图3-8所示的追踪文件记录了第一次尝试使用MPI并行化单GPU PIConGPU代码以增加模拟面积(弱扩展)运行的结果。追踪显示了首次并行尝试的常见问题:顺序任务执行。这种情况下,可以看到MPI活动和CUDA存储器拷贝占据主机执行时间,而GPU使用率相当低。
MPI活动占据很多时间的原因是用了很长时间传递相当小的消息(可以使用消息摘要来分析)。这也说明在GPU上PIConGPU计算时间很快,不能隐藏MPI传输时间。为了减少传输时间,唯一的方案就是传输延时。这种情况下,用Inifinband网络替换集群中的1GB以太网可提供了更快的MPI通信。
另一个问题是相当长的时间用于同步GPU与主机间的数据拷贝(在设备上启动一组内核之前主机进程右边的条)。对于这种情况,计算和数据传输更好地重叠交织将增加总吞吐量。GPU利用率低本身不是问题,而是主机影响不能为GPU提供足够的计算量,因此GPU大部分时间在等待数据。