<?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[Parallel addieren und subtrahieren]]></title><description><![CDATA[<p>Ich suche nach einer portablen Möglichkeit zwei 16-Bit Ints (-32768 bis +32767) *parallel* zu addieren oder zu subtrahieren. Gibt es hierfür eine effiziente Möglichkeit?</p>
<p><div class="plugin-markdown"><input type="checkbox" id="checkbox12524" checked="true" /><label for="checkbox12524">daraus zu machen?</label></div></p>
<p>Die Ergebnisse werden nur sehr selten benötigt, daher sind die Aufrufe von LowerScore() und UpperScore() fast zu vernachlässigen.</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;

const uint32_t ZERO_LOWER_SCORE = (1UL &lt;&lt; 15);
const uint32_t ZERO_UPPER_SCORE = (1UL &lt;&lt; 31);
const uint32_t ZERO_SCORE = ZERO_LOWER_SCORE + ZERO_UPPER_SCORE;

inline uint32_t MakeScore(int lower, int upper) {
  return static_cast&lt;uint32_t&gt;(lower) + (static_cast&lt;uint32_t&gt;(upper) &lt;&lt; 16);
}

inline int LowerScore(Score score) {
  return (score &amp; 0xFFFF) - ZERO_LOWER_SCORE;
}

inline int UpperScore(Score score) {
  return (score &gt;&gt; 16) - ZERO_LOWER_SCORE;
}

int main() {
  uint32_t s = ZERO_SCORE;
  // Do +- operations in parallel.
  s -= MakeScore(120, 18);
  printf(&quot;lower = %d upper = %d\n&quot;, LowerScore(s), UpperScore(s));
  return 0;
}

// Output: lower = -120 upper = -18
</code></pre>
<p>Danke für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284698/parallel-addieren-und-subtrahieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 20:08:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284698.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Apr 2011 10:48:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Parallel addieren und subtrahieren on Wed, 06 Apr 2011 11:25:02 GMT]]></title><description><![CDATA[<p>Ich suche nach einer portablen Möglichkeit zwei 16-Bit Ints (-32768 bis +32767) *parallel* zu addieren oder zu subtrahieren. Gibt es hierfür eine effiziente Möglichkeit?</p>
<p><div class="plugin-markdown"><input type="checkbox" id="checkbox12524" checked="true" /><label for="checkbox12524">daraus zu machen?</label></div></p>
<p>Die Ergebnisse werden nur sehr selten benötigt, daher sind die Aufrufe von LowerScore() und UpperScore() fast zu vernachlässigen.</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;

const uint32_t ZERO_LOWER_SCORE = (1UL &lt;&lt; 15);
const uint32_t ZERO_UPPER_SCORE = (1UL &lt;&lt; 31);
const uint32_t ZERO_SCORE = ZERO_LOWER_SCORE + ZERO_UPPER_SCORE;

inline uint32_t MakeScore(int lower, int upper) {
  return static_cast&lt;uint32_t&gt;(lower) + (static_cast&lt;uint32_t&gt;(upper) &lt;&lt; 16);
}

inline int LowerScore(Score score) {
  return (score &amp; 0xFFFF) - ZERO_LOWER_SCORE;
}

inline int UpperScore(Score score) {
  return (score &gt;&gt; 16) - ZERO_LOWER_SCORE;
}

int main() {
  uint32_t s = ZERO_SCORE;
  // Do +- operations in parallel.
  s -= MakeScore(120, 18);
  printf(&quot;lower = %d upper = %d\n&quot;, LowerScore(s), UpperScore(s));
  return 0;
}

// Output: lower = -120 upper = -18
</code></pre>
<p>Danke für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045387</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Wed, 06 Apr 2011 11:25:02 GMT</pubDate></item><item><title><![CDATA[Reply to Parallel addieren und subtrahieren on Wed, 06 Apr 2011 10:55:56 GMT]]></title><description><![CDATA[<p>Was genau soll daran parallel sein? Und wozu willst Du das machen? Performance? Platz sparen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045390</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 06 Apr 2011 10:55:56 GMT</pubDate></item><item><title><![CDATA[Reply to Parallel addieren und subtrahieren on Wed, 06 Apr 2011 11:25:21 GMT]]></title><description><![CDATA[<p>Angenommen bei einem Wertepaar (Zwei int16_t) müssen mehrere Mio Additionen und Subtraktionen durchgeführt werden, bevor das Wertepaar zum ersten mal ausgewertet wird. Dann könnte es doch laufzeiteffizienter sein nur noch die Hälfte der Operationen aber mit nur noch einem uint32_t durchzuführen.</p>
<p>Thats the purpose.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045402</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Wed, 06 Apr 2011 11:25:21 GMT</pubDate></item><item><title><![CDATA[Reply to Parallel addieren und subtrahieren on Wed, 06 Apr 2011 11:30:43 GMT]]></title><description><![CDATA[<p>Natürlich hat obige simple Implementierung einen grossen Haken: Man kann immer nur positive Zahlenpaare addieren oder subtrahieren, aber keine negativen.<br />
<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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045414</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Wed, 06 Apr 2011 11:30:43 GMT</pubDate></item><item><title><![CDATA[Reply to Parallel addieren und subtrahieren on Wed, 06 Apr 2011 11:35:48 GMT]]></title><description><![CDATA[<p>Solche sachen können doch von mmx oder sse gemacht werden. Und wenn du nur ne einfache Schleife hast würde der compiler auch für mmx oder sse optimieren können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045417</guid><dc:creator><![CDATA[Osbios]]></dc:creator><pubDate>Wed, 06 Apr 2011 11:35:48 GMT</pubDate></item><item><title><![CDATA[Reply to Parallel addieren und subtrahieren on Wed, 06 Apr 2011 15:31:36 GMT]]></title><description><![CDATA[<p>wenn Du einen</p>
<pre><code>vector&lt;short&gt;
</code></pre>
<p>hast, sollte mit der entsprechenden Compiler-Option schon SSE genommen werden. Darüber hinaus kannst Du Dir noch OpenMP anschauen, da gibt es ein parallel_for, dass das für Deine Zwecke richtige macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045557</guid><dc:creator><![CDATA[gastgast]]></dc:creator><pubDate>Wed, 06 Apr 2011 15:31:36 GMT</pubDate></item><item><title><![CDATA[Reply to Parallel addieren und subtrahieren on Wed, 06 Apr 2011 16:13:08 GMT]]></title><description><![CDATA[<p>Wieso nicht einfach den Subtrahenden negieren, anschließend aus den Subtraktionen Additionen machen und das Ergebnis zum Schluss wieder negieren? Damit handelt es sich nur noch um Additionen auf zwei Werten, was auf einfache Weise vektorisiert werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045574</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 06 Apr 2011 16:13:08 GMT</pubDate></item><item><title><![CDATA[Reply to Parallel addieren und subtrahieren on Fri, 08 Apr 2011 11:20:10 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>:</p>
<p>Weil negieren (~) etwas anderes ist, als den negativen Wert (*= -1) zu bilden (zumindest auf den meisten modernen CPU Architekturen). In einer Zeit als Männer noch Männer und die Schafe sehr nervös waren, war das auch schon mal anders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046316</guid><dc:creator><![CDATA[gastgast]]></dc:creator><pubDate>Fri, 08 Apr 2011 11:20:10 GMT</pubDate></item><item><title><![CDATA[Reply to Parallel addieren und subtrahieren on Fri, 08 Apr 2011 11:47:27 GMT]]></title><description><![CDATA[<p>camper meint hier mit &quot;negieren&quot; ganz sicherlich &quot;negativen Wert bilden&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046328</guid><dc:creator><![CDATA[gastgastgastgast]]></dc:creator><pubDate>Fri, 08 Apr 2011 11:47:27 GMT</pubDate></item><item><title><![CDATA[Reply to Parallel addieren und subtrahieren on Fri, 08 Apr 2011 15:26:38 GMT]]></title><description><![CDATA[<p>mh du sprichst von 2 16bit operationen, also eine 32 bit zahl</p>
<p>wo willst du da performance optimieren?<br />
eine addition (und damit auch subtraktion) ist doch die atomarste operation auf einem pc (oder irre ich mich da? war jedenfalls letztens in der fh noch so)</p>
<p>das einzige was es bringen könnte wäre, wenn du die paar millionen aufrufe in eine formel quetscht, die dann einmal berechnet wird und das ergebnis kommt raus...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046430</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 08 Apr 2011 15:26:38 GMT</pubDate></item><item><title><![CDATA[Reply to Parallel addieren und subtrahieren on Fri, 08 Apr 2011 15:30:36 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>wo willst du da performance optimieren?</p>
</blockquote>
<p>Die Idee ist dass 500.000 Additionen schneller sind als 1.000.000...Die Antwort ist natürlich SSE und das Stichwort ja bereits gefallen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046432</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 08 Apr 2011 15:30:36 GMT</pubDate></item></channel></rss>