The timings for the three versions are virtually identical on my machine:

   (100) 6!:2 'tob64 a'
0.0588601
   (100) 6!:2 'tobase64 a'
0.0594434
   (100) 6!:2 'tb64 a'
0.0568209


On Wed, Aug 6, 2014 at 2:38 PM, 'Pascal Jasmin' via Programming <
[email protected]> wrote:

> One theory I have is that , is optimized when ,~ is not.
>
> in tobase64, the second line does an optional append with , .  When the
> length of the string is a multiple of 3, it appends 0#'=' (nothing).  For
> length 100, it appends 2#'='
>
>    20 timespacex 'tobase64"1 ] 1000 100 $ a'
> 0.0250075 429824
>    20 timespacex 'tob64"1 ] 1000 100 $ a'
> 0.0196931 413824
>    20 timespacex 'tobase64"1 ] 1000 99 $ a'
> 0.0268403 429824
>    20 timespacex 'tob64"1 ] 1000 99 $ a'
> 0.0194453 413824
>
> for the explicit version, it is strange that reading 100 chars per line
> and spitting out 2 extra takes less time than 99 chars per line with no
> extra output.
>
> the tacit version appends through ,~ , and shows the expected improvement
> of reading and appending less.
>
>
>
> ----- Original Message -----
> From: Joe Bogner <[email protected]>
> To: [email protected]
> Cc:
> Sent: Wednesday, August 6, 2014 2:04:15 PM
> Subject: Re: [Jprogramming] unexpected explicit vs tacit benchmark
>
> My timings suggest that they are all about the same:
>
> 100 timespacex 'tob64 a'
> 0.0317417 1.78275e7
>    100 timespacex 'tobase64 a'
> 0.0316219 2.85809e7
>    100 timespacex 'tb64 a'
> 0.0313129 2.04608e7
>
> Considering the explicit only has 2 lines, I'm not surprised the
> timings are about the same. I thought the biggest performance penalty
> from explicit is the parsing for each invocation. The parsing in this
> case is likely negligible since the explicit function isn't being
> called in a loop.
>
> On Wed, Aug 6, 2014 at 1:52 PM, Raul Miller <[email protected]> wrote:
> > You might try timings on sub-expressions to find where the speed
> > differences occur?
> >
> > Thanks,
> >
> > --
> > Raul
> >
> >
> > On Wed, Aug 6, 2014 at 1:27 PM, 'Pascal Jasmin' via Programming
> > <[email protected]> wrote:
> >> BASE64=: (a.{~ ,(a.i.'Aa') +/i.26),'0123456789+/'
> >>
> >> tobase64=: 3 : 0
> >> res=. BASE64 {~ #. _6 [\ , (8#2) #: a. i. y
> >> res, (0 2 1 i. 3 | # y) # '='
> >> )
> >>
> >> tob64 =: ('=' #~  0 2 1 i. 3 | # )  ,~ BASE64 {~  [: #. _6  ]\    (8#2)
> ,@:#: a.&i.
> >> tb64 =: 3 : '(''='' #~  0 2 1 i. 3 | # y)  ,~ BASE64 {~  #. _6  ]\
> (8#2) ,@:#: a.&i. y'
> >>
> >> frombase64=: 3 : 0
> >> pad=. _2 >. (y i. '=') - #y
> >> pad }. a. {~ #. _8 [\ , (6#2) #: BASE64 i. y
> >> )
> >> fb64 =:a. {~ [: #.  _8 [\  (6#2) ,@:#: BASE64&i. }.~ _2 >. # -~ i.&'='
> >>
> >> tobase64 is original code from addon.  It is explicit with a temporary
> variable.  tb64 is also explicit but without the temp var.  tob64 is a
> tacit version.
> >>
> >>  a =. 100000 $ a.
> >>
> >>    timespacex 'tob64 a'
> >>
> >> 0.0312112 1.78275e7
> >>    timespacex 'tobase64 a'
> >> 0.0277369 2.85809e7
> >>    timespacex 'tb64 a'
> >> 0.0289411 2.04608e7
> >>
> >> all are impressively fast, but the 2 explicit functions are faster, and
> somehow the one with a temp variable is fastest.
> >>
> >> the tacit version does use less space, as well as the one line tacit
> entry.  Its also faster for array item application
> >>
> >>
> >>    timespacex 'tob64"1 ] 100 1000 $ a'
> >> 0.0154246 539264
> >>    timespacex 'tobase64"1 ] 100 1000 $ a'
> >> 0.016376 628736
> >>
> >> Its also surprising though that applying the function to 100 smaller
> items is faster than the whole.
> >>
> >>
> >> Any insights on why this is happening?
> >> ----------------------------------------------------------------------
> >> For information about J forums see http://www.jsoftware.com/forums.htm
>
>
>
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>



-- 
Devon McCormick, CFA
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to