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'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's title (that'= ;s down 15 seconds).</div> <div><br></div><div>Here' 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"><<a href=3D"mailto:[email protected]">sgmille= [email protected]</a>></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">= <<a href=3D"mailto:[email protected]" target=3D"_blank">calbers@neom= antic.com</a>></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'm using is from the lates= t cvs, and it was built using the ant task. =C2=A0If I'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"><<a href=3D"mailto:= [email protected]" target=3D"_blank">[email protected]</a>></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'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'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 "ant heap" 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"><<a href=3D"mailto:[email protected]" target=3D"= _blank">[email protected]</a>></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't'= 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)"); is called. =C2=A0Here'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 'Exclusive' 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"><<a href=3D"mailto= :[email protected]" target=3D"_blank">[email protected]</a>></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"><<a = href=3D"mailto:[email protected]" target=3D"_blank">[email protected]= om</a>></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've been plugging away on getting SISC to work on Android, and made mo= re progress. =C2=A0But I'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's 2002 paper seems to imply that this is possibl= e, provided you'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® 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==--