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


Groups > comp.lang.forth > #5532

Re: min-max-sum

From mhx@iae.nl (Marcel Hendrix)
Subject Re: min-max-sum
Newsgroups comp.lang.forth
Message-ID <10611399948436@frunobulax.edu> (permalink)
Date 2011-09-04 22:42 +0200
References <2011Sep4.151850@mips.complang.tuwien.ac.at>
Organization SunSITE.dk - Supporting Open source

Show all headers | View raw


anton@mips.complang.tuwien.ac.at (Anton Ertl) writes Re: min-max-sum
[..]
> Anyway, I have now benchmarked the three different approaches on
> vfxlin (program appended below):

> 1) using a separate loop for each aggregation (simple)

> 2) using one loop and keeping the intermediate results on the data stack (rot)

> 3) using one loop and keeping the intermediate results in a struct (haley)

I added a few more, and even one that uses CODE.

> The results are:

> [c8:~/forth:30521] time vfxlin "include min-max-sum.fs bench-simple bye" >/dev/null

> real    0m0.713s
[..]
> [c8:~/forth:30522] time vfxlin "include min-max-sum.fs bench-rot bye" >/dev/null 

> real    0m0.442s
[..]
> [c8:~/forth:30523] time vfxlin "include min-max-sum.fs bench-haley bye" >/dev/null

> real    0m2.935s
[..]
> Not sure what's so slow in the haley code, but if someone wants to
> investigate, the code is shown below.

You inadvertedly wrote "loop" instead of "1 cells +loop" :-)
In this case the error is important because it may bias one's appreciation for the
haley solution.

It is important not to use uninitialized HERE for the test area because
number formatting may overwrite this area between individual benchmarks 
(your test method has no problem with it).

What is the specification for the machine you tested on? I used a 2.67 GHz
i7 quad core. The speed for 64 and 32-bit code is (nearly) the same.

-marcel

-- ---------------------
ANEW -summinmax

NEEDS -assemble

: asum ( addr ucells -- n )
    0 rot rot cells over + swap ?do
        i @ +
    [ 1 cells ] literal +loop ;

: amin ( addr ucells -- n )
    maxint rot rot cells over + swap ?do
        i @ min
    [ 1 cells ] literal +loop ;

: amax ( addr ucells -- n )
    minint rot rot cells over + swap ?do
        i @ max
    [ 1 cells ] literal +loop ;

: simple ( addr ucells -- nsum nmax nmin )
    2dup amin >r
    2dup amax >r
    asum r> r> ;

