并行化 NavData 生成

NavData 生成系统设计得已足够快,即使在大型地形上,生成时间也不会导致生产工作流或管线出现问题。但是,没有最快,只有更快!为了实现这一目标,系统应提供在多个处理器上并行运行生成过程各个部分的能力。

Gameware Navigation 通过使用来自 Intel 的开源线程构建块 (TBB) 库,为在主机的多个核心上生成 NavData 提供内置支持。如果将 NavData 生成系统的 API 集成到您自己的工具中,还可以扩展框架以使用不同的第三方工具管理并行计算。

原则上,在多个核心上拆分生成过程可以缩短生成时间,缩短的时间量与可用核心数量成正比。实际上,由于 NavData 生成的预处理和后期处理阶段不能并行化,因此,实际缩短的时间略有减少。在任何情况下,使用并行计算时,都应该看到速度明显加快,对于大型地形尤为明显。

如何在多个处理器上生成

使用多个处理器时涉及的步骤和注意事项因使用 Navigation Lab 还是使用 NavData 生成系统的 API 而略有不同。

使用 Navigation Lab

默认情况下会在 Navigation Lab 中启用多处理器生成。

在 Navigation Lab 中的多个处理器上启用或禁用 NavData 生成:

  1. Generation 窗口中,展开 Run 组。
  2. 选中或取消选中 Use multi-core 复选框。

Navigation Lab 在内部使用 TBB,以便在计算机上的所有可用处理器之间分布 NavData 生成。

请注意,多核支持仅在独立工具的发布版本中可用。由于已发现 TBB 的调试内部版本运行非常慢,因此独立工具的调试内部版本始终在单个处理器上按顺序生成 NavData,而不使用 TBB。

以 C++ 通过 TBB 使用生成器

如果您已按照集成阶段 6:使用 NavData 生成 API下有关集成 NavData 生成系统的 API 的说明执行操作,您应该已设置为通过 TbbParallelForInterface 类使用 TBB。

请注意:

以 C++ 通过自定义接口使用 Generator

要使用自定义工具管理并行计算,请执行以下操作:

  1. 编写 IParallelForInterface 类的自定义实现。类将从 Generator 接收作业并负责处理并行系统,以确保执行所有这些作业。

    有关详细信息,请参见 IParallelForInterface 类描述。此外,提供了 TbbParallelForInterface 实现的完整源代码,以便您可以使用此实现作为自己的类模型。

  2. 在 NavData 生成代码中,先创建 IParallelForInterface 类的实例再创建 Generator,并在构建 Generator 时将其作为参数进行传递。
  3. 在可以通过 GeneratorInputOutput::m_runOptions 访问的 GeneratorRunOptions 对象中,确保:

由您来确保满足自定义并行系统的其他任何要求。