【发布时间】:2019-08-01 09:17:10
【问题描述】:
我是一个从 Fortran 过渡的新手 c++ 开发人员。 我正在尝试编写 最有效 可能的函数来计算两个编译时已知大小 std::arrays 的差异范数(通常在 1 到 10 之间,最常见的是
也许一个简单的解决方案已经存在于专用库(如 Boost 或 Eigen)中?我对这些了解太少,无法确定。
最好的,
【问题讨论】:
-
你必须测量才能确定,但我会说它们应该是等价的。
-
如果您想知道,那么下一步就是尝试这些替代方案并为它们计时。对于效率问题,确实没有普遍适用的答案。
-
标准算法的性能通常不比手写代码差。交易是:零开销的很棒的抽象。 不是:你的代码会自动变得更快
-
根据问题(以及您要解决的平台),您可以通过并行化获得一些速度。许多标准算法允许通过execution policies(例如
std::sort)进行并行化,您可以使用这些算法。如果你没有找到合适的,有像Open MP这样的并行化库。 -
还没有提到的东西,如果你的数组在编译时被填充(或可以被填充),那么你可以使用
constexpr来计算这种东西(没有运行时成本!)。您必须为此编写自己的函数,因为标准函数还不是 constexpr。详情见stackoverflow.com/questions/33157731/…