2次元の4x4行列を抽象的に表現しています。私が行列の乗算などのために書いたコードはすべてそのまま "展開"されます - つまり、私は行列を使ってデータエントリにアクセスしたり書き込んだりしません。C:構造体または配列の方が速いのは何ですか?
私の質問がある: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];
...
まったく同じスピードですか?
おそらく私の経験については正しいでしょう。それでも、私は自分のために何がうまくいくか見るために巻いて展開してみようと思います。私はその経験を使うことができました。 – Collin
@Collinあなたはhttp://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Optimize-Options.htmlをお読みください。他のコンパイラもありますが、多くの技術は同じです。ループアンローリングは実行時間を遅くする可能性があることに注意してください。 – EnabrenTane
これは(現在のように)おそらくもっと便利ですが、あなたのリンクに感謝します。 http://gcc.gnu.org/onlinedocs/gcc-4.4.5/gcc/Optimize-Options.html – Collin