<?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[Absolute Differenz von Bild berechnen]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte von einem 8*8 Ausschnitt eines Bildes die Sum Of Absolute Difference berechnen.</p>
<p>Dazu habe ich die folgenden 2 defines geschrieben</p>
<pre><code>#define absDiff(a1,a2) (((a1)&gt;(a2))?a1-a2:a2-a1)
#define CalculateDifference(a,b) \
 absDiff(a[0*imSizeX+0],b[0*imSizeX+0])+absDiff(a[0*imSizeX+1],b[0*imSizeX+1])+absDiff(a[0*imSizeX+2],b[0*imSizeX+2])+absDiff(a[0*imSizeX+3],b[0*imSizeX+3])\
+absDiff(a[0*imSizeX+4],b[0*imSizeX+4])+absDiff(a[0*imSizeX+5],b[0*imSizeX+5])+absDiff(a[0*imSizeX+6],b[0*imSizeX+6])+absDiff(a[0*imSizeX+7],b[0*imSizeX+7])\
+absDiff(a[1*imSizeX+0],b[1*imSizeX+0])+absDiff(a[1*imSizeX+1],b[1*imSizeX+1])+absDiff(a[1*imSizeX+2],b[1*imSizeX+2])+absDiff(a[1*imSizeX+3],b[1*imSizeX+3])\
+absDiff(a[1*imSizeX+4],b[1*imSizeX+4])+absDiff(a[1*imSizeX+5],b[1*imSizeX+5])+absDiff(a[1*imSizeX+6],b[1*imSizeX+6])+absDiff(a[1*imSizeX+7],b[1*imSizeX+7])\
+absDiff(a[2*imSizeX+0],b[2*imSizeX+0])+absDiff(a[2*imSizeX+1],b[2*imSizeX+1])+absDiff(a[2*imSizeX+2],b[2*imSizeX+2])+absDiff(a[2*imSizeX+3],b[2*imSizeX+3])\
+absDiff(a[2*imSizeX+4],b[2*imSizeX+4])+absDiff(a[2*imSizeX+5],b[2*imSizeX+5])+absDiff(a[2*imSizeX+6],b[2*imSizeX+6])+absDiff(a[2*imSizeX+7],b[2*imSizeX+7])\
+absDiff(a[3*imSizeX+0],b[3*imSizeX+0])+absDiff(a[3*imSizeX+1],b[3*imSizeX+1])+absDiff(a[3*imSizeX+2],b[3*imSizeX+2])+absDiff(a[3*imSizeX+3],b[3*imSizeX+3])\
+absDiff(a[3*imSizeX+4],b[3*imSizeX+4])+absDiff(a[3*imSizeX+5],b[3*imSizeX+5])+absDiff(a[3*imSizeX+6],b[3*imSizeX+6])+absDiff(a[3*imSizeX+7],b[3*imSizeX+7])\
+absDiff(a[4*imSizeX+0],b[4*imSizeX+0])+absDiff(a[4*imSizeX+1],b[4*imSizeX+1])+absDiff(a[4*imSizeX+2],b[4*imSizeX+2])+absDiff(a[4*imSizeX+3],b[4*imSizeX+3])\
+absDiff(a[4*imSizeX+4],b[4*imSizeX+4])+absDiff(a[4*imSizeX+5],b[4*imSizeX+5])+absDiff(a[4*imSizeX+6],b[4*imSizeX+6])+absDiff(a[4*imSizeX+7],b[4*imSizeX+7])\
+absDiff(a[5*imSizeX+0],b[5*imSizeX+0])+absDiff(a[5*imSizeX+1],b[5*imSizeX+1])+absDiff(a[5*imSizeX+2],b[5*imSizeX+2])+absDiff(a[5*imSizeX+3],b[5*imSizeX+3])\
+absDiff(a[5*imSizeX+4],b[5*imSizeX+4])+absDiff(a[5*imSizeX+5],b[5*imSizeX+5])+absDiff(a[5*imSizeX+6],b[5*imSizeX+6])+absDiff(a[5*imSizeX+7],b[5*imSizeX+7])\
+absDiff(a[6*imSizeX+0],b[6*imSizeX+0])+absDiff(a[6*imSizeX+1],b[6*imSizeX+1])+absDiff(a[6*imSizeX+2],b[6*imSizeX+2])+absDiff(a[6*imSizeX+3],b[6*imSizeX+3])\
+absDiff(a[6*imSizeX+4],b[6*imSizeX+4])+absDiff(a[6*imSizeX+5],b[6*imSizeX+5])+absDiff(a[6*imSizeX+6],b[6*imSizeX+6])+absDiff(a[6*imSizeX+7],b[6*imSizeX+7])\
+absDiff(a[7*imSizeX+0],b[7*imSizeX+0])+absDiff(a[7*imSizeX+1],b[7*imSizeX+1])+absDiff(a[7*imSizeX+2],b[7*imSizeX+2])+absDiff(a[7*imSizeX+3],b[7*imSizeX+3])\
+absDiff(a[7*imSizeX+4],b[7*imSizeX+4])+absDiff(a[7*imSizeX+5],b[7*imSizeX+5])+absDiff(a[7*imSizeX+6],b[7*imSizeX+6])+absDiff(a[7*imSizeX+7],b[7*imSizeX+7])\
</code></pre>
<p>also ich glaube die Namensgebung ist klar. imSizeX ist ist die Bildgröße und da das Bild in einem 1D Array gespeichert ist springe ich immer durch y*imSizeX in die nächste Zeile.</p>
<p>Leider ist das ziemlich langsam. ich bin davon ausgegangen das der Compiler die Berechnung von y*imSizeX+x im Vorhinein macht das müßte doch so sein. Kann ich das irgendwo nachschauen. Außerdem was haltet ihr von meinem Define absDiff sollte ich das nehmen oder abs(a-b). Ich hatte gelesen das es besser ist das so zu schreiben wie ich damit der Compiler das optimieren kann.</p>
<p>Ich freue mich über Meinungen</p>
<p>dankeschön</p>
<p>p.s. Äh ich meine natürlich ich ich möchte die Sum of Absolute Difference von zwei Bildern berechnen. Also Array a ist von Bild1 und Array b ist von Bild2</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324833/absolute-differenz-von-bild-berechnen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 00:53:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324833.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Apr 2014 19:50:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 19:54:31 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte von einem 8*8 Ausschnitt eines Bildes die Sum Of Absolute Difference berechnen.</p>
<p>Dazu habe ich die folgenden 2 defines geschrieben</p>
<pre><code>#define absDiff(a1,a2) (((a1)&gt;(a2))?a1-a2:a2-a1)
#define CalculateDifference(a,b) \
 absDiff(a[0*imSizeX+0],b[0*imSizeX+0])+absDiff(a[0*imSizeX+1],b[0*imSizeX+1])+absDiff(a[0*imSizeX+2],b[0*imSizeX+2])+absDiff(a[0*imSizeX+3],b[0*imSizeX+3])\
