<?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[bitset-Performance?]]></title><description><![CDATA[<p>Hi,</p>
<p>hat jemand Erfahrung mit der Performance von bitsets?</p>
<p>Ich habe eine ganze Menge an Zuständen, die ich binär abbilde, da ich enorm schnell damit rechnen muss, Lookup-Tables nutzen kann, Hinzufügen/Abziehen von Bits superschnell geht usw.</p>
<p>Das habe ich auch profiled und es ist absolut notwendig es so umzusetzen. Aber bisher habe ich das nur für wenige Bits (&lt;64) gemacht.</p>
<p>Nun wäre es praktisch, wenn ich damit auch andere parallel auftretende Zustände abbilden können. Es handelt sich dabei um 52*51/2 = 1326 (ihr ahnt es, es handelt sich um Poker-Hände [Hand = 2 Karten] ;)). Native Datentypen gehen also nicht mehr, ein bitset&lt;1326&gt; wäre die Idee.</p>
<p>Die aktuelle Variante braucht viele Schleifen, um Einzelheiten auszulesen. Zur Laufzeit muss ich oft mit ein paar zehntausenden/hunderttausenden/x Poker-Händen hantieren. Das muss aber in Sekunden-Bruchteilen (am Besten &lt;100ms) abgehandelt sein, der Benutzer soll nichts von der Berechnung merken.</p>
<p>Die Preisfrage ist also: ist bitset annähernd schnell wie die rohen Datentypen? Bzw. ist die Laufzeit proportional zum Faktor, um den das bitset größer ist als ein int (also bitset&lt;320&gt; 10 Mal langsamer als 32 Bit z.B.).</p>
<p>Benchmarking geht, ist aber aufwendig, weil das bitset einen vector auf eine Struktur/Klasse ablösen würde, die eben zwei Karten zu einer Hand zusammenfasst. Daher dachte ich mir: vielleicht hat ja jemand Erfahrung damit. <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>
<p>Beste Grüße,<br />
Eisflamme (&lt;- übrigens bin ich männlich, aber nur weil &quot;Flamme&quot; im Deutschen weiblich ist, heißt das nicht, dass ich mich als weiblich ausgeben will)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/314552/bitset-performance</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 05:58:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314552.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Mar 2013 09:31:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to bitset-Performance? on Wed, 06 Mar 2013 10:03:43 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>hat jemand Erfahrung mit der Performance von bitsets?</p>
<p>Ich habe eine ganze Menge an Zuständen, die ich binär abbilde, da ich enorm schnell damit rechnen muss, Lookup-Tables nutzen kann, Hinzufügen/Abziehen von Bits superschnell geht usw.</p>
<p>Das habe ich auch profiled und es ist absolut notwendig es so umzusetzen. Aber bisher habe ich das nur für wenige Bits (&lt;64) gemacht.</p>
<p>Nun wäre es praktisch, wenn ich damit auch andere parallel auftretende Zustände abbilden können. Es handelt sich dabei um 52*51/2 = 1326 (ihr ahnt es, es handelt sich um Poker-Hände [Hand = 2 Karten] ;)). Native Datentypen gehen also nicht mehr, ein bitset&lt;1326&gt; wäre die Idee.</p>
<p>Die aktuelle Variante braucht viele Schleifen, um Einzelheiten auszulesen. Zur Laufzeit muss ich oft mit ein paar zehntausenden/hunderttausenden/x Poker-Händen hantieren. Das muss aber in Sekunden-Bruchteilen (am Besten &lt;100ms) abgehandelt sein, der Benutzer soll nichts von der Berechnung merken.</p>
<p>Die Preisfrage ist also: ist bitset annähernd schnell wie die rohen Datentypen? Bzw. ist die Laufzeit proportional zum Faktor, um den das bitset größer ist als ein int (also bitset&lt;320&gt; 10 Mal langsamer als 32 Bit z.B.).</p>
<p>Benchmarking geht, ist aber aufwendig, weil das bitset einen vector auf eine Struktur/Klasse ablösen würde, die eben zwei Karten zu einer Hand zusammenfasst. Daher dachte ich mir: vielleicht hat ja jemand Erfahrung damit. <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>
<p>Beste Grüße,<br />
Eisflamme (&lt;- übrigens bin ich männlich, aber nur weil &quot;Flamme&quot; im Deutschen weiblich ist, heißt das nicht, dass ich mich als weiblich ausgeben will)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304657</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 06 Mar 2013 10:03:43 GMT</pubDate></item><item><title><![CDATA[Reply to bitset-Performance? on Wed, 06 Mar 2013 14:17:17 GMT]]></title><description><![CDATA[<blockquote>
<p>es ist absolut notwendig es so umzusetzen</p>
</blockquote>
<p>Vorsicht. Aber du kannst dir gerne mal Strategien bei Schachprogrammen anschauen, sie verwenden auch Bitsets (wahrscheinlich nicht std::bitset). Wobei ein Schachbrett nur 64 Felder hat.</p>
<blockquote>
<p>Die Preisfrage ist also: ist bitset annähernd schnell wie die rohen Datentypen? Bzw. ist die Laufzeit proportional zum Faktor, um den das bitset größer ist als ein int (also bitset&lt;320&gt; 10 Mal langsamer als 32 Bit z.B.).</p>
</blockquote>
<p>Sicher gibt es Overhead beim setzen und testen einzelner Bits, aber ich wuerde erwarten, dass er unabhaengig von der Groesse des Bitsets ist. Alles andere waere fuer mich rein intuitiv nicht akzeptabel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304767</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 06 Mar 2013 14:17:17 GMT</pubDate></item><item><title><![CDATA[Reply to bitset-Performance? on Thu, 07 Mar 2013 14:50:00 GMT]]></title><description><![CDATA[<p>Einzelne Bits zu lesen ist kein Problem.</p>
<p>Beim Schreiben jedoch muss immer erst min. ein Byte gelesen werden, und nach der Bitänderung wieder geschrieben werden. Dieses schreiben/lesen geht sehr auf die kosten der Performance.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2305026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305026</guid><dc:creator><![CDATA[Osbios]]></dc:creator><pubDate>Thu, 07 Mar 2013 14:50:00 GMT</pubDate></item><item><title><![CDATA[Reply to bitset-Performance? on Thu, 07 Mar 2013 15:00:51 GMT]]></title><description><![CDATA[<p>Okay, aber einzelne Bits ändere ich eh nie, meistens möchte ich z.B. zwei solcher Bitsets verund/oder/xoren. Ich maskiere eigentlich sowieso nur. Was genau ist denn der Performanceverlust an dem, was Du meinst? Dass er das Byte ins Register schieben muss, ist ja klar. Oder meinst Du, dass er irgendwie einen Overhead produziert, den man mit einem nativen Datentyp nicht hätte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2305030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305030</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 07 Mar 2013 15:00:51 GMT</pubDate></item><item><title><![CDATA[Reply to bitset-Performance? on Thu, 07 Mar 2013 16:30:02 GMT]]></title><description><![CDATA[<pre><code>std::bitset&lt;32&gt; myBits;
myBits[6] = true;
</code></pre>
<p>Das würde nur ein einzelnes Bit setzen. Und muss daher lesen/schreiben auf den selben Speicher, da die CPU den Speicher nur in Bytes oder größeren Einheiten ansprechen kann = schlechte Performance</p>
<pre><code>bool myBool[32];
myBool[6] = true;
</code></pre>
<p>Muss nur ein Byte in den Speicher schreiben. Daher sehr viel bessere Performance.</p>
<p>Wenn du mit ganzen Bitsets arbeitest, um z.B. boolische Operatoren zu benutzen, dann währen Bitsets schneller als bool.</p>
<pre><code>bitset1 = bitset2 ^ bitset3;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2305057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305057</guid><dc:creator><![CDATA[Osbios]]></dc:creator><pubDate>Thu, 07 Mar 2013 16:30:02 GMT</pubDate></item><item><title><![CDATA[Reply to bitset-Performance? on Thu, 07 Mar 2013 16:36:56 GMT]]></title><description><![CDATA[<p>Ah okay, jetzt verstehe ich, was Du meinst.</p>
<p>Aber einzelne Bits ändere ich sowieso eher selten. Ich denke, da ist dieser Performanceverlust vernachlässigbar. <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/2305059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2305059</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 07 Mar 2013 16:36:56 GMT</pubDate></item></channel></rss>