Re: SISC on Android and the Heap

Chad Albers <[email protected]> Wed, 3 Mar 2010 21:25:42 -0500
Newsgroups gmane.comp.java.sisc.user
Message-ID <[email protected]>
--===============4526460149207435208==
Content-Type: multipart/alternative; boundary=00c09f8e5e35c034f80480f05064

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

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
>>>
>>
>>
>

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

Hi Scott,<div><br></div><div>Thanks for the advice. =C2=A0The heap I&#39;m =
using is from the latest cvs, and it was built using the ant task. =C2=A0If=
 I&#39;m going to change that code as described below, I should probably re=
create 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><div>Chad</d=
iv><div><br></div><div><br></div><div>--<br>Chad Albers<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 Wed, Mar 3, 2010 at 9:12 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;">
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 cl=
ass=3D"h5"><br><br><div class=3D"gmail_quote">On Tue, Mar 2, 2010 at 8:26 P=
M, Chad Albers <span dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]=
m" 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>

--00c09f8e5e35c034f80480f05064--


--===============4526460149207435208==
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
--===============4526460149207435208==
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

--===============4526460149207435208==--