は、私はそれはいくつかの巧妙なアルゴリズムになるかどうか気にしない(これは最も興味深いものになるだろう)、またはどのように素早くベクトルの和の最大要素を見つけるか?
struct V {
float val [200]; // 0 <= val[i] <= 1
};
V a[600];
V b[250];
V c[250];
V d[350];
V e[350];
// ... init values in a,b,c,d,e ...
int findmax(int ai, int bi, int ci, int di, int ei) {
float best_val = 0.0;
int best_ii = -1;
for (int ii = 0; ii < 200; ii++) {
float act_val =
a[ai].val[ii] +
b[bi].val[ii] +
c[ci].val[ii] +
d[ci].val[ii] +
e[ci].val[ii];
if (act_val > best_val) {
best_val = act_val;
best_ii = ii;
}
}
return best_ii;
}
私のプログラムの最も内側のループに次のコードを持っているいくつかのC++のトリックや組み込み関数やアセンブラ。しかし、findmax関数をより効率的にする必要があります。
事前に大変感謝しています。
編集: 枝が最も遅い操作(誤予測?)であるようです。
あなたは私たちに、外側のループについての詳細を伝えることはできますか?多分それと組み合わせて、最適化の可能性が増えます。 – SebastianK
マイクロ最適化。コンパイラによって処理される可能性がありますが、実際には害はありません。また、私は+++に切り替える時に、驚くべきベンチマークを見ました。そうすれば、値はインクリメントする前にコピーされません。 – krdluzni