XMVECTOR __m128 nicht schneller als float ??!
-
Hallo Leute ich war gerade am Suchen von schnellen Vektorstrukturen.
Dabei fand ich DirectXMath und das darin enthaltene XMVECTOR ( was als __m128 definiert wird ( SSE))Jetzt hab ich mal eine for schleife mit n Duchläufen und außerdem noch einen Timer der die vergangene Zeit in ms zählt.
Wenn ich mir 2 XMVECTORen initialisiere und diese addiere ( 10 mio mal )
dauer das ca 1100 ms.
Jetzt hab ich selbst eine einfache struct mit float x,y,z,w erstellt und das manuell gemacht und komme auf 63 ms bei 10.mio durchläufen.Wie kann das sein ??
#include <iostream> #include <string> #include <unordered_map> #include <utility> #include <typeinfo> #include <Windows.h> #include <xnamath.h> using namespace std; struct Vec { float x,y,z,w; }; int main() { DWORD start = GetTickCount(); XMVECTOR v = XMVectorZero(); XMVECTOR x = XMVectorZero(); Vec a; Vec b; for(int i = 0; i < 10000000;i++) { /*v = XMVectorSet(1.0f,2.0f,3.0f,4.0f); x = XMVectorSet(1.0f,2.0f,3.0f,4.0f); v = XMVectorAdd(v,x);*/ a.x = 1.0f; a.y = 2.0f; a.z = 3.0f; a.w = 4.0f; b.x = 1.0f; b.y = 2.0f; b.z = 3.0f; b.w = 4.0f; a.x = a.x + b.x; a.y = a.y + b.y; a.z = a.z + b.z; a.w = a.w + b.w; } DWORD end = GetTickCount(); cout << (end - start) << endl; getchar(); }
-
du misst mist
mach nochmal mit einer benchmark die auch nur entfernte chancen hat keinen mist zu messen
-
??? Wo ist da das problem ?
-
wie immer zwischen keyboard und sessel.
das problem ist dass du anscheinend überhaupt keinen tau davon hast wie man ne benchmark schreibt.
erstmal testest du vermutlich ne debug version. da kann nur mist rauskommen.
und dann musst du dafür sorgen dass das was du eigentlich messen willst nicht wegoptimiert wird. gleichzeitig aber ohne "gute" optimierungen zu verhinern.
d.h. das allermindeste ist dass du keine ergebnisse verwirfst, weil der schlaue compiler sich dann denkt "will mich der verarschen?" und die berechnung einfach ganz weglässt. oder auch nicht. das ist genau das problem, man kanns halt nicht wissen.und dann testest du etwas, wovon es vermutlich keine sau interessiert wie performant es ist, nämlich das addieren von zwei konstanten. eine test-funktion die etwas realistischere berechnungen macht wäre nicht verkehrt.