Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.os.linux.advocacy > #465502

Re: The substantiation that -highhorse asked for

From owl <owl@rooftop.invalid>
Newsgroups comp.os.linux.advocacy
Subject Re: The substantiation that -highhorse asked for
Date 2018-09-01 16:00 +0000
Organization O.W.L.
Message-ID <sx8b030ga.ah3u@rooftop.invalid> (permalink)
References (6 earlier) <92fb76f2-9a2e-4605-b681-237bef31911f@googlegroups.com> <ab80ga0hga.hou4@rooftop.invalid> <bdcc1f97-bf20-4292-9f36-3fd6058d6834@googlegroups.com> <8fa900b.y793ahgyy@rooftop.invalid> <1c77ef43-12fb-4cd9-94ec-b7046d211217@googlegroups.com>

Show all headers | View raw


Steve Carroll <fretwizzer@gmail.com> wrote:
> On Saturday, September 1, 2018 at 7:45:18 AM UTC-6, owl wrote:
>> Steve Carroll <fretwizzer@gmail.com> wrote:
>> > On Friday, August 31, 2018 at 11:53:16 AM UTC-6, owl wrote:
>> >> Steve Carroll <fretwizzer@gmail.com> wrote:
>> >> > On Friday, August 31, 2018 at 10:53:35 AM UTC-6, owl wrote:
>> >> >> Steve Carroll <fretwizzer@gmail.com> wrote:
>> >> >> > On Friday, August 31, 2018 at 6:33:13 AM UTC-6, owl wrote:
>> >> >> >> Steve Carroll <fretwizzer@gmail.com> wrote:
>> >> >> >> > On Wednesday, August 29, 2018 at 8:31:19 AM UTC-6, owl wrote:
>> >> >> >> >> DFS <nospam@nospam.com> wrote:
>> >> >> >> >> > On 8/29/2018 2:14 AM, owl wrote:
>> >> >> >> >> >> DFS <nospam@nospam.com> wrote:
>> >> >> >> >> >>>
>> >> >> >> >> >>> import random
>> >> >> >> >> >>>
>> >> >> >> >> >>> print "Group 1: r<0"
>> >> >> >> >> >>> print "Group 2: r==0"
>> >> >> >> >> >>> print "Group 3: r>0 && r<=10"
>> >> >> >> >> >>> print "Group 4: r>10 && r<=100"
>> >> >> >> >> >>> print "Group 5: r>100 && r<=1000"
>> >> >> >> >> >>> print "Group 6: r>1000 && r<=10000"
>> >> >> >> >> >>> print "Group 7: r>10000 && r<=100000"
>> >> >> >> >> >>> print "Group 8: r>100000 && r<=1000000"
>> >> >> >> >> >>> print "Group 9: r>1000000"
>> >> >> >> >> >>>
>> >> >> >> >> >>> def printgroup(grp):
>> >> >> >> >> >>>         print "Found random number " + str(r) + " in Group " + str(grp)
>> >> >> >> >> >>>
>> >> >> >> >> >>> for j in range(20):
>> >> >> >> >> >>>         r = random.randint(-1000,1001)
>> >> >> >> >> >>>         if r < 0:               printgroup(1); exit
>> >> >> >> >> >>>         if r > 1000000: printgroup(9); exit
>> >> >> >> >> >>>         comps =
>> >> >> >> >> >>> [(-1,0),(1,10),(11,100),(101,1000),(1001,10000),(10001,100000),(100001,1000000)]
>> >> >> >> >> >>>         for i, x in enumerate(range(len(comps))):
>> >> >> >> >> >>>                 if r > comps[i][0] and r <= comps[i][1]: printgroup(i+2); exit
>> >> >> >> >> >>>                 i+=1
>> >> >> >> >> >>>
>> >> >> >> >> >>>
>> >> >> >> >> >>>
>> >> >> >> >> >>> That's 3 if-then-exits to handle 9 comparisons
>> >> >> >> >> >> 
>> >> >> >> >> >> If you call that 3 ifs, then I get to call this zero ifs:
>> >> >> >> >> >> 
>> >> >> >> >> >> anon@lowtide:~/code/ifs$ cat goo.c
>> >> >> >> >> >> #include <stdio.h>
>> >> >> >> >> >> #include <stdlib.h>
>> >> >> >> >> >> 
>> >> >> >> >> >> void flz(void){printf("a<0\n");}
>> >> >> >> >> >> void fgm(void){printf("a>1000000\n");}
>> >> >> >> >> >> void f0(void){printf("a==0\n");}
>> >> >> >> >> >> void f1(void){printf("a>0 && a<=10\n");}
>> >> >> >> >> >> void f2(void){printf("a>10 && a<=100\n");}
>> >> >> >> >> >> void f3(void){printf("a>100 && a<=1000\n");}
>> >> >> >> >> >> void f4(void){printf("a>1000 && a<=10000\n");}
>> >> >> >> >> >> void f5(void){printf("a>10000 && a<=100000\n");}
>> >> >> >> >> >> void f6(void){printf("a>100000 && a<=1000000\n");}
>> >> >> >> >> >> 
>> >> >> >> >> >> int main(int argc, char *argv[])
>> >> >> >> >> >> {
>> >> >> >> >> >>     int a=0;
>> >> >> >> >> >>     int i=0;
>> >> >> >> >> >>     void (*fp[1000001])(void)={0};
>> >> >> >> >> >>     fp[0]=f0;
>> >> >> >> >> >>     for(i=1;i<=10;i++) fp[i]=f1;
>> >> >> >> >> >>     for(i=11;i<=100;i++) fp[i]=f2;
>> >> >> >> >> >>     for(i=101;i<=1000;i++) fp[i]=f3;
>> >> >> >> >> >>     for(i=1001;i<=10000;i++) fp[i]=f4;
>> >> >> >> >> >>     for(i=10001;i<=100000;i++) fp[i]=f5;
>> >> >> >> >> >>     for(i=100001;i<=1000000;i++) fp[i]=f6;
>> >> >> >> >> >>     a=atoi(argv[1]);
>> >> >> >> >> >>     (a<0?flz:a>1000000?fgm:fp[a])();
>> >> >> >> >> >>     return 0;
>> >> >> >> >> >> }
>> >> >> >> >> >> anon@lowtide:~/code/ifs$
>> >> >> >> >> > 
>> >> >> >> >> > affirmative
>> >> >> >> >> > 
>> >> >> >> >> 
>> >> >> >> >> But who would write it that way, and why?  Sure, there's no if statements,
>> >> >> >> >> but that comes at the expense of 1,000,001 function pointers.  And the
>> >> >> >> >> nested ternaries constitute conditional tests anyway.  Not to mention
>> >> >> >> >> less readability.  It would run faster, use less stack, and be much more
>> >> >> >> >> readable and faster to design and write without error, by just using a
>> >> >> >> >> list of ifs.
>> >> >> >> >> 
>> >> >> >> >> anon@lowtide:~/code/ifs$ time ./blah 500
>> >> >> >> >> a>100 && a<=1000
>> >> >> >> >> 
>> >> >> >> >> real    0m0.002s
>> >> >> >> >> user    0m0.000s
>> >> >> >> >> sys     0m0.000s
>> >> >> >> >> anon@lowtide:~/code/ifs$ time ./goo 500
>> >> >> >> >> a>100 && a<=1000
>> >> >> >> >> 
>> >> >> >> >> real    0m0.020s
>> >> >> >> >> user    0m0.008s
>> >> >> >> >> sys     0m0.008s
>> >> >> >> >> anon@lowtide:~/code/ifs$
>> >> >> >> > 
>> >> >> >> > What are those times representing, your if/else vs the above (or his code)?
>> >> >> >> > 
>> >> >> >> 
>> >> >> >> if/else vs the above.
>> >> >> >> But you can combine the above with DFS's loop and it's just as fast.
>> >> >> > 
>> >> >> > Because what Feeb said about the complier is correct?
>> >> >> > 
>> >> >> 
>> >> >> I don't remember what fabtard said, but there is no performance advantage
>> >> >> to putting the ifs in a loop.  There may coding time advantage if the
>> >> >> the number of conditions is extreme, but a sequence of ifs would still
>> >> >> make what is happening more obvious, and for a relatively small number of
>> >> >> conditions the amount of time spent coding the loop might be greater --
>> >> >> just from care taken to get the array values right, off-by-one issues,
>> >> >> etc -- than a simple sequence of ifs, especially with an editor like
>> >> >> vim which makes code block skeletons so easy to duplicate.  Also, not
>> >> >> all if sequences are going to lend themselves to looping in a way that
>> >> >> would reduce the number of written conditions.
>> >> > 
>> >> > "For a REAL language, a COMPILED language, the compiler often 
>> >> > makes optimizing choices such as transforming your for-loop 
>> >> > into a sequence of if-then statements.  The user can also specify 
>> >> > that certain loops should be "unrolled" which leads to the 
>> >> > same behavior. 
>> >> > 
>> >> > In short, there is no great difference between a for-loop and 
>> >> > an "unrolled" loop sequence." - Feeb
>> >> > 
>> >> >> The code for the earlier doo.c, which was designed to remove all if
>> >> >> statements, would not even need the ternary conditional except for the
>> >> >> a<0 and a>1000000 tests. 
>> >> > 
>> >> > From what very little I've read on if vs ternary in C, there isn't much of 
>> >> > a performance diff (apparently there can be some in certain conditions).
>> >> > 
>> >> >> The rest of it just uses the number passed in
>> >> >> as an index into the function pointer array.  But that array is huge,
>> >> >> and there is a big performance hit, so minimizing the number of ifs is
>> >> >> not necessarily a good thing.
>> >> > 
>> >> > What's worse are the if/else if statements written inside of loops (like I 
>> >> > had in my earliest example in this thread). But hey, it's JavaScript, no 
>> >> > one expects it to run fast anyway ;) I was actually surprised by FF, it
>> >> > was doing 100 million elements in 3-4 seconds *in* a browser (so 
>> >> > we're talking DOM elements here, not just array elements)... a billion
>> >> > in ~34.3 secs. What the best time you've gotten in C for such a task?
>> >> 
>> >> Just looping, it looks like about 400 million per second:
>> >> 
>> >> anon@lowtide:~/code/ifs$ cat loop.c
>> >> #include <stdio.h>
>> >> 
>> >> int main(void)
>> >> {
>> >>   int i=0;
>> >>   printf("start\n");
>> >>   for(i=0;i<1000000000;i++)
>> >>   {
>> >>    ;
>> >>   }
>> >>   printf("done\n");
>> >>   return 0;
>> >> }
>> >> anon@lowtide:~/code/ifs$ time ./loop
>> >> start
>> >> done
>> >> 
>> >> real    0m2.501s
>> >> user    0m2.496s
>> >> sys     0m0.004s
>> >> anon@lowtide:~/code/ifs$
>> > 
>> > <https://imgur.com/a/hT5B6QQ>
>> > 
>> > Chrome (on the left) in ~1 sec, but FF was well over 5x slower. WTF!?
>> > 
>> 
>> Damn, one sec.  That's fast.  I'm not sure I trust that timer though.
>> https://johnresig.com/blog/accuracy-of-javascript-time/
> 
> Yeah, I've heard about this, not good for super high ms accuracy. 
> There's actually a performance API that's supposed to provide a
> higher accuracy but I've never used it. In general, date and time 
> stuff in JavaScript isn't nearly as dialed in as it could be (do a
> search on JavaScript's 'Date' data type).
> 
>> The console stuff is flakey on my versions of chrome and ff.
> 
> How so?
> 

Firefox throws errors won't run at all.
Chrome returns instantly but says loop time is: 2.39e+4ms


>> Running your
>> code with nodejs gives times roughly equal to the C code.
> 
> I knew it (that you run node.js)! ;)
> 

