【问题标题】:Where should I store PGO database files?我应该在哪里存储 PGO 数据库文件?
【发布时间】:2017-11-15 22:32:34
【问题描述】:
我一直在研究在 Visual C++ 2013 中使用 Profile Guided Optimisation。我很高兴使用不同的场景作为手动步骤执行训练集,但希望最终优化的构建和链接可以在我们的 CI 构建服务器上工作.
考虑到这一点,我存储 PGO 配置文件数据库的最佳位置是哪里?将它们存储到版本控制(在我们的例子中是 Git)是最方便的地方,但我知道它们是数十甚至可能数百兆字节的二进制文件,而且这些文件不一定能很好地存储在源文件中控制系统。
或者,是否有更好的解决方案或最佳实践将 PGO 集成到我们的自动化构建中?
【问题讨论】:
标签:
visual-c++
version-control
continuous-integration
compiler-optimization
pgo
【解决方案1】:
您在这里有多种选择,您可以在考虑权衡的情况下选择其中一种。
- 您将 PGO 用于整个代码库,还是用于某些热点或模块?您多久刷新一次数据库。
- 使用不适当的 PGO 数据库发布某物是一个大问题吗?
- 您的项目有多大,在最坏的情况下有多大
- 在这种最坏的情况下,是否可以将 PGO 数据库存储在源代码管理中。
通过您的回答,您可以为自己创建一条路线。
如果您不经常刷新 PGO 数据库并且二进制大小不会破坏您的项目,您可以将它们存储在版本控制中。
如果您为每次提交重新生成它们,您可以将它们放在一个单独的存储库中,其中包含真实代码库提交 ID(在其上创建提交 PGO 配置文件数据库)作为提交消息
或者如果你不经常生成它们,当你返回一个特定的提交时,重新生成数据库是可以的,你可能不存储它们,只需放入 CI 构建机器。
或者你可以围绕这个观点进行另一种组合:)
【解决方案2】:
我们的解决方案是使用 Git LFS 存储 PGO 文件(另请参阅 this question)。
这种方法的优点:
- PGO 数据库与它们关联的代码版本一起存在于存储库中
- 数据库完全无缝地可供开发、构建和测试机器使用,无需配置外部文件存储
- 大型二进制文件不存储在普通 Git 存储库中,因此不会使其膨胀或使合并变得乏味。
这种方法的唯一轻微并发症是,所有机器和软件都必须支持和安装 Git LFS,从开发工作站到 CI 服务器。