Re: SISC on Android and the Heap

Chad Albers <[email protected]> Sat, 6 Mar 2010 11:49:34 -0500
Newsgroups gmane.comp.java.sisc.user
Message-ID <[email protected]>
--===============0295463880970249565==
Content-Type: multipart/alternative; boundary=00c09f8995e4e8e91a0481249d74

--00c09f8995e4e8e91a0481249d74
Content-Type: text/plain; charset=UTF-8

Hi Scott,

I made the changes that your recommended, and removed the dependencies the
ber encoding, and rebuilt the heap.  There's a slight performance improve.
 On my emulator, it now takes 15 seconds to add 3 plus 4.  It takes a full
minute to instantiate a web view, add markup to it, and then query it's
title (that's down 15 seconds).

Here' are the new results from the profiler:
http://www.neomantic.com/images/screenshot3.png - this is for the
instantiate example.  You can see that ber encoding is no longer used.  The
blockage still seems to me to be the ser.* classes.

Do you have any other advice for further optimizations?

Chad

--
Chad Albers
http://www.neomantic.com
(pgp signature available on request)


On Thu, Mar 4, 2010 at 6:07 AM, Scott G. Miller <[email protected]> wrote:

> Yes, you have to rebuild the heap file after that.
>
> Scott
>
>
> On Wed, Mar 3, 2010 at 8:25 PM, Chad Albers <[email protected]> wrote:
>
>> Hi Scott,
>>
>> Thanks for the advice.  The heap I'm using is from the latest cvs, and it
>> was built using the ant task.  If I'm going to change that code as described
>> below, I should probably recreate the heap, right?
>>
>> I made  those changes, and now I get a message saying there is an error
>> loading heap.
>>
>> Chad
>>
>>
>> --
>> Chad Albers
>> http://www.neomantic.com
>> (pgp signature available on request)
>>
>>
>> On Wed, Mar 3, 2010 at 9:12 AM, Scott G. Miller <[email protected]>wrote:
>>
>>> The BerEncoding classes were actually what I suspected might be the
>>> problem.  They're fairly cheap on desktop processors, which can do multiple
>>> arithmetic operations per clock cycle, but may be worse on embedded
>>> processors which can't.
>>>
>>> You might try changing the implementation of readInt in DeserializerImpl
>>> to just datin.readInt(), and writeInt in SerializerImpl to
>>> datin.writeInt().  This would use a bit more space in the heap but save
>>> cycles.
>>>
>>> Are you building the heap with "ant heap" in the source distribution?
>>>
>>> Scott
>>>
>>>
>>> On Tue, Mar 2, 2010 at 8:26 PM, Chad Albers <[email protected]>wrote:
>>>
>>>> Hi Scott,
>>>>
>>>> I did try to create the heap manually by following what happens in
>>>> GenerateHeap.java, just in case building it was quicker than deserializing
>>>> it.  The build failed.
>>>>
>>>> I took your advice about the profiler.  Android, indeed, has one called
>>>> traceview (
>>>> http://developer.android.com/guide/developing/tools/traceview.html).  I
>>>> don't' have much experience with profilers, so the information is murky to
>>>> me.   I set up a trace around line 173 in AppContext.java where
>>>> r.eval("(initalize)"); is called.  Here's as screen shot:
>>>> http://neomantic.com/images/traceview.png
>>>>
>>>> I sorted by 'Exclusive' time, the time inside a method,
>>>> java.io.DataInput comes in on top, but it really has to do with
>>>> sisc/ser/BerEncoding.readBerLong, the 2nd one, one of those sisc.ser.*
>>>> classes.    But I may be reading this wrong.
>>>>
>>>> Do these results tell you anything?  Got any advice on what I should be
>>>> looking for?
>>>>
>>>> Thanks for your help,
>>>>
>>>> Chad
>>>>
>>>>
>>>> --
>>>> Chad Albers
>>>> http://www.neomantic.com
>>>> (pgp signature available on request)
>>>>
>>>>
>>>> On Mon, Mar 1, 2010 at 11:25 AM, Scott G. Miller <[email protected]>wrote:
>>>>
>>>>> On Sun, Feb 28, 2010 at 6:22 PM, Chad Albers <[email protected]>wrote:
>>>>>
>>>>>> I've been plugging away on getting SISC to work on Android, and made
>>>>>> more progress.  But I've hit a major obstacle: serialization and
>>>>>> deserialization is notoriously slow on Android.  Really slow.  Embedded
>>>>>> inside a Android App, SISC takes about 45 seconds to run a simple eval on
>>>>>> the emulator.  Most of that time is spent on (initialize) - which performs a
>>>>>> lot of deserialization on the precompiled heap file.
>>>>>>
>>>>>> My question is can I operate SISC in some way without using the
>>>>>> precompiled heap, and instead loading in the code precompiled in the heap.
>>>>>>  Scott Miller's 2002 paper seems to imply that this is possible, provided
>>>>>> you're willing to take a 10-15 sec performance hit (page 5).
>>>>>>
>>>>>>
>>>>> The alternative to the heap is to load all the startup code from
>>>>> scratch, which is way slower (by about an order of magnitude).   It may be
>>>>> possible however to sacrifice some space (ie a bigger heap) and use a
>>>>> different encoding.  Does the Android platform have a profiler?  Seeing
>>>>> where the bulk of the time is spent during startup may help suggest a
>>>>> different heap storage strategy.
>>>>>
>>>>>
>>>>>> Even if I manage this task, my next question is how often does SISC
>>>>>> use serialization/deserialization during processing...(I suspect a great
>>>>>> deal).
>>>>>>
>>>>>>
>>>>> Code is lazily loaded in using ser/deser during operation, yes, but the
>>>>> bulk of R5RS is available when you hit the prompt.
>>>>>
>>>>> Scott
>>>>>
>>>>
>>>>
>>>
>>
>

--00c09f8995e4e8e91a0481249d74
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Hi Scott,<div><br></div><div>I made the changes that your recommended, and =
removed the dependencies the ber encoding, and rebuilt the heap. =C2=A0Ther=
e&#39;s a slight performance improve. =C2=A0On my emulator, it now takes 15=
 seconds to add 3 plus 4. =C2=A0It takes a full minute to=C2=A0instantiate=
=C2=A0a web view, add markup to it, and then query it&#39;s title (that&#39=
;s down 15 seconds).</div>
<div><br></div><div>Here&#39; are the new results from the profiler:=C2=A0<=
a href=3D"http://www.neomantic.com/images/screenshot3.png">http://www.neoma=
ntic.com/images/screenshot3.png</a> - this is for the instantiate example. =
=C2=A0You can see that ber encoding is no longer used. =C2=A0The blockage s=
till seems to me to be the ser.* classes.</div>
<div><br></div><div>Do you have any other advice for further optimizations?=
</div><div><br></div><div>Chad</div><div><br></div><div>--</div><div>Chad A=
lbers<br><a href=3D"http://www.neomantic.com">http://www.neomantic.com</a><=
br>
(pgp signature available on request)<br>
<br><br><div class=3D"gmail_quote">On Thu, Mar 4, 2010 at 6:07 AM, Scott G.=
 Miller <span dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]">sgmille=
[email protected]</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" styl=
e=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Yes, you have to rebuild the heap file after that.<br><font color=3D"#88888=
8"><br>Scott</font><div><div></div><div class=3D"h5"><br><br><div class=3D"=
gmail_quote">On Wed, Mar 3, 2010 at 8:25 PM, Chad Albers <span dir=3D"ltr">=
&lt;<a href=3D"mailto:[email protected]" target=3D"_blank">calbers@neom=
antic.com</a>&gt;</span> wrote:<br>

<blockquote class=3D"gmail_quote" style=3D"border-left:1px solid rgb(204, 2=
04, 204);margin:0pt 0pt 0pt 0.8ex;padding-left:1ex">Hi Scott,<div><br></div=
><div>Thanks for the advice. =C2=A0The heap I&#39;m using is from the lates=
t cvs, and it was built using the ant task. =C2=A0If I&#39;m going to chang=
e that code as described below, I should probably recreate the heap, right?=
</div>


<div><br></div><div>I made =C2=A0those changes, and now I get a message say=
ing there is an error loading heap. =C2=A0</div><div><br></div><font color=
=3D"#888888"><div>Chad</div><div><br></div><div><br></div></font><div><div>
--<br>Chad Albers<br><a href=3D"http://www.neomantic.com" target=3D"_blank"=
>http://www.neomantic.com</a><br>
(pgp signature available on request)<br>
<br><br></div><div><div></div><div><div class=3D"gmail_quote">On Wed, Mar 3=
, 2010 at 9:12 AM, Scott G. Miller <span dir=3D"ltr">&lt;<a href=3D"mailto:=
[email protected]" target=3D"_blank">[email protected]</a>&gt;</span> wro=
te:<br>

<blockquote class=3D"gmail_quote" style=3D"border-left:1px solid rgb(204, 2=
04, 204);margin:0pt 0pt 0pt 0.8ex;padding-left:1ex">
The BerEncoding classes were actually what I suspected might be the problem=
.=C2=A0 They&#39;re fairly cheap on desktop processors, which can do multip=
le arithmetic operations per clock cycle, but may be worse on embedded proc=
essors which can&#39;t.=C2=A0 <br>



<br>You might try changing the implementation of readInt in DeserializerImp=
l to just datin.readInt(), and writeInt in SerializerImpl to datin.writeInt=
().=C2=A0 This would use a bit more space in the heap but save cycles.=C2=
=A0 <br>



<br>Are you building the heap with &quot;ant heap&quot; in the source distr=
ibution?<br><font color=3D"#888888"><br>Scott</font><div><div></div><div><b=
r><br><div class=3D"gmail_quote">On Tue, Mar 2, 2010 at 8:26 PM, Chad Alber=
s <span dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"=
_blank">[email protected]</a>&gt;</span> wrote:<br>



<blockquote class=3D"gmail_quote" style=3D"border-left:1px solid rgb(204, 2=
04, 204);margin:0pt 0pt 0pt 0.8ex;padding-left:1ex">Hi Scott,<div><br></div=
><div>I did try to create the heap manually by following what happens in Ge=
nerateHeap.java, just in case building it was quicker than deserializing it=
. =C2=A0The build failed.</div>



<div><br></div><div>I took your advice about the profiler. =C2=A0Android, i=
ndeed, has one called traceview (<a href=3D"http://developer.android.com/gu=
ide/developing/tools/traceview.html" target=3D"_blank">http://developer.and=
roid.com/guide/developing/tools/traceview.html</a>). =C2=A0I don&#39;t&#39;=
 have much experience with profilers, so the information is murky to me. =
=C2=A0 I set up a trace around line 173 in AppContext.java where r.eval(&qu=
ot;(initalize)&quot;); is called. =C2=A0Here&#39;s as screen shot:=C2=A0<a =
href=3D"http://neomantic.com/images/traceview.png" target=3D"_blank">http:/=
/neomantic.com/images/traceview.png</a></div>




<div><br></div><div>I sorted by &#39;Exclusive&#39; time, the time inside a=
 method, java.io.DataInput comes in on top, but it really has to do with si=
sc/ser/BerEncoding.readBerLong, the 2nd one, one of those sisc.ser.* classe=
s. =C2=A0 =C2=A0But I may be reading this wrong. =C2=A0</div>




<div><br></div><div>Do these results tell you anything? =C2=A0Got any advic=
e on what I should be looking for?</div><div><br></div><div>Thanks for your=
 help,</div><div><br></div><font color=3D"#888888"><div>Chad</div><div><br>=
</div>



</font><div><div><br clear=3D"all">
--<br>Chad Albers<br><a href=3D"http://www.neomantic.com" target=3D"_blank"=
>http://www.neomantic.com</a><br>(pgp signature available on request)<br>
<br><br></div><div><div></div><div><div class=3D"gmail_quote">On Mon, Mar 1=
, 2010 at 11:25 AM, Scott G. Miller <span dir=3D"ltr">&lt;<a href=3D"mailto=
:[email protected]" target=3D"_blank">[email protected]</a>&gt;</span> wr=
ote:<br>



<blockquote class=3D"gmail_quote" style=3D"border-left:1px solid rgb(204, 2=
04, 204);margin:0pt 0pt 0pt 0.8ex;padding-left:1ex">
<div>On Sun, Feb 28, 2010 at 6:22 PM, Chad Albers <span dir=3D"ltr">&lt;<a =
href=3D"mailto:[email protected]" target=3D"_blank">[email protected]=
om</a>&gt;</span> wrote:<br></div><div class=3D"gmail_quote"><div>
<blockquote class=3D"gmail_quote" style=3D"border-left:1px solid rgb(204, 2=
04, 204);margin:0pt 0pt 0pt 0.8ex;padding-left:1ex">
I&#39;ve been plugging away on getting SISC to work on Android, and made mo=
re progress. =C2=A0But I&#39;ve hit a major obstacle: serialization and des=
erialization is notoriously slow on Android. =C2=A0Really slow. =C2=A0Embed=
ded inside a Android App, SISC takes about 45 seconds to run a simple eval =
on the emulator. =C2=A0Most of that time is spent on (initialize) - which p=
erforms a lot of deserialization on the precompiled heap file.=C2=A0<div>






<br></div><div>My question is can I operate SISC in some way without using =
the precompiled heap, and instead loading in the code precompiled in the he=
ap. =C2=A0Scott Miller&#39;s 2002 paper seems to imply that this is possibl=
e, provided you&#39;re willing to take a 10-15 sec performance hit (page 5)=
.</div>






<div><br></div></blockquote></div><div><br>The alternative to the heap is t=
o load all the startup code from scratch, which is way slower (by about an =
order of magnitude).=C2=A0=C2=A0 It may be possible however to sacrifice so=
me space (ie a bigger heap) and use a different encoding.=C2=A0 Does the An=
droid platform have a profiler?=C2=A0 Seeing where the bulk of the time is =
spent during startup may help suggest a different heap storage strategy.<br=
>





=C2=A0<br></div><div><blockquote class=3D"gmail_quote" style=3D"border-left=
:1px solid rgb(204, 204, 204);margin:0pt 0pt 0pt 0.8ex;padding-left:1ex"><d=
iv></div><div><div><div>Even if I manage this task, my next question is how=
 often does SISC use serialization/deserialization during processing...(I s=
uspect a great deal).</div>





<div><br></div></div></div></blockquote></div><div><br>Code is lazily loade=
d in using ser/deser during operation, yes, but the bulk of R5RS is availab=
le when you hit the prompt. =C2=A0 <br><br>Scott<br></div></div>
</blockquote></div><br></div></div></div>
</blockquote></div><br>
</div></div></blockquote></div><br></div></div></div>
</blockquote></div><br>
</div></div></blockquote></div><br></div>

--00c09f8995e4e8e91a0481249d74--


--===============0295463880970249565==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
--===============0295463880970249565==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Sisc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sisc-users

--===============0295463880970249565==--