: sum-min-max ( addr ucells -- nsum nmax nmin )
 2>r 0 minint maxint 2r> cells over + swap ?do ( nsum' nmax' nmin' )
  rot i @ +
  rot i @ max
  rot i @ min
 [ 1 cells ] literal +loop ;

: sum-min-max-my ( addr ucells -- nsum nmax nmin )
 2>r 0 minint maxint 2r> 
 1-
 FOR
    @+ 2>R
    rot r@ +
    rot r@ max
    rot r> min
    R>
 NEXT drop ;

: sum-min-max-my-1 ( addr ucells -- nsum nmax nmin )
 0 minint maxint locals| =min =max =sum |
 1-
 FOR
    @+ 
    dup         +TO =sum 
    dup =max max TO =max
        =min min TO =min
 NEXT drop 
 =sum =max =min ;

64bit? [if]
: sum-min-max-my-2 ( addr ucells -- nsum nmax nmin )
 swap >r 0 maxint minint r> params| =sum =min =max =addr |
 1-
 FOR
    ASM{ 
	[rsi #48 +] qword -> rbx   mov,
	[rbx] -> rax   mov,  			\ @+
	8 b#  -> rbx   add,
	rbx   -> [rsi #48 +] qword mov,

	rax   -> [rsi] add,  			\ dup +TO =sum

	[rsi #16 +] qword -> rcx   mov,		\ =max
	rax   -> rcx   cmp,			\ over max 
	rax   -> rcx   cmovg,		
	rcx   -> [rsi #16 +] qword mov,		\ TO =max

	[rsi #32 +] qword -> rcx   mov,		\ =min
	rax   -> rcx   cmp,			\ over min
	rax   -> rcx   cmovl,			
	rcx   -> [rsi #32 +] qword mov,		\ TO =min	
    }ASM
 NEXT 
 =sum =max =min ;
[else]
: sum-min-max-my-2 ( addr ucells -- nsum nmax nmin )
 swap >r 0 maxint minint r> params| =sum =min =max =addr |
 1-
 FOR
    ASM{ 
	[esi #48 +] dword -> ebx   mov,
	[ebx] -> eax   mov,  			\ @+
	4 b#  -> ebx   add,
	ebx   -> [esi #48 +] dword mov,

	eax   -> [esi] add,  			\ dup +TO =sum

	[esi #16 +] dword -> ecx   mov,		\ =max
	eax   -> ecx   cmp,			\ over max 
	eax   -> ecx   cmovg,		
	ecx   -> [esi #16 +] dword mov,		\ TO =max

	[esi #32 +] dword -> ecx   mov,		\ =min
	eax   -> ecx   cmp,			\ over min
	eax   -> ecx   cmovl,			
	ecx   -> [esi #32 +] dword mov,		\ TO =min	
    }ASM
 NEXT 
 =sum =max =min ;
[then]


\ define a struct the VFX way :-)
: f_sum ;
: f_max cell+ ;
: f_min 2 cells + ;

create some-f 3 cells allot

: max! ( n addr -- )
    dup @ rot max swap ! ;

: min! ( n addr -- )
    dup @ rot min swap ! ;
    
: haley ( addr ucells f-addr -- )
    0 over f_sum !
    minint over f_max !
    maxint over f_min !
    rot rot cells over + swap do
        i @ over f_sum +!
        i @ over f_max max!
        i @ over f_min min!
    cell +loop  drop ; 

: data 	here #10000 CELLS + 
	dup #100000 1 fill ; \ number formatting ... :-)

: bench-simple ( -- )
    CR ." simple   : " TIMER-RESET 
    0 0 0 
    #100 0 ?do
        3drop data #1000000 simple
    loop 
    rot . swap . . .ELAPSED ;

: bench-rot ( -- )
    CR ." rot      : " TIMER-RESET
    0 0 0 
    #100 0 ?do
        3drop data #1000000 sum-min-max
    loop 
    rot . swap . . .ELAPSED ;

: bench-rot-my ( -- )
    CR ." rot-my   : " TIMER-RESET
    0 0 0 
    #100 0 ?do
        3drop data #1000000 sum-min-max-my 
    loop 
    rot . swap . . .ELAPSED ;

: bench-rot-my-1 ( -- )
    CR ." rot-my-1 : " TIMER-RESET
    0 0 0 
    #100 0 ?do
        3drop data #1000000 sum-min-max-my-1
    loop 
    rot . swap . . .ELAPSED ;

: bench-rot-my-2 ( -- )
    CR ." rot-my-2 : " TIMER-RESET
    0 0 0 
    #100 0 ?do
        3drop data #1000000 sum-min-max-my-2
    loop 
    rot . swap . . .ELAPSED ;

: bench-haley ( -- )
    CR ." haley    : " TIMER-RESET
    #100 0 ?do
        data #1000000 some-f haley
    loop 
    some-f @+ . @+ . @ . .ELAPSED ;

DOC
(*
	The results are:

	[c8:~/forth:30521] time vfxlin "include min-max-sum.fs bench-simple bye" >/dev/null

	real    0m0.713s
	user    0m0.696s
	sys     0m0.008s
	[c8:~/forth:30522] time vfxlin "include min-max-sum.fs bench-rot bye" >/dev/null 

	real    0m0.442s
	user    0m0.432s
	sys     0m0.008s
	[c8:~/forth:30523] time vfxlin "include min-max-sum.fs bench-haley bye" >/dev/null

	real    0m2.935s
	user    0m2.912s
	sys     0m0.008s

	Try: bench-simple bench-haley bench-rot  bench-rot-my bench-rot-my-1 bench-rot-my-2
	VFX: 0.713 2.935 0.442  ? ? ?

	simple   : 361700864190383316 72340172838076673 0 1.135 seconds elapsed.
	haley    : 361700864190383316 72340172838076673 0 0.820 seconds elapsed.
	rot      : 361700864190383316 72340172838076673 0 0.838 seconds elapsed.
	rot-my   : 361700864190383316 72340172838076673 0 0.722 seconds elapsed.
	rot-my-1 : 361700864190383316 72340172838076673 0 0.507 seconds elapsed.
	rot-my-2 : 361700864190383316 72340172838076673 0 0.326 seconds elapsed. ok

*)
ENDDOC

CR .( Try: bench-simple bench-haley bench-rot  bench-rot-my bench-rot-my-1 bench-rot-my-2 )
CR .( VFX: 0.713 2.935 0.442  ? ? ? )

CR
bench-simple bench-haley bench-rot    bench-rot-my bench-rot-my-1 bench-rot-my-2

Back to comp.lang.forth | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

A Minimal Extended Control Wordset JennyB <jennybrien@googlemail.com> - 2011-08-24 07:01 -0700
  Re: A Minimal Extended Control Wordset JennyB <jennybrien@googlemail.com> - 2011-08-24 07:50 -0700
    Re: A Minimal Extended Control Wordset Alex McDonald <blog@rivadpm.com> - 2011-08-24 08:04 -0700
      Re: A Minimal Extended Control Wordset JennyB <jennybrien@googlemail.com> - 2011-08-24 08:59 -0700
        Re: A Minimal Extended Control Wordset coos haak <chforth@hccnet.nl> - 2011-08-24 20:00 +0200
          Re: A Minimal Extended Control Wordset JennyB <jennybrien@googlemail.com> - 2011-08-24 14:03 -0700
            Re: A Minimal Extended Control Wordset coos haak <chforth@hccnet.nl> - 2011-08-26 20:36 +0200
    Re: A Minimal Extended Control Wordset JennyB <jennybrien@googlemail.com> - 2011-08-24 07:54 -0700
    Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-09-12 09:43 -0700
  Re: A Minimal Extended Control Wordset "Rod Pemberton" <do_not_have@noavailemail.cmm> - 2011-08-24 18:52 -0400
    Re: A Minimal Extended Control Wordset JennyB <jennybrien@googlemail.com> - 2011-08-25 06:52 -0700
      Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-08-26 12:23 +1000
        Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-08-25 21:03 -0700
          Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-08-26 20:02 +1000
            Re: A Minimal Extended Control Wordset JennyB <jennybrien@googlemail.com> - 2011-08-26 04:36 -0700
              Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-08-26 10:42 -0700
                Re: A Minimal Extended Control Wordset JennyB <jennybrien@googlemail.com> - 2011-08-27 14:45 -0700
                Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-08-27 17:13 -0700
            Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-08-26 10:16 -0700
  Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-08-25 09:46 -0700
    Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-08-25 20:54 -0700
      Re: A Minimal Extended Control Wordset JennyB <jennybrien@googlemail.com> - 2011-08-26 10:24 -0700
        Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-08-26 11:04 -0700
          Re: A Minimal Extended Control Wordset JennyB <jennybrien@googlemail.com> - 2011-08-31 04:14 -0700
            Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-08-31 15:25 -0700
              Re: A Minimal Extended Control Wordset JennyB <jennybrien@googlemail.com> - 2011-09-01 04:00 -0700
                Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-09-01 12:47 -0700
        Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-08-27 13:18 +1000
          Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-08-27 04:41 -0700
            Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-08-28 13:28 +1000
              Re: A Minimal Extended Control Wordset "Elizabeth D. Rather" <erather@forth.com> - 2011-08-27 18:32 -1000
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-08-29 12:32 +1000
              Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-08-28 09:22 -0700
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-08-29 12:30 +1000
                Re: A Minimal Extended Control Wordset "Elizabeth D. Rather" <erather@forth.com> - 2011-08-28 18:17 -1000
                return address manipulation (was: A Minimal Extended Control Wordset) anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2011-08-29 09:14 +0000
                Re: return address manipulation Andrew Haley <andrew29@littlepinkcloud.invalid> - 2011-08-29 05:53 -0500
                Re: return address manipulation anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2011-08-29 11:45 +0000
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-08-30 14:08 +1000
                Re: A Minimal Extended Control Wordset "Elizabeth D. Rather" <erather@forth.com> - 2011-08-29 18:28 -1000
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-08-31 13:52 +1000
                Re: A Minimal Extended Control Wordset "Elizabeth D. Rather" <erather@forth.com> - 2011-08-30 21:42 -1000
                Re: A Minimal Extended Control Wordset Paul Rubin <no.email@nospam.invalid> - 2011-08-31 00:47 -0700
                Re: A Minimal Extended Control Wordset "Elizabeth D. Rather" <erather@forth.com> - 2011-08-30 21:55 -1000
                Re: A Minimal Extended Control Wordset Paul Rubin <no.email@nospam.invalid> - 2011-09-01 00:44 -0700
                Re: A Minimal Extended Control Wordset Andrew Haley <andrew29@littlepinkcloud.invalid> - 2011-09-01 03:37 -0500
                Re: A Minimal Extended Control Wordset Paul Rubin <no.email@nospam.invalid> - 2011-09-01 02:19 -0700
                Re: A Minimal Extended Control Wordset Andrew Haley <andrew29@littlepinkcloud.invalid> - 2011-09-01 05:05 -0500
                min-max-sum (was: A Minimal Extended Control Wordset) anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2011-09-01 14:32 +0000
                Re: min-max-sum Andrew Haley <andrew29@littlepinkcloud.invalid> - 2011-09-01 10:43 -0500
                Re: min-max-sum anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2011-09-01 15:59 +0000
                Re: min-max-sum BruceMcF <agila61@netscape.net> - 2011-09-01 13:13 -0700
                Re: min-max-sum Andrew Haley <andrew29@littlepinkcloud.invalid> - 2011-09-02 04:12 -0500
                Re: min-max-sum Andrew Haley <andrew29@littlepinkcloud.invalid> - 2011-09-02 04:31 -0500
                Re: min-max-sum anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2011-09-02 10:41 +0000
                Re: min-max-sum Andrew Haley <andrew29@littlepinkcloud.invalid> - 2011-09-02 06:31 -0500
                Re: min-max-sum anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2011-09-04 13:18 +0000
                Re: min-max-sum mhx@iae.nl (Marcel Hendrix) - 2011-09-04 22:42 +0200
                Re: min-max-sum anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2011-09-05 08:16 +0000
                Re: min-max-sum Andrew Haley <andrew29@littlepinkcloud.invalid> - 2011-09-05 02:58 -0500
                Re: min-max-sum BruceMcF <agila61@netscape.net> - 2011-09-02 08:43 -0700
                Re: min-max-sum coos haak <chforth@hccnet.nl> - 2011-09-02 20:35 +0200
                Re: min-max-sum BruceMcF <agila61@netscape.net> - 2011-09-03 11:48 -0700
                Re: min-max-sum BruceMcF <agila61@netscape.net> - 2011-09-04 18:31 -0700
                Re: min-max-sum Alex McDonald <blog@rivadpm.com> - 2011-09-02 05:37 -0700
                Re: min-max-sum mhx@iae.nl (Marcel Hendrix) - 2011-09-03 12:06 +0200
                Re: A Minimal Extended Control Wordset Paul Rubin <no.email@nospam.invalid> - 2011-09-04 22:07 -0700
                Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-09-04 22:56 -0700
                Re: A Minimal Extended Control Wordset C G Montgomery <cgm@physics.utoledo.edu> - 2011-09-05 17:44 -0400
                Re: A Minimal Extended Control Wordset Paul Rubin <no.email@nospam.invalid> - 2011-09-05 18:10 -0700
                Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-09-01 11:01 -0700
                Re: A Minimal Extended Control Wordset "Elizabeth D. Rather" <erather@forth.com> - 2011-09-01 09:17 -1000
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-09-01 13:39 +1000
                Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-09-01 10:21 -0700
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-09-05 12:24 +1000
                Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-09-04 21:11 -0700
                Re: A Minimal Extended Control Wordset Albert van der Horst <albert@spenarnc.xs4all.nl> - 2011-09-06 18:13 +0000
                Re: A Minimal Extended Control Wordset Alex McDonald <blog@rivadpm.com> - 2011-09-06 12:15 -0700
                Re: A Minimal Extended Control Wordset "Elizabeth D. Rather" <erather@forth.com> - 2011-09-06 09:53 -1000
                Re: A Minimal Extended Control Wordset Alex McDonald <blog@rivadpm.com> - 2011-09-06 14:18 -0700
                Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-09-06 17:32 -0700
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-09-07 19:43 +1000
                Re: A Minimal Extended Control Wordset Andrew Haley <andrew29@littlepinkcloud.invalid> - 2011-09-07 06:02 -0500
                Re: A Minimal Extended Control Wordset Alex McDonald <blog@rivadpm.com> - 2011-09-07 05:41 -0700
                Re: A Minimal Extended Control Wordset anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2011-09-07 16:00 +0000
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-09-09 08:52 +1000
                Re: A Minimal Extended Control Wordset Alex McDonald <blog@rivadpm.com> - 2011-09-08 16:08 -0700
                Re: A Minimal Extended Control Wordset George Hubert <georgeahubert@yahoo.co.uk> - 2011-09-09 04:12 -0700
                Re: A Minimal Extended Control Wordset Albert van der Horst <albert@spenarnc.xs4all.nl> - 2011-09-10 09:09 +0000
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-09-11 18:29 +1000
                Re: A Minimal Extended Control Wordset Alex McDonald <blog@rivadpm.com> - 2011-09-11 09:04 -0700
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-09-15 19:25 +1000
                Re: A Minimal Extended Control Wordset Alex McDonald <blog@rivadpm.com> - 2011-09-15 03:30 -0700
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-09-18 15:43 +1000
                Re: A Minimal Extended Control Wordset "Elizabeth D. Rather" <erather@forth.com> - 2011-09-17 20:42 -1000
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-09-19 05:14 +1000
                Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-09-18 19:31 -0700
                Re: A Minimal Extended Control Wordset Andrew Haley <andrew29@littlepinkcloud.invalid> - 2011-09-18 01:49 -0500
                Re: A Minimal Extended Control Wordset "Elizabeth D. Rather" <erather@forth.com> - 2011-09-08 14:56 -1000
                Re: A Minimal Extended Control Wordset anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2011-09-09 08:20 +0000
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-09-11 16:22 +1000
                Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-09-11 03:06 -0700
                Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-09-08 19:29 -0700
                Re: A Minimal Extended Control Wordset Brad <hwfwguy@gmail.com> - 2011-09-08 08:58 -0700
                Re: A Minimal Extended Control Wordset Alex McDonald <blog@rivadpm.com> - 2011-09-08 10:00 -0700
                Re: A Minimal Extended Control Wordset coos haak <chforth@hccnet.nl> - 2011-09-08 22:00 +0200
                Re: A Minimal Extended Control Wordset Alex McDonald <blog@rivadpm.com> - 2011-09-08 16:02 -0700
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-09-09 09:16 +1000
                Re: A Minimal Extended Control Wordset "Elizabeth D. Rather" <erather@forth.com> - 2011-09-08 15:04 -1000
                Re: A Minimal Extended Control Wordset Andrew Haley <andrew29@littlepinkcloud.invalid> - 2011-09-09 04:13 -0500
                Re: A Minimal Extended Control Wordset Brad <hwfwguy@gmail.com> - 2011-08-31 09:20 -0700
                Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-08-28 21:31 -0700
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-08-31 13:53 +1000
                Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-08-31 04:11 -0700
                Re: A Minimal Extended Control Wordset "Ed" <nospam@invalid.com> - 2011-09-01 14:47 +1000
                Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-09-01 10:32 -0700
                Re: A Minimal Extended Control Wordset BruceMcF <agila61@netscape.net> - 2011-09-01 10:33 -0700

csiph-web