dre*_*ash 2 c java performance caching data-structures
我想知道如果数据布局Structs of Arrays(SoA的)总是比快Array of Structs(AOS)或Array of Pointers(AOP),用于与输入仅在适合的问题RAM编程C/JAVA.
几天前,我正在改进分子动力学算法(在C中)的性能,总结在该算法中,基于它们的力和位置计算粒子之间的力相互作用.
原始粒子由包含9个不同双精度的结构表示,3表示粒子力(Fx,Fy,Fz),3表示位置,3表示速度.该算法有一个包含指向所有粒子(AoP)的指针的数组.我决定从布局改变AOP到SoA的提高了缓存的使用.
所以,现在我有一个带有9个数组的数组,其中每个数组存储每个粒子的力,速度和位置(x,y,z).每个粒子都由它自己的数组索引访问.
我在性能增益(对于只在RAM适合的输入)的约1.9倍,所以我在想,如果通常从改变AOP或AOS到SOA将一如既往性能越好,如果没有在类型的算法做这不会发生.
很大程度上取决于所有领域的有用性.如果你有一个数据结构,其中使用一个字段意味着你可能会使用所有这些,那么一个struct数组更有效,因为它将你可能需要的所有东西保持在一起.
假设您有时间序列数据,您只需要选择一小部分可能的字段.您可能拥有关于某个事件或时间点的各种数据,但您只需要说3-5个.在这种情况下,数组的结构更有效,因为a)您不需要缓存您不使用的字段b)您经常按顺序访问值,即缓存字段,其下一个值和下一个值是有用的.
因此,时间序列信息通常存储为列的集合.
| 归档时间: |
|
| 查看次数: |
709 次 |
| 最近记录: |