In J80x, there's no deriv_jcalculus_ because deriv_jcalculus_ is a
replacement for the d. primitive. So, in J807, you can just use that
primitive.

I think the idea was that by making it a library routine instead of a
primitive it would be easier for motivated J programmers to enhance it
with additional functionality. (But these things take time, and
thought...)

Thanks,

-- 
Raul

On Mon, May 24, 2021 at 10:11 PM Thomas McGuire <tmcguir...@gmail.com> wrote:
>
> For those interested in Benchmarks I have split my original benchmark routine 
> into 2 scripts. One the Kernighan/Van Wyk benchmarks and an advanced 
> benchmarks script. The advanced benchmarks were taken from some of the 
> functionality that the Scheme language benchmarks for which I found J 
> implementations.
>
> The deriv benchmark uses Raul’s suggestion with the polynomial taken from the 
> data from the Scheme implementation. Itwon’t be a direct comparison to Scheme 
> since Scheme does a full symbolic differentiation allowing undefined variable 
> coefficients. In this respect the Scheme benchmark tests parsing nested 
> S-expressions.
>
> I added a QR decomposition benchmark from the QR essay and compare it to the 
> foreign 128!:0. I also include a Schwarz-Rutishauser QR decamp 
> implementation. This is translated from python code and uses for loops so on 
> large matrices it is very slow. I comment out the test in the test harness.
>
> Finally I added a matrix multiplication test given the recent discussion on 
> Matrix multiplication on the programming forum. The test takes the Q and R 
> matrices and multiplies them for timing. I added a match check on the 
> original matrix since the data is randomly produced.
>
> The scripts are available at:
> https://github.com/tmcguirefl/JBenchmarks
>
> J902 on MacBook Pro Intel I7 quad core 2.9GHz
>    ADVbmarks ''
> tak: 0.045548 17344
> fibN: 1e_6 13376
> rsum: 0.005007 5.02125e6
> mbrot: 0.875056 199360
> deriv: 2.7e_5 9728
> fftw: 0.000489 1.5751e6
> ifftw: 0.000717 2.09894e6
> ft: 3.4e_5 6528
> fftws: 1.8e_5 5696
> QRdata size: 700 400
> QRrec: 0.079073 3.62602e7
> QRfor: 0.090745 6.08386e7
> MMult: 0.176499 3.3557e7
> Match: 1 (not a timing, checks orig matrix matches the mult. QxR)
>
> Of note to the matrix multiply discussion is that a 700x400 matrix takes less 
> than a second on macOS 64 bit in J902. Granted the R matrix is upper 
> triangular but if optimizations are taking place it is under the covers, 
> since this is a straight J +/ . * implementation.
>
> On J807 I took out the deriv and the rsum due to errors (my 806 doesn’t have 
> the calculus lib and rsum had a stack error I assume 902 has improved 
> recursion) and the results:
>    ADVbmarks ''
> tak: 0.069502 36032
> fibN: 2e_6 8512
> mbrot: 1.02267 200192
> fftw: 0.000867 1.57523e6
> ifftw: 0.000806 2.09907e6
> ft: 5e_5 6848
> fftws: 3.2e_5 7104
> QRdata size: 700 400
> QRrec: 0.08946 4.45858e7
> QRfor: 0.100718 6.13482e7
> MMult: 0.167292 4.29949e7
> Match: 1 (not a timing, checks orig matrix matches the mult. QxR)
>
> There appears to be an across the board speed up from 806 to 902 in 
> everything but matrix multiplication. That may be due to differences in the 
> random matrix generated for each test.
>
> > On May 19, 2021, at 5:22 AM, Raul Miller <rauldmil...@gmail.com> wrote:
> >
> > deriv_jcalculus_ does symbolic differentiation on tacit expressions.
> > For example:
> >
> >   load'math/calculus'
> >   (3+*:) deriv_jcalculus_ 1
> > 0"0 + +:
> >   3 0 1&p. deriv_jcalculus_ 1
> > 0 2&p.
> >   (3+*:) deriv_jcalculus_ 1 i. 5
> > 0 2 4 6 8
> >   3 0 1&p. deriv_jcalculus_ 1 i. 5
> > 0 2 4 6 8
> >
> > (The right argument to deriv_jcalculus_ is how many times to take the
> > derivative, a negative argument does symbolic integration instead,
> > with an integration constant of 0. But integration is a bit fussier
> > than derivation, so it has less support for variant expressions.)
> >
> > FYI,
> >
> > --
> > Raul
> >
> > On Wed, May 19, 2021 at 4:17 AM Thomas McGuire <tmcguir...@gmail.com 
> > <mailto:tmcguir...@gmail.com>> wrote:
> >>
> >> Thanks Raul,
> >> I added your ‘tail' implementation to the code and it works without issue. 
> >> The KJV text is listed in reverse line order in the output file.
> >>
> >>    benchmarks ''
> >> sumloop: 0.227858 8.39149e6
> >> sumj: 0.000171 1.04986e6
> >> ack: 2e_6 721472
> >> array1: 5.6e_5 1.05107e6
> >> array1t: 4.8e_5 1.05107e6
> >> string1: 0.003969 2.88634e6
> >> cat: 0.01474 2.51685e7
> >> wc: 0.295076 1.58152e8
> >> tail: 0.065197 3.77133e7
> >> sum1: 0.12709 4.04989e7
> >> sum1j: 0.000547 1.18086e6
> >>
> >> I have placed the code on GitHub:
> >> https://github.com/tmcguirefl/JBenchmarks
> >>
> >> The scheme folks have put together a large set of benchmarks at:
> >> https://www.ccs.neu.edu/home/will/Twobit/benchmarksAboutR6.html
> >>
> >> When time permits I will go through them and implement the ones that would 
> >> be J appropriate (some do symbolic differentiation which would be 
> >> nontrivial for me to code into J).
> >>
> >> Tom McGuire
> >>
> >>> On May 18, 2021, at 9:04 PM, Raul Miller <rauldmil...@gmail.com> wrote:
> >>>
> >>> Here's the tail benchmark written in J:
> >>>
> >>> tail=: 4 : 0
> >>> (;|.<;.2 freads x) fwrites y
> >>> )
> >>>
> >>> This is based on my reading of the C implementation of the tail
> >>> benchmark vs the cat benchmark, and on the cat benchmark in this J
> >>> implementation, except that I have failed to reproduce a bug in the C
> >>> implementation which shows up when the file contains very long lines
> >>> and instead I have assumed that the file ends in a newline (which is a
> >>> valid assumption for the gutenberg kjv bible).
> >>>
> >>> Let me know if you think I have made a mistake here.
> >>>
> >>> Thanks,
> >>>
> >>> --
> >>> Raul
> >>>
> >>> On Tue, May 18, 2021 at 7:02 PM Thomas McGuire <tmcguir...@gmail.com 
> >>> <mailto:tmcguir...@gmail.com><mailto:tmcguir...@gmail.com 
> >>> <mailto:tmcguir...@gmail.com>>> wrote:
> >>>>
> >>>> I was going over Devon McCormick's notes from the latest NYCJUG meeting. 
> >>>> There was a discussion about Benchmarks with an example of the 
> >>>> Kernighan/Van Wyk benchmarks in LISP/Scheme. Devon had made the comment 
> >>>> that for most things people use J for that correctness overshadowed 
> >>>> performance.
> >>>>
> >>>> The K/VW benchmarks were originally made for C and seem to test looping 
> >>>> controls and memory allocation which at a time of low memory 
> >>>> minicomputers and PCs, coupled with multiple available C compilers, made 
> >>>> the benchmarks a nice way of comparing compiler implementations as well 
> >>>> as new processor speed.
> >>>>
> >>>> However it seemed like a simple project to exercise my J programming 
> >>>> skills with so I have attached the program to this email.
> >>>>
> >>>> Note: you will need to download the King James Version of the Bible from 
> >>>> project Guttenburg (not included with the attachment) to run the full 
> >>>> benchmarks. I also created my own file of floating point numbers to sum 
> >>>> (routine to create a file of random floats is included). I have added 
> >>>> some routines to accomplish similar functionality in the way I would do 
> >>>> it in J (at least for my mere mortal understanding of J).
> >>>>
> >>>> Running on my mac book pro (2016 with 2.9 Ghz Quad core I7) the results 
> >>>> are:
> >>>>
> >>>>  benchmarks ''
> >>>> sumloop: 0.214383 8.39149e6
> >>>> sumj: 0.000162 1.04986e6
> >>>> ack: 4e_6 721472
> >>>> array1: 0.000578 1.05107e6
> >>>> array1t: 2.5e_5 1.05107e6
> >>>> string1: 0.003237 2.88634e6
> >>>> cat: 0.014234 2.51685e7
> >>>> wc: 0.302383 1.58152e8
> >>>> sum1: 0.124006 4.04989e7
> >>>> sum1j: 0.000956 1.18086e6
> >>>>
> >>>> thought I would share
> >>>>
> >>>> Tom McGuire
> >>>> ----------------------------------------------------------------------
> >>>> For information about J forums see http://www.jsoftware.com/forums.htm 
> >>>> <http://www.jsoftware.com/forums.htm><http://www.jsoftware.com/forums.htm
> >>>>  <http://www.jsoftware.com/forums.htm>>
> >>> ----------------------------------------------------------------------
> >>> For information about J forums see http://www.jsoftware.com/forums.htm 
> >>> <http://www.jsoftware.com/forums.htm><http://www.jsoftware.com/forums.htm 
> >>> <http://www.jsoftware.com/forums.htm>>
> >> ----------------------------------------------------------------------
> >> For information about J forums see http://www.jsoftware.com/forums.htm 
> >> <http://www.jsoftware.com/forums.htm>
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm 
> > <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

Reply via email to