Re: SISC on Android and the Heap

"Scott G. Miller" <[email protected]> Thu, 4 Mar 2010 05:07:08 -0600
Newsgroups gmane.comp.java.sisc.user
Message-ID <[email protected]>
--===============5952966633297062809==
Content-Type: multipart/alternative; boundary=001485eba7c29789680480f79947

--001485eba7c29789680480f79947
Content-Type: text/plain; charset=ISO-8859-1

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

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

Yes, you have to rebuild the heap file after that.<br><br>Scott<br><br><div=
 class=3D"gmail_quote">On Wed, Mar 3, 2010 at 8:25 PM, Chad Albers <span di=
r=3D"ltr">&lt;<a href=3D"mailto:[email protected]">[email protected]=
m</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>Thanks for the advice. =A0The heap I&#39;m using is from the la=
test cvs, and it was built using the ant task. =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 =A0those changes, and now I get a message saying=
 there is an error loading heap. =A0</div><div><br></div><font color=3D"#88=
8888"><div>Chad</div><div><br></div><div><br></div></font><div><div class=
=3D"im">
--<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 Wed, Mar 3, 2010 at 9:12 AM, Scott G. Miller <span dir=3D"ltr">&lt;<a hr=
ef=3D"mailto:[email protected]" target=3D"_blank">[email protected]</a>&g=
t;</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;">
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><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, =
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><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, =
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>
</div></div></blockquote></div><br></div></div></div>
</blockquote></div><br>

--001485eba7c29789680480f79947--


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

--===============5952966633297062809==--