我应该在哪里存储PGO数据库文件?

时间:2017-11-15 22:32:34

标签: visual-c++ version-control continuous-integration compiler-optimization pgo

我一直在研究在Visual C ++ 2013中使用Profile Guided Optimisation。我很高兴使用不同的场景作为手动步骤执行训练集,但希望最终优化的构建和链接能够工作我们的CI构建服务器。

考虑到这一点,我在哪里存储PGO配置文件数据库的最佳位置?将它们存储到版本控制(在我们的例子中为Git)是最方便的地方,但我知道它们是十几,甚至几百兆字节的二进制文件,这些不一定是存储的很好地在源控制系统中。

或者,是否有更好的解决方案或最佳实践将PGO集成到我们的自动构建中?

2 个答案:

答案 0 :(得分:0)

你在这里有多个选择,你可以考虑权衡来选择其中一个。

  • 您是将PGO用于整个代码库,还是用于某些热点或模块?您多久刷新一次数据库。
  • 使用不适当的PGO数据库,这是一个很大的问题。
  • 你的项目有多大,在最坏的情况下有多大
  • 在最坏的情况下,将PGO数据库存储在源代码管理中是否可以接受。

通过你的答案,你可以为自己创造一条路线。

如果您不经常刷新PGO数据库,并且二进制大小不会破坏您的项目,您可以将它们存储在版本控制中。

如果为每次提交重新生成它们,您可以将它们放在一个单独的存储库中,其中包含实际代码库提交ID(在其上创建提交PGO配置文件数据库)作为提交消息

或者,如果您不经常生成它们,并且当您返回到特定提交时,可以重新生成您可能无法存储它们的数据库,只需将其放入CI构建计算机。

或者你可以围绕这些意见制作另一种组合:)

答案 1 :(得分:0)

我们的解决方案是使用Git LFS存储PGO文件(另请参阅this question)。

这种方法的优点:

  • PGO数据库与它们关联的代码版本一起存在于存储库中
  • 无需配置外部文件存储即可完全无缝地使用开发,构建和测试计算机
  • 大型二进制文件不存储在普通的Git存储库中,因此不会使其膨胀或使合并变得繁琐。

这种方法唯一不太明显影响我们的是,所有机器和软件都必须支持和安装Git LFS,从开发工作站到CI服务器。