+absDiff(a[0*imSizeX+4],b[0*imSizeX+4])+absDiff(a[0*imSizeX+5],b[0*imSizeX+5])+absDiff(a[0*imSizeX+6],b[0*imSizeX+6])+absDiff(a[0*imSizeX+7],b[0*imSizeX+7])\
+absDiff(a[1*imSizeX+0],b[1*imSizeX+0])+absDiff(a[1*imSizeX+1],b[1*imSizeX+1])+absDiff(a[1*imSizeX+2],b[1*imSizeX+2])+absDiff(a[1*imSizeX+3],b[1*imSizeX+3])\
+absDiff(a[1*imSizeX+4],b[1*imSizeX+4])+absDiff(a[1*imSizeX+5],b[1*imSizeX+5])+absDiff(a[1*imSizeX+6],b[1*imSizeX+6])+absDiff(a[1*imSizeX+7],b[1*imSizeX+7])\
+absDiff(a[2*imSizeX+0],b[2*imSizeX+0])+absDiff(a[2*imSizeX+1],b[2*imSizeX+1])+absDiff(a[2*imSizeX+2],b[2*imSizeX+2])+absDiff(a[2*imSizeX+3],b[2*imSizeX+3])\
+absDiff(a[2*imSizeX+4],b[2*imSizeX+4])+absDiff(a[2*imSizeX+5],b[2*imSizeX+5])+absDiff(a[2*imSizeX+6],b[2*imSizeX+6])+absDiff(a[2*imSizeX+7],b[2*imSizeX+7])\
+absDiff(a[3*imSizeX+0],b[3*imSizeX+0])+absDiff(a[3*imSizeX+1],b[3*imSizeX+1])+absDiff(a[3*imSizeX+2],b[3*imSizeX+2])+absDiff(a[3*imSizeX+3],b[3*imSizeX+3])\
+absDiff(a[3*imSizeX+4],b[3*imSizeX+4])+absDiff(a[3*imSizeX+5],b[3*imSizeX+5])+absDiff(a[3*imSizeX+6],b[3*imSizeX+6])+absDiff(a[3*imSizeX+7],b[3*imSizeX+7])\
+absDiff(a[4*imSizeX+0],b[4*imSizeX+0])+absDiff(a[4*imSizeX+1],b[4*imSizeX+1])+absDiff(a[4*imSizeX+2],b[4*imSizeX+2])+absDiff(a[4*imSizeX+3],b[4*imSizeX+3])\
+absDiff(a[4*imSizeX+4],b[4*imSizeX+4])+absDiff(a[4*imSizeX+5],b[4*imSizeX+5])+absDiff(a[4*imSizeX+6],b[4*imSizeX+6])+absDiff(a[4*imSizeX+7],b[4*imSizeX+7])\
+absDiff(a[5*imSizeX+0],b[5*imSizeX+0])+absDiff(a[5*imSizeX+1],b[5*imSizeX+1])+absDiff(a[5*imSizeX+2],b[5*imSizeX+2])+absDiff(a[5*imSizeX+3],b[5*imSizeX+3])\
+absDiff(a[5*imSizeX+4],b[5*imSizeX+4])+absDiff(a[5*imSizeX+5],b[5*imSizeX+5])+absDiff(a[5*imSizeX+6],b[5*imSizeX+6])+absDiff(a[5*imSizeX+7],b[5*imSizeX+7])\
+absDiff(a[6*imSizeX+0],b[6*imSizeX+0])+absDiff(a[6*imSizeX+1],b[6*imSizeX+1])+absDiff(a[6*imSizeX+2],b[6*imSizeX+2])+absDiff(a[6*imSizeX+3],b[6*imSizeX+3])\
+absDiff(a[6*imSizeX+4],b[6*imSizeX+4])+absDiff(a[6*imSizeX+5],b[6*imSizeX+5])+absDiff(a[6*imSizeX+6],b[6*imSizeX+6])+absDiff(a[6*imSizeX+7],b[6*imSizeX+7])\
+absDiff(a[7*imSizeX+0],b[7*imSizeX+0])+absDiff(a[7*imSizeX+1],b[7*imSizeX+1])+absDiff(a[7*imSizeX+2],b[7*imSizeX+2])+absDiff(a[7*imSizeX+3],b[7*imSizeX+3])\
+absDiff(a[7*imSizeX+4],b[7*imSizeX+4])+absDiff(a[7*imSizeX+5],b[7*imSizeX+5])+absDiff(a[7*imSizeX+6],b[7*imSizeX+6])+absDiff(a[7*imSizeX+7],b[7*imSizeX+7])\
</code></pre>
<p>also ich glaube die Namensgebung ist klar. imSizeX ist ist die Bildgröße und da das Bild in einem 1D Array gespeichert ist springe ich immer durch y*imSizeX in die nächste Zeile.</p>
<p>Leider ist das ziemlich langsam. ich bin davon ausgegangen das der Compiler die Berechnung von y*imSizeX+x im Vorhinein macht das müßte doch so sein. Kann ich das irgendwo nachschauen. Außerdem was haltet ihr von meinem Define absDiff sollte ich das nehmen oder abs(a-b). Ich hatte gelesen das es besser ist das so zu schreiben wie ich damit der Compiler das optimieren kann.</p>
<p>Ich freue mich über Meinungen</p>
<p>dankeschön</p>
<p>p.s. Äh ich meine natürlich ich ich möchte die Sum of Absolute Difference von zwei Bildern berechnen. Also Array a ist von Bild1 und Array b ist von Bild2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392654</guid><dc:creator><![CDATA[flexbex]]></dc:creator><pubDate>Thu, 03 Apr 2014 19:54:31 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 20:08:31 GMT]]></title><description><![CDATA[<p>define ? Du benutzt vermutlich auch eine Steinaxt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392660</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:08:31 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 20:10:25 GMT]]></title><description><![CDATA[<p>Hast du schon mal was von Schleifen und von Funktionen gehört?</p>
<p>Warum programmierst du abs überhaupt selber und nimmst nicht std::abs?</p>
<p>Fragen über Fragen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392661</guid><dc:creator><![CDATA[asdfasd]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:10:25 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 20:10:37 GMT]]></title><description><![CDATA[<p>Schon mal was von Schleifen gehört?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392662</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:10:37 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 20:23:15 GMT]]></title><description><![CDATA[<p>ja schon klar aber ich dachte wenn ich die Schleife rauslasse gehts schneller weil das Program dann nich zur laufzeit rechnen muss</p>
<pre><code>uint32_t diff=0;
for(uint16_t iy=0; iy&lt;8*imsSizeX; iy+=imSizeX){
       for(uint16_t ix=0; ix&lt;8; ix++){
            diff+=std::abs(image1[ix+iy]-image2[ix+iy]);
}
}
</code></pre>
<p>also ihr meint sowas geht schneller?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392665</guid><dc:creator><![CDATA[flexbex]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:23:15 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 20:24:59 GMT]]></title><description><![CDATA[<p>Ich bin mal so frei und behaupte, dass es mit einer Schleife u.U. sogar schneller ist, weil der Compiler das als SIMD-Pattern erkennen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392666</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:24:59 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 20:28:42 GMT]]></title><description><![CDATA[<p>Ich gebe gleich mal das Ergebnis ich lass ihn gerade Testen mit gprof</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392668</guid><dc:creator><![CDATA[flexbex]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:28:42 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 20:45:48 GMT]]></title><description><![CDATA[<p>also meine Veriante mit<br />
#define abs(a-b)<br />
#define das große...</p>
<pre><code>Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  us/call  us/call  name    
 79.02    111.41   111.41                             FilterFlow_BrutForc_
</code></pre>
<p>-&gt; das sind auf eine Kachelberechnugn runter gebrochen 1.9us pro 8*8 Kachel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392675</guid><dc:creator><![CDATA[flexbex]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:45:48 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 20:49:59 GMT]]></title><description><![CDATA[<p>mit #define absDiff(a1,a2) (((a1)&gt;(a2))?a1-a2:a2-a1)</p>
<pre><code>Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  us/call  us/call  name    
 84.74    167.09   167.09
</code></pre>
<p>-&gt; 3 us</p>
<p>Mist!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392676</guid><dc:creator><![CDATA[flexbex]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:49:59 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 20:51:50 GMT]]></title><description><![CDATA[<p>Vergleich mal mit einer Inline-Funktion und Schleife...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392677</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:51:50 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 20:53:16 GMT]]></title><description><![CDATA[<p>bin ich gerade dabei.<br />
Ist ein Embedded Arm der hat zwar 1Ghz dauert aber trotzdem <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/2392678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392678</guid><dc:creator><![CDATA[flexbex]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:53:16 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 21:05:35 GMT]]></title><description><![CDATA[<p>mit der for-schleife ist es das Selbe wie beim Ersten.Hab die auch mal als #define gemacht nicht schön aber ging am schnellsten zu Implmentieren. ich hoffe das hat die selbe Wirkung wie Inline</p>
<pre><code>Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  us/call  us/call  name    
 79.11    112.53   112.53                             FilterFlow_BrutForc
</code></pre>
<pre><code>#define CalculateDifference(a,b)\
	uint32_t ergebniss=0;\
	for(uint16_t iy=0; iy&lt;8*imSizeX; iy+=imSizeX) { \
		for(uint16_t ix=0; ix&lt;8; ix++) { \
			ergebniss+=std::abs(a[ix+iy]-b[ix+iy]);\
		}\
	}\
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2392680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392680</guid><dc:creator><![CDATA[flexbex]]></dc:creator><pubDate>Thu, 03 Apr 2014 21:05:35 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 21:19:40 GMT]]></title><description><![CDATA[<p>Um sicher zu sein: Du benutzt ein optimiertes Compilat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392683</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 03 Apr 2014 21:19:40 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 21:25:16 GMT]]></title><description><![CDATA[<p>ja<br />
das habe ich mir als Makefile geschrieben. Ist das in Ordnung?</p>
<pre><code>CC=g++
CFLAGS=-c -DRELEASE -UDEBUG  -Wall -g -pg -O3
LDFLAGS=-g -pg  -lgsl -lgslcblas
SOURCES=main.cpp debugOwn.cpp FeatGSLMest.cpp FilterFeature_Diff_follow.cpp \
 FilterFlow_BrutForc_follow2.cpp  FlowConstDef.cpp \
global.cpp LogModul.cpp  mathFunctions.cpp netTcp.cpp \
VideoDevice_Load.cpp VideoDevice_Caspa.cpp BaseClasses/FeatureCalcGSLBase.cpp \
BaseClasses/FeatureCalcBase.cpp

OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
	$(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
	$(CC) $(CFLAGS) $&lt; -o $@

clean:
	rm -rf *o hello

totalclean:

	rm -rf *o BaseClasses/*o hello
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2392684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392684</guid><dc:creator><![CDATA[flexbex]]></dc:creator><pubDate>Thu, 03 Apr 2014 21:25:16 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 21:49:02 GMT]]></title><description><![CDATA[<p>flexbex schrieb:</p>
<blockquote>
<p>Kann ich das irgendwo nachschauen.</p>
</blockquote>
<p>Guck dir die Disassembly an. Dann weisst du was für Code entsteht.</p>
<p>Falls kein SIMD Code draus wird, und dein Compiler SIMD-Intrinsics hat, dann kannst du mit denen vermutlich nochmal ordentlich was rausholen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392686</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 03 Apr 2014 21:49:02 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 22:04:26 GMT]]></title><description><![CDATA[<p>Kannst du mir dabei helfen. Weisst du wie ich mir die von der Commandline ausgeben lassen kann. Aber das finde ich zur not noch raus.</p>
<p>Aber wie geht das mit SIMD ich habs beim googlen nur überflogen. Also für Arm Prozessoren sollte das ja grundsätzlich funktionieren. Vielleicht kannst du mir auch ne gute stelle zum nachschauen gebn.<br />
thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392688</guid><dc:creator><![CDATA[flexbex]]></dc:creator><pubDate>Thu, 03 Apr 2014 22:04:26 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 22:20:25 GMT]]></title><description><![CDATA[<p>Wozu das <code>-g</code> Compilerflag?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392690</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 03 Apr 2014 22:20:25 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 22:25:10 GMT]]></title><description><![CDATA[<p>Mit march=dein_prozessortyp <em>kann</em> (nicht muss) eventuell noch mehr rausgeholt werden. <em>Kann</em> sich auch negativ auswirken.<br />
<a href="http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html" rel="nofollow">http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html</a></p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Wozu das <code>-g</code> Compilerflag?</p>
</blockquote>
<p>Ist doch ganz nuetzlich fuer den Profiler. Debugsymbole != Debugcode</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392691</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 03 Apr 2014 22:25:10 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 22:25:36 GMT]]></title><description><![CDATA[<p><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="😉"
    /> genau das hab ich auch gerade gelesen. Ich nehm die mal raus<br />
Die war noch vom debuggen drin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392692</guid><dc:creator><![CDATA[flexbex]]></dc:creator><pubDate>Thu, 03 Apr 2014 22:25:36 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 22:28:12 GMT]]></title><description><![CDATA[<p>flexbex schrieb:</p>
<blockquote>
<p>Kannst du mir dabei helfen. Weisst du wie ...</p>
</blockquote>
<p>Nö, sorry.<br />
Ich bin ein Windows-Mann. Bei MSVC kann ich dir das alles ausm Stegreif erklären. GCC, GDB etc. = kein Plan. Da hab' ich inetwa nen Überblick was der so kann, aber wie man es genau anstellt müsste ich mir selbst ergoogeln.<br />
Ebenso was ARM angeht.</p>
<p>Als Tip kann ich dir nur geben: <em>möglicherweise</em> findest du SIMD Code für verschiedene Compiler/Architekturen für sehr ähnliche oder sogar identische Sachen in der OpenCV. Oder sonstigen Bildberabeitungs-Libraries. Und wenn du ganz viel Glück hast ist die Kombination GCC/ARM dabei <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/2392693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392693</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 03 Apr 2014 22:28:12 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 22:33:38 GMT]]></title><description><![CDATA[<p>Schade. <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="😉"
    /><br />
Aber das klingt ja schonmal vielversprechend:</p>
<pre><code>The ARMv7 architecture introduced the Advanced SIMD extension (NEON) as an optional extension to 
the ARMv7-A and ARMv7-R profiles. NEON technology is a 64/128-bit hybrid SIMD architecture that 
allows up to 16 data elements to be processed in parallel, thus accelerating media and signal processing 
applications.
</code></pre>
<p>[url]<br />
<a href="http://www.incubesol.com/images/Optimization%20of%20Multimedia%20Codecs%20using%20ARM%20NEON.pdf" rel="nofollow">http://www.incubesol.com/images/Optimization of Multimedia Codecs using ARM NEON.pdf</a><br />
[/url]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392694</guid><dc:creator><![CDATA[flexbex]]></dc:creator><pubDate>Thu, 03 Apr 2014 22:33:38 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 22:46:08 GMT]]></title><description><![CDATA[<p>flexbex schrieb:</p>
<blockquote>
<p>Schade. <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="😉"
    /><br />
Aber das klingt ja schonmal vielversprechend:</p>
<pre><code>The ARMv7 architecture introduced the Advanced SIMD extension (NEON) as an optional extension to 
the ARMv7-A and ARMv7-R profiles. NEON technology is a 64/128-bit hybrid SIMD architecture that 
allows up to 16 data elements to be processed in parallel, thus accelerating media and signal processing 
applications.
</code></pre>
<p>[url]<br />
<a href="http://www.incubesol.com/images/Optimization%20of%20Multimedia%20Codecs%20using%20ARM%20NEON.pdf" rel="nofollow">http://www.incubesol.com/images/Optimization of Multimedia Codecs using ARM NEON.pdf</a><br />
[/url]</p>
</blockquote>
<p>prächtig.<br />
Damit komme ich auf <a href="http://gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html" rel="nofollow">http://gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html</a><br />
Damit haste ja praktisch schon gewonnen: Beim googlen der Intrinsics müssen ja Quellcodes auftauchen, die sowas benutzen.</p>
<p>Sicherheitshalber würde ich nochmal mit -mfpu=neon -O3 das Makro vom Threadbeginn messen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392697</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 03 Apr 2014 22:46:08 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 22:58:54 GMT]]></title><description><![CDATA[<p>ich bin jetzt hier gelandet</p>
<pre><code>CFLAGS=-c -DRELEASE -UDEBUG -mfpu=neon -mcpu=cortex-a8 -march=armv7-a -tune=cortex-a8  -Wall -pg -O3
LDFLAGS=-pg -O3 -lgsl -lgslcblas
</code></pre>
<p>leider habe ich aber gsl nicht mit den Flags compiliert. Könnte sein das dann was nich geht</p>
<pre><code>Cortex-A8 and Cortex-A9 can do only two SP FP multiplications per cycle, so you may at most double the performance on those (most popular) CPUs. In practice, ARM CPUs have very low IPC, so it is preferably to unroll the loops as much as possible. If you want ultimate performance, write in assembly: gcc's code generator for ARM is nowhere as good as for x86.

I also recommend to use CPU-specific optimization options: &quot;-O3 -mcpu=cortex-a9 -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mthumb&quot; for Cortex-A9; for Cortex-A15, Cortex-A8 and Cortex-A5 replace -mcpu=-mtune=cortex-a15/a8/a5 accordingly. gcc does not have optimizations for Qualcomm CPUs, so for Qualcomm Scorpion use Cortex-A8 parameters (and also unroll even more than you usually do), and for Qualcomm Krait try Cortex-A15 parameters (you will need a recent version of gcc which supports it).
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2392698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392698</guid><dc:creator><![CDATA[flexbex]]></dc:creator><pubDate>Thu, 03 Apr 2014 22:58:54 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 23:02:34 GMT]]></title><description><![CDATA[<p>ja Super jetzt bin ich schon bei</p>
<pre><code>Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  us/call  us/call  name    
 77.05    101.76   101.76                             FilterFlow_BrutForc_
</code></pre>
<p>ich mach das übrigens über 3000 Bilder und auf jedem bild 2* 140</p>
<p>damit bin ich jetzt bei 1,7us</p>
<p>ma gucken ob da mehr geht <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/2392699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392699</guid><dc:creator><![CDATA[flexbex]]></dc:creator><pubDate>Thu, 03 Apr 2014 23:02:34 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 23:19:47 GMT]]></title><description><![CDATA[<p>Aus Interesse: Hast du die verschiedenen Codevarianten mal verglichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392702</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 03 Apr 2014 23:19:47 GMT</pubDate></item><item><title><![CDATA[Reply to Absolute Differenz von Bild berechnen on Thu, 03 Apr 2014 23:40:06 GMT]]></title><description><![CDATA[<p>Ach so ja das war das was ich gemacht habe</p>
<p>einmal zwei verschiedene ABS funktionen. Die zweite ist schneller gewesen</p>
<pre><code>#define absDiff(a1,a2) (((a1)&gt;(a2))?a1-a2:a2-a1)
</code></pre>
<pre><code>std::abs(a[ix+iy]-b[ix+iy])
</code></pre>
<p>und zwei verschiedene Berchnungsarten einmal mit Define und einmal mit Schleife</p>
<pre><code>#define CalculateDifference(a,b) \
 absDiff(a[0*imSizeX+0],b[0*imSizeX+0])+absDiff(a[0*imSizeX+1],b[0*imSizeX+1])+absDiff(a[0*imSizeX+2],b[0*imSizeX+2])+absDiff(a[0*imSizeX+3],b[0*imSizeX+3])\
+absDiff(a[0*imSizeX+4],b[0*imSizeX+4])+absDiff(a[0*imSizeX+5],b[0*imSizeX+5])+absDiff(a[0*imSizeX+6],b[0*imSizeX+6])+absDiff(a[0*imSizeX+7],b[0*imSizeX+7])\
+absDiff(a[1*imSizeX+0],b[1*imSizeX+0])+absDiff(a[1*imSizeX+1],b[1*imSizeX+1])+absDiff(a[1*imSizeX+2],b[1*imSizeX+2])+absDiff(a[1*imSizeX+3],b[1*imSizeX+3])\
+absDiff(a[1*imSizeX+4],b[1*imSizeX+4])+absDiff(a[1*imSizeX+5],b[1*imSizeX+5])+absDiff(a[1*imSizeX+6],b[1*imSizeX+6])+absDiff(a[1*imSizeX+7],b[1*imSizeX+7])\
+absDiff(a[2*imSizeX+0],b[2*imSizeX+0])+absDiff(a[2*imSizeX+1],b[2*imSizeX+1])+absDiff(a[2*imSizeX+2],b[2*imSizeX+2])+absDiff(a[2*imSizeX+3],b[2*imSizeX+3])\
+absDiff(a[2*imSizeX+4],b[2*imSizeX+4])+absDiff(a[2*imSizeX+5],b[2*imSizeX+5])+absDiff(a[2*imSizeX+6],b[2*imSizeX+6])+absDiff(a[2*imSizeX+7],b[2*imSizeX+7])\
+absDiff(a[3*imSizeX+0],b[3*imSizeX+0])+absDiff(a[3*imSizeX+1],b[3*imSizeX+1])+absDiff(a[3*imSizeX+2],b[3*imSizeX+2])+absDiff(a[3*imSizeX+3],b[3*imSizeX+3])\
+absDiff(a[3*imSizeX+4],b[3*imSizeX+4])+absDiff(a[3*imSizeX+5],b[3*imSizeX+5])+absDiff(a[3*imSizeX+6],b[3*imSizeX+6])+absDiff(a[3*imSizeX+7],b[3*imSizeX+7])\
+absDiff(a[4*imSizeX+0],b[4*imSizeX+0])+absDiff(a[4*imSizeX+1],b[4*imSizeX+1])+absDiff(a[4*imSizeX+2],b[4*imSizeX+2])+absDiff(a[4*imSizeX+3],b[4*imSizeX+3])\
+absDiff(a[4*imSizeX+4],b[4*imSizeX+4])+absDiff(a[4*imSizeX+5],b[4*imSizeX+5])+absDiff(a[4*imSizeX+6],b[4*imSizeX+6])+absDiff(a[4*imSizeX+7],b[4*imSizeX+7])\
+absDiff(a[5*imSizeX+0],b[5*imSizeX+0])+absDiff(a[5*imSizeX+1],b[5*imSizeX+1])+absDiff(a[5*imSizeX+2],b[5*imSizeX+2])+absDiff(a[5*imSizeX+3],b[5*imSizeX+3])\
+absDiff(a[5*imSizeX+4],b[5*imSizeX+4])+absDiff(a[5*imSizeX+5],b[5*imSizeX+5])+absDiff(a[5*imSizeX+6],b[5*imSizeX+6])+absDiff(a[5*imSizeX+7],b[5*imSizeX+7])\
+absDiff(a[6*imSizeX+0],b[6*imSizeX+0])+absDiff(a[6*imSizeX+1],b[6*imSizeX+1])+absDiff(a[6*imSizeX+2],b[6*imSizeX+2])+absDiff(a[6*imSizeX+3],b[6*imSizeX+3])\
+absDiff(a[6*imSizeX+4],b[6*imSizeX+4])+absDiff(a[6*imSizeX+5],b[6*imSizeX+5])+absDiff(a[6*imSizeX+6],b[6*imSizeX+6])+absDiff(a[6*imSizeX+7],b[6*imSizeX+7])\
+absDiff(a[7*imSizeX+0],b[7*imSizeX+0])+absDiff(a[7*imSizeX+1],b[7*imSizeX+1])+absDiff(a[7*imSizeX+2],b[7*imSizeX+2])+absDiff(a[7*imSizeX+3],b[7*imSizeX+3])\
+absDiff(a[7*imSizeX+4],b[7*imSizeX+4])+absDiff(a[7*imSizeX+5],b[7*imSizeX+5])+absDiff(a[7*imSizeX+6],b[7*imSizeX+6])+absDiff(a[7*imSizeX+7],b[7*imSizeX+7])\
</code></pre>
<pre><code>#define CalculateDifference(a,b)\
	uint32_t ergebniss=0;\
	for(int16_t iy=0; iy&lt;8*imSizeX; iy+=imSizeX) { \
		for(int16_t ix=0; ix&lt;8; ix++) { \
			ergebniss+=std::abs(a[ix+iy]-b[ix+iy]) ;\
		}\
	}\
</code></pre>
<p>Ergebnis zwischen std::abs und #define absDiff(a1,a2) (((a1)&gt;(a2))?a1-a2:a2-a1)<br />
hat std::abs gewonnen</p>
<p>zwischen schleife und großem define gabs keinen Unterschied.</p>
<p>Deshalb würd ich wohl die schleife wegen der Lesbarkeit nehmen. Bei der schleife war's besser wenn ich inkrementiere als dekrementiere. kommisch hatte es immer anders rum gelernt.<br />
war aber auch nur geringfügig der Unterschied</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392704</guid><dc:creator><![CDATA[flexbex]]></dc:creator><pubDate>Thu, 03 Apr 2014 23:40:06 GMT</pubDate></item></channel></rss>