【发布时间】:2016-10-04 09:12:51
【问题描述】:
抱歉,如果这个问题有一个明显的答案,但我无法正确地表达它以在网上找到答案。
在 Fortran 中,假设我有一个实数数组 (>100,000)。在时间积分方案的一个步骤中,我将不断地(以连续的方式)不断地访问这个数组。每个后续步骤将不再需要此数组的某些元素。我不知道有多少,可能从没有到全部。我的问题是:
最好是:(1) 每一步都遍历这个数组并将我需要的剩余元素复制到一个新数组中,即使可能只需要取出很小的百分比,或者 (2) 我应该有一个新的整数索引数组,我每个时间步都会更新它以访问该数组。我的理解是,如果内存访问是连续的,它应该非常快,我认为这应该超过复制数组的成本。另一方面,更新整数索引会非常快,但代价是数据会被碎片化并且访问它会更慢。
或者这是没有明确答案的问题类型,我需要去测试这两种方法以找出哪种方法更适合我的应用程序?
【问题讨论】:
-
展示真实的代码总是比仅仅用文字描述要好。它太长,太无聊,太模棱两可。 (TLDR)
-
我怀疑这里的答案确实是试试看。根据我的经验,使用查找数组进行索引可能会导致性能显着下降。另一种方法是实现一个链接列表,您可以在删除元素时对其进行更新,但是我怀疑这也会导致性能下降——但我认为这确实取决于您的具体用例。
标签: arrays performance fortran