<div class="gmail_quote">Hi,</div><div class="gmail_quote"><br></div><div class="gmail_quote">I&#39;m also a bit new to NEON, however I hope this brief review can be helpful to you.</div><div class="gmail_quote">So let&#39;s start.</div>
<div class="gmail_quote"><br></div><div class="gmail_quote">2011/4/5 Søren Sandmann Pedersen <span dir="ltr">&lt;<a href="mailto:sandmann@cs.au.dk">sandmann@cs.au.dk</a>&gt;</span></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
From: Søren Sandmann Pedersen &lt;<a href="mailto:ssp@redhat.com">ssp@redhat.com</a>&gt;<br>
<br>
+    /*<br>
+     * &#39;combine_over_ca&#39; replacement<br>
+     *<br>
+     * output: updated dest in d16 - blue, d17 - green, d18 - red<br>
+     */<br>
+    vmvn.8      q12, q12<br>
+    vmull.u8    q6,  d16, d24<br>
+    vmull.u8    q7,  d17, d25<br>
+    vmvn.8      d26, d26<br>
+    vmull.u8    q11, d18, d26<br>
+.endm<br>
+<br></blockquote><div> </div><div>There are some pipeline stalls, destination registers of vmvn will be available at N3.</div><div>I think we can reorder above code like this.</div><div> </div><div><meta http-equiv="content-type" content="text/html; charset=utf-8">vmvn.8      q12, q12</div>
<div><meta http-equiv="content-type" content="text/html; charset=utf-8"><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">vshrn.u16   d16, q2,  #2 // last line of previous block</span></div>
<div><meta http-equiv="content-type" content="text/html; charset=utf-8">vmvn.8      d26, d26<br>vmull.u8    q6,  d16, d24<br>vmull.u8    q7,  d17, d25<br>vmull.u8    q11, d18, d26</div><div> </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

+    vshll.u8    q14, d18, #8<br>
+    vshll.u8    q10, d17, #8<br>
+    vshll.u8    q15, d16, #8<br>
+    vsri.u16    q14, q10, #5<br>
+    vsri.u16    q14, q15, #11<br></blockquote><div> </div><div>It seems there are some what more stalls here.</div></div>See this page. <a href="http://infocenter.arm.com/help/topic/com.arm.doc.ddi0344k/ch16s06s04.html">http://infocenter.arm.com/help/topic/com.arm.doc.ddi0344k/ch16s06s04.html</a><div>
It seems impossible to eliminate all stalls by reordering only in this code block.</div><div>Maybe reordering together with some above code lines would work for this.</div><div><br></div><div><meta http-equiv="content-type" content="text/html; charset=utf-8"><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">vqadd.u8  d18, d2,  d18</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; "><meta http-equiv="content-type" content="text/html; charset=utf-8"><span class="Apple-style-span" style="font-family: arial; font-size: small; border-collapse: separate; ">vshll.u8    q10, d17, #8</span></span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; "><span class="Apple-style-span" style="font-family: arial; font-size: small; border-collapse: separate; "><meta http-equiv="content-type" content="text/html; charset=utf-8">vshll.u8    q14, d18, #8</span></span></div>
<div><meta http-equiv="content-type" content="text/html; charset=utf-8"><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">vqadd.u8  q8,  q0,  q8</span></div>
<div><meta http-equiv="content-type" content="text/html; charset=utf-8">vsri.u16    q14, q10, #5<br>vshll.u8    q15, d16, #8<br>vsri.u16    q14, q15, #11</div><div><br></div><div>This will reduce the stalls but still some are remaining.</div>
<div>Maybe there can be some better ways.</div><div><br></div><div>When we reorder some assembly lines, proper comments should be inserted for the people who tries to understand the code.</div><div>It also make it easy later refactoring or something.</div>
<div><div><div><div><a href="http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ik/CIHDIGCC.html"></a>Although I still have some questions about effectiveness of reordering(SW pipelining) on out-of-order core,</div>
<div>it significantly affects the performance on mostly used in-order superscalar CPUs.</div><div><br></div><div>And <meta http-equiv="content-type" content="text/html; charset=utf-8"><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">pixman_composite_over_n_8888_0565_ca_process_pixblock_head in tail_head block increases code size causing i-cache miss.</span></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">We can think of jumping to head and then return to next part of tail_head block.</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">But it seems difficult to do that without breaking generate_composite_function macro template.</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br></span></font></div><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br>
</span></font></div><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">One last thing is about practical benefits of this fast paths.</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">The most important customer of these fast path functions is glyph rendering.</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">Cairo&#39;s image backend show_glyph() functions composite cached glyph masks with solid color pattern using operator OVER in most cases.</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">When there&#39;re overlaps between glyph boxes (by kerning or something), cairo create a mask equal size with entire text extent,</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">and then accumulate component alpha with operator ADD and then composite using entire mask.</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">So for non-overlapped cases, small sized OVER composite will frequently happen </span></font><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">and small sized ADD composite for overlapped cases.</span></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">We need to focus at the performance of small sized image composition with both operator OVER and ADD.</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br></span></font></div><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">The overhead for small sized images can be approximately identified by comparing rendering times of drawing total n pixels in m times (n/m pixels per one drawing) where m increases start from 1.</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">This can contain function calling overhead, cache overhead, code control overhead, etc.</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br></span></font></div><div>-- <br>Best Regards,<div>Taekyun Kim</div><br>
</div></div></div></div>