【问题标题】:Is Boost/STL slow with regard to high performance computing? [closed]Boost/STL 在高性能计算方面是否慢? [关闭]
【发布时间】:2011-12-14 08:48:50
【问题描述】:

another internet forum quote道歉,但我觉得这很有趣,想问一下:

如果你放弃编程的“安全”特性,C++ 会更快 语言并避免使用 STL 和 Boost 之类的东西。以原始字节到字节 C++ 更快,但 C 也是如此。

你添加STL包袱的那一刻,和Boost你比 编写良好的 C# 代码。 C# JIT 和 Java jit 的优势 是这些安全功能得到了很好的优化。 C++ 安全特性 依赖编译器的优化。

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

我同意取消安全功能,但我看过很多高频招聘广告,他们都要求有 Boost 经验。 Boost 对生成快速代码肯定不是坏事吗?还是这个人只是在理论上说如果您只是在字节级别进行操作会更快?

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

【问题讨论】:

  • 说这话的人不知道他在说什么。
  • 不同意 STL 或 BOOST 让你变慢。见:stackoverflow.com/questions/3664272/…
  • 如果你真的在做“高性能计算”,我会严重怀疑你会使用 C# 或 Java 之类的东西。每种语言都有自己的位置,但我认为 HPC 还没有进入 C# 或 Java 领域。
  • 谁说这只是拖钓或消息灵通。无论哪种方式,它都是错误的。
  • 您能否提供对您的源代码的引用,说明 C# 比 C++ 快? C++ 开发人员有充分的理由持怀疑态度;)

标签: c++ performance boost stl


【解决方案1】:

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

当然,任何库也可能被滥用,这可能会导致执行受损。简而言之,boost(大量库)实现是快速实现的绝佳起点。如果您需要它比 boost 更快,请确定问题并加以改进。

许多 C++ 开发人员关心性能;一般来说,比其他语言更多。 boost 通常受到好评,经过同行评审,并且实现用于测试和形成标准库功能的基础。

-----

感谢贾斯汀让我分享他对已结束问题的回答:-- Seth

恰恰相反。

Boost 不是关于安全带的。

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

例如,您的 Boost Graph 库确实要求您完全切换数据结构:您可以使用/调整任何对您的应用程序表现良好的数据结构。在最坏的情况下,您可能必须编写一个特征类来帮助 Boost 进行解释;正是这种特性(现代模板库常见)使得 Boost 的性能与众不同在实践中:不会有那么多库阻抗不匹配。这直接符合 C++11 围绕线程和移动语义的新概念:甚至可以防止最基本的数据复制情况。

此外,所有这些库都尊重您自己的分配器实现,从而实现无与伦比的内存管理性能。您可以在 C# 中对齐 128 位 int 向量 - 但您必须跳过许多圈2,而且,没有办法您可以使其与框架一起使用API。

在 C++ 中,您只需为使用的内容付费,而 Boost 完全符合这种精神。

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

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

一旦你进入幕后(不安全模式IL 代码),你可能会比在 C++ 中更不安全,因为在 C++ 中有一个透明的策略发生在哪里以及如何发生。在 C# 中,你甚至不能相信你在一行之前得到的 int*(因为垃圾收集器可能已经移动了你的奶酪);不知道编译器是什么 和或 JIT 引擎将生成您漂亮的通用代码3

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

1PoCo、Qt、MFC、WTL、诸如此类......

2Mono SIMD

3包括大量接近可悲且严重违反“最小惊喜原则”的区域 (example coming when blog back online)

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

【讨论】:

  • 我可以为我已经写好的答案借一个位置吗?我讨厌把它扔进垃圾桶:)
  • @sehe 我不明白为什么不这样做。继续,但请在答案中为您的答案添加注释以避免混淆 =)
猜你喜欢
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
相关资源
最近更新 更多