<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1126" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT size=2>A very happy 2003 to you and all, PhiHo!</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>Let's Squeak through another one!</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>Gary</FONT></DIV>
<DIV>&nbsp;</DIV>
<BLOCKQUOTE 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
  <DIV 
  style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
  <A title=phiho.hoang@rogers.com href="mailto:phiho.hoang@rogers.com">PhiHo 
  Hoang</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A 
  title=squeak-dev@lists.squeakfoundation.org 
  href="mailto:squeak-dev@lists.squeakfoundation.org">squeak-dev@lists.squeakfoundation.org</A> 
  </DIV>
  <DIV style="FONT: 10pt arial"><B>Sent:</B> Wednesday, January 01, 2003 12:13 
  AM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> It's now 2003 (was Re: 
  [ENH][VM][FIX] faster garbage collection, and removal of unused vars)</DIV>
  <DIV><BR></DIV>HAPPY NEW YEAR, 
  EVREYONE.<BR><BR>Cheers,<BR><BR>PhiHo.<BR><BR>----- Original Message ----- 
  <BR>From: "John M McIntosh" &lt;<A 
  href="mailto:johnmci@smalltalkconsulting.com">johnmci@smalltalkconsulting.com</A>&gt;<BR>To: 
  &lt;<A 
  href="mailto:squeak-dev@lists.squeakfoundation.org">squeak-dev@lists.squeakfoundation.org</A>&gt;<BR>Sent: 
  Monday, December 30, 2002 3:27 AM<BR>Subject: [ENH][VM][FIX] faster garbage 
  collection, and removal of unused<BR>vars<BR><BR><BR>&gt; This change set 
  provides a 18 - 28% improvement in the GC logic using<BR>&gt; an test image 
  that has 1.1 million objects in it on the PowerPC.<BR>&gt; I won't comment on 
  if this makes any difference on intel, however<BR>&gt; someone might try it 
  and see what happens.<BR>&gt;<BR>&gt; In early December I took a look at the 
  garbage collector and realized<BR>&gt; for the mark logic, at least on the 
  PowerPC, we were moving three key<BR>&gt; variables&nbsp; in and out of memory 
  multiple times per object, versus<BR>&gt; keeping everything in a register or 
  two. Also we managed to make some<BR>&gt; procedure calls for each object we 
  looked at, which is time consuming.<BR>&gt;<BR>&gt; In discussing a possible 
  fix with Tim, we realized that in some cases<BR>&gt; because of inlining, why 
  some global variables actually become local<BR>&gt; variables because 
  different SLANG methods are folded together.<BR>&gt;<BR>&gt; This change set 
  add logic to review variable usage and if possible fold<BR>&gt; variables that 
  only appear in one inlined method into a declaration<BR>&gt; within the one 
  method and dropped them from the globals. Right now I<BR>&gt; only deal with 
  interp.c, and I've not really studied say variables<BR>&gt; across N methods 
  where N is &gt; 2 but say &lt; 6 to understand what could be<BR>&gt; done with 
  a bit more tweaking.<BR>&gt;<BR>&gt; Interesting enough these variables 
  are:<BR>&gt; field, parentField, child in the Mark Logic<BR>&gt; cntx, val in 
  the interpret routine.<BR>&gt;<BR>&gt; A bit of slang changing was also done 
  to:<BR>&gt;<BR>&gt; 1) Provide an array headerTypeBytes, a lookup array for 
  the header byte<BR>&gt; length calculation versus doing a couple of IF 
  statements.<BR>&gt; 2) A few restructuring hints to ensure procedure calls 
  actually become<BR>&gt; inlined, where in the past they violated an inlining 
  rule.<BR>&gt; 3) Some really large routines in the compacting logic were 
  broken into<BR>&gt; multiple routines, because the logic is really in multiple 
  steps and<BR>&gt; this helps the compiler (ah stupid compilers) deal with 
  register<BR>&gt; allocation better. Also it helps one think about why we have 
  multiple<BR>&gt; steps.<BR>&gt;<BR>&gt; I think a bit more work could be done 
  in this area, but I'll look for<BR>&gt; feedback first.<BR>&gt;<BR>&gt; Also 
  I've moved the logic from voidIsNotInt that dealt with ensuring<BR>&gt; bogus 
  unused variables are deleted into this change set.<BR>&gt;<BR>&gt; Now for the 
  Globals as a structure logic, I've attached an addendum<BR>&gt; change set 
  (GCMakeItFasterGStruct-JMM.6.cs.gz) to provide the following<BR>&gt; feature: 
  Declare foo as a pointer to the foo structure as a local, this<BR>&gt; makes 
  for better powerpc code which improves overall performance by a<BR>&gt; few 
  percentage points. You also need this changeset because of some<BR>&gt; 
  structure changes if you've filed in the globals as a structure 
  changes<BR>&gt; sets, and want the faster GC speed.<BR>&gt;<BR>&gt; --<BR>&gt; 
  ========================================================================<BR>&gt; 
  ===<BR>&gt; John M. McIntosh &lt;<A 
  href="mailto:johnmci@smalltalkconsulting.com">johnmci@smalltalkconsulting.com</A>&gt; 
  1-800-477-2659<BR>&gt; Corporate Smalltalk Consulting Ltd.&nbsp; <A 
  href="http://www.smalltalkconsulting.com">http://www.smalltalkconsulting.com</A><BR>&gt; 
  ========================================================================<BR>&gt; 
  ===<BR>&gt;<BR><BR></BLOCKQUOTE></BODY></HTML>