Re: SISC on Android and the Heap

"Scott G. Miller" <[email protected]> Wed, 3 Mar 2010 08:12:50 -0600
Newsgroups gmane.comp.java.sisc.user
Message-ID <[email protected]>
--===============6557456111846799370==
Content-Type: multipart/alternative; boundary=00c09f93d6d4d667ff0480e613a7

--00c09f93d6d4d667ff0480e613a7
Content-Type: text/plain; charset=ISO-8859-1

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

--00c09f93d6d4d667ff0480e613a7
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

The BerEncoding classes were actually what I suspected might be the problem=
.=A0 They&#39;re fairly cheap on desktop processors, which can do multiple =
arithmetic operations per clock cycle, but may be worse on embedded process=
ors which can&#39;t.=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=
().=A0 This would use a bit more space in the heap but save cycles.=A0 <br>
<br>Are you building the heap with &quot;ant heap&quot; in the source distr=
ibution?<br><br>Scott<br><br><div class=3D"gmail_quote">On Tue, Mar 2, 2010=
 at 8:26 PM, Chad Albers <span dir=3D"ltr">&lt;<a href=3D"mailto:calbers@ne=
omantic.com">[email protected]</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, =
204, 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 GenerateHeap.java, just in case building it was quicker than deserializ=
ing it. =A0The build failed.</div>
<div><br></div><div>I took your advice about the profiler. =A0Android, inde=
ed, has one called traceview (<a href=3D"http://developer.android.com/guide=
/developing/tools/traceview.html" target=3D"_blank">http://developer.androi=
d.com/guide/developing/tools/traceview.html</a>). =A0I don&#39;t&#39; have =
much experience with profilers, so the information is murky to me. =A0 I se=
t up a trace around line 173 in AppContext.java where r.eval(&quot;(initali=
ze)&quot;); is called. =A0Here&#39;s as screen shot:=A0<a href=3D"http://ne=
omantic.com/images/traceview.png" target=3D"_blank">http://neomantic.com/im=
ages/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. =A0 =A0But I may be reading this wrong. =A0</div>

<div><br></div><div>Do these results tell you anything? =A0Got any advice o=
n what I should be looking for?</div><div><br></div><div>Thanks for your he=
lp,</div><div><br></div><font color=3D"#888888"><div>Chad</div><div><br></d=
iv>
</font><div><div class=3D"im"><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 class=3D"h5"><div class=3D"gmail_quote">=
On Mon, Mar 1, 2010 at 11:25 AM, Scott G. Miller <span dir=3D"ltr">&lt;<a h=
ref=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, =
204, 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, =
204, 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. =A0But I&#39;ve hit a major obstacle: serialization and deseri=
alization is notoriously slow on Android. =A0Really slow. =A0Embedded insid=
e a Android App, SISC takes about 45 seconds to run a simple eval on the em=
ulator. =A0Most of that time is spent on (initialize) - which performs a lo=
t of deserialization on the precompiled heap file.=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. =A0Scott Miller&#39;s 2002 paper seems to imply that this is possible, =
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).=A0=A0 It may be possible however to sacrifice some spa=
ce (ie a bigger heap) and use a different encoding.=A0 Does the Android pla=
tform have a profiler?=A0 Seeing where the bulk of the time is spent during=
 startup may help suggest a different heap storage strategy.<br>


=A0<br></div><div><blockquote class=3D"gmail_quote" style=3D"border-left: 1=
px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"=
><div></div><div><div><div>Even if I manage this task, my next question is =
how often does SISC use serialization/deserialization during processing...(=
I suspect 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. =A0 <br><br>Scott<br></div></div>
</blockquote></div><br></div></div></div>
</blockquote></div><br>

--00c09f93d6d4d667ff0480e613a7--


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

--===============6557456111846799370==--