Boost/STL在高性能计算方面是否很慢?

Is Boost/STL slow with regard to high performance computing?

本文关键字:是否 方面 计算 STL 高性能 Boost      更新时间:2023-10-16

为另一个互联网论坛引用道歉,但我认为这很有趣,想问:

如果放弃编程的"安全"特性,c++会更快语言,避免像STL和Boost这样的东西。以原始字节到字节表示c++更快,但C也一样。

当你添加STL和Boost的包袱时,你会比编写良好的c#代码。c# JIT和Java JIT所具有的优势这些安全功能得到了很好的优化。c++安全特性依赖于编译器的优化。

因此,如果您不小心使用STL和Boost代码,您将会有一个跛脚鸭的应用程序。

我同意删除安全功能,但我见过很多高频招聘广告,他们都要求Boost经验。Boost对生成快速代码来说肯定不是坏事吧?或者这个人只是在理论上说,如果你只是在字节级别操作,它会更快?

编辑:引用是关于STL和Boost的,因此我添加了STL标签。

boost和c++标准库用于生成极快的生产实现。当然,可以在特定的场景中改进这些实现——这类似于当您知道自己的执行与通用分配器有何不同,以及如何针对这种用法进行优化时编写自己的分配器。因此,当然可以分析问题并生成比通用实现(或boost)更快的优化实现。

当然,任何库都可能被误用,这可能导致执行受到损害。它的缺点是boost(一个大型库集合)实现是快速实现的一个很好的起点。如果您需要它比boost更快,请确定问题并改进它。

许多c++开发人员关心性能;总的来说,比其他语言要多。Boost通常得到很好的评价,同行评审,其实现用于测试并形成标准库特性的基础。

<标题>,

感谢 Justin让我分享他对封闭问题的回答: —Seth

恰恰相反。

Boost是而不是关于安全带。

Boost是关于高级软件组件的,具有高级抽象,这避免了在其他框架/库1中常见的"库锁定"。

例如,Boost Graph库根本不需要切换数据结构:您可以使用/调整任何适合您的应用程序的数据结构。在最坏的情况下,你可能不得不写一个trait类来帮助Boost进行解释;正是这个特性(现代模板库中常见的)使Boost在实践中表现得像其他任何:不会有那么多库阻抗不匹配。这与c++ 11关于线程和移动语义的新概念直接一致:防止即使是最基本的数据复制情况。

而且,所有这些库都支持您自己的分配器实现,从而实现无与伦比的内存管理性能。你可以在c#中对齐128位int向量-但是你必须跳过很多很多的障碍2,并且没有办法让它与框架API一起工作。

在c++中,你只需要为你所使用的东西付费,Boost完全遵循了这种精神。

嗯,我想我还没有充分强调这一点,但是我现在已经说完了。

让我从另一个角度来看它:在c#中编写高性能代码要困难得多,因为很难看到幕后发生的事情。

一旦你在幕后(不安全模式IL代码),你可能会比c++更不安全,因为在c++中有一个透明的策略,告诉你在哪里发生了什么以及如何发生。在c#中,你甚至不能信任前一行得到的int*(因为垃圾收集器可能已经移动了你的奶酪);没有人知道编译器或者JIT引擎会把你漂亮的泛型代码变成3

简而言之:您可以在任何地方编写糟糕的代码,但不能责怪Boost。STL只能归咎于疯狂的原始性能4

<子>

<一口> 1> p> <一口> 2> p>3包括许多接近可悲的地方,并且在很大程度上违反了"最不意外原则"(例如当博客重新上线时)

4 std::copy将在基于SSE4, MOVSW或金钱可以买到的普通内存的最佳实现中被静态翻译,然而你甚至不必写一个不同于将istream复制到set的字母,可以这么说。