<?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[Qualität von HotSpot Compilern]]></title><description><![CDATA[<p>Ich habe mich in den letzten Tagen intensiver mit dem HotSpot Compiler von Java auseinandergesetzt. Der HotSpot Compiler macht eigentlich nicht anderes, ausser zur Laufzeit hochoptimierten Maschinencode für die aktuelle Plattform zu erzeugen.</p>
<p>Dabei bin ich unter anderem auf diese Benchmark gestossen: <a href="http://www.kano.net/javabench/" rel="nofollow">http://www.kano.net/javabench/</a></p>
<p>Ich will bewusst nicht auf die unterschiedlichen gemessenen Werte eingehen (Flamewars gibs genug), sondern habe nur eine Verständnisfrage nach dem ich die Tests selber durchprobiert habe. Warum ist die Java Server VM so extrem viel schneller bei Methodenaufrufen (methcall Beispiel) als hochoptimierter C++ Code? Ich habe das C++ Beispiel mit sämtlichen GCC Konstellationen kompiliert und der Unterschied ist wirklich drastisch! Der G++ ist nun nicht der beste C++ Compiler, daher würden mich vorallem ICC und MS VC++ Ergebnisse auch mal interessieren.</p>
<p>Wie geht das, der HotSpotter kann doch auch nur Maschinencode für eine Architektur erzeugen? Ich denke ja, dass die VM einen Trick verwendet und den würde ich gerne in Erfahrung bringen. (Ab Eingabegrößen von 1000000000 wird es deutlich, bei zu kleinen Laufzeiten fällt der VM Start zu sehr ins Gewicht und der HotSpotter hat keine Chance zu optimieren)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/192476/qualität-von-hotspot-compilern</link><generator>RSS for Node</generator><lastBuildDate>Tue, 30 Jun 2026 18:47:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192476.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Sep 2007 20:16:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 20:16:03 GMT]]></title><description><![CDATA[<p>Ich habe mich in den letzten Tagen intensiver mit dem HotSpot Compiler von Java auseinandergesetzt. Der HotSpot Compiler macht eigentlich nicht anderes, ausser zur Laufzeit hochoptimierten Maschinencode für die aktuelle Plattform zu erzeugen.</p>
<p>Dabei bin ich unter anderem auf diese Benchmark gestossen: <a href="http://www.kano.net/javabench/" rel="nofollow">http://www.kano.net/javabench/</a></p>
<p>Ich will bewusst nicht auf die unterschiedlichen gemessenen Werte eingehen (Flamewars gibs genug), sondern habe nur eine Verständnisfrage nach dem ich die Tests selber durchprobiert habe. Warum ist die Java Server VM so extrem viel schneller bei Methodenaufrufen (methcall Beispiel) als hochoptimierter C++ Code? Ich habe das C++ Beispiel mit sämtlichen GCC Konstellationen kompiliert und der Unterschied ist wirklich drastisch! Der G++ ist nun nicht der beste C++ Compiler, daher würden mich vorallem ICC und MS VC++ Ergebnisse auch mal interessieren.</p>
<p>Wie geht das, der HotSpotter kann doch auch nur Maschinencode für eine Architektur erzeugen? Ich denke ja, dass die VM einen Trick verwendet und den würde ich gerne in Erfahrung bringen. (Ab Eingabegrößen von 1000000000 wird es deutlich, bei zu kleinen Laufzeiten fällt der VM Start zu sehr ins Gewicht und der HotSpotter hat keine Chance zu optimieren)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365559</guid><dc:creator><![CDATA[Ben 04]]></dc:creator><pubDate>Fri, 14 Sep 2007 20:16:03 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:00:19 GMT]]></title><description><![CDATA[<p>Virtual verhindert Optimierungen. Das ist der Grund. Wenn du das Programm ohne die (völlig sinnfreie) Polymorphie schreibst, dann wird es mindestens zu Java aufschließen, wenn nicht gar davon flitzen. Alternativ könntest du glaube ich auch den Methodenzeiger vor der Schleife in eine Variable packen, so wird die JVM wohl auch vorgehen.</p>
<p>Übrigens ist auf der Seite fairerweise auch <a href="http://bruscy.multicon.pl/pages/przemek/java_not_really_faster_than_cpp.html" rel="nofollow">das hier</a> verklinkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365585</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:00:19 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:07:58 GMT]]></title><description><![CDATA[<p>Ich weiß nicht ob die Benchmark wirklich seriös ist. Der Java Code ist teilweise anders als der C++ Code. Und der C++ Code ist teilweise unnötig aufgebläht.</p>
<p>Beim virtuellen Funktionsaufrufen kann ein HotSpot Compiler aber besser optimieren, da er den kompletten Code kennt. Wobei C++ Compiler mittlerweile auch optimierende Linker enthalten, die dem Problem teilweise entgegen wirken können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365590</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:07:58 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:19:47 GMT]]></title><description><![CDATA[<p>Ben 04 schrieb:</p>
<blockquote>
<p>Wie geht das, der HotSpotter kann doch auch nur Maschinencode für eine Architektur erzeugen?</p>
</blockquote>
<p><a href="http://java.sun.com/javase/technologies/hotspot/" rel="nofollow">http://java.sun.com/javase/technologies/hotspot/</a></p>
<p>.filmor schrieb:</p>
<blockquote>
<p>Übrigens ist auf der Seite fairerweise auch <a href="http://bruscy.multicon.pl/pages/przemek/java_not_really_faster_than_cpp.html" rel="nofollow">das hier</a> verklinkt.</p>
</blockquote>
<blockquote>
<p>It seems that it's <strong>much, much easier</strong> to create a well performing program in Java. So, please consider it for a moment before you start recoding your Java program in C++ just to make it faster...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>rüdiger schrieb:</p>
<blockquote>
<p>Wobei C++ Compiler mittlerweile auch optimierende Linker enthalten, die dem Problem teilweise entgegen wirken können.</p>
</blockquote>
<p>ja, theoretisch müsste ein C++ compiler es hinbekommen, unnötige polymorphie rauszuschmeissen.<br />
<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/1365595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365595</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:19:47 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:22:42 GMT]]></title><description><![CDATA[<p>Ich weiß zwar nicht was die Java VM so alles kann, aber Methodenaufrufe kann man zur Laufzeit ebenso besser optimieren wie viele andere Sachen.</p>
<p>Theoretisch kann ein HotSpot Compiler auch manche Methodenaufrufe komplett entfernen/ersetzen, Rücksprünge vermeiden, etc.</p>
<p>Optimierungen zur Laufzeit bieten halt mehr Möglichkeiten.</p>
<p>&quot;Wie geht das, der HotSpotter kann doch auch nur Maschinencode für eine Architektur erzeugen?&quot;</p>
<p>Theoretisch kann man dem ganz andere Dinge beibringen, z.B. könnte man ihn einen else if Block nach häufigkeit neu ordnen lassen. Also das die Bedingung die am häufigsten zutrifft an erster Stelle steht.<br />
Kleine Schleifen kann man entfernen lassen ... usw.</p>
<p>Nunja, Möglichkeiten gibt es viele, wenn du wissen willst welche Sinn machen und welche die Java VM verwendet, oder weshalb es genau hier zutrifft, dann kann ich dir auch nicht helfen. <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/1365596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365596</guid><dc:creator><![CDATA[Tellerrand]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:22:42 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:27:34 GMT]]></title><description><![CDATA[<p>Undertaker schrieb:</p>
<blockquote>
<blockquote>
<p>It seems that it's much, much easier to create a well performing program in Java. So, please consider it for a moment before you start recoding your Java program in C++ just to make it faster...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
</blockquote>
<p>Ja? Da spricht doch nichts gegen. Man braucht halt schon ordentlich Erfahrung, um anständigen C++-Code zu erdenken. Der ist dann aber auch mit Sicherheit schneller als das Java-Äquivalent.</p>
<p>Undertaker schrieb:</p>
<blockquote>
<p>rüdiger schrieb:</p>
<blockquote>
<p>Wobei C++ Compiler mittlerweile auch optimierende Linker enthalten, die dem Problem teilweise entgegen wirken können.</p>
</blockquote>
<p>ja, theoretisch müsste ein C++ compiler es hinbekommen, unnötige polymorphie rauszuschmeissen.<br />
<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>
</blockquote>
<p>Nein. Wie denn auch? Wenn der Programmierer virtual will, dann bekommt er virtual. Das sagt der Standard. Und der hat Recht.<br />
Es kann schließlich sein, dass in irgendeinem erstmal vom Programm unabhängigen Teil die Polymorphie genutzt wird (zb in einer Modul-DLL).</p>
<p>Tellerrand schrieb:</p>
<blockquote>
<p>Optimierungen zur Laufzeit bieten halt mehr Möglichkeiten.</p>
</blockquote>
<p>Tun sie das? Zum einen verbraten sie Prozessorzeit (was sich natürlich rentieren kann wenn das Programm länger läuft), zum Anderen fallen mir nicht viele Sachen ein, die /nur/ zur Laufzeit möglich sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365599</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:32:38 GMT]]></title><description><![CDATA[<p>Tellerrand schrieb:</p>
<blockquote>
<p>Theoretisch kann ein HotSpot Compiler auch manche Methodenaufrufe komplett entfernen/ersetzen, Rücksprünge vermeiden, etc.</p>
</blockquote>
<p>naja, das ist ja nichts, wozu ein C++ compiler/linker nicht auch fähig wäre. statische optimierungen eben, zur not erzeugt man mehrere executables für unterschiedliche maschinentypen.</p>
<p>Tellerrand schrieb:</p>
<blockquote>
<p>Optimierungen zur Laufzeit bieten halt mehr Möglichkeiten.</p>
</blockquote>
<p>richtig. eine hotspot-vm kann sich dynamisch an die momentanen bedingungen anpassen. das ist etwas, was alle unterschätzen, die sagen 'Java ist doch lahm'.<br />
<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/1365602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365602</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:32:38 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:35:36 GMT]]></title><description><![CDATA[<p>java verwendet eine sehr viel rigidere syntax als c++. das sorgt dafür, dass ein java &quot;compiler&quot; stärke annahmen darüber treffen kann, was wegoptimiert werden kann und was nicht.</p>
<p>das heisst nicht, dass java grundsätzlich schneller ist, aber in c++ muss man sich teilweise sehr stark an &quot;regeln&quot; des verwendeten compilers orientieren, um solche ergebnisse zu erreichen. ob ein methoden aufruf polymorph sein muss oder nicht, kann man in c++ &quot;frei&quot; entscheiden (die sind teuer) und ein compiler kann zur compilezeit nicht entscheiden, ob auf polymorphie verzichtet werden kann. ein hotspot compiler kann das. wäre für c++ theoretisch auch möglich, aber da c++ keine virtual machine verwendet, kann sowas halt nicht zur laufzeit entschieden werden (bzw. nur schwerlich)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365604</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:35:36 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:36:10 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Undertaker schrieb:</p>
<blockquote>
<blockquote>
<p>It seems that it's much, much easier to create a well performing program in Java. So, please consider it for a moment before you start recoding your Java program in C++ just to make it faster...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
</blockquote>
<p>Ja? Da spricht doch nichts gegen. Man braucht halt schon ordentlich Erfahrung, um anständigen C++-Code zu erdenken. Der ist dann aber auch mit Sicherheit schneller als das Java-Äquivalent.</p>
</blockquote>
<p>Bitte kommt gar nicht erst auf diese Ebene, was wie wo besser ist. Java-Flames hatten wir genug. Beiträge in die Richtung werde ich entfernen oder den Thread zu machen!</p>
<p>.filmor schrieb:</p>
<blockquote>
<p>Undertaker schrieb:</p>
<blockquote>
<p>rüdiger schrieb:</p>
<blockquote>
<p>Wobei C++ Compiler mittlerweile auch optimierende Linker enthalten, die dem Problem teilweise entgegen wirken können.</p>
</blockquote>
<p>ja, theoretisch müsste ein C++ compiler es hinbekommen, unnötige polymorphie rauszuschmeissen.<br />
<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>
</blockquote>
<p>Nein. Wie denn auch? Wenn der Programmierer virtual will, dann bekommt er virtual. Das sagt der Standard. Und der hat Recht.<br />
Es kann schließlich sein, dass in irgendeinem erstmal vom Programm unabhängigen Teil die Polymorphie genutzt wird (zb in einer Modul-DLL).</p>
</blockquote>
<p>Der Compiler kann doch durchaus einen virtuellen Aufruf umgehen, wenn er sich sicher sein kann, dass der Aufruf eindeutig ist. Ein Linker könnte auch einen VTable ganz entfernen, wenn er unnötig ist. Das so etwas bei einer DLL nicht gemacht wird, ist dann natürlich klar.</p>
<blockquote>
<p>Tellerrand schrieb:</p>
<blockquote>
<p>Optimierungen zur Laufzeit bieten halt mehr Möglichkeiten.</p>
</blockquote>
<p>Tun sie das? Zum einen verbraten sie Prozessorzeit (was sich natürlich rentieren kann wenn das Programm länger läuft), zum Anderen fallen mir nicht viele Sachen ein, die /nur/ zur Laufzeit möglich sind.</p>
</blockquote>
<p>Gibt ja mittlerweile auch bei vielen C++ Compilern die Möglichkeit das Projekt so zu kompilieren, dass das Programm Laufzeit Informationen sammelt, die man beim optimierten kompilieren dann nutzen kann. Das ist natürlich entsprechend aufwendig. Aber dafür kann ein Laufzeit Optimierer wiederum nicht so viel optimieren, da er ja zeitliche Limits hat, in denen die Optimierung statt finden muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365605</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:36:10 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:38:21 GMT]]></title><description><![CDATA[<p><a href="http://msdn2.microsoft.com/en-us/library/Aa289170.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/Aa289170.aspx</a><br />
<a href="http://www.intel.com/cd/software/products/asmo-na/eng/278834.htm#pgo" rel="nofollow">http://www.intel.com/cd/software/products/asmo-na/eng/278834.htm#pgo</a></p>
<p>Muss man halt mal nen vernünftigen Compiler benutzen.</p>
<p>Wenn ich nen schlechten Hotspot habe, komme ich auch nicht weit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365606</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:38:21 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:40:27 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p><a href="http://msdn2.microsoft.com/en-us/library/Aa289170.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/Aa289170.aspx</a><br />
<a href="http://www.intel.com/cd/software/products/asmo-na/eng/278834.htm#pgo" rel="nofollow">http://www.intel.com/cd/software/products/asmo-na/eng/278834.htm#pgo</a></p>
<p>Muss man halt mal nen vernünftigen Compiler benutzen.</p>
<p>Wenn ich nen schlechten Hotspot habe, komme ich auch nicht weit.</p>
</blockquote>
<p>Das hat der GCC auch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365607</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:40:27 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:41:47 GMT]]></title><description><![CDATA[<p>Auch der GCC 3.3.1 20030930 der in dem oben genannten Benchmark benutzt wurde? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365608</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:41:47 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:45:29 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Undertaker schrieb:</p>
<blockquote>
<blockquote>
<p>It seems that it's much, much easier to create a well performing program in Java. So, please consider it for a moment before you start recoding your Java program in C++ just to make it faster...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
</blockquote>
<p>Ja? Da spricht doch nichts gegen. Man braucht halt schon ordentlich Erfahrung, um anständigen C++-Code zu erdenken. Der ist dann aber auch mit Sicherheit schneller als das Java-Äquivalent.</p>
</blockquote>
<p>das will ich ja gar nicht bezweifeln, aber dieses 'Man braucht halt schon ordentlich Erfahrung' ist doch gerade das, was ich immer anprangere in den 'Undertaker gegen C++ threads'.</p>
<p>.filmor schrieb:</p>
<blockquote>
<p>Undertaker schrieb:</p>
<blockquote>
<p>rüdiger schrieb:</p>
<blockquote>
<p>Wobei C++ Compiler mittlerweile auch optimierende Linker enthalten, die dem Problem teilweise entgegen wirken können.</p>
</blockquote>
<p>ja, theoretisch müsste ein C++ compiler es hinbekommen, unnötige polymorphie rauszuschmeissen.<br />
<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>
</blockquote>
<p>Nein. Wie denn auch? Wenn der Programmierer virtual will, dann bekommt er virtual. Das sagt der Standard. Und der hat Recht.</p>
</blockquote>
<p>okay, das mag ja so sein, aber wenn der compiler bzw. linker 'erkennt', dass ein echter virtual function call unnötig ist, warum soll er ihn nicht wegoptimieren dürfen?<br />
schliesslich kommt es doch nur darauf an, dass das endprodukt(programm) sich exakt so verhält, wie's vom programmierer gewünscht wird.<br />
<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/1365609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365609</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:45:29 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:42:42 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Tellerrand schrieb:</p>
<blockquote>
<p>Optimierungen zur Laufzeit bieten halt mehr Möglichkeiten.</p>
</blockquote>
<p>Tun sie das? Zum einen verbraten sie Prozessorzeit (was sich natürlich rentieren kann wenn das Programm länger läuft), zum Anderen fallen mir nicht viele Sachen ein, die /nur/ zur Laufzeit möglich sind.</p>
</blockquote>
<p>Ich sagte sie bieten mehr Möglichkeiten, das ist Fakt und mehr habe ich nicht gesagt.<br />
Eine Kosten Nutzen Rechnung werde ich hier nicht diskutieren, welche und wie viele Möglichkeiten nun wie gut sind habe ich nicht gesagt <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>
<p>Natürlich ist das immer eine Entscheidung aus verschiedenen Fakten:<br />
- wieviel verliert man durchs monitoring<br />
- wieviel verliert man durchs kompilieren<br />
- wieviel gewinnt man durch die Optimierung<br />
- wann ist die Optimierung wieder dahin</p>
<p>Und das ist auch oft eine Frage des Programms.<br />
Eine einfache Variable die an vielen Stellen eines sehr großen Programms verrechnet wird, aber z.B. höchstens alle 6 Monate geändert wird (Z.B. eine Einstellung in der hinterletzten Ecke eines Programms) kann eine Bremse sein. Bei einem kleinem Programm würde man sich um sowas garkeine Gedanken machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365610</guid><dc:creator><![CDATA[Tellerrand]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:42:42 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:46:42 GMT]]></title><description><![CDATA[<p>Tellerrand schrieb:</p>
<blockquote>
<p>Natürlich ist das immer eine Entscheidung aus verschiedenen Fakten:<br />
- wieviel verliert man durchs monitoring<br />
- wieviel verliert man durchs kompilieren<br />
- wieviel gewinnt man durch die Optimierung<br />
- wann ist die Optimierung wieder dahin</p>
</blockquote>
<p>Das macht man dann, wenn man eine Release-Version baut. Und selbst wenn das täglich ist, sowas wird (hoffentlich) automatisiert auf einem Build-Server gebaut. Was sollte ich dadurch &quot;verlieren&quot;? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Netter Versuch! <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/1365612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365612</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:46:42 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:47:38 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Auch der GCC 3.3.1 20030930 der in dem oben genannten Benchmark benutzt wurde? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>AFAIK kann der das seit der 3.0er Serie. Aber was bringt das, wenn der Typ das (inklusive anderer Optimierungen) nicht nutzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365613</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:47:38 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 21:48:25 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Das macht man dann, wenn man eine Release-Version baut. Und selbst wenn das täglich ist, sowas wird (hoffentlich) automatisiert auf einem Build-Server gebaut. Was sollte ich dadurch &quot;verlieren&quot;? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Netter Versuch! <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>
</blockquote>
<p>Und ich dachte wir reden hier über Optimierungen zur Laufzeit <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/1365614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365614</guid><dc:creator><![CDATA[Tellerrand]]></dc:creator><pubDate>Fri, 14 Sep 2007 21:48:25 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 22:06:42 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>Artchi schrieb:</p>
<blockquote>
<p><a href="http://msdn2.microsoft.com/en-us/library/Aa289170.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/Aa289170.aspx</a><br />
<a href="http://www.intel.com/cd/software/products/asmo-na/eng/278834.htm#pgo" rel="nofollow">http://www.intel.com/cd/software/products/asmo-na/eng/278834.htm#pgo</a><br />
Muss man halt mal nen vernünftigen Compiler benutzen.<br />
Wenn ich nen schlechten Hotspot habe, komme ich auch nicht weit.</p>
</blockquote>
<p>Das hat der GCC auch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>dass irgend ein GCC das erstere kann (PGO), will ich mal bezweifeln.<br />
<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/1365623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365623</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Fri, 14 Sep 2007 22:06:42 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Fri, 14 Sep 2007 22:22:08 GMT]]></title><description><![CDATA[<p>Undertaker schrieb:</p>
<blockquote>
<p>rüdiger schrieb:</p>
<blockquote>
<p>Artchi schrieb:</p>
<blockquote>
<p><a href="http://msdn2.microsoft.com/en-us/library/Aa289170.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/Aa289170.aspx</a><br />
<a href="http://www.intel.com/cd/software/products/asmo-na/eng/278834.htm#pgo" rel="nofollow">http://www.intel.com/cd/software/products/asmo-na/eng/278834.htm#pgo</a><br />
Muss man halt mal nen vernünftigen Compiler benutzen.<br />
Wenn ich nen schlechten Hotspot habe, komme ich auch nicht weit.</p>
</blockquote>
<p>Das hat der GCC auch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>dass irgend ein GCC das erstere kann (PGO), will ich mal bezweifeln.<br />
<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>
</blockquote>
<p>Schau doch einfach in der Dokumentation nach oder gib bei Google GCC PGO ein. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365627</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 14 Sep 2007 22:22:08 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Sat, 15 Sep 2007 01:07:45 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Tellerrand schrieb:</p>
<blockquote>
<p>Natürlich ist das immer eine Entscheidung aus verschiedenen Fakten:<br />
- wieviel verliert man durchs monitoring<br />
- wieviel verliert man durchs kompilieren<br />
- wieviel gewinnt man durch die Optimierung<br />
- wann ist die Optimierung wieder dahin</p>
</blockquote>
<p>Das macht man dann, wenn man eine Release-Version baut. Und selbst wenn das täglich ist, sowas wird (hoffentlich) automatisiert auf einem Build-Server gebaut. Was sollte ich dadurch &quot;verlieren&quot;? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Netter Versuch! <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>
</blockquote>
<p>Nö, da hast du was falsch verstanden.</p>
<p>Es geht hier um Optimierungen *zur Laufzeit* die ein JIT Compiler selbst macht.<br />
Release-Versionen und Build-Server haben damit rein garnichts zu tun.</p>
<p>Und klar kostet das auch Zeit, denn die VM muss ja irgendwie Kandidaten ermitteln (Funktionen, Schleifen, allgemein Codestellen) die unter den aktuellen oder erwarteten Bedingungen neu optimiert &amp; übersetzt werden sollen, dann müssen sie neu übersetzt werden etc. Wie gesagt: Laufzeit, nix Buildserver.</p>
<p>Solche Optimierungen kann man z.B. mit PGO für genau 1 Szenario machen, bzw. einen &quot;Mix&quot; aus mehreren Szenarien, die aber vor dem 2. PGO Compilerlauf feststehen müssen. Das Resultat bleibt statisch und wird daher ein Kompromiss sein. Eine VM mit JIT Compiler und dynamic-recompilation kann die aktuelle Situation erfassen (das ist z.B. das was er mit Monitoring meint), und den Code zur Laufzeit anpassen. -&gt; weniger Kompromisse, dafür mehr Overhead.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365654</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 15 Sep 2007 01:07:45 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Sat, 15 Sep 2007 01:22:38 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>Gibt ja mittlerweile auch bei vielen C++ Compilern die Möglichkeit das Projekt so zu kompilieren, dass das Programm Laufzeit Informationen sammelt, die man beim optimierten kompilieren dann nutzen kann. Das ist natürlich entsprechend aufwendig.</p>
</blockquote>
<p>Hast du da was konkretes? Oder gibts da beim VS irgendein Tool? <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/1365659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365659</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 15 Sep 2007 01:22:38 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Sat, 15 Sep 2007 01:54:14 GMT]]></title><description><![CDATA[<p>VS *ist* das Tool. Profile Guided Optimization heisst das, und das ist es was die Leute hier mit PGO meinen.</p>
<p>Keine Ahnung ob das in der Express Version mit drin ist, aber die normale Professional hat das.<br />
Ganz im Gegensatz zum Profiler der ja der Team Foundation Dings Version vorbehalten ist *grrr*.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365667</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 15 Sep 2007 01:54:14 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Sat, 15 Sep 2007 10:12:21 GMT]]></title><description><![CDATA[<blockquote>
<p>Hast du da was konkretes? Oder gibts da beim VS irgendein Tool?</p>
</blockquote>
<p>Habe doch die zwei Links gepostet zu den PGO-Infos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365747</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sat, 15 Sep 2007 10:12:21 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Sat, 15 Sep 2007 10:13:34 GMT]]></title><description><![CDATA[<p>Tellerrand schrieb:</p>
<blockquote>
<p>Artchi schrieb:</p>
<blockquote>
<p>Das macht man dann, wenn man eine Release-Version baut. Und selbst wenn das täglich ist, sowas wird (hoffentlich) automatisiert auf einem Build-Server gebaut. Was sollte ich dadurch &quot;verlieren&quot;? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Netter Versuch! <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>
</blockquote>
<p>Und ich dachte wir reden hier über Optimierungen zur Laufzeit <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>
</blockquote>
<p>Sorry, habe gedacht du beziehst dich auf PGO.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365748</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sat, 15 Sep 2007 10:13:34 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Sat, 15 Sep 2007 11:17:03 GMT]]></title><description><![CDATA[<p>thordk schrieb:</p>
<blockquote>
<p>java verwendet eine sehr viel rigidere syntax als c++. das sorgt dafür, dass ein java &quot;compiler&quot; stärke annahmen darüber treffen kann, was wegoptimiert werden kann und was nicht.</p>
</blockquote>
<p>Mir wollten sie was anderes erzählen, dass das nix mit der Syntax zu tun hat usw...<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1332096.html#1332096" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1332096.html#1332096</a><br />
Was stimmt denn nun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1365808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1365808</guid><dc:creator><![CDATA[Holztisch]]></dc:creator><pubDate>Sat, 15 Sep 2007 11:17:03 GMT</pubDate></item><item><title><![CDATA[Reply to Qualität von HotSpot Compilern on Sun, 16 Sep 2007 13:10:36 GMT]]></title><description><![CDATA[<p>btw. <a href="http://llvm.org/" rel="nofollow">llvm</a> will ich hier nicht unerwähnt lassen, da es bereits Link-Time-Optimierungen ermöglichst und auch JIT-Kompilierung (und das für alle Sprachen des verwendeten GCC-Frontends) und es ist in aktiver Benutzung, ua. von Apple (die wohl viel Geld in llvm stecken)) und Adobe. Derzeit werden aber leider noch keine C++-Exceptions unterstützt, was sich wohl mit llvm 2.1 (angekündigt für sept 07) ändern wird.</p>
<p>hier ist ein <a href="http://llvm.org/pubs/2007-07-25-LLVM-2.0-and-Beyond.html" rel="nofollow">Vortrag über llvm 2.0</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366324</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sun, 16 Sep 2007 13:10:36 GMT</pubDate></item></channel></rss>