Looking at the summing code in these benchmarks, I see that there is a "sumloop" written in a very loopy, non-J fashion and a "sumj" which looks like at attempt to accomplish the same thing in a more J-like fashion like this: sumj =: 13 : '+/ y$1' NB. sum consecutive integers as in J
Of course this latter version is much faster than the loopy one. However, if we are changing this operation to be even more J-like, what's wrong with this: sumj1=: ] ? This gives the same answer as the others (sumj1 -: sumj) 1e6 1 (sumloop -: sumj) 1e6 1 but is even faster: ts =: 6!:2 , 7!:2@] ts 'sumloop 1e6' 0.496153 8.39178e6 ts 'sumj 1e6' 0.0005306 1.04989e6 ts 'sumj1 1e6' 2.6e_6 1216 The raises the question of how closely do we have to mimic the structure of a benchmark written in another language? If we mimic it closely, as in the "sumloop" example, this disadvantages J unfairly. However, taking it to the extreme of my "sumj1" example seems unfair to the spirit of the benchmark. However, a more J-like version that replicates the looping aspect might look this: sumloopj=: <:@:>:^:# . (sumloopj -: sumj1) 1e6 1 ts 'sumloopj 1e6' 2.2e_6 1536 This has performance comparable to our possibly unfair "sumj1" version but seems more in the spirit of the benchmark. On Tue, May 25, 2021 at 12:05 AM Raul Miller <rauldmil...@gmail.com> wrote: > 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 > -- Devon McCormick, CFA Quantitative Consultant ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm