多次迭代或复杂的代码?

时间:2016-03-24 20:00:25

标签: performance loops iteration

我已经多次遇到过这个问题。假设我迭代一个列表,我想以不同的方式“查看”它(列表的数据可以根据您解析它的方式进行不同的解释)。这可以仅在一次迭代中完成,但代码看起来会变得混乱和复杂。另一种方法是多次迭代列表;每次任务一次。我会选择这个,但是如果列表非常大并且每次迭代在性能方面都是昂贵的呢? 总而言之,最好是:

a)一次迭代并处理所有事情 b)执行多次迭代并且每次迭代只处理一个任务

我期待着听到你的答案。

2 个答案:

答案 0 :(得分:1)

好问题。答案是“它取决于”。

首先,我注意到你没有指定架构。例如,如果您在GPU或CPU上执行操作会产生很大的不同 - 同样,不同的CPU也会以不同的方式工作。现在我假设英特尔CPU很简单,但请记住这一点。

您使用“效果”标记标记了此问题,因此我将如何解释此问题。至于表现,只有一个黄金标准,那就是基准会告诉你真相。也就是说,要记住一些指导原则:

  • 顺序数据访问优于随机访问。这与内存模型和矢量化等工作方式有关。
  • 不可预测的分支可能会导致您的性能下降。通常,当你制作一个能完成所有事情的单一功能时,就会发生这种情况。
  • 如果您可以在“迭代”中处理小块内存(例如,< = 4K),那通常会更快,因为这意味着您可以继续使用缓存。如果你需要处理很多,你可能想先写一个测试用例来进行基准测试。

就我个人而言,我认为Mike Acton的视频讲述了如何编写适当的高性能代码。 https://www.youtube.com/watch?v=rX0ItVEVjHchttps://www.youtube.com/watch?v=GPpD4BBtA1Y是最值得观看的视频(如果你问我,他们真的值得花时间。)

答案 1 :(得分:1)

这是代码质量和性能之间的权衡。没有一般的答案。两种选择都有效,具体取决于要求。