Я создаю многомерный вектор (математический вектор), в котором я разрешаю основные математические операции +,-,/,*,=. Шаблон принимает два параметра: один — это тип (int, float и т. д.), а другой — размер вектора. В настоящее время я применяю операции через цикл for. Теперь, учитывая, что размер известен во время компиляции, будет ли компилятор разворачивать цикл? Если нет, есть ли способ развернуть его без (или с минимальным) снижением производительности?
template <typename T, u32 size>
class Vector
{
public:
// Various functions for mathematical operations.
// The functions take in a Vector<T, size>.
// Example:
void add(const Vector<T, size>& vec)
{
for (u32 i = 0; i < size; ++i)
{
values[i] += vec[i];
}
}
private:
T values[size];
};
Прежде чем кто-то прокомментирует Profile then optimize
, обратите внимание, что это основа моего движка 3D-графики, и он должен быть быстрым. Во-вторых, я хочу знать ради самообразования.
If not, is there a way to unroll it with no (or minimal) performance penalty?
Весь смысл развертывания цикла заключается в повышении производительности... зачем вам это делать, если это снижает производительность? - person Chad   schedule 26.05.2011u32
(что бы это ни было, но я могу сделать обоснованное предположение) вместоsize_t
для размера объекта? - person Fred Foo   schedule 26.05.2011