<html><body><div style="color:#000; background-color:#fff; font-family:arial, helvetica, sans-serif;font-size:12pt"><a href="mailto:llvmdev%40cs.uiuc.edu?Subject=Re%3A%20%5BLLVMdev%5D%20LLVM%27s%20Pre-allocation%20Scheduler%20Tested%20against%20a%0A%20Branch-and-Bound%20Scheduler&In-Reply-To=%3C5066CF3A.5020007%40free.fr%3E" title="[LLVMdev] LLVM's Pre-allocation Scheduler Tested against a Branch-and-Bound Scheduler">
       </a><div><b>Duncan,</b></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><b><br></b></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal; font-weight: bold;"><b>Yes, there is a significant random variance among runs for some (but not all) SPEC benchmarks (examples are libquantum, bwaves and cactus). However, we run a complete SPEC test with three or five iterations after every significant change we make to the code and make sure that we reproduce all previously measured differences. If we can't reproduce some previously seen result, that flags a bug in our latest changes that we trace and fix. For the production test that was used to generate the results for the paper, we ran SPEC using 9 iterations (as documented in the paper). Since we have been working on
 this for over a year, making multiple significant changes every week, most of the differences that are reported here have been reproduced tens if not hundreds of times. Any difference that cannot be reproduced many times is reported as a zero difference, hence the many zero differences in the tables.</b></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal; font-weight: bold;"><br></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal; font-weight: bold;"><b>Furthermore, we have analyzed most of the benchmarks on which significant differences has been measured (lbm, gromacs, cactus, sphinx, etc) and identified the cause of the performance difference in each case. In most cases, the cause is a reduction in register pressure in some hot basic block that causes a significant
 reduction in spill code, as reported by the register allocator. For example, on the lbm benchmark, using LLVM's scheduler causes the register allocator to spill 12 virtual registers in the hottest function that amounts  to 99% of the execution time, while using the branch-and-bound scheduler causes the register allocator to spill only 2 registers in that hot function. <br></b></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal; font-weight: bold;"><b><br></b></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal; font-weight: bold;"><b>So, we are quite certain that the reported differences are real and reproducible.</b></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;
 font-weight: bold;"><br></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal; font-weight: bold;"><b>Evan,</b></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal; font-weight: bold;"><br></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal; font-weight: bold;"><b>Please see my inlined answers below:</b></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal; font-weight: bold;"><br></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal; font-weight: bold;"><b>Thanks</b></div><div style="color:
 rgb(0, 0, 0); font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal; font-weight: bold;"><b>-Ghassan<br></b></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal; font-weight: bold;"><br></div><div><br></div>  <div style="font-family: arial,helvetica,sans-serif; font-size: 12pt;"> <div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"> <div dir="ltr"> <font face="Arial" size="2"> <hr size="1">  <b><span style="font-weight: bold;">From:</span></b> Evan Cheng <evan.cheng@apple.com><br> <b><span style="font-weight: bold;">To:</span></b> Ghassan Shobaki <ghassan_shobaki@yahoo.com> <br><b><span style="font-weight: bold;">Cc:</span></b> "llvmdev@cs.uiuc.edu" <llvmdev@cs.uiuc.edu> <br> <b><span style="font-weight: bold;">Sent:</span></b> Saturday, September 29, 2012 9:37
 PM<br> <b><span style="font-weight: bold;">Subject:</span></b> Re: [LLVMdev] LLVM's Pre-allocation Scheduler Tested against a Branch-and-Bound Scheduler<br> </font> </div> <br>
