<?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[memset um ein array zu flushen]]></title><description><![CDATA[<p>Ich bin gerade auf der Suche nach Optimierungen für meine Matrizenfunktionen.</p>
<p>Ich muss in einem Programm oft flushen (Matrix mit Nullen besetzen).</p>
<p>Jetzt bin ich auf memset gekommen</p>
<pre><code class="language-cpp">// ganze Matrix
memset(N,0x00,nsize_t);
// Teilmatrix
memset(N+offset,0x00,nsize_t);
</code></pre>
<p>Funktionieren tut es soweit gut. Bekomme ich irgendwo Probleme?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/287398/memset-um-ein-array-zu-flushen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 12:06:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287398.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 May 2011 16:21:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to memset um ein array zu flushen on Fri, 27 May 2011 16:21:08 GMT]]></title><description><![CDATA[<p>Ich bin gerade auf der Suche nach Optimierungen für meine Matrizenfunktionen.</p>
<p>Ich muss in einem Programm oft flushen (Matrix mit Nullen besetzen).</p>
<p>Jetzt bin ich auf memset gekommen</p>
<pre><code class="language-cpp">// ganze Matrix
memset(N,0x00,nsize_t);
// Teilmatrix
memset(N+offset,0x00,nsize_t);
</code></pre>
<p>Funktionieren tut es soweit gut. Bekomme ich irgendwo Probleme?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069826</guid><dc:creator><![CDATA[asdsad]]></dc:creator><pubDate>Fri, 27 May 2011 16:21:08 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Fri, 27 May 2011 16:24:12 GMT]]></title><description><![CDATA[<p>solange du die grenzen richtig einhälst sollte eigentlich alles gehen<br />
abgesehen davon, dass die funktion C ist statt C++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069830</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 27 May 2011 16:24:12 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Fri, 27 May 2011 16:26:23 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>solange du die grenzen richtig einhälst sollte eigentlich alles gehen<br />
abgesehen davon, dass die funktion C ist statt C++</p>
</blockquote>
<p>Danke für deine Antwort<br />
Gibt es so etwas für C++?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069833</guid><dc:creator><![CDATA[asdsad]]></dc:creator><pubDate>Fri, 27 May 2011 16:26:23 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Fri, 27 May 2011 16:26:37 GMT]]></title><description><![CDATA[<p>Wieso nicht einfach die Member auf 0 setzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069834</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Fri, 27 May 2011 16:26:37 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Fri, 27 May 2011 16:27:31 GMT]]></title><description><![CDATA[<p>asdsad schrieb:</p>
<blockquote>
<p>Gibt es so etwas für C++?</p>
</blockquote>
<p><code>memset</code> sollte eigentlich auch in C++ gehen, nur muss man den Header <code>&lt;cstring&gt;</code> und den Namensbereich <code>std</code> verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069836</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Fri, 27 May 2011 16:27:31 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Fri, 27 May 2011 16:32:32 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Wieso nicht einfach die Member auf 0 setzen?</p>
</blockquote>
<p>Die Matrix wird noch gebraucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069840</guid><dc:creator><![CDATA[asdsad]]></dc:creator><pubDate>Fri, 27 May 2011 16:32:32 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Fri, 27 May 2011 16:34:51 GMT]]></title><description><![CDATA[<p>wenn du in deiner matrix nicht mit POD's arbeitest, kannst du dir ja mal std::fill angucken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069843</guid><dc:creator><![CDATA[ASDas]]></dc:creator><pubDate>Fri, 27 May 2011 16:34:51 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Fri, 27 May 2011 16:38:54 GMT]]></title><description><![CDATA[<p>Natürlich geht <code>memset</code> in C++. Du kannst auch mal in deine Implementierung gucken, normalerweise benutzen einige Überladungen von STL Funktionen (z.B. std::fill, std::copy ...) die <code>memset, memcpy</code> und co. Da die am besten wissen, was auf dem jeweiligen System sicher ist, würde ich mich immer erstmal auf die verlassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069849</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Fri, 27 May 2011 16:38:54 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Fri, 27 May 2011 20:42:40 GMT]]></title><description><![CDATA[<p>Die C-Bibliothek ist nicht umsonst dabei.;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069969</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Fri, 27 May 2011 20:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Fri, 27 May 2011 21:10:57 GMT]]></title><description><![CDATA[<p>asdsad schrieb:</p>
<blockquote>
<p>Funktionieren tut es soweit gut. Bekomme ich irgendwo Probleme?</p>
</blockquote>
<p>Kannste machen, kannste aber auch lassen. Es kommt der gleiche Code raus, wenn Du mit einer for-Schleife auf 0 setzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069976</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 27 May 2011 21:10:57 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Sat, 28 May 2011 05:29:34 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>asdsad schrieb:</p>
<blockquote>
<p>Funktionieren tut es soweit gut. Bekomme ich irgendwo Probleme?</p>
</blockquote>
<p>Kannste machen, kannste aber auch lassen. Es kommt der gleiche Code raus, wenn Du mit einer for-Schleife auf 0 setzt.</p>
</blockquote>
<p>Na, die C-Funktionen sind teilweise schon sehr gut zu optimieren.<br />
Zum Beispiel ist ein memcpy mit SSE-Registern umgesetzt oft mindestens 6x so schnell wie eine for-Schleife.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070001</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sat, 28 May 2011 05:29:34 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Sat, 28 May 2011 07:23:16 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>asdsad schrieb:</p>
<blockquote>
<p>Funktionieren tut es soweit gut. Bekomme ich irgendwo Probleme?</p>
</blockquote>
<p>Kannste machen, kannste aber auch lassen. Es kommt der gleiche Code raus, wenn Du mit einer for-Schleife auf 0 setzt.</p>
</blockquote>
<p>Na, die C-Funktionen sind teilweise schon sehr gut zu optimieren.<br />
Zum Beispiel ist ein memcpy mit SSE-Registern umgesetzt oft mindestens 6x so schnell wie eine for-Schleife.</p>
</blockquote>
<p>Kein Widerspruch. Die einfache for-Schleife wird vom Compiler auch optimiert zu Code mit SSE-Registern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070012</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 28 May 2011 07:23:16 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Sat, 28 May 2011 07:41:33 GMT]]></title><description><![CDATA[<p>Bist du dir da sicher?<br />
Compiler benutzen doch sehr selten Extensions.</p>
<p>Mit dieser Library hab ich für meinen Teil sowohl mit MSVC++ als auch mit gcc dramatische Performanceschübe.<br />
<a href="http://www.agner.org/optimize/#asmlib" rel="nofollow">http://www.agner.org/optimize/#asmlib</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070013</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sat, 28 May 2011 07:41:33 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Sat, 28 May 2011 08:54:57 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Bist du dir da sicher?</p>
</blockquote>
<p>Nein. Ich bin enttäuscht. Ist das nur auf meinem Prozessor (AMD Sempton 3000+) so müllig?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstring&gt;
using namespace std;

void clearArray(double* arr,size_t size){
//	memset(arr,0,sizeof(*arr)*5000);
	for(int i=0; i!=5000; ++i)
		arr[i]=0;
}

int main() {
	double* kram=new double[10000];
	for(int i=0;i&lt;1000000;++i){
        clearArray(kram,5000);
        kram[rand()%10000]=1;
	}
	double summe=0;
	for(int i=0; i!=10000; ++i)
		summe+=kram[i];
    cout&lt;&lt;summe&lt;&lt;'\n';
}
</code></pre>
<p>4.686 Sekunden.</p>
<p>Mit memset:<br />
1.687 Sekunden.</p>
<p>Mit std::fill_n<br />
4.617 Sekunden.</p>
<p>Ups.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070014</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 28 May 2011 08:54:57 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Sat, 28 May 2011 09:28:39 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Ethon schrieb:</p>
<blockquote>
<p>Bist du dir da sicher?</p>
</blockquote>
<p>Nein. Ich bin enttäuscht. Ist das nur auf meinem Prozessor (AMD Sempton 3000+) so müllig?</p>
</blockquote>
<p>VS 2008, /Ox, Core i3-330M:</p>
<p>memset: ~2300ms<br />
for: ~2450ms<br />
fill: ~5300ms</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070055</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 28 May 2011 09:28:39 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Sat, 28 May 2011 10:14:20 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>memset: ~2300ms<br />
for: ~2450ms<br />
fill: ~5300ms</p>
</blockquote>
<p>fill mit welchen Iteratoren? Mit SCL_SECURE?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070067</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sat, 28 May 2011 10:14:20 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Sat, 28 May 2011 10:35:24 GMT]]></title><description><![CDATA[<p>Dürfte bei nem double-Array ziemlich egal sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070075</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 28 May 2011 10:35:24 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Sat, 28 May 2011 10:55:58 GMT]]></title><description><![CDATA[<p>So, mein Aufbau:<br />
Intel Q6600(2.4 GHz, 4 Kerne), CodeGear RAD Studio 2009 mit Optimierung aber für nur einen Kern<br />
<a href="http://imageshack.us/photo/my-images/121/unbenanntrn.png/" rel="nofollow">Resultat</a><br />
Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstring&gt;
#include &lt;ctime&gt;
static const unsigned long Runs = 100000;
int main()
{
  double* Stuff = new double[10000];
  std::clock_t Start, End;

  Start = std::clock();
  for(unsigned long Run = 0; Run &lt; Runs; Run++)
    std::memset(Stuff, 0, 10000 * sizeof(double));
  End = std::clock();
  std::cout &lt;&lt; &quot;std::memset\t=\t&quot; &lt;&lt; double(End - Start) / CLOCKS_PER_SEC &lt;&lt; &quot;\n&quot;;

  Start = std::clock();
  for(unsigned long Run = 0; Run &lt; Runs; Run++)
    for(unsigned long Clear = 0; Clear &lt; 10000; Clear++)
      Stuff[Clear] = 0.0;
  End = std::clock();
  std::cout &lt;&lt; &quot;for-Schleife\t=\t&quot; &lt;&lt; double(End - Start) / CLOCKS_PER_SEC &lt;&lt; &quot;\n&quot;;

  std::cin.get();
  delete[] Stuff;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2070081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070081</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 28 May 2011 10:55:58 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Sat, 28 May 2011 11:17:34 GMT]]></title><description><![CDATA[<p>EOutOfResources: So lahm? Mit o. g. Konfiguration braucht mein Rechner nur 0.45s. Liegt das am Compiler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070085</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 28 May 2011 11:17:34 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Sat, 28 May 2011 11:29:07 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>EOutOfResources: So lahm? Mit o. g. Konfiguration braucht mein Rechner nur 0.45s. Liegt das am Compiler?</p>
</blockquote>
<p>Dito - 0.43s bzw 0.5s mit VS2010 auf E8400.</p>
<p>bei 1M Durchläufen (obige Konfiguration):<br />
- memset: 2.21s<br />
- schleife: 2.56s<br />
- fill_n: 2.56s<br />
- fill: 2.76s</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070088</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Sat, 28 May 2011 11:29:07 GMT</pubDate></item><item><title><![CDATA[Reply to memset um ein array zu flushen on Sat, 28 May 2011 11:33:00 GMT]]></title><description><![CDATA[<p>Liegt wohl am Compiler (bzw. seiner Optimierungseinstellung), da ich mit der gleichen CPU und cl.exe (10.00.40219.01 for x64, mit /Ox) bei beiden ca. 0.675 erhalte. Bei x86 und /Ox ist memset aber schneller:</p>
<blockquote>
<p>std::memset = 0.518<br />
for-Schleife = 0.642</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2070089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070089</guid><dc:creator><![CDATA[Red Riding Hood]]></dc:creator><pubDate>Sat, 28 May 2011 11:33:00 GMT</pubDate></item></channel></rss>