<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[XMVECTOR __m128 nicht schneller als float ??!]]></title><description><![CDATA[<p>Hallo Leute ich war gerade am Suchen von schnellen Vektorstrukturen.<br />
Dabei fand ich DirectXMath und das darin enthaltene XMVECTOR ( was als __m128 definiert wird ( SSE))</p>
<p>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.</p>
<p>Wenn ich mir 2 XMVECTORen initialisiere und diese addiere ( 10 mio mal )<br />
dauer das ca 1100 ms.<br />
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.</p>
<p>Wie kann das sein ??</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 
#include &lt;string&gt; 
#include &lt;unordered_map&gt; 
#include &lt;utility&gt; 
#include &lt;typeinfo&gt;
#include &lt;Windows.h&gt;
#include &lt;xnamath.h&gt;

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 &lt; 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 &lt;&lt; (end - start) &lt;&lt; endl;

	getchar();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/307888/xmvector-__m128-nicht-schneller-als-float</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 15:59:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307888.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Sep 2012 20:26:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to XMVECTOR __m128 nicht schneller als float ??! on Fri, 07 Sep 2012 20:26:24 GMT]]></title><description><![CDATA[<p>Hallo Leute ich war gerade am Suchen von schnellen Vektorstrukturen.<br />
Dabei fand ich DirectXMath und das darin enthaltene XMVECTOR ( was als __m128 definiert wird ( SSE))</p>
<p>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.</p>
<p>Wenn ich mir 2 XMVECTORen initialisiere und diese addiere ( 10 mio mal )<br />
dauer das ca 1100 ms.<br />
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.</p>
<p>Wie kann das sein ??</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 
#include &lt;string&gt; 
#include &lt;unordered_map&gt; 
#include &lt;utility&gt; 
#include &lt;typeinfo&gt;
#include &lt;Windows.h&gt;
#include &lt;xnamath.h&gt;

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 &lt; 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 &lt;&lt; (end - start) &lt;&lt; endl;

	getchar();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2249475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249475</guid><dc:creator><![CDATA[Bob Wolfskin]]></dc:creator><pubDate>Fri, 07 Sep 2012 20:26:24 GMT</pubDate></item><item><title><![CDATA[Reply to XMVECTOR __m128 nicht schneller als float ??! on Fri, 07 Sep 2012 20:39:17 GMT]]></title><description><![CDATA[<p>du misst mist<br />
mach nochmal mit einer benchmark die auch nur entfernte chancen hat keinen mist zu messen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249481</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 07 Sep 2012 20:39:17 GMT</pubDate></item><item><title><![CDATA[Reply to XMVECTOR __m128 nicht schneller als float ??! on Fri, 07 Sep 2012 20:56:41 GMT]]></title><description><![CDATA[<p>??? Wo ist da das problem ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249488</guid><dc:creator><![CDATA[Bob Wolfskin]]></dc:creator><pubDate>Fri, 07 Sep 2012 20:56:41 GMT</pubDate></item><item><title><![CDATA[Reply to XMVECTOR __m128 nicht schneller als float ??! on Fri, 07 Sep 2012 21:06:50 GMT]]></title><description><![CDATA[<p>wie immer zwischen keyboard und sessel.</p>
<p>das problem ist dass du anscheinend überhaupt keinen tau davon hast wie man ne benchmark schreibt.</p>
<p>erstmal testest du vermutlich ne debug version. da kann nur mist rauskommen.</p>
<p>und dann musst du dafür sorgen dass das was du eigentlich messen willst nicht wegoptimiert wird. gleichzeitig aber ohne &quot;gute&quot; optimierungen zu verhinern.<br />
d.h. das allermindeste ist dass du keine ergebnisse verwirfst, weil der schlaue compiler sich dann denkt &quot;will mich der verarschen?&quot; und die berechnung einfach ganz weglässt. oder auch nicht. das ist genau das problem, man kanns halt nicht wissen.</p>
<p>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.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249490</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 07 Sep 2012 21:06:50 GMT</pubDate></item></channel></rss>