<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Bitmap filter</title>
		<link>http://www.allegro.cc/forums/view/590366</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 03 Mar 2007 12:40:46 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Through the analysis of my code I determined that the following is the slowest part of one of my algorithms:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> Transform<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> in<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> ret <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap_ex" target="_blank"><span class="a">create_bitmap_ex</span></a><span class="k2">(</span><span class="n">8</span>, in-&gt;w, in-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  </td></tr><tr><td class="number">5</td><td>  <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> ret-&gt;h<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">6</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> ret-&gt;w<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">8</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>      <span class="k1">int</span> dispX <span class="k3">=</span> fn<span class="k2">(</span>x<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>      <span class="k1">int</span> dispY <span class="k3">=</span> fn<span class="k2">(</span>y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td>      <span class="k1">if</span><span class="k2">(</span>dispX <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">13</td><td>        dispX <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>      <span class="k1">if</span><span class="k2">(</span>dispY <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">15</td><td>        dispY <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>&#160;</td></tr><tr><td class="number">17</td><td>      <span class="k1">if</span><span class="k2">(</span>dispX <span class="k3">&gt;</span><span class="k3">=</span> ret-&gt;w<span class="k2">)</span></td></tr><tr><td class="number">18</td><td>        dispX <span class="k3">=</span> ret-&gt;w <span class="k3">-</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>      <span class="k1">if</span><span class="k2">(</span>dispY <span class="k3">&gt;</span><span class="k3">=</span> ret-&gt;h<span class="k2">)</span></td></tr><tr><td class="number">20</td><td>        dispY <span class="k3">=</span> ret-&gt;h <span class="k3">-</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td>      ret-&gt;line<span class="k2">[</span>y<span class="k2">]</span><span class="k2">[</span>x<span class="k2">]</span> <span class="k3">=</span> in-&gt;line<span class="k2">[</span>dispY<span class="k2">]</span><span class="k2">[</span>dispX<span class="k2">]</span><span class="k2">;</span><span class="c">//A</span></td></tr><tr><td class="number">23</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">24</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">25</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>in<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>  <span class="k1">return</span> ret<span class="k2">;</span></td></tr><tr><td class="number">27</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Removing the statement A makes the code run 10x faster. Am I doing this correctly? Both bitmaps are memory bitmaps.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sat, 03 Mar 2007 12:09:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Have you tried compiling your code with -O2 or whatever optimizations your compiler uses? If accessing memory slows your code way down this may not help much, but then nothing would I suppose.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Sat, 03 Mar 2007 12:21:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, consider that you&#39;re allocating memory for a new bitmap every time you run this routine, and you&#39;re calling fn() twice for every pixel. Depending on what fn() does, that might be what&#39;s holding it up. But the bitmap allocation could be slowing it down too.</p><p>If you could describe the effect you&#39;re trying to achieve we might be able to come up with an alternate method of doing it that would be faster.</p><p>--- Kris Asick (Gemini)<br />--- <a href="http://www.pixelships.com">http://www.pixelships.com</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Sat, 03 Mar 2007 12:23:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, this is sort of embarrassing... Indeed the equalization does not take any time at all, and the bottle neck actually occurs in the fn function... Apparently, when I remove the equalization statement(marked A in the code) the optimization routine of the compiler removes the calls of the fn(), thus leading me to believe that it was actually the equalization that was at fault. I discovered this by manually removing the calls to the fn and then testing whether the removal of the equalization did anything... It did not.</p><p>The fn indeed needs to be optimized, but that is a question for another time.</p><p>Thanks...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sat, 03 Mar 2007 12:40:46 +0000</pubDate>
	</item>
</rss>
