<?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[Schnelles erzeugen vieler Zufallswerte]]></title><description><![CDATA[<p>Hallo @all,</p>
<p>ich habe folgendes Problem:<br />
Mein Programm soll bestimmte Bytes verarbeiten und benötigt für jedes Byte rund 5 zufällige Bytes.<br />
Es handelt sich um eine hohe Anzahl an Bytes (in meinem aktuellen Test 30.000.000 Bytes -&gt; 150.000.000 Zufallswerte).<br />
Mit BruteForce (d.h. bei jedem Byte 5-mal mein mt199337 aufrufen) erhöht sich die Laufzeit enorm!!!<br />
Die Idee ist also eine Möglichkeit zu finden, das Erzeugen der ZUfallswerte zu optimieren.<br />
Meine Idee war einen std::vector zu benutzen und den in einem Thread zu befüllen und aus meinem eigentlichen Thread die Werte auszulesen. Ich weiß nur nicht ob das wegen der ganzen Synchronisation so viel schneller laufen würde, da das Programm quasi nur noch am &quot;rum-locken&quot; ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Die Frage ist nun, gibt es eine schnelle Methode Zufallswerte zu erzeugen bzw. kann ich in einem Thread ein vector befüllen und parallel ohne große Synchonisierung die Werte auslesen?</p>
<p>mfG</p>
<p>Hlymur</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/331096/schnelles-erzeugen-vieler-zufallswerte</link><generator>RSS for Node</generator><lastBuildDate>Fri, 01 May 2026 21:01:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/331096.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Feb 2015 16:33:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Tue, 10 Feb 2015 16:33:30 GMT]]></title><description><![CDATA[<p>Hallo @all,</p>
<p>ich habe folgendes Problem:<br />
Mein Programm soll bestimmte Bytes verarbeiten und benötigt für jedes Byte rund 5 zufällige Bytes.<br />
Es handelt sich um eine hohe Anzahl an Bytes (in meinem aktuellen Test 30.000.000 Bytes -&gt; 150.000.000 Zufallswerte).<br />
Mit BruteForce (d.h. bei jedem Byte 5-mal mein mt199337 aufrufen) erhöht sich die Laufzeit enorm!!!<br />
Die Idee ist also eine Möglichkeit zu finden, das Erzeugen der ZUfallswerte zu optimieren.<br />
Meine Idee war einen std::vector zu benutzen und den in einem Thread zu befüllen und aus meinem eigentlichen Thread die Werte auszulesen. Ich weiß nur nicht ob das wegen der ganzen Synchronisation so viel schneller laufen würde, da das Programm quasi nur noch am &quot;rum-locken&quot; ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Die Frage ist nun, gibt es eine schnelle Methode Zufallswerte zu erzeugen bzw. kann ich in einem Thread ein vector befüllen und parallel ohne große Synchonisierung die Werte auslesen?</p>
<p>mfG</p>
<p>Hlymur</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442151</guid><dc:creator><![CDATA[Hlymur]]></dc:creator><pubDate>Tue, 10 Feb 2015 16:33:30 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Tue, 10 Feb 2015 17:05:59 GMT]]></title><description><![CDATA[<p>Wie kommst du darauf dass das erzeugen der Zufallswerte das Problem ist ? Bei mir geht das in unter einer Sekunde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442154</guid><dc:creator><![CDATA[DarkShadow44]]></dc:creator><pubDate>Tue, 10 Feb 2015 17:05:59 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Tue, 10 Feb 2015 18:00:38 GMT]]></title><description><![CDATA[<p>Viel schneller als MT19937 wirds nicht[1].<br />
Wobei du von MT19937 ja 32 Bit Werte bekommst, da kannst du 4 Bytes draus machen =&gt; 4x weniger Zufallszahlen benötigt.<br />
Und natürlich kannst du das Erzeugen der Zufallszahlen in einen eigenen Thread auslagern, gar kein Problem.<br />
Locking-Overhead musst du dabei keinen schlimmen machen wenn du nicht willst. Hol dir halt Blöcke zu je 1 Mio. Zahlen vom Thread oder so, und erst wenn ein ganzer Block verbraucht ist musst du wieder locken und nen neuen holen.</p>
<p>[1] <a href="http://www.boost.org/doc/libs/1_57_0/doc/html/boost_random/reference.html#boost_random.reference.generators" rel="nofollow">http://www.boost.org/doc/libs/1_57_0/doc/html/boost_random/reference.html#boost_random.reference.generators</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442160</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 10 Feb 2015 18:00:38 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Tue, 10 Feb 2015 19:02:58 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Viel schneller als MT19937 wirds nicht[1].</p>
</blockquote>
<p>Was ist mit Hardwaregeneratoren, wie RdRand?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442166</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 10 Feb 2015 19:02:58 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Tue, 10 Feb 2015 20:20:45 GMT]]></title><description><![CDATA[<p>Muss ich jetzt auch überall ein &quot;normale Menschen können hier aufhören zu lesen&quot; an alle meine Beiträge dranschreiben? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Ich bin von Softwarelösungen ausgegangen.<br />
Und RdRand ist mMn. auch noch nicht weit genug verbreitet. UND ich hab genau keine Ahnung wie schnell das ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442176</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 10 Feb 2015 20:20:45 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Tue, 10 Feb 2015 20:33:30 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Muss ich jetzt auch überall ein &quot;normale Menschen können hier aufhören zu lesen&quot; an alle meine Beiträge dranschreiben? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Das musst du sowieso, nicht nur wegen mir <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> . Aber ich verstehe, was du sagen möchtest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442178</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 10 Feb 2015 20:33:30 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Tue, 10 Feb 2015 21:05:07 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Und RdRand ist mMn. auch noch nicht weit genug verbreitet. UND ich hab genau keine Ahnung wie schnell das ist.</p>
</blockquote>
<p>Naja, guten recht Zufall kriegt man mit ein Bißchen * und +, vielleicht ^ und &lt;&lt; oder so. Denke nicht, daß RdRand vorläufig da was zu melden hat. Und wenns so weit ist, dann tausch man einfach die Quelle aus.</p>
<p>Vector-Befüllen und das arme unschuldige behäbige RAM damit zu belästigen ist sicherlich der falsche Weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442181</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 10 Feb 2015 21:05:07 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Tue, 10 Feb 2015 21:08:20 GMT]]></title><description><![CDATA[<p>Wenn du das erzeugen der Zufallszahlen möglichst gutparallelisieren möchtest würde ich mehrere Threads erzeugen die jeweils vectoren mit einer festen Anzahl von Zufallszahlen erstellen und in eine eigene queue (z.B. boost c++ lock-free queue oder shared queue) stellen. Ein Thread klappert dann die queues ab und verarbeitet die Zufallszahlen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442182</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Tue, 10 Feb 2015 21:08:20 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Tue, 10 Feb 2015 21:17:44 GMT]]></title><description><![CDATA[<p>Danke, denke die Idee mit der festen Anzahl sollte gut und schnell funktionieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442186</guid><dc:creator><![CDATA[Hlymur]]></dc:creator><pubDate>Tue, 10 Feb 2015 21:17:44 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Tue, 10 Feb 2015 21:24:39 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/30768">@TNA</a><br />
Glaub nicht dass man hier ne lock-free Queue braucht.<br />
Ausreichend grosse Blöcke und das Bisschen Mutex-gelocke geht in der Messungenauigkeit unter.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a><br />
Glaub auch nicht dass das RAM zu belasten so ne Tragik wäre.<br />
Erstmal hat man ja eh eim paar MB Cache, und dann hat man heutzutage üblicherweise ne Speicherbandbreite jenseits der 20 GB/Sek wenn man linear liest bzw. schreibt. Und das würde man hier ja.</p>
<p>OK, 1 Mio. Zahlen ist vielleicht übertrieben, aber so ein paar kB pro Block, einfache Producer-Comsumer-Queue (so ganz klassisch mit Mutex+Condition-Variable) and Bob's your uncle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442190</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 10 Feb 2015 21:24:39 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Wed, 11 Feb 2015 06:09:02 GMT]]></title><description><![CDATA[<p>Hier ist ein XOR-Shift auf AVX Basis. Der erzeugt Dir pro Call 8 32 bit Zufallszahlen. Ob die bits ebenfalls vernuenftig zufallsverteilt sind, muss ein mathematisch Begabterer als ich beurteilen. (Gilt aber auch fuer mt19337 et. al.)</p>
<p>SSE Code habe ich auch, aber neuere x86 CPUs unterstuetzen ja alle AVX. Der Code ist deutlich schneller als mt19937 aus der stdlib. In Deinem Fall wahrscheinlich erheblich, da Du ja mit einem Aufruf 32 8bit Werte bekommst, die eigentlich immer komplett im 1st level cache liegen sollten. MT19937 erzeugt intern ein viel grosseres Feld von Zahlen mit einem deutlich komplizierteren Algo. Ob Du dessen Verteilung brauchst oder ob Dir XOR Shift reicht, musst Du selbst beurteilen.</p>
<pre><code>#include &lt;cstdint&gt;

#include &quot;emmintrin.h&quot;

// seed can default to 3141592654
void rng_xorShift_seed( uint32_t seed )
{
	cur_seed_AVX = _mm256_set_epi32( seed, seed&lt;&lt;1, seed&gt;&gt;1, seed^seed+7 , seed^seed+9, seed&lt;&lt;2, seed&gt;&gt;2, seed^seed+13 );
}

/*
 * see:  http://de.wikipedia.org/wiki/Xorshift
 * uint32_t xorshift32() 
 * {
 *     static uint32_t x = 314159265; // seed
 *     x ^= x &lt;&lt; 13;
 *     x ^= x &gt;&gt; 17;
 *     x ^= x &lt;&lt; 5;
 *     return x;
 * }
 * @param result pointer to an eight element array of 32 bit ints
 */
void rng_xorShift( uint32_t* result )
{
	// x ^= x &lt;&lt; 13;
	cur_seed_AVX = _mm256_xor_si256(cur_seed_AVX, _mm256_slli_epi32( cur_seed_AVX, 13 ));
	// x ^= x &gt;&gt; 17;
	cur_seed_AVX = _mm256_xor_si256(cur_seed_AVX, _mm256_srli_epi32( cur_seed_AVX, 17 ));
	// x ^= x &lt;&lt; 5;
	cur_seed_AVX = _mm256_xor_si256(cur_seed_AVX, _mm256_slli_epi32( cur_seed_AVX, 5 ));

	_mm256_storeu_si256( (__m256i*) result, cur_seed_AVX);
}
</code></pre>
<p>Bitte dabei darauf achten, dass result aligned sein muss (align 64, damit das Ergebnis immer auf einer 1st Level cache line liegt):</p>
<pre><code>__declspec(align(64)) array&lt;uint32_t, 8&gt; result;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2442199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442199</guid><dc:creator><![CDATA[XORSHIFT]]></dc:creator><pubDate>Wed, 11 Feb 2015 06:09:02 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Wed, 11 Feb 2015 07:05:31 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/30768">@TNA</a><br />
Glaub nicht dass man hier ne lock-free Queue braucht.<br />
Ausreichend grosse Blöcke und das Bisschen Mutex-gelocke geht in der Messungenauigkeit unter.</p>
</blockquote>
<p>Da wirst du wohl recht haben, insbesondere wenn jeder Thread seinen eigene Queue hat. Lock-free ist meiner Erfahrung nach insbesondere sinnvoll wenn aus irgendwelchen Gründen viele Threads auf eine Queue zugreifen müssen, ansonsten fährt man besser mit einer Locked queue. die Kann man sich mit C++11 std::condition_variable, std::mutex und std::queue auch recht einfach selber basteln, wenn es kein boost sein soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442203</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Wed, 11 Feb 2015 07:05:31 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Wed, 11 Feb 2015 10:12:56 GMT]]></title><description><![CDATA[<p>Hab das &quot;ohne&quot; Locking gelöst:</p>
<p>mit std::future und std::async die entsprechende Erzeugungsfunktion aufgerufen und dann mit std::move effizient bei std::future::get übertragen.</p>
<p>mit std::packeged_task kann die Funktion auch immer wieder resetten ( zum mehrmaligen aufrufen)</p>
<p>Zu RdRand:<br />
Wie verbreitet ist dieser Befehl auf den Chipsätzen?<br />
Kennt jmd ne gute Referenzseite, wo ich u.a. die Syntax ablesen kann?<br />
Kann ich das ohne große Probleme mit inline asm aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442225</guid><dc:creator><![CDATA[Hlymur]]></dc:creator><pubDate>Wed, 11 Feb 2015 10:12:56 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Wed, 11 Feb 2015 10:57:46 GMT]]></title><description><![CDATA[<p>Ein linearer Kongruenzgenerator schafft ja wohl doch noch deutlich mehr als ein Mersenne Twister was die Geschwindigkeit angeht.</p>
<p>Also std::linear_congruential_engine</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442233</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Wed, 11 Feb 2015 10:57:46 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Wed, 11 Feb 2015 13:58:47 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Ein linearer Kongruenzgenerator schafft ja wohl doch noch deutlich mehr als ein Mersenne Twister was die Geschwindigkeit angeht.</p>
<p>Also std::linear_congruential_engine</p>
</blockquote>
<p>Ich sag mal: nein, ganz im Gegenteil. Siehe auch den von mir geposteten Vergleich.</p>
<p>Ansonsten poste bitte ne URL mit nem Benchmark aus dem das hervorgeht bzw. eigenen Benchmark-Code + Ergebnisse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442261</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 11 Feb 2015 13:58:47 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Wed, 11 Feb 2015 16:48:15 GMT]]></title><description><![CDATA[<p>In obigem Code fehlte noch:</p>
<pre><code>__declspec( align(64) ) static __m256i cur_seed_AVX; // seed for 32 bit random numbers
</code></pre>
<p>Will man den Code aus mehreren Threads heraus benutzen packt man die Funktionen und den <code>cur_seed_AVX</code> besser in eine Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442285</guid><dc:creator><![CDATA[XORSHIFT]]></dc:creator><pubDate>Wed, 11 Feb 2015 16:48:15 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Thu, 12 Feb 2015 13:17:57 GMT]]></title><description><![CDATA[<p>@XORSHIFT viel zu kompliziert. wenn du breits AVX hast, hast du oft auch die AES extension. Dan reichts einfach einen zähler hochzuzählen, den seed als schlüssel wählen und 256 pseudo-zufällige bits über AES zu erhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442431</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 12 Feb 2015 13:17:57 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Thu, 12 Feb 2015 13:46:27 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>256 pseudo-zufällige bits über AES zu erhalten.</p>
</blockquote>
<p>Das klingt interessant. Leider habe ich keine entsprechenden Befehl gefunden der 256 bit liefert (s. <a href="https://software.intel.com/sites/landingpage/IntrinsicsGuide/" rel="nofollow">https://software.intel.com/sites/landingpage/IntrinsicsGuide/</a> ) da gibt es nur 128 bit Befehle, die z.T. deutlich komplexer sind als der gesamte ablauf bei XOR-Shift</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442439</guid><dc:creator><![CDATA[XORSHIFT]]></dc:creator><pubDate>Thu, 12 Feb 2015 13:46:27 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Thu, 12 Feb 2015 14:31:49 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5202">@otze</a><br />
Bleiben zwei Fragen: wie schnell ist die Sache und wie gut ist so ein &quot;AES-Counter-Generator&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442444</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 12 Feb 2015 14:31:49 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Thu, 12 Feb 2015 16:06:10 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Bleiben zwei Fragen: wie schnell ist die Sache</p>
</blockquote>
<p>ca. 3.3GB/s auf einem 3570k. (TrueCrypt Benchmark ;))</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>und wie gut ist so ein &quot;AES-Counter-Generator&quot;.</p>
</blockquote>
<p>Perfekt. Bessere Pseudo-Zufallszahlen wirst du nicht bekommen. Das ist ja der Sinn der Sache, dass man verschluesselte Daten nicht von random Noise unterscheiden kann.</p>
<p>Aber so viel einfacher als die paar instructions da oben sind die AES instructions jetzt auch nicht, und fuer den TE stellt sich eh die Frage ob seine Anforderungen wirklich nur durch inline-assembler erfuellt werden koennen oder ob die ganz normalen standard Generatoren richtig angewandt nicht schon reichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442453</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 12 Feb 2015 16:06:10 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Thu, 12 Feb 2015 18:22:24 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>und wie gut ist so ein &quot;AES-Counter-Generator&quot;.</p>
</blockquote>
<p>Perfekt. Bessere Pseudo-Zufallszahlen wirst du nicht bekommen. Das ist ja der Sinn der Sache, dass man verschluesselte Daten nicht von random Noise unterscheiden kann.</p>
</blockquote>
<p>Öhm.<br />
Der Sinn dahinter ist es schon. Heisst aber nicht dass es deswegen so ist. Der Sinn von MD5 ist auch dass man keine krummen Sachen machen kann, trotzdem gibt es Attacken die mit durchaus realistischem Rechenaufwand auskommen.</p>
<p>Ich würde das also nicht einfach als gegeben annehmen, so lange nicht jmd. ne Test-Suite ala DIEHARD drauf losgelassen hat. Ist das bereits geschehen? Vermutlich ja, aber ich weiss es einfach nicht, daher meine Frage. Und wenn ja, kann man sich die Ergebnisse davon irgendwo ansehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442488</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 12 Feb 2015 18:22:24 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Thu, 12 Feb 2015 19:11:39 GMT]]></title><description><![CDATA[<p>Der Counter-Modus generiert so seine Pseudo-Zufallszahlenfolge. Die Sicherheit von AES-CTR ist somit abhängig von der Qualität dieser Zufallszahlen. Da AES-GCM auf den CTR-Mode aufbaut und AES-GCM in TLS 1.2 enthalten ist und sogar empfohlen wird, denke ich doch, dass das recht sicher ist.</p>
<p>MD5 dagegen ist schon lange gebrochen und wird heute eigentlich nicht mehr verwendet. Aktuelle Browser sehen MD5-Zertifikate sogar automatisch als ungültig an. Nur noch als HMAC ist MD5 zu gebrauchen.</p>
<p>Edit: <a href="http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf" rel="nofollow">http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf</a> CTR_DRGB (S. 49, 57 im PDF) ist ein Zufallsgenerator, der auf einem Blockcipher im Counter-Mode aufbaut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442495</guid><dc:creator><![CDATA[patrick246]]></dc:creator><pubDate>Thu, 12 Feb 2015 19:11:39 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Thu, 12 Feb 2015 19:18:27 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/27141">@patrick246</a><br />
Die Theorie dahinter ist mir schon klar.<br />
Ich würde es trotzdem in der Praxis ausprobieren wollen.</p>
<p>Speziell bei so Sachen wie der Frage in wie vielen Dimensionen die Zahlen gleichverteilt sind würde ich so einem Generator nicht einfach blind vertrauen. Wenn ich also ne Anwendung habe wo das wichtig wäre, dann würde ich wohl bei 'nem Twister bleiben.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25760">@cooky451</a><br />
Und nochmal was die 3,3 GB/s angeht...<br />
Hab jetzt keinen Vergleich mit MT, aber so richtig viel kommt mir das nicht vor. Gerade mal ein Byte/Cycle. Würde mich zumindest wundern wenn ein MT das unter gleichen Voraussetzungen (gleiche CPU, Thread-Anzahl etc.) nicht überbieten könnte. Bzw. XORSHIFT's Variante.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442500</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 12 Feb 2015 19:18:27 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Thu, 12 Feb 2015 23:12:38 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Speziell bei so Sachen wie der Frage in wie vielen Dimensionen die Zahlen gleichverteilt sind würde ich so einem Generator nicht einfach blind vertrauen.</p>
</blockquote>
<p>Ich bin mir relativ sicher dass die Zahlen so ziemlich jeden statistischen Test den es gibt erfuellen muessen damit AES nicht als broken gilt.</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Und nochmal was die 3,3 GB/s angeht...</p>
</blockquote>
<p>Ich hab das mal getestet:</p>
<pre><code>#include &quot;utility/stopwatch.hpp&quot;

#include &lt;cstring&gt;
#include &lt;algorithm&gt;
#include &lt;array&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;random&gt;

template &lt;typename RNG&gt;
RNG make_rng()
{
	std::random_device rd;
	std::array&lt;typename RNG::result_type, RNG::state_size&gt; seed_data;
	std::generate(seed_data.begin(), seed_data.end(), std::ref(rd));
	std::seed_seq seq(seed_data.begin(), seed_data.end());
	return RNG(seq);
}

template &lt;typename RNG&gt;
void test_rng(RNG&amp; rng, void* buffer, std::size_t size)
{
	while (size &gt;= sizeof(decltype(rng())))
	{
		auto r = rng();
		std::memcpy(buffer, &amp;r, sizeof r);
		buffer = static_cast&lt;char*&gt;(buffer) + sizeof r;
		size -= sizeof r;
	}
}

int main()
{
	const std::size_t mb = 512;
	std::vector&lt;char&gt; buf(mb * 1024 * 1024);
	default_stopwatch sw;
	double t;
	auto rng1 = make_rng&lt;std::mt19937&gt;();
	auto rng2 = make_rng&lt;std::mt19937_64&gt;();
	auto rng3 = std::minstd_rand((std::random_device()()));

	sw.reset();
	test_rng(rng1, buf.data(), buf.size());
	t = float_cast&lt;double&gt;(sw.elapsed());
	std::cout &lt;&lt; &quot;mt19937: &quot; &lt;&lt; t &lt;&lt; &quot; - &quot; &lt;&lt; mb / t &lt;&lt; &quot; MB/s\n&quot;;

	sw.reset();
	test_rng(rng2, buf.data(), buf.size());
	t = float_cast&lt;double&gt;(sw.elapsed());
	std::cout &lt;&lt; &quot;mt19937_64: &quot; &lt;&lt; t &lt;&lt; &quot; - &quot; &lt;&lt; mb / t &lt;&lt; &quot; MB/s\n&quot;;

	sw.reset();
	test_rng(rng3, buf.data(), buf.size());
	t = float_cast&lt;double&gt;(sw.elapsed());
	std::cout &lt;&lt; &quot;minstd_rand: &quot; &lt;&lt; t &lt;&lt; &quot; - &quot; &lt;&lt; mb / t &lt;&lt; &quot; MB/s\n&quot;;
}
</code></pre>
<p>ideone: <a href="http://ideone.com/ui7upc" rel="nofollow">http://ideone.com/ui7upc</a></p>
<p>Ergebnis bei mir (x64, 3570k, VS2015 Preview)</p>
<pre><code>mt19937: 0.432911 - 1182.69 MB/s
mt19937_64: 0.218933 - 2338.62 MB/s
minstd_rand: 0.48124 - 1063.92 MB/s
</code></pre>
<p>Ist wohl stark implementierungsabhaengig. Bei mir waere zumindest mt19937_64 ueber 4 threads deutlich schneller als AES. Aber wie schon vorher erwaehnt, jede dieser Varianten sollte vermutlich locker fuer den TE reichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442523</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 12 Feb 2015 23:12:38 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Thu, 12 Feb 2015 23:32:49 GMT]]></title><description><![CDATA[<pre><code>sizeof(decltype(rng()))
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442525</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 12 Feb 2015 23:32:49 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles erzeugen vieler Zufallswerte on Thu, 12 Feb 2015 23:35:27 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Aber wie schon vorher erwaehnt, jede dieser Varianten sollte vermutlich locker fuer den TE reichen.</p>
</blockquote>
<p>Bin ich der einzige, der noch immer auf eine Antwort auf die allererste Gegenfrage wartet?</p>
<p>DarkShadow44 schrieb:</p>
<blockquote>
<p>Wie kommst du darauf dass das erzeugen der Zufallswerte das Problem ist ? Bei mir geht das in unter einer Sekunde.</p>
</blockquote>
<p>Ich gehe davon aus, dass der Threadersteller gar kein Problem mit Zufallszahlen hat, bis nicht das Gegenteil bewiesen wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442526</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 12 Feb 2015 23:35:27 GMT</pubDate></item></channel></rss>