Compile my C and compare since your browser consoles seem to work.

>> > What about if you were creating arrays elements?
>> 
>> malloc'ed 1GB for a char pointer, and set each char to 'a', and it's
>> only about ten percent slower than just running the empty loop.
> 
> Amazing!

Back to comp.os.linux.advocacy | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-28 08:28 -0400
  Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 09:20 -0700
    Re: The substantiation that -highhorse asked for fr314159@gmail.com - 2018-08-28 11:27 -0700
      Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 11:39 -0700
      Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-29 09:46 -0400
    Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-28 14:52 -0400
      Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 12:20 -0700
  Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-28 17:21 +0000
    Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-28 14:46 -0400
      Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-28 19:14 +0000
        Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 12:30 -0700
          Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-28 20:09 +0000
            Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 13:58 -0700
              Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-28 21:16 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 14:31 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-28 21:43 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 15:06 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-28 22:26 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-28 15:35 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-28 23:14 +0000
                Re: The substantiation that -highhorse asked for Snit <usenet@gallopinginsanity.com> - 2018-08-28 14:57 -0700
            Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-28 23:11 -0400
              Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-29 06:14 +0000
                Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-29 09:34 -0400
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-29 14:31 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-29 11:01 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-31 12:33 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-31 09:16 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-31 16:53 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-31 10:22 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-31 17:53 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-08-31 11:36 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-09-01 13:45 +0000
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-09-01 13:59 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-09-01 08:15 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-09-01 16:00 +0000
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-09-01 11:20 -0700
                Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-31 15:00 -0400
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-31 19:40 +0000
                Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-09-01 10:15 -0400
                Re: The substantiation that -highhorse asked for Steve Carroll <fretwizzer@gmail.com> - 2018-09-01 08:22 -0700
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-09-01 16:28 +0000
                Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-09-01 16:39 -0400
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-09-01 22:00 +0000
                Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-09-01 18:27 -0400
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-09-01 22:40 +0000
                Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-09-01 19:09 -0400
                Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-09-01 23:59 +0000
        Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-28 23:01 -0400
          Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-29 06:26 +0000
  Re: The substantiation that -highhorse asked for "F. Russell" <fr@random.info> - 2018-08-28 19:25 +0000
    Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-29 09:32 -0400
      Re: The substantiation that -highhorse asked for fr314159@gmail.com - 2018-08-29 06:46 -0700
        Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-08-29 09:55 -0400
          Re: The substantiation that -highhorse asked for fr314159@gmail.com - 2018-08-29 08:02 -0700
            Re: The substantiation that -highhorse asked for DFS <nospam@nospam.com> - 2018-09-01 10:14 -0400
          Re: The substantiation that -highhorse asked for owl <owl@rooftop.invalid> - 2018-08-29 15:12 +0000

csiph-web