<!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> </DIV>
<DIV><FONT size=2>Let's Squeak through another one!</FONT></DIV>
<DIV><FONT size=2></FONT> </DIV>
<DIV><FONT size=2>Gary</FONT></DIV>
<DIV> </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" <<A
href="mailto:johnmci@smalltalkconsulting.com">johnmci@smalltalkconsulting.com</A>><BR>To:
<<A
href="mailto:squeak-dev@lists.squeakfoundation.org">squeak-dev@lists.squeakfoundation.org</A>><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>> This change set
provides a 18 - 28% improvement in the GC logic using<BR>> an test image
that has 1.1 million objects in it on the PowerPC.<BR>> I won't comment on
if this makes any difference on intel, however<BR>> someone might try it
and see what happens.<BR>><BR>> In early December I took a look at the
garbage collector and realized<BR>> for the mark logic, at least on the
PowerPC, we were moving three key<BR>> variables in and out of memory
multiple times per object, versus<BR>> keeping everything in a register or
two. Also we managed to make some<BR>> procedure calls for each object we
looked at, which is time consuming.<BR>><BR>> In discussing a possible
fix with Tim, we realized that in some cases<BR>> because of inlining, why
some global variables actually become local<BR>> variables because
different SLANG methods are folded together.<BR>><BR>> This change set
add logic to review variable usage and if possible fold<BR>> variables that
only appear in one inlined method into a declaration<BR>> within the one
method and dropped them from the globals. Right now I<BR>> only deal with
interp.c, and I've not really studied say variables<BR>> across N methods
where N is > 2 but say < 6 to understand what could be<BR>> done with
a bit more tweaking.<BR>><BR>> Interesting enough these variables
are:<BR>> field, parentField, child in the Mark Logic<BR>> cntx, val in
the interpret routine.<BR>><BR>> A bit of slang changing was also done
to:<BR>><BR>> 1) Provide an array headerTypeBytes, a lookup array for
the header byte<BR>> length calculation versus doing a couple of IF
statements.<BR>> 2) A few restructuring hints to ensure procedure calls
actually become<BR>> inlined, where in the past they violated an inlining
rule.<BR>> 3) Some really large routines in the compacting logic were
broken into<BR>> multiple routines, because the logic is really in multiple
steps and<BR>> this helps the compiler (ah stupid compilers) deal with
register<BR>> allocation better. Also it helps one think about why we have
multiple<BR>> steps.<BR>><BR>> I think a bit more work could be done
in this area, but I'll look for<BR>> feedback first.<BR>><BR>> Also
I've moved the logic from voidIsNotInt that dealt with ensuring<BR>> bogus
unused variables are deleted into this change set.<BR>><BR>> Now for the
Globals as a structure logic, I've attached an addendum<BR>> change set
(GCMakeItFasterGStruct-JMM.6.cs.gz) to provide the following<BR>> feature:
Declare foo as a pointer to the foo structure as a local, this<BR>> makes
for better powerpc code which improves overall performance by a<BR>> few
percentage points. You also need this changeset because of some<BR>>
structure changes if you've filed in the globals as a structure
changes<BR>> sets, and want the faster GC speed.<BR>><BR>> --<BR>>
========================================================================<BR>>
===<BR>> John M. McIntosh <<A
href="mailto:johnmci@smalltalkconsulting.com">johnmci@smalltalkconsulting.com</A>>
1-800-477-2659<BR>> Corporate Smalltalk Consulting Ltd. <A
href="http://www.smalltalkconsulting.com">http://www.smalltalkconsulting.com</A><BR>>
========================================================================<BR>>
===<BR>><BR><BR></BLOCKQUOTE></BODY></HTML>