<?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[Performance Frage - eigene Vektorklasse]]></title><description><![CDATA[<p>Alle alle miteinander, ich bin noch recht neu zu C++ (Beginner) und habe eine Frage zur Perfromance einer Vektorklasse die ich geschrieben habe.</p>
<p>Zur Vorgeschichte.. Ich habe vor einiger Zeit mal mit IDL gearbeitet. Das praktische bei dieser Sprache war, dass Vektoren und Matritzen durch über die Standartoperatoren +,*,... usw. also Elementeweise addiert, multipliziert usw. werden konnten. Alles schön und gut ..nur bin ich kein großer Freund von IDL geworden und habe nun versucht quasi zu Übungszwecken in C++ eine Vektorklasse zu schreiben die diese Operationen im begrenztem Maß auch kann.</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
    class SVLvector{
    private:
            T *Vector;
            int length;
    public:
        //Constructors
        SVLvector(int n){..}

        SVLvector(){length=0;}

        SVLvector(const SVLvector &amp;other){...}

       ~SVLvector(){ delete[] Vector;}
//.... Ein par andere Funktionen und Operatoren hier ein Beispiel

        SVLvector operator + (const SVLvector &amp;other){
            assert(other.length==length);

            SVLvector new_vector(length);
            for(int i=0;i&lt;length;i++)new_vector.Vector[i]=Vector[i]+other.Vector[i];
            return new_vector;
        }
//..usw
};
</code></pre>
<p>Bisher habe ich auch keine Probleme mit der Klasse feststellen können..es läuft.<br />
Nun möchte ich aber zum Beispiel mit dieser Klasse Aufgaben im Bereich &quot;Datenanalyse&quot; verwirklichen zB. lassen sich Korrellationsfunktionen , Mittelwertfunktionen usw. damit angenehm schreiben. Das funktioniert auch und ist sehr übersichtlich (was ja mein Ziel war). Soweit zur Idee.</p>
<p>Nun kam mir aber neulich in den Sinn das diese Implementation über die Operatoren eine ziemlich schlechte Laufzeit haben könnten. Insbesondere wenn ich nun sehr große Vektoren habe und viele Operatoren hintereinander anwende...Dann wiederum dachte ich mir,dass das aber auch davon abhängt wie mein Compiler (minGW) das ganze letztlich interpretiert?</p>
<p>Also im Kurzen.. Hat es überhaupt Sinn aus Sicht der Laufzeit mit einer solchen Klasse und ihren Operatoren zu arbeiten... oder macht das keinen großen Unterschied zB. wenn ich es stattdessen gleiches mittels Schleifen ausschreiben würde.</p>
<p>Vieleicht hat ja jemand auch noch gute Optimierungs Kniffe parat. Vielen Dank. :xmas1:</p>
<p>Dantex :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/278946/performance-frage-eigene-vektorklasse</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 20:24:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278946.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Dec 2010 23:04:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Performance Frage - eigene Vektorklasse on Wed, 15 Dec 2010 23:07:21 GMT]]></title><description><![CDATA[<p>Alle alle miteinander, ich bin noch recht neu zu C++ (Beginner) und habe eine Frage zur Perfromance einer Vektorklasse die ich geschrieben habe.</p>
<p>Zur Vorgeschichte.. Ich habe vor einiger Zeit mal mit IDL gearbeitet. Das praktische bei dieser Sprache war, dass Vektoren und Matritzen durch über die Standartoperatoren +,*,... usw. also Elementeweise addiert, multipliziert usw. werden konnten. Alles schön und gut ..nur bin ich kein großer Freund von IDL geworden und habe nun versucht quasi zu Übungszwecken in C++ eine Vektorklasse zu schreiben die diese Operationen im begrenztem Maß auch kann.</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
    class SVLvector{
    private:
            T *Vector;
            int length;
    public:
        //Constructors
        SVLvector(int n){..}

        SVLvector(){length=0;}

        SVLvector(const SVLvector &amp;other){...}

       ~SVLvector(){ delete[] Vector;}
//.... Ein par andere Funktionen und Operatoren hier ein Beispiel

        SVLvector operator + (const SVLvector &amp;other){
            assert(other.length==length);

            SVLvector new_vector(length);
            for(int i=0;i&lt;length;i++)new_vector.Vector[i]=Vector[i]+other.Vector[i];
            return new_vector;
        }
//..usw
};
</code></pre>
<p>Bisher habe ich auch keine Probleme mit der Klasse feststellen können..es läuft.<br />
Nun möchte ich aber zum Beispiel mit dieser Klasse Aufgaben im Bereich &quot;Datenanalyse&quot; verwirklichen zB. lassen sich Korrellationsfunktionen , Mittelwertfunktionen usw. damit angenehm schreiben. Das funktioniert auch und ist sehr übersichtlich (was ja mein Ziel war). Soweit zur Idee.</p>
<p>Nun kam mir aber neulich in den Sinn das diese Implementation über die Operatoren eine ziemlich schlechte Laufzeit haben könnten. Insbesondere wenn ich nun sehr große Vektoren habe und viele Operatoren hintereinander anwende...Dann wiederum dachte ich mir,dass das aber auch davon abhängt wie mein Compiler (minGW) das ganze letztlich interpretiert?</p>
<p>Also im Kurzen.. Hat es überhaupt Sinn aus Sicht der Laufzeit mit einer solchen Klasse und ihren Operatoren zu arbeiten... oder macht das keinen großen Unterschied zB. wenn ich es stattdessen gleiches mittels Schleifen ausschreiben würde.</p>
<p>Vieleicht hat ja jemand auch noch gute Optimierungs Kniffe parat. Vielen Dank. :xmas1:</p>
<p>Dantex :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1995164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995164</guid><dc:creator><![CDATA[DanteX]]></dc:creator><pubDate>Wed, 15 Dec 2010 23:07:21 GMT</pubDate></item><item><title><![CDATA[Reply to Performance Frage - eigene Vektorklasse on Wed, 15 Dec 2010 23:54:18 GMT]]></title><description><![CDATA[<p>Klassen und Operatoren sind reine Abstraktionen auf Ebene der Programmierung. Im fertigen Programm gibt es davon nichts mehr. Entsprechend ist der Performanceverlust dadurch 0.</p>
<p>Wenn es dir wirklich auf Performance ankommt, solltest du aber mal nach Bibliotheken von Leuten Ausschau halten, die sich professionell damit beschäftigen. Gerade im Bereich der linearen Algebra gibt es da mehr als genug. Die schreiben nämlich nicht bloß ordentlichen Code (das kannst du auch), sondern haben auch die Zeit und das Wissen irgendwelche dreckigen Tricks reinzubauen auf die man nie käme und diese ausgiebig zu testen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1995179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995179</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 15 Dec 2010 23:54:18 GMT</pubDate></item><item><title><![CDATA[Reply to Performance Frage - eigene Vektorklasse on Thu, 16 Dec 2010 15:53:54 GMT]]></title><description><![CDATA[<p>Auf dieser Ebene etwas optimieren zu wollen macht keinen Sinn. Operatoren sind wie schon gesagt nicht das Problem, falls es nicht performant ist, sondern eher die schlussendliche Implementierung der Algorithmen und den dafür geeigneten speziellen Optimierungen des Codes.</p>
<p>Benutz dazu lieber eine Bibliothek, wie z.B eine <a href="http://www.boost.org/doc/libs/1_45_0/libs/numeric/ublas/doc/index.htm" rel="nofollow">BLAS</a> Implementierung.</p>
<p>btw:<br />
Falls du dich für das ganze Low Level Zeugs interessierst kann ich dir das Buch hier empfehlen:<br />
<a href="http://csapp.cs.cmu.edu/" rel="nofollow">http://csapp.cs.cmu.edu/</a></p>
<p>Bietet einen guten Grundstein für das Verständnis moderner Computer Systeme und somit auch die benötigten Grundlagen für Optimierungen, die wirklich etwas ausmachen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1995417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995417</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 16 Dec 2010 15:53:54 GMT</pubDate></item><item><title><![CDATA[Reply to Performance Frage - eigene Vektorklasse on Fri, 17 Dec 2010 17:11:03 GMT]]></title><description><![CDATA[<p>Vielen Dank euch beiden.</p>
<p>Also ich werde mir mal die Boost bzw uBlas Packete anschauen. Mein Ziel ist im Grunde ja nicht eine Algebra Libary zu zu schreiben, sondern nur eine Vektorklasse die keine skalare Vektormultiplikation durchführt (eben nur Elementeweise Ausführung Vektor1*Vektor2-&gt;Vektor3)-- was ich bei IDL eben eine nette Sache fand und für C++ umsetzen wollte..letztlich alles zur Übung..aber habe es dann bei anderen Sachen weitergenutzt. Aber vieleicht funktioniert das mit den Vektoren bei der uBlas Lib ja bereits, dann wäre es in der Tat sinvoller damit zu arbeiten...wird sich zeigen wenn ich da durchgestiegen bin XD.<br />
Das mit dem Buch ist ein guter Tip.. habe auch mal ins erste Kapitel reingeschaut.. es ist in der Tat etwas das ich gebrauchen könnte Grundlagenwissen <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>wünsche allen eine schöne Weinacht :xmas1:</p>
<p>MFG DanteX :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1995966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995966</guid><dc:creator><![CDATA[DanteX]]></dc:creator><pubDate>Fri, 17 Dec 2010 17:11:03 GMT</pubDate></item></channel></rss>