<div id="yiv1598695944"><div><br><div><div>On Sep 29, 2012, at 2:43 AM, Ghassan Shobaki <<a rel="nofollow" ymailto="mailto:ghassan_shobaki@yahoo.com" target="_blank" href="mailto:ghassan_shobaki@yahoo.com">ghassan_shobaki@yahoo.com</a>> wrote:</div><br class="yiv1598695944Apple-interchange-newline"><blockquote type="cite"><div><div style="background-color: rgb(255, 255, 255); font-family: arial,helvetica,sans-serif; font-size: 12pt;"><div class="yiv1598695944yui_3_2_0_19_134890386454083" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">Hi,<br><br>We are currently working on revising a journal article that describes
 our work on pre-allocation scheduling using LLVM and have some questions about LLVM's pre-allocation scheduler. The answers to these question will help us better document and analyze the results of our benchmark tests that compare our algorithm with LLVM's pre-allocation scheduling algorithm.<br><br>First, here is a brief description of our work:<br><br>We have developed a combinatorial algorithm for balancing instruction-level parallelism (ILP) and register pressure (RP) during pre-allocation scheduling. The algorithm is based on a branch-and-bound (B&B) approach, wherein the objective function is a linear combination of schedule length and register pressure. We have implemented this algorithm and integrated it into LLVM 2.9 as an alternate pre-allocation scheduler. Then we compared the performance of our (B&B) scheduler with that of LLVM's default scheduler on x86 (BURR scheduler on x86-32 and ILP on x86-64) using SPEC CPU2006. The results
 show that our B&B scheduler significantly improves the performance of some benchmarks relative to LLVM's default scheduler by up to 21%. The geometric-mean speedup on FP2006 is about 2.4% across the entire suite. We then observed that LLVM's ILP scheduler on x86-64 uses "rough" latency values. So, we added the precise latency values published by Agner (http://www.agner.org/optimize/) and that led to more speedup relative to LLVM's ILP scheduler on some benchmarks. The most significant gain from adding precise latencies was on the gromacs benchmark, which has a high degree of ILP. I am attaching the benchmarking results on x86-64 using both LLVM's rough latencies and Agner's precise latencies:<br><br>This work makes two points:<br><br></div><div class="yiv1598695944yui_3_2_0_19_134890386454089" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">-A B&B 
algorithm can discover significantly better schedules than a heuristic 
can do for some larger hard-to-schedule blocks, and if such blocks 
happen to occur in hot code, their scheduling will have a substantial 
impact on 
performance.</div><div class="yiv1598695944yui_3_2_0_19_134890386454091" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">-
 A B&B algorithm is generally slower than a heuristic, but 
it is not a slow as most people think. By applying such an algorithm 
selectively to the hot blocks that are likely to benefit from it and 
setting some compile-time budget, a significant performance gain may be 
achieved with a relatively small increase in compile time.<br></div><div class="yiv1598695944yui_3_2_0_19_134890386454093" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br></div><div class="yiv1598695944yui_3_2_0_19_134890386454095" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">My questions are:</div><div class="yiv1598695944yui_3_2_0_19_134890386454097" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br></div><div class="yiv1598695944yui_3_2_0_19_134890386454099" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">1. Our current experimental results are based on LLVM 2.9. We 
definitely plan on upgrading to the latest LLVM version in our future 
work, but is there a fundamentally compelling reason for us to upgrade
 now to 3.1 for the sake of making the above points in the publication? <br></div></div></div></blockquote><div><br></div>Yes there is. While the pre-allocation scheduler has not had algorithmic changes during the past year it has received minor tweaks which can impact performance. Also note the scheduler is on its way out. I don't know when the article will be published. But it's possible by the time the paper is published, you would be essentially comparing against deprecated technology.</div><div><br></div><div>Ghassan: Are there any benchmarking results that quantify the impact of these tweaks? <br>I remember reading on this list that the current scheduler will be replaced by a new scheduler, but will the new scheduler be using any new algorithms for reducing register pressure and balancing register pressure and ILP? I mean some new algorithmic technique that is fundamentally different from the current greedy heuristic approach that uses the
 Sethi-Ullman number as a priority scheme for register pressure and the critical-path distance as a priority scheme for ILP and makes a greedy choice between the two schemes depending on whether the current register pressure is above or below a certain threshold. If yes, can you point me to some LLVM documents or academic publications that describe this new algorithm? <br><blockquote type="cite"><div><div style="background-color: rgb(255, 255, 255); font-family: arial,helvetica,sans-serif; font-size: 12pt;"><div class="yiv1598695944yui_3_2_0_19_1348903864540101" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br></div><div class="yiv1598695944yui_3_2_0_19_1348903864540103" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">2.
 The BURR scheduler on x86-32 appears to set all latencies to one (which
 makes it a pure RR scheduler with no ILP), while the ILP scheduler on 
x86-64 appears to set all latencies to 10 expect for a few long-latency 
instructions. For the
 sake of documenting this in the paper, does anyone know (or can point 
me to) a precise description of how the scheduler sets latency values? 
In the revised paper, I will add experimental results based on precise 
latency values (see the attached spreadsheet) and would like to clearly 
document how LLVM's rough latencies for x86 are determined.<br></div></div></div></blockquote><div><br></div>I don't think your information is correct. The ILP scheduler is not setting the latencies to 10. LLVM does not have machine models for x86 (except for atom) so it's using a uniform latency model (one cycle).<br><br>Ghassan: I know that LLVM does not have a machine model for x86, but as far as latency is concerned, setting all latencies to one means totally ignoring ILP and scheduling for the sole objective of reducing register pressure. That's what the BURR scheduler does on x86-32, but on x86-64 the default scheduler is the ILP scheduler, which tries to do some minimal ILP scheduling. I am 100% sure that this ILP scheduler sets some latency values to 10, because I actually print the latency values and look at them. I have not attempted to do a thorough study that identifies the latency value used for each instruction, but apparently most
 latencies are set to one except a few long-latency instructions such as DIV. I am looking for a more precise documentation of how the ILP scheduler sets these latencies.<br></div><div><br><blockquote type="cite"><div><div style="background-color: rgb(255, 255, 255); font-family: arial,helvetica,sans-serif; font-size: 12pt;"><div class="yiv1598695944yui_3_2_0_19_1348903864540105" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br></div><div class="yiv1598695944yui_3_2_0_19_1348903864540107" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">3.
 Was the choice to use rough latency values in the ILP scheduler based 
on the fact that using precise latencies makes it much harder for a 
heuristic non-backtracking scheduler to balance ILP and RP or the choice
 was made simply because nobody bothered to write an x86 itinerary?  </div></div></div></blockquote><div><br></div>No one has bothered to write the itinerary.</div><div><br><blockquote type="cite"><div><div style="background-color: rgb(255, 255, 255); font-family: arial,helvetica,sans-serif; font-size: 12pt;"><div class="yiv1598695944yui_3_2_0_19_1348903864540109" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br></div><div class="yiv1598695944yui_3_2_0_19_1348903864540111" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">4.
 Does the ILP scheduler ever consider scheduling a stall (leaving a 
cycle empty) when there are ready instructions? Here is a small hypothetical example that explains what I mean:</div><div class="yiv1598695944yui_3_2_0_19_1348903864540113" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br>Suppose
 that at Cycle C the register pressure (RP) is equal to the physical 
limit and all ready instructions in that cycle start new live ranges, 
thus increasing the RP above the physical register limit. However, in a 
later cycle C+Delta some instruction X that closes a currently open live
 range will become ready. If the objective is minimizing RP, the right
 choice to make in this case is leaving Cycles C through C+Delta-1 empty
 and scheduling Instruction X in Cycle C+Delta. Otherwise, we will be 
increasing the RP. Does the ILP scheduler ever make such a choice or it will 
always schedule an instruction when the ready list is not empty?<br></div></div></div></blockquote><div><br></div>I don't believe so.<br>Ghassan: That can lead to significant increases in register pressure for basic blocks having many long-latency instructions, do you agree? Do you know if the new scheduling algorithm is going to resolve this problem? That's a very hard problem to solve. <br></div><div><br></div><div>Evan</div><div><br><blockquote type="cite"><div><div style="background-color: rgb(255, 255, 255); font-family: arial,helvetica,sans-serif; font-size: 12pt;"><div class="yiv1598695944yui_3_2_0_19_1348903864540115" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br>Thank you in advance!<br></div><div class="yiv1598695944yui_3_2_0_19_1348903864540123" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style:
 normal;">-Ghassan  <br></div><div class="yiv1598695944yui_3_2_0_19_1348903864540125" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br></div><div class="yiv1598695944yui_3_2_0_19_1348903864540129" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">Ghassan Shobaki</div><div class="yiv1598695944yui_3_2_0_19_1348903864540131" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">Assistant Professor</div><div class="yiv1598695944yui_3_2_0_19_1348903864540133" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">Department of Computer Science</div><div class="yiv1598695944yui_3_2_0_19_1348903864540135" style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color:
 transparent; font-style: normal;">Princess Sumaya University for Technology</div><div>Amman, Jordan</div><div><br></div><div style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">Attachments inlined:</div><div style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br></div><div style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">Rough Latencies</div><div style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br></div><div style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">
 </div><table width="481" border="0" cellpadding="0" cellspacing="0"><colgroup><col style="width: 81pt;" width="108">
 <col style="width: 114pt;" width="152">
 <col style="width: 69pt;" width="92">
 <col style="width: 97pt;" width="129">
 </colgroup><tbody><tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl22" style="height: 12.75pt; width: 81pt;" width="108" height="17">Benchmark</td>
  <td class="yiv1598695944xl22" style="width: 114pt;" width="152">Branch-and-Bound</td>
  <td class="yiv1598695944xl22" style="width: 69pt;" width="92">LLVM</td>
  <td class="yiv1598695944xl22" style="width: 97pt;" width="129"><br></td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl22" style="height: 12.75pt;" height="17"><br></td>
  <td class="yiv1598695944xl22">SPEC Score</td>
  <td class="yiv1598695944xl22">SPEC Score</td>
  <td class="yiv1598695944xl22">% Score Difference</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">400.perlbench</td>
  <td class="yiv1598695944xl23">21.2</td>
  <td class="yiv1598695944xl23">20.2</td>
  <td class="yiv1598695944xl24">4.95%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">401.bzip2</td>
  <td class="yiv1598695944xl23">13.9</td>
  <td class="yiv1598695944xl23">13.6</td>
  <td class="yiv1598695944xl24">2.21%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">403.gcc</td>
  <td class="yiv1598695944xl23">19.5</td>
  <td class="yiv1598695944xl23">19.8</td>
  <td class="yiv1598695944xl24">-1.52%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">429.mcf</td>
  <td class="yiv1598695944xl23">20.5</td>
  <td class="yiv1598695944xl23">20.5</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">445.gobmk</td>
  <td class="yiv1598695944xl23">18.6</td>
  <td class="yiv1598695944xl23">18.6</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">456.hmmer</td>
  <td class="yiv1598695944xl23">11.1</td>
  <td class="yiv1598695944xl23">11.1</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">458.sjeng</td>
  <td class="yiv1598695944xl23">19.3</td>
  <td class="yiv1598695944xl23">19.3</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">462.libquantum</td>
  <td class="yiv1598695944xl23">39.5</td>
  <td class="yiv1598695944xl23">39.5</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">464.h264ref</td>
  <td class="yiv1598695944xl23">28.5</td>
  <td class="yiv1598695944xl23">28.5</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">471.omnetpp</td>
  <td class="yiv1598695944xl23">15.6</td>
  <td class="yiv1598695944xl23">15.6</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">473.astar</td>
  <td class="yiv1598695944xl23">13</td>
  <td class="yiv1598695944xl23">13</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">483.xalancbmk</td>
  <td class="yiv1598695944xl23">21.9</td>
  <td class="yiv1598695944xl23">21.9</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl22" style="height: 12.75pt;" height="17">GEOMEAN</td>
  <td class="yiv1598695944xl22">19.0929865</td>
  <td class="yiv1598695944xl22">19.00588287</td>
  <td class="yiv1598695944xl25">    0.46%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">410.bwaves<span style=""> </span></td>
  <td class="yiv1598695944xl23">15.2</td>
  <td class="yiv1598695944xl23">15.2</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">416.gamess</td>
  <td class="yiv1598695944xl23">CE</td>
  <td class="yiv1598695944xl23">CE</td>
  <td class="yiv1598695944xl24">#VALUE!</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">433.milc<span style=""> </span></td>
  <td class="yiv1598695944xl23">19</td>
  <td class="yiv1598695944xl23">18.6</td>
  <td class="yiv1598695944xl24">2.15%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">434.zeusmp<span style="">   </span></td>
  <td class="yiv1598695944xl23">14.2</td>
  <td class="yiv1598695944xl23">14.2</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">435.gromacs<span style="">      </span></td>
  <td class="yiv1598695944xl23">11.6</td>
  <td class="yiv1598695944xl23">11.3</td>
  <td class="yiv1598695944xl24">2.65%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">436.cactusADM</td>
  <td class="yiv1598695944xl23">8.31</td>
  <td class="yiv1598695944xl23">7.89</td>
  <td class="yiv1598695944xl24">5.32%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">437.leslie3d</td>
  <td class="yiv1598695944xl23">11</td>
  <td class="yiv1598695944xl23">11</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">444.namd<span style="">  </span></td>
  <td class="yiv1598695944xl23">16</td>
  <td class="yiv1598695944xl23">16</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">447.dealII</td>
  <td class="yiv1598695944xl23">25.4</td>
  <td class="yiv1598695944xl23">25.4</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">450.soplex</td>
  <td class="yiv1598695944xl23">26.1</td>
  <td class="yiv1598695944xl23">26.1</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">453.povray</td>
  <td class="yiv1598695944xl23">20.5</td>
  <td class="yiv1598695944xl23">20.5</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">454.calculix</td>
  <td class="yiv1598695944xl23">8.44</td>
  <td class="yiv1598695944xl23">8.3</td>
  <td class="yiv1598695944xl24">1.69%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">459.GemsFDTD<span style=""> </span></td>
  <td class="yiv1598695944xl23">10.7</td>
  <td class="yiv1598695944xl23">10.7</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">465.tonto</td>
  <td class="yiv1598695944xl23">CE</td>
  <td class="yiv1598695944xl23">CE</td>
  <td class="yiv1598695944xl24">#VALUE!</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">470.lbm</td>
  <td class="yiv1598695944xl23">38.1</td>
  <td class="yiv1598695944xl23">31.5</td>
  <td class="yiv1598695944xl24">20.95%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">481.wrf</td>
  <td class="yiv1598695944xl23">11.6</td>
  <td class="yiv1598695944xl23">11.6</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">482.sphinx3</td>
  <td class="yiv1598695944xl23">28.2</td>
  <td class="yiv1598695944xl23">26.9</td>
  <td class="yiv1598695944xl24">4.83%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl22" style="height: 12.75pt;" height="17">GEOMEAN</td>
  <td class="yiv1598695944xl22">15.91486307</td>
  <td class="yiv1598695944xl22">15.54419555</td>
  <td class="yiv1598695944xl25">   2.38%</td>
 </tr>
</tbody></table><div style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br></div><div style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">Precise Latencies</div><div style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br></div><div style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;">
 </div><table width="465" border="0" cellpadding="0" cellspacing="0"><colgroup><col style="width: 81pt;" width="108">
 <col style="width: 102pt;" width="136">
 <col style="width: 69pt;" width="92">
 <col style="width: 97pt;" width="129">
 </colgroup><tbody><tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl22" style="height: 12.75pt; width: 81pt;" width="108" height="17">Benchmark</td>
  <td class="yiv1598695944xl22" style="width: 102pt;" width="136">Branch-and-Bound</td>
  <td class="yiv1598695944xl22" style="width: 69pt;" width="92">LLVM</td>
  <td class="yiv1598695944xl22" style="width: 97pt;" width="129"><br></td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl22" style="height: 12.75pt;" height="17"><br></td>
  <td class="yiv1598695944xl22">SPEC Score</td>
  <td class="yiv1598695944xl22">SPEC Score</td>
  <td class="yiv1598695944xl22">% Score Difference</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">400.perlbench</td>
  <td class="yiv1598695944xl23">21.2</td>
  <td class="yiv1598695944xl23">20.2</td>
  <td class="yiv1598695944xl24">4.95%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">401.bzip2</td>
  <td class="yiv1598695944xl23">13.9</td>
  <td class="yiv1598695944xl23">13.6</td>
  <td class="yiv1598695944xl24">2.21%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">403.gcc</td>
  <td class="yiv1598695944xl23">19.6</td>
  <td class="yiv1598695944xl23">19.8</td>
  <td class="yiv1598695944xl24">-1.01%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">429.mcf</td>
  <td class="yiv1598695944xl23">20.8</td>
  <td class="yiv1598695944xl23">20.5</td>
  <td class="yiv1598695944xl24">1.46%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">445.gobmk</td>
  <td class="yiv1598695944xl23">18.8</td>
  <td class="yiv1598695944xl23">18.6</td>
  <td class="yiv1598695944xl24">1.08%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">456.hmmer</td>
  <td class="yiv1598695944xl23">11.1</td>
  <td class="yiv1598695944xl23">11.1</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">458.sjeng</td>
  <td class="yiv1598695944xl23">19.3</td>
  <td class="yiv1598695944xl23">19.3</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">462.libquantum</td>
  <td class="yiv1598695944xl23">39.5</td>
  <td class="yiv1598695944xl23">39.5</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">464.h264ref</td>
  <td class="yiv1598695944xl23">28.5</td>
  <td class="yiv1598695944xl23">28.5</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">471.omnetpp</td>
  <td class="yiv1598695944xl23">15.6</td>
  <td class="yiv1598695944xl23">15.6</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">473.astar</td>
  <td class="yiv1598695944xl23">13</td>
  <td class="yiv1598695944xl23">13</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td style="height: 12.75pt;" height="17">483.xalancbmk</td>
  <td class="yiv1598695944xl23">21.9</td>
  <td class="yiv1598695944xl23">21.9</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl22" style="height: 12.75pt;" height="17">GEOMEAN</td>
  <td class="yiv1598695944xl22">19.14131861</td>
  <td class="yiv1598695944xl22">19.00588287  <br></td>
  <td class="yiv1598695944xl25">0.71%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">410.bwaves<span style=""> </span></td>
  <td class="yiv1598695944xl23">15.5</td>
  <td class="yiv1598695944xl23">15.2</td>
  <td class="yiv1598695944xl24">1.97%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">416.gamess</td>
  <td class="yiv1598695944xl23">CE</td>
  <td class="yiv1598695944xl23">CE</td>
  <td class="yiv1598695944xl24">#VALUE!</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">433.milc<span style=""> </span></td>
  <td class="yiv1598695944xl23">19.3</td>
  <td class="yiv1598695944xl23">18.6</td>
  <td class="yiv1598695944xl24">3.76%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">434.zeusmp<span style="">   </span></td>
  <td class="yiv1598695944xl23">14.2</td>
  <td class="yiv1598695944xl23">14.2</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">435.gromacs<span style="">      </span></td>
  <td class="yiv1598695944xl23">12.4</td>
  <td class="yiv1598695944xl23">11.3</td>
  <td class="yiv1598695944xl24">9.73%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">436.cactusADM</td>
  <td class="yiv1598695944xl23">7.7</td>
  <td class="yiv1598695944xl23">7.89</td>
  <td class="yiv1598695944xl24">-2.41%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">437.leslie3d</td>
  <td class="yiv1598695944xl23">11</td>
  <td class="yiv1598695944xl23">11</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">444.namd<span style="">  </span></td>
  <td class="yiv1598695944xl23">16.2</td>
  <td class="yiv1598695944xl23">16</td>
  <td class="yiv1598695944xl24">1.25%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">447.dealII</td>
  <td class="yiv1598695944xl23">25.4</td>
  <td class="yiv1598695944xl23">25.4</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">450.soplex</td>
  <td class="yiv1598695944xl23">26.1</td>
  <td class="yiv1598695944xl23">26.1</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">453.povray</td>
  <td class="yiv1598695944xl23">20.5</td>
  <td class="yiv1598695944xl23">20.5</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">454.calculix</td>
  <td class="yiv1598695944xl23">8.55</td>
  <td class="yiv1598695944xl23">8.3</td>
  <td class="yiv1598695944xl24">3.01%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">459.GemsFDTD<span style=""> </span></td>
  <td class="yiv1598695944xl23">10.5</td>
  <td class="yiv1598695944xl23">10.7</td>
  <td class="yiv1598695944xl24">-1.87%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">465.tonto</td>
  <td class="yiv1598695944xl23">CE</td>
  <td class="yiv1598695944xl23">CE</td>
  <td class="yiv1598695944xl24">#VALUE!</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">470.lbm</td>
  <td class="yiv1598695944xl23">38.8</td>
  <td class="yiv1598695944xl23">31.5</td>
  <td class="yiv1598695944xl24">23.17%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">481.wrf</td>
  <td class="yiv1598695944xl23">11.6</td>
  <td class="yiv1598695944xl23">11.6</td>
  <td class="yiv1598695944xl24">0.00%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl26" style="height: 12.75pt;" height="17">482.sphinx3</td>
  <td class="yiv1598695944xl23">28</td>
  <td class="yiv1598695944xl23">26.9</td>
  <td class="yiv1598695944xl24">4.09%</td>
 </tr>
 <tr style="height: 12.75pt;" height="17">
  <td class="yiv1598695944xl22" style="height: 12.75pt;" height="17">GEOMEAN</td>
  <td class="yiv1598695944xl22">15.96082174</td>
  <td class="yiv1598695944xl22">15.54419555</td>
  <td class="yiv1598695944xl25">    2.68%</td>
 </tr>
</tbody></table><div style="font-size: 16px; font-family: arial,helvetica,sans-serif; background-color: transparent; font-style: normal;"><br></div></div></div><span><x86-64_BB_vs_LLVM_roughLatencies.xls></span><span><x86-64_BB_vs_LLVM_preciseLatencies.xls></span>_______________________________________________<br>LLVM Developers mailing list<br><a rel="nofollow" ymailto="mailto:LLVMdev@cs.uiuc.edu" target="_blank" href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a rel="nofollow" target="_blank" href="http://llvm.cs.uiuc.edu/">http://llvm.cs.uiuc.edu</a><br><a rel="nofollow" target="_blank" href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br></blockquote></div><br></div></div><br><br> </div> </div>  </div></body></html>