gpt4 book ai didi

c - C : structs or arrays? 中什么更快

转载 作者:太空狗 更新时间:2023-10-29 15:09:59 25 4
gpt4 key购买 nike

我想实现(抽象表示的)二维 4x4 矩阵。我为矩阵乘法等编写的所有代码都将按原样完全“展开”——也就是说,我不会使用循环来访问和写入矩阵中的数据条目。

我的问题是:在 C 中,这样使用结构会更快吗:

typedef struct {
double e0, e1, e2, e3, e4, ..., e15
} My4x4Matrix;

或者这样会更快吗:

typedef double My4x4Matrix[16];

考虑到我将单独访问每个矩阵元素:

My4x4Matrix a,b,c;
// (Some initialization of a and b.)
...
c.e0=a.e0+b.e0;
c.e1=a.e1+b.e1;
...

或者

My4x4Matrix a,b,c;
// (Some initialization of a and b.)
...
c[0]=a[0]+b[0];
c[1]=a[1]+b[1];
...

还是它们的速度完全一样?

最佳答案

任何体面的编译器都会逐字节生成完全相同的代码。但是,使用数组可以让您更加灵活;访问矩阵元素时,可以选择是访问固定位置还是用变量寻址位置。

我也高度质疑您选择手动“展开”(unroll?)所有操作。任何优秀的编译器都可以为您完全展开具有恒定迭代次数的循环,甚至可以生成 SIMD 代码和/或优化安排指令顺序。您将很难通过手工做得更好,并且最终会得到难以阅读的代码。你问这个问题的事实向我表明,你可能没有足够的经验来做得比天真的优化编译器更好。

关于c - C : structs or arrays? 中什么更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4560142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com