Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re^6: Odometer pattern iterator (in C).

by BrowserUk (Patriarch)
on May 30, 2015 at 02:18 UTC ( [id://1128362]=note: print w/replies, xml ) Need Help??


in reply to Re^5: Odometer pattern iterator (in C).
in thread Odometer pattern iterator (in C). (Updated.)

Yes. That now beats the A::C version by about 20% (6.5s v 8) on my system when compiled with /Ox. Thank you.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority". I'm with torvalds on this
In the absence of evidence, opinion is indistinguishable from prejudice. Agile (and TDD) debunked
  • Comment on Re^6: Odometer pattern iterator (in C).

Replies are listed 'Best First'.
Re^7: Odometer pattern iterator (in C).
by Anonymous Monk on May 30, 2015 at 03:03 UTC

    Slightly faster. It's getting too silly, though. However, the step function is getting smaller due to better understanding of the problem.

    // inc_c - http://perlmonks.org/?node_id=1128230 // 8.52 secs. for 16/32 count=601080390 -O2 // 3.08 secs. for 16/32 count=601080390 -O3 #include <stdlib.h> #include <stdio.h> #define N 16 // number of elements wanted #define M 32 // place static int place[N+1]; static int count = 0; int step(void) { int *p = place; for(int i = 0; i < N; *p++ = i++ ) { if(*p < p[1] - 1) { ++*p; return 1; } } return 0; } int main(int argc, char **argv) { int i; int more = 1; for(i = 0; i < N; i++) place[i] = i; place[N] = M; while( more ) { //for(i = 0; i < N; i++) printf(" %d", place[i]); //putchar('\n'); count++; more = step(); } printf("\ncount %d\n", count); exit(0); }

    Thanks for the opportunity to scrape some rust off my C skills :)

      Slightly faster. It's getting too silly, though.

      Consistenly another 25% (5s v 6.5s). Indeed. your gains are now going to be constrained by the efficiency of the other code in the main loop that uses the generated indices.

      Thanks for the opportunity to scrape some rust off my C skills :)

      Thanks for taking that opportunity.

      The way you've folded the inner and outer loop (from the A::C version) together, makes the requirements of the algorithm far clearer, and as you said, that's key.


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority". I'm with torvalds on this
      In the absence of evidence, opinion is indistinguishable from prejudice. Agile (and TDD) debunked

      Posted before I joined. Adding for "Nodes You Wrote"

Re^7: Odometer pattern iterator (in C).
by Anonymous Monk on May 30, 2015 at 02:26 UTC

    I'm still tweaking it - there may be more to come :)

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1128362]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (4)
As of 2024-04-24 02:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found