c++ - 已知大小数组的基本代数运算
问题描述
我是从 Fortran 过渡的新手 c++ 开发人员。我正在尝试编写最有效的函数来计算两个编译时已知大小 std::arrays 的差异范数(通常在 1 到 10 之间,通常 < 100)。当然,一个简单的 for 循环很容易做到这一点,但我想知道它如何(在效率方面)与更现代的编程风格(可能使用 std::accumulate 或 std::inner_product ?)进行比较。
也许一个简单的解决方案已经存在于专用库(如 Boost 或 Eigen)中?我对这些了解太少,无法确定。
最好的,
解决方案
手写循环和标准算法很可能会产生相同的代码。无论如何,我不希望合理的编译器有有意义的性能差异。
这里真正的性能提升必须来自矢量化。
自动向量化在编译器之间变化很大(并且默认情况下对于浮点操作可能是关闭的,因为它们不是关联的)。
std::execution::parallel_unsequenced_policy
理论上,在(或在 C++20 中)使用标准算法std::execution::unsequenced_policy
应该向编译器提示他们可以/应该对循环代码进行矢量化,但目前编译器对此的采用率很低。您可以手写矢量化代码,但这可能很难获得好/正确。除非您知道该部分对性能至关重要,否则这肯定不是您的时间的有效投资。
一些库可能已经为此类操作提供了适当的矢量化代码。我希望
Eigen
并且可能,ublas
armadillo
或者lapack
有这个想法。但是您必须自己检查它们,以及它们是否满足您对给定平台的需求。
一如既往:如果您关心性能,请衡量和比较。没有普遍的答案。
推荐阅读
- python - 一个简单的 IF 算法的问题:如何检测一个或多个元素不存在?
- python - 为什么pyautogui点击鼠标指针位置而不是定义的位置?
- firebase - 如何生成和验证 TextEditingController 列表并将 textEditingController 列表上传到 firebase -flutter
- typescript - NextJS中如何实现动态url树
- android - TextInputLayout errorDrawable 无法正确渲染矢量
- wordpress - 为什么登录和注册页面不适用于careerfy wp主题
- c# - 将 Excel 工作表导入 C# 应用程序,我想按第一列搜索
- python - 有没有办法确保我的 ImageDataGenerator 的 preprocessing_function 正常工作?
- javascript - 无法使用 map() 方法在 React JS 上循环状态
- python - 设置 Treeview 的 rowheight 会使其他小部件在网格中不可见。为什么会发生这种情况