- 主题:结构体数组(AOS)和粉碎数据结构, 到底哪个性能优?
第一种, 结构体数组
struct R3{x, y, z}, std::vector<R3> vv1;
第二种, 三个vector合起来表达同样的信息(类似于SoA)
std::vector<double>X, std::vector<double>Y, std::vector<double>Z
每次用当然都是同时用xyz三个信息, 这种到底是哪个存取性能好呢?
网上铺天盖地所SOA方式好, 但我发现影响性能的是cache miss, 如果元素到了百万千万, 采用第一种, 可能引发一次cache miss, 但是采用第二种, 必然引发三次cache miss(每个数组一次), 难道不是结构体数组性能更好吗?
--
FROM 120.244.224.*
看你访问的顺序,你要是 x,y,z,x,y,z...这么遍历,肯定是结构体数组好
你如果是x,x,...,y,y,...,z,z,...那就是SoA好
【 在 xieyf 的大作中提到: 】
: 第一种, 结构体数组
: struct R3{x, y, z}, std::vector<R3> vv1;
: 第二种, 三个vector合起来表达同样的信息(类似于SoA)
: ...................
--
FROM 115.199.178.*
soa针对的是大结构体在处理时只需要其中部分数据,其余数据是垃圾数据
通过把不同数据按不同处理循环分别存放, 提高预取的有效性
游戏引擎里渲染相关的部分倾向于用soa
【 在 xieyf (绿蚁新醅酒,红泥小火炉) 的大作中提到: 】
: 第一种, 结构体数组
: struct R3{x, y, z}, std::vector<R3> vv1;
: 第二种, 三个vector合起来表达同样的信息(类似于SoA)
: ...................
--
FROM 123.117.77.*