C++相談室 part129 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0761デフォルトの名無しさん (ワッチョイ f33c-u6wT)
2017/03/20(月) 14:06:32.00ID:OlwkB3mR0あーまだ実装してないのね
自分の実用するコード(4次元までのベクトル、4x4までの行列)だと5〜30%くらいの向上なんで、実装する労力考えると最後のダメ押しでもよかったなとは思うけど
>・計算途中の値もよく使うので=が出てきて評価が頻繁
一応、a = b + c;程度の式でも効果あるにはある
多分インライン展開されても、レジスタの使用効率がちょっと良くなるんだと思う
a = b + c;
みたいな式で
for (int i = 0; i < 3; i++)
a.f[i] = b.f[i] + c.f[i];
という計算に展開された方が、レジスタを使い切らないからじゃないかなと
(ちなみにループはアンロールされる前提だけど、ヒープに確保するような長いベクトルでもETの方が効率良いはず
あとこの例だと、SSEとかのSIMDのイントリンシック使うと4次元まで組み込み型になるので、全くETの意味が無くなるw)
複数の組み込み型を含む演算で、SIMDとか他の高速化を使った上でさらに速くしたいなら、ETはおすすめしたい
ただし計算過程でxがy, zに干渉するような計算(内積、外積とか)にはET使えないので注意
■ このスレッドは過去ログ倉庫に格納されています