Estoy creando un vector multidimensional (vector matemático) donde permití operaciones matemáticas básicas +, -, /, *, =. La plantilla toma dos parámetros, uno es el tipo (int, float, etc.) mientras que el otro es el tamaño del vector. Actualmente estoy aplicando las operaciones a través de un ciclo for. Ahora, considerando que el tamaño es conocido en tiempo de compilación, ¿el compilador desenrollará el ciclo? De lo contrario, ¿hay alguna manera de desenrollarlo sin una penalización de rendimiento (o mínima)?¿El compilador desenrollará este ciclo?
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];
};
Antes de que alguien comenta Profile then optimize
tenga en cuenta que esta es la base de mi motor de gráficos en 3D y tiene que ser rápido. En segundo lugar, quiero saber por el bien de educarme a mí mismo.
no sonar sarcástico, pero si se compila con optimizaciones y volcar el montaje se puede casi averiguar :) – Skurmedel
Incluso si tiene que ser muy rápido, perfiles es una herramienta muy valiosa. De hecho, es tu amigo fest * especialmente * si tiene que ser realmente rápido, porque funciona mucho mejor que adivinar. (Además, la respuesta puede depender en gran medida del compilador, las banderas utilizadas y tal vez incluso más.) – delnan
'Si no, ¿hay alguna forma de desenrollarlo sin penalización de rendimiento (o mínima)? El punto completo de desenrollar un ciclo es aumentar el rendimiento ... ¿por qué lo harías si costara rendimiento? – Chad