<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"MS Gothic";
        panose-1:2 11 6 9 7 2 5 8 2 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@MS Gothic";
        panose-1:2 11 6 9 7 2 5 8 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:12.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle21
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:12002343;
        mso-list-template-ids:1330573950;}
@list l1
        {mso-list-id:1448307439;
        mso-list-template-ids:838369266;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style>
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">Hi Min Chen,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Thanks for the suggestion.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">I tried several patches to avoid using adalp however all my changes produced slower code:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">For example,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Before:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">           ssim_4x4x2_core  30.69x   13.39           410.85<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">After:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">       ssim_4x4x2_core      27.33x    15.01                    410.15<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">with the following change:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">@@ -1707,31 +1707,37 @@ function x265_ssim_4x4x2_core_neon<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     uaddl           v29.8h, v4.8b, v5.8b<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     uaddlp          v30.4s, v16.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     uaddlp          v31.4s, v24.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    uaddlp          v0.4s, v17.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    uaddlp          v1.4s, v18.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    uaddlp          v4.4s, v19.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    uaddlp          v5.4s, v20.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     uaddw           v28.8h, v28.8h, v2.8b<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     uaddw           v29.8h, v29.8h, v6.8b<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    uadalp          v30.4s, v17.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    add             v0.4s, v0.4s, v1.4s<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    add             v4.4s, v4.4s, v5.4s<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    uaddlp          v2.4s, v21.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    uaddlp          v6.4s, v22.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    add             v30.4s, v30.4s, v0.4s<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    add             v2.4s, v2.4s, v4.4s<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     uadalp          v31.4s, v25.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     uaddw           v28.8h, v28.8h, v3.8b<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     uaddw           v29.8h, v29.8h, v7.8b<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    uadalp          v30.4s, v18.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    add             v30.4s, v30.4s, v6.4s<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    uaddlp          v3.4s, v23.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    add             v30.4s, v30.4s, v2.4s<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     uadalp          v31.4s, v26.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     uaddlp          v28.4s, v28.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     uaddlp          v29.4s, v29.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    uadalp          v30.4s, v19.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    add             v30.4s, v30.4s, v3.4s<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     uadalp          v31.4s, v27.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     addp            v28.4s, v28.4s, v28.4s<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     addp            v29.4s, v29.4s, v29.4s<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    uadalp          v30.4s, v20.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    addp            v31.4s, v31.4s, v31.4s<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    uadalp          v30.4s, v21.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    uadalp          v30.4s, v22.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    uadalp          v30.4s, v23.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     addp            v30.4s, v30.4s, v30.4s<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    addp            v31.4s, v31.4s, v31.4s<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     st4             {v28.2s, v29.2s, v30.2s, v31.2s}, [x4]<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     ret<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">I think it is fine to use uadalp as the instruction is pipelined.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Neoverse-N1 SWOG says: latency for UADALP is “4(1)”<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">with Note 2. “Other accumulate pipelines also support late-forwarding of accumulate operands from similar μOPs, allowing a typical sequence of such μOPs to issue one every cycle (accumulate latency shown in
 parentheses).”<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">The accumulate in the reduction chain only takes 1 cycle, which is hard to beat with plain “add” operations that take 2 cycles as in the above change.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">I was able to slightly improve performance by early starting the longest reduction chain.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">See the attached patch.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Before:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">           ssim_4x4x2_core  30.69x   13.39           410.85<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">After:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">       ssim_4x4x2_core      31.03x    13.32                    413.45<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Sebastian<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="color:black">From: </span></b><span style="color:black">x265-devel <x265-devel-bounces@videolan.org> on behalf of chen <chenm003@163.com><br>
<b>Reply-To: </b>Development for x265 <x265-devel@videolan.org><br>
<b>Date: </b>Saturday, August 7, 2021 at 2:20 AM<br>
<b>To: </b>Development for x265 <x265-devel@videolan.org><br>
<b>Subject: </b>RE: [EXTERNAL] [x265] [arm64] port ssim_4x4x2_core<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
</div>
<div>
<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0" style="border-collapse:collapse">
<tbody>
<tr style="height:15.25pt">
<td width="1123" valign="top" style="width:842.35pt;border:solid #ED7D31 1.5pt;padding:0in 5.4pt 0in 5.4pt;height:15.25pt">
<p><strong><span style="font-family:"Calibri",sans-serif;color:black;background:#FFFF99">CAUTION</span></strong><span style="color:black;background:#FFFF99">: This email originated from outside of the organization. Do not click links or open attachments unless
 you can confirm the sender and know the content is safe.</span><o:p></o:p></p>
</td>
</tr>
</tbody>
</table>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black">Hi,<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black">Code looks good.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black">The only comment is UADALP is slower, we can adjust order of sum to avoid it.<o:p></o:p></span></p>
</div>
<p style="margin:0in"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black">Regards,<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black">Min Chen<o:p></o:p></span></p>
</div>
<p style="margin:0in"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black"><o:p> </o:p></span></p>
<p><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black"> 2021-08-07 02:01:13</span><span style="font-size:10.5pt;font-family:"MS Gothic";color:black">,</span><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black">"Pop,
 Sebastian" <spop@amazon.com> <o:p></o:p></span></p>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in" id="isReplyContent">
<p class="MsoNormal"><span style="font-size:11.0pt;color:black">Hi,</span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black">the attached patch ports to arm64 the following kernel:</span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black"> </span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black">ssim_4x4x2_core  30.69x   13.39           410.85</span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black"> </span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black">Ok to commit?</span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black"> </span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black">Thanks,</span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black">Sebastian</span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black"> </span><span style="color:black"><o:p></o:p></span></p>
</blockquote>
</div>
</div>
</div>
</body>
</html>