Boost / STL在高性能计算方面是否缓慢?
道歉为另一个互联网论坛报价,但我认为这很有趣,并想问:
如果您查看编程语言的“安全”特性并避免诸如STL和Boost之类的事情,C ++就会更快。 在以字节为单位的字节中,C ++速度更快,但C也是如此。
当你添加STL的行李时,Boost你比编写好的C#代码慢。 C#JIT和Java jit具有的优点是这些安全功能已经过优化。 C ++安全特性依赖于编译器的优化。
因此,如果你不注意STL和Boost代码,你将会有一个应用程序的跛脚鸭。
我同意摆脱安全功能,但我看到很多高频率的招聘广告,他们都要求提升经验。 当然,Boost对于生成快速代码不会有什么不好的地方? 或者,这个人只是在理论上说明,如果你只是在字节级操纵它会更快?
编辑:报价是关于STL和Boost,因此我添加了STL标签。
没有
boost和C ++标准库被用于生产极其快速的生产实现。 当然,可以在特定情况下改进这些实现 - 这与在知道执行与通用分配器的方式不同以及如何针对该用法进行优化时编写自己的分配器类似。 所以当然可以分析问题并产生比通用实现(或增强)更快的优化实现。
当然,任何库也可能被滥用,这可能会导致执行失败。 缺点是boost(一大批库)实现是快速实现的极好起点。 如果您需要它比提升更快,请确定问题并加以改进。
许多C ++开发人员都在关注性能; 一般来说,超过其他语言。 提升一般都受到好评,经过同行评审,实现用于测试和形成标准库特性的基础。
-----
感谢贾斯丁让我在封闭的问题上分享他的回答: - 塞斯
恰恰相反。
Boost不是关于安全带的。
Boost是关于高层次的软件组件,具有高度的抽象性这避免了其他框架/库1中常见的“库锁定”1。
例如,您的Boost图库并不需要你在所有交换机的数据结构:您可以使用/调整,对于您的应用程序执行以及任何数据结构。 在最糟糕的情况下,你可能需要编写一个特质类来帮助Boost解释; 恰恰是这种特性(现代模板库的共同特点)使得Boost在实践中表现得与其他任何东西一样:不会有太多的库阻抗不匹配 。 这直接符合C ++ 11关于线程和移动语义的新概念:即使是最基本的数据复制情况也是如此。
此外,所有这些库都会遵循您自己的分配器实现,从而实现无法超越的内存管理性能。 你可以在C#中将128位int向量对齐 - 但你必须跳过许多hoops2,并且你不可能使它与框架API一起工作。
在C ++中,你只为你使用的东西付费,而Boost完全是这种精神。
嗯,我认为我还没有足够强调这一点,但我现在已经完成了。
让我从另一面来看它:在C#中编写高性能代码要困难得多,因为很难看到幕后发生了什么。
一旦你落后于幕后(不安全模式,IL代码),你可以说比C ++更安全,因为在C ++中有一个关于在哪里以及如何发生的透明策略。 在C#中,你甚至不能相信你在一行之前得到的int*
(因为垃圾收集器可能已经移动了你的奶酪); 不知道编译器和/或JIT引擎会对你的不错的通用代码做什么3。
简而言之:你可以在任何地方编写不好的代码,但Boost不能被指责。 STL只能归咎于疯狂的原始表演4。
1PoCo,Qt,MFC,WTL,whatnot ....
2Mono SIMD
3包括很多接近可悲并违反“最低惊奇原则”的领域(例如博客回到在线时的例子)
4根据SSE4,MOVSW或金钱可以购买的简单memcpy, std::copy
将被静态转换为最佳实现,但您甚至不必写一个字母与将一个istream
复制到一个set
,所以说话。
上一篇: Is Boost/STL slow with regard to high performance computing?