<?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[Unterschiedliche Rechenergebnisse: Debug und Release]]></title><description><![CDATA[<p>Hi</p>
<p>Ich bekomme ganz leicht unterschiedliche Messwerte zwischen Debugcompilat und Releasecompilat. Es ist bisher nur in einer Stellung meiner Schachengine aufgetreten. Im Debug Modus werden für die gleiche Berechnung 9260602 Knoten durchgerechnet und im Release Modus 9260605. Also genau 3 Knoten mehr.</p>
<p>Es dürfte aber keinen Unterschied geben, da es eine 100% deterministische und reproduzierbare Berechnung ist. Es kommt immer wieder zum selben Ergebnis.</p>
<p>Habe jetzt seit 15h den BoundsChecker rechnen lassen, jedoch konnte dieser für die selbe Berechnung keine Probleme im Programm finden. Intern fange ich bereits viele potentielle Fehlerquellen im Debug-Bertieb mit assert(condition) ab.</p>
<p>Ich weiss an dieser Stelle nicht mehr weiter, bin mir aber sicher, dass es ein ganz kleines Problem in meinem Programmcode gibt.</p>
<p>Meine nächste Vorgehensweise wären alle Berechnungen mit Pointern durch Tabellen mit Indices zu ersetzen.</p>
<p>Habt ihr vielleicht noch Ideen, was ich tun könnte, um dem Fehler auf die Schliche zu kommen?</p>
<p>Bin für jeden Tipp oder Trick dankbar!</p>
<p>Gruss<br />
T.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269490/unterschiedliche-rechenergebnisse-debug-und-release</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 21:16:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269490.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Jun 2010 07:12:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 07:12:23 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Ich bekomme ganz leicht unterschiedliche Messwerte zwischen Debugcompilat und Releasecompilat. Es ist bisher nur in einer Stellung meiner Schachengine aufgetreten. Im Debug Modus werden für die gleiche Berechnung 9260602 Knoten durchgerechnet und im Release Modus 9260605. Also genau 3 Knoten mehr.</p>
<p>Es dürfte aber keinen Unterschied geben, da es eine 100% deterministische und reproduzierbare Berechnung ist. Es kommt immer wieder zum selben Ergebnis.</p>
<p>Habe jetzt seit 15h den BoundsChecker rechnen lassen, jedoch konnte dieser für die selbe Berechnung keine Probleme im Programm finden. Intern fange ich bereits viele potentielle Fehlerquellen im Debug-Bertieb mit assert(condition) ab.</p>
<p>Ich weiss an dieser Stelle nicht mehr weiter, bin mir aber sicher, dass es ein ganz kleines Problem in meinem Programmcode gibt.</p>
<p>Meine nächste Vorgehensweise wären alle Berechnungen mit Pointern durch Tabellen mit Indices zu ersetzen.</p>
<p>Habt ihr vielleicht noch Ideen, was ich tun könnte, um dem Fehler auf die Schliche zu kommen?</p>
<p>Bin für jeden Tipp oder Trick dankbar!</p>
<p>Gruss<br />
T.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917480</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Sat, 26 Jun 2010 07:12:23 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 07:22:31 GMT]]></title><description><![CDATA[<p>Sorry für das Doppelposting, habe zweimal &quot;Absenden&quot; geklickt, weil nichts passiert ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917483</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Sat, 26 Jun 2010 07:22:31 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 07:30:39 GMT]]></title><description><![CDATA[<p>In 9 von 10 Fällen: Nicht initialisierte Variablen....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917485</guid><dc:creator><![CDATA[loks]]></dc:creator><pubDate>Sat, 26 Jun 2010 07:30:39 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 07:40:14 GMT]]></title><description><![CDATA[<p>loks schrieb:</p>
<blockquote>
<p>In 9 von 10 Fällen: Nicht initialisierte Variablen....</p>
</blockquote>
<p>Hätte der BoundsChecker sofort gefunden, schätze ich mal.</p>
<p>Eine andere Vorgehensweise wäre den Suchbaum genau zu zerlegen und die Knotendifferenz aufzuspüren. Das hätte den unbezahlbaren Vorteil, dass man den &quot;Fehler&quot; exakt dingfest machen könnte, sofern man bis zum &quot;Fehlerknoten&quot; vorgedrungen ist.</p>
<p>Wäre mein Favorit, im Moment.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917487</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Sat, 26 Jun 2010 07:40:14 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 07:46:08 GMT]]></title><description><![CDATA[<p>Alle Konten Daten loggen und beide Files mit Diff anschauen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917489</guid><dc:creator><![CDATA[wellenwasser]]></dc:creator><pubDate>Sat, 26 Jun 2010 07:46:08 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 08:09:12 GMT]]></title><description><![CDATA[<p>Uninitialisiertes Attribut? Ersetze zum Suchen new durch ein eigenes new, das den Speicher vorher in einen definierten Zustand versetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917494</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 26 Jun 2010 08:09:12 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 09:56:23 GMT]]></title><description><![CDATA[<p>Kannst du das Beispiel nicht auf weniger Knoten drücken? - Dann käme wohl mal ein Debugger und du alles mitrechnest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917515</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 26 Jun 2010 09:56:23 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 12:27:22 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Uninitialisiertes Attribut? Ersetze zum Suchen new durch ein eigenes new, das den Speicher vorher in einen definierten Zustand versetzt.</p>
</blockquote>
<p>Das wären 3 Hashtabellen, die auf dem Heap liegen und weitere Speicherbereiche auf dem Stack.</p>
<p>Erkenntnisse folgen (hoffentlich) in Kürze...</p>
<p>Gruss<br />
T.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917586</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Sat, 26 Jun 2010 12:27:22 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 14:41:02 GMT]]></title><description><![CDATA[<p>Tomahawk schrieb:</p>
<blockquote>
<p>loks schrieb:</p>
<blockquote>
<p>In 9 von 10 Fällen: Nicht initialisierte Variablen....</p>
</blockquote>
<p>Hätte der BoundsChecker sofort gefunden, schätze ich mal.</p>
</blockquote>
<p>Du sollst nicht &quot;schätzen&quot;. Entweder Du weist es, oder Du weist es nicht und überprüfst es.</p>
<p>Also teste ob der Boundschecker folgendes bemängelt oder nicht:</p>
<pre><code class="language-cpp">int i;

int j = i + 5;
</code></pre>
<p>Wenn das angewarnt (und von Dir dann auch in Folge beseitigt wird) ok. Andernfalls bleib ich bei meinen nicht initialisierten Variablen <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/1917640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917640</guid><dc:creator><![CDATA[loks]]></dc:creator><pubDate>Sat, 26 Jun 2010 14:41:02 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 14:50:37 GMT]]></title><description><![CDATA[<p>Wenn du im Release Modus Optimierungen durchführst und irgendwo eine parallele Schleife entsteht, dann musst du zusehen dass deine Algorithmen Thread Safe sind.</p>
<p>Das Problem liegt beim richtigen Code an den Fließpunktzahlen die nicht wie Reele Zahlen in sich ein geschlossenes System bilden.</p>
<p>Vor allem langen Schleifen und unterschiedlichgroßen Zahlen tritt das Problem sehr häufig und gravierend auf. Lies dich hier durch:</p>
<p><a href="http://software.intel.com/en-us/articles/parallelization-and-floating-point-numbers/" rel="nofollow">http://software.intel.com/en-us/articles/parallelization-and-floating-point-numbers/</a></p>
<p>Generell hat der Autor sehr viele Tips wie man solche Pitfalls vermeiden kann:<br />
<a href="http://software.intel.com/en-us/profile/336629/contributions" rel="nofollow">http://software.intel.com/en-us/profile/336629/contributions</a></p>
<p>Schau den optimierten Code(IDE Abhängig) bevor er kompiliert wird.<br />
Lass dir alle Zwischenergebnisse inklusive der Iterationsnummer in eine Datei ausgeben, dann siehst du wo und ab wann der Fehler auftritt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917642</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Sat, 26 Jun 2010 14:50:37 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 14:57:40 GMT]]></title><description><![CDATA[<p>Wer in der Schach-Engine Fließkommazahlen benutzt, gehört auf die Couch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917647</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 26 Jun 2010 14:57:40 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 15:07:16 GMT]]></title><description><![CDATA[<p>Ne Schach-KI mit Fließkommazahlen, dass bringt endlich mal die richtige dynamik ins Spiel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917648</guid><dc:creator><![CDATA[TATSID]]></dc:creator><pubDate>Sat, 26 Jun 2010 15:07:16 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 15:49:13 GMT]]></title><description><![CDATA[<p>Hab zu schnell über den Text gelesen... nebenbei noch die WM..</p>
<p>Im übrigen gilt das Thread Safe Problem auch für Integer, je nach Optimierung kann es da auch zu Anomalien kommen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917668</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Sat, 26 Jun 2010 15:49:13 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 16:11:48 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Wer in der Schach-Engine Fließkommazahlen benutzt, gehört auf die Couch.</p>
</blockquote>
<p>y not?</p>
<p>Ich hab zwar keine Ahnung von Stellungsbewertungen...<br />
Aber wie macht man denn sonst ne fuzzy Stellungsbewertung?</p>
<p>Oder macht man sie nicht fuzzy?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917677</guid><dc:creator><![CDATA[y not?]]></dc:creator><pubDate>Sat, 26 Jun 2010 16:11:48 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sat, 26 Jun 2010 16:36:54 GMT]]></title><description><![CDATA[<p>y not? schrieb:</p>
<blockquote>
<p>Aber wie macht man denn sonst ne fuzzy Stellungsbewertung?<br />
Oder macht man sie nicht fuzzy?</p>
</blockquote>
<p>Festkommazahlen würde ich vielleicht nehmen. Also blanke integers, die nur zur Bildschirmausgabe durch was festes (hier 2^23) geteilt werden.<br />
Nehmen wir mal einen reinen Materialzähler nach <a href="http://de.wikipedia.org/wiki/Schachfigur#Tauschwert" rel="nofollow">http://de.wikipedia.org/wiki/Schachfigur#Tauschwert</a><br />
und 3+3+3+3+5+5+9+ 8*9 (8 zur Dame umgewandelte Bauern)=103, für den König nehme ich dann mal 127 an, weil den zu verlieren ist schlimmer als alles andere, dann brauche ich 8 Bit und eins für das Vorzeichen und kann bei einem int32 noch 23 Nachkommabits nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917685</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 26 Jun 2010 16:36:54 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sun, 27 Jun 2010 15:21:25 GMT]]></title><description><![CDATA[<p>Habe die Stelle im Code gefunden, wo es einen Unterschied zwischen den Kompilaten gibt.</p>
<p>x32 Release<br />
x32 Debug<br />
x64 Debug<br />
x64 Release PGO</p>
<p>Alle Kompilate führen zu identischen Ergebnissen. Nur das x64 Release hat Abweichungen. In folgendem Code wird eine Addition nicht ausgeführt:</p>
<pre><code class="language-cpp">void sort_c::score_evasions(bool print) {
  if (last_move - move_list &lt;= 1) return;

  for (move_info_c * current = move_list; current != last_move; current++) {
    int move = current-&gt;move;
    int value = static_exchange_evaluation(move);

    if (value &lt; 0) {
      current-&gt;value = value;
    }
    else if (move_is_capture(move)) {
      current-&gt;value =   piece_value_midgame(move_piece_captured(move))  // Addition wird nicht ausgeführt
                       - move_piece(move)
                       + HISTORY_MAX;  // 50000
    }
    else {
      current-&gt;value = history_move_ordering_score(move);
    }

    if (print) {
      if (move_from(move) == SQUARE_E4) {
        char string[256];
        printf_s(&quot;value = %d\n&quot;, current-&gt;value);
        fflush(stdout);
      }
    }
  }
}
</code></pre>
<p>current-&gt;value muss sich wie folgt berechnen:<br />
100 - 0 + 50000 = 50100</p>
<p>Der Compiler erzeugt aber nur 50000. Habe alle Daten genau überprüft und kann nichts finden. Meine einzige Erklärung, dass der 64-Bit Compiler von MS Visual Studio 2010 Professional fehlerhaft compiliert?! Verstehe aber nichts von Assembler, daher bringt es mich nicht weiter mit die Assemblerausgaben anzusehen.</p>
<p>Probiere jetzt den 2008er Compiler aus.</p>
<p>Ich verstehe es nicht.</p>
<p>Gruss<br />
T.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917942</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Sun, 27 Jun 2010 15:21:25 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sun, 27 Jun 2010 15:29:20 GMT]]></title><description><![CDATA[<p>Sobald ich die Compilereinstellungen für Release x64 ändere addiert der Compiler wieder korrekt?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917948</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Sun, 27 Jun 2010 15:29:20 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Sun, 27 Jun 2010 20:59:35 GMT]]></title><description><![CDATA[<p>Tomahawk schrieb:</p>
<blockquote>
<p>Sobald ich die Compilereinstellungen für Release x64 ändere addiert der Compiler wieder korrekt?!</p>
</blockquote>
<p>Der Code den du gepostet hast ist so nicht ausführbar. Wieso debuggst du ihn nicht einfach? Du könntest auch mal die Startwerte für einzelnen Variablen durchgeben.</p>
<ol>
<li>
<p>Geh Iteration für Iteration durch und schau ab wann der Fehler auftaucht. Wenn es viele Ergebnisse sind dann gebe zwei Dateien aus und dann siehst du ab welcher Iteration der Wert unterschiedlich ist.</p>
</li>
<li>
<p>Poste mal die Compiler Flags.</p>
</li>
<li>
<p>Wenn du irgendwelche Optimierungen im Release Modus nutzt, dann schalte sie Schritt für Schritt aus.</p>
</li>
<li>
<p>Ich habe auch die VS2010 und diese hat einen sehr angenehmen Debug Modus.</p>
</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/1918158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918158</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Sun, 27 Jun 2010 20:59:35 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Mon, 28 Jun 2010 07:33:47 GMT]]></title><description><![CDATA[<p>darkfate schrieb:</p>
<blockquote>
<p>Tomahawk schrieb:</p>
<blockquote>
<p>Sobald ich die Compilereinstellungen für Release x64 ändere addiert der Compiler wieder korrekt?!</p>
</blockquote>
<p>Der Code den du gepostet hast ist so nicht ausführbar. Wieso debuggst du ihn nicht einfach? Du könntest auch mal die Startwerte für einzelnen Variablen durchgeben.</p>
<ol>
<li>
<p>Geh Iteration für Iteration durch und schau ab wann der Fehler auftaucht. Wenn es viele Ergebnisse sind dann gebe zwei Dateien aus und dann siehst du ab welcher Iteration der Wert unterschiedlich ist.</p>
</li>
<li>
<p>Poste mal die Compiler Flags.</p>
</li>
<li>
<p>Wenn du irgendwelche Optimierungen im Release Modus nutzt, dann schalte sie Schritt für Schritt aus.</p>
</li>
<li>
<p>Ich habe auch die VS2010 und diese hat einen sehr angenehmen Debug Modus.</p>
</li>
</ol>
</blockquote>
<p>Leider bin ich im Lesen von Assemblercode nicht so fit. Daher kann ich die &quot;fehlerhafte&quot; Release Engine nicht debuggen. Die Debugversion habe ich schon gründlich untersucht.</p>
<p>Hier die Compilerflags:</p>
<p>/nologo /W4 /WX- /O2 /Ob2 /Oi /Ot /Oy /GT /GL /D &quot;WIN32&quot; /D &quot;NDEBUG&quot; /D &quot;_CONSOLE&quot; /D &quot;_UNICODE&quot; /D &quot;UNICODE&quot; /GF- /Gm- /MT /GS- /Gy /arch:SSE2 /fp:fast /Zc:wchar_t /Zc:forScope /GR- /Fp&quot;x64\Release\Loop 2010.pch&quot; /Fa&quot;x64\Release\&quot; /Fo&quot;x64\Release\&quot; /Fd&quot;x64\Release\vc100.pdb&quot; /Gr /errorReport:queue /favor:INTEL64</p>
<p>Sobald ich die Optimierungsflags zurücksetzte (zB O2) gibts keine Unregelmässigkeiten mehr.</p>
<p>Gruss<br />
T.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918235</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Mon, 28 Jun 2010 07:33:47 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Mon, 28 Jun 2010 08:27:16 GMT]]></title><description><![CDATA[<p>Mit dem MS 2008 Compiler gibts keine Unregelmässigkeiten.</p>
<p>Bisher ist es tatsächlich nur das 64-Bit Release Build des MS 2010 Compilers mit obigen Flags.</p>
<p>Auch verschiedene Versionen des BoundsChecker konnten nach mehrtägigen Analysen keine Probleme feststellen.</p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918256</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Mon, 28 Jun 2010 08:27:16 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Mon, 28 Jun 2010 08:32:21 GMT]]></title><description><![CDATA[<p>Tomahawk schrieb:</p>
<blockquote>
<p>Leider bin ich im Lesen von Assemblercode nicht so fit.</p>
</blockquote>
<p>Wenn Assembler überhaupt nicht geht, dann hilft nur die gute alte Fileausgabe, oder cout, so dass du dir den Status aller Variablen in der Console oder irgend einer Textbox ausgeben lässt. Datei ist besser, weil du siehst welcher Thread wann zuerst schreibt oder priorisiert wird.</p>
<p>Alternativ lässt sich der optimierte Code, der vor dem kompilieren erstellt wurde auch behalten ohne ihn nach dem optimieren zu löschen. Aber dieser ist nach getätigten Optimierungen manchmal fast genau so aufschlussreich wie Assemblercode</p>
<p>Oder du gibst, falls es möglich ist, die Startwerte der Variablen.</p>
<p>Hier die Compilerflags:</p>
<p>Tomahawk schrieb:</p>
<blockquote>
<p>/nologo /W4 /WX- /O2 /Ob2 /Oi /Ot /Oy /GT /GL /D &quot;WIN32&quot; /D &quot;NDEBUG&quot; /D &quot;_CONSOLE&quot; /D &quot;_UNICODE&quot; /D &quot;UNICODE&quot; /GF- /Gm- /MT /GS- /Gy /arch:SSE2 /fp:fast /Zc:wchar_t /Zc:forScope /GR- /Fp&quot;x64\Release\Loop 2010.pch&quot; /Fa&quot;x64\Release\&quot; /Fo&quot;x64\Release\&quot; /Fd&quot;x64\Release\vc100.pdb&quot; /Gr /errorReport:queue /favor:INTEL64</p>
</blockquote>
<p>Hui, du hast alles angeschaltet was sich nach irgendwie Geschwindigkeit angehört hat. Du solltest hingehen und den Profiler nutzen. Manchmal haben die Einstellungen auch keinen Mehrwert und bringen nur aufgeblähten Code mit sich.</p>
<p>Nebenbei: Man sollte nur den Rechenteil so intensiv optimieren. Besser: Mit schnelleren Algorithmen als mit agressiven Compiler Flags. GUI oder ähnliches nur mit Standard Release Einstellungen optimieren.</p>
<p>Wahrscheinlich ist auch dass alle Release Versionen irgendwo ein Problem haben, nur zeigt es sich an einer Stelle, die du zum Glück beobachten kannst.</p>
<p>Zuerst: Schalte mal nur /MP ab und versuche es noch einmal mit den selben Einstellungen. Wenn sich die beiden beißen, dann muss man die for Schleife ein wenig überdenken.</p>
<p>Nächster Vorschlag. Du stellst überall die Release Optimierungs-Einstellungen auf Default.</p>
<p>Wenn du SSE2 Nutzt, dann solltest du das Alignment auf 128Bit setzen:<br />
Lies dir bei Gelegenheit das mal durch: <a href="http://msdn.microsoft.com/en-us/library/aa290049%28VS.71%29.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/aa290049(VS.71).aspx</a><br />
Compiler Flag /Zp16</p>
<p>Flag /GT nur wenn du Fibers oder TLS nutzt.</p>
<p>Tomahawk schrieb:</p>
<blockquote>
<p>Sobald ich die Optimierungsflags zurücksetzte (zB O2) gibts keine Unregelmässigkeiten mehr.</p>
</blockquote>
<p>Riecht nach einer Überoptimierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918259</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Mon, 28 Jun 2010 08:32:21 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Tue, 29 Jun 2010 10:41:16 GMT]]></title><description><![CDATA[<p>Bin ratlos und meine Kollegen bei den Softwarentwicklern haben auch keine Idee mehr. Vielleicht liegt es an den Kompilereinstellunge, aber darüber kann ich keine Aussage machen.</p>
<p>Warum werde im x64 Release Modus 2 int Zahlen nicht addiert.</p>
<p>Gibt es die Möglichkeit den Quellcode hier zu veröffentlichen (~1500 Zeilen) und mal Jemanden mit Ahnung von Assembler und Compiler Settings drüberschauen zu lassen?</p>
<p>Vollkommen ratlos und erschöpft... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918815</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Tue, 29 Jun 2010 10:41:16 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Tue, 29 Jun 2010 10:45:15 GMT]]></title><description><![CDATA[<p>Hier mal den Code:</p>
<pre><code class="language-cpp">class sort_c {
public:
  sort_c();

private:
  move_info_c * last_move;
  move_info_c move_list[256];
};

sort_c::sort_c() {
  char string[256];
  int temp;

  last_move = generate_evasions(move_list);

  move_info_c * current = move_list+8;

  int move = current-&gt;move;
  int value = static_exchange_evaluation(move);

  temp = 0;

  if (value &lt; 0) {
    current-&gt;value = value;
  }
  else if (move_is_capture(move)) {
    // hier wird nicht addiert
    temp = 50000 + piece_value_midgame(move_piece_captured(move)) - move_piece(move);
    current-&gt;value = temp;
  }
  else {
    current-&gt;value = 0;
  }

  printf_s(&quot;move............%s %d\n&quot;, move_to_string(move, string), move);
  printf_s(&quot;see value.......%d\n&quot;, value);
  printf_s(&quot;piece captured..%d\n&quot;, move_piece_captured(move));
  printf_s(&quot;piece value.....%d\n&quot;, piece_value_midgame(move_piece_captured(move)));
  printf_s(&quot;piece...........%d\n&quot;, move_piece(move));
  printf_s(&quot;value...........%d\n&quot;, current-&gt;value);
  printf_s(&quot;temp............%d\n&quot;, temp);
  printf_s(&quot;is enpassant....%d\n&quot;, move_is_enpassant(move));
  printf_s(&quot;\n&quot;);
  fflush(stdout);
}
</code></pre>
<p>Es werden in einer Stellung 9 Züge generiert. Danach untersuche ich den betreffenden Zug Nr 9, also move_list+8. Die print-Ausgaben stimmen zwar alle, aber temp und current-&gt;value ergeben nur 50000 statt 50198 (wie es sein sollte und von allen gtesteten Compilern gemacht wird).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918819</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Tue, 29 Jun 2010 10:45:15 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Tue, 29 Jun 2010 10:47:19 GMT]]></title><description><![CDATA[<p>Ich würde meine eMail Adresse hier angeben, wer möchte kann mich kurz anschreiben und ich sende den Code zu.</p>
<p>Gruss<br />
T.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918823</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Tue, 29 Jun 2010 10:47:19 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Tue, 29 Jun 2010 10:52:25 GMT]]></title><description><![CDATA[<p>Die Ausgabe des Programmes:</p>
<pre><code class="language-cpp">move............e4f3 34581
see value.......0
piece captured..0
piece value.....198
piece...........0
value...........50000
temp............50000
is enpassant....1
</code></pre>
<p>Hier erkennt man doch ganz klar, dass piece_value_midgame(move_piece_captured(move)) 198 ist und move_piece(move) 0. Also ist die Summe doch temp = 50000 + 198 - 0;</p>
<p>Was sehe ich und meine Kollegen nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918825</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Tue, 29 Jun 2010 10:52:25 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiedliche Rechenergebnisse: Debug und Release on Tue, 29 Jun 2010 10:56:08 GMT]]></title><description><![CDATA[<p>Tomahawk schrieb:</p>
<blockquote>
<p>Sobald ich die Optimierungsflags zurücksetzte (zB O2) gibts keine Unregelmässigkeiten mehr.</p>
</blockquote>
<p>Hier ist auch die Lösung des Problems. Die Compilereinstellungen passen nicht zu deinem Code. Lade eine pw geschützte Zip Datei bei Rapidshare hoch oder sowas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918829</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Tue, 29 Jun 2010 10:56:08 GMT</pubDate></item></channel></rss>