Thu Dec 28

too slow on mac-mf;  run gprof

[15]    38.81   11.52     8.00 9498974+8346392 rx_rexp_equal [15]
__
added code to rx_rexp_equal to count n calls and result bias
int re_abs = 0;
int re_ans = 0;

  /**/
  ++re_abs;
  re_ans += (ret*2 - 1);

in gdb, br exit and check those

	Breakpoint 1, 0x1359a in exit ()
	(gdb) p re_abs
	$1 = 3416821
	(gdb) p re_ans
	$2 = -2793859

82% likely to not be equal
--

notice:

[16]    15.91    8.00     0.00 9847935      rx_bitset_is_equal [16]

the test in  rx_rexp_equal (a, b) is

  ret = (   (a->type == b->type)
	 && (a->params.cset_size == b->params.cset_size)
	 && (a->params.intval == b->params.intval)
	 && (a->params.intval2 == b->params.intval2)
	 && rx_bitset_is_equal (a->params.cset_size,
				a->params.cset,
				b->params.cset)
	 && rx_rexp_equal (a->params.pair.left, b->params.pair.left)
	 && rx_rexp_equal (a->params.pair.right, b->params.pair.right));


and gprof confirms that rx_bitset_is_equal isn't being called from
anyplace else.  

most calls are useless since most nodes prbly aren't event cset
nodes.

re-order and prune...

before (-pg -g)
20.74user 0.31system 0:22.02elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k

after
19.46user 0.15system 0:20.60elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k


gprof says:

 37.46     7.33     7.33          mcount
 17.12     3.35    10.68   4021435  rx_rexp_equal
  8.33     1.63    12.31   1114696  rx_bitset_is_equal

[13]    56.78    1.38     5.57 130048      rx_hash_store [13]
[15]    40.69    3.35     1.63 2275803+1745632 rx_rexp_equal [15]

that seems awefully high for such short input ... perhaps rx_hash_store
is being called too often.  These functions can get faster, but not
an order of magnitude faster, which is what we're really after.

i think simplified regexps aren't cached reasonably.


cache cached_rexp in rexp_node

17.05user 0.06system 0:17.14elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

% time  seconds   cumsec   calls  function
 35.05     5.98     5.98          mcount
 15.89     2.71     8.69   3271085  rx_rexp_equal
  7.74     1.32    10.01   919773  rx_bitset_is_equal



Thu Dec 28 15:28:26 PST 1995

-O3 comparison to /usr/bin/sed (GNU sed version 2.05) show about an
O(10) slowdown.

-pg -g:

*** Start "time ./sed -f sep.sed < sep.inp > tmp" in ~/vac/rxdispencer/sed/testsuite/ at 15:30:08
0.66user 0.06system 0:00.81elapsed 88%CPU (0avgtext+0avgdata 0maxresident)k

% time  seconds   cumsec   calls  function
 37.31     0.25     0.25          mcount
 10.45     0.07     0.32   41465  rx_bitset_hash
  7.46     0.05     0.37   43124  rx_rexp_equal
  5.97     0.04     0.41    7003  rx_hash_store
  4.48     0.03     0.44   33682  unfa_equal
  4.48     0.03     0.47   12985  malloc
  2.99     0.02     0.49    6899  rx_make_solutions
  2.99     0.02     0.51    5727  rx_basic_make_solutions
  1.49     0.01     0.52   89829  rx_rexp_hash
  1.49     0.01     0.53    9491  nfa_set_enjoin
  1.49     0.01     0.54    7791  hash_se_prog
  1.49     0.01     0.55    7775  se_list_cmp
  1.49     0.01     0.56    7760  rx_free_solutions
  1.49     0.01     0.57    7204  rx_next_solution
  1.49     0.01     0.58    6992  bzero
  1.49     0.01     0.59    6899  canonical_unfa
  1.49     0.01     0.60    6899  rx_free_unfa
  1.49     0.01     0.61    6899  rx_start_superstate
  1.49     0.01     0.62    6899  rx_terminate_system
  1.49     0.01     0.63    6899  rx_unfa
  1.49     0.01     0.64    6899  rx_unfa_rx
  1.49     0.01     0.65    5727  init_basic_once
  1.49     0.01     0.66      29  __sbrk
  1.49     0.01     0.67      20  rx_superstate


sep.sed:
--------

# inspired by an autoconf generated configure script.
s%/[^/][^/]*$%%


sep.inp:
--------

miss mary mack mack//mack/ran down/the track  track  track
slashes\aren't%used enough/in/casual-conversation///
possibly sentences would be more attractive if they ended in two slashes//


Some call graph entries are revealing:

----------------------------------------
                 0.00     0.42  163/163      rx_regexec [5]
[2]     99.97    0.00     0.42  163      rx_regmatch [2]
                 0.02     0.30 5727/5727     rx_basic_make_solutions [9]
                 0.01     0.07 5727/5727     rx_next_solution [15]
                 0.00     0.02 5727/5727     rx_basic_free_solutions [23]

rx_regmatch is called 163 times -- almost once per character
in the input.

It calls rx_basic_make_solutions 5727 times because for each starting
position, it calls rx_basic_make_solutions for each possible length
of match from longest to shortest until a match is found or all matches
tried.

The fastmap optimization could save a lot here but would lose on a
pattern starting with "." or "[a-zA-Z]".   In contrast, sed 2.05 doesn't
slow down noticably when the command is changed to "s%./[^/][^/]*$%%".

rx_basic_make_solutions is called 5727 times

more from the call graph:

                 0.01     0.20 6899/6899     rx_unfa [10]
[11]    49.68    0.01     0.20 6899      canonical_unfa [11]

there is a caching optimization in rx_unfa for the purpose of avoiding
calls to canonical_unfa.   apparently it is buggy.  why?

it depends on the caching of simplified regexps....does that work?
Here is a classic profiling trick, to find out:

	Program exited normally.
	Breakpoint 1 at 0x109f1: file ../../rx/rxsimp.c, line 67.
	Breakpoint 2 at 0x10a18: file ../../rx/rxsimp.c, line 72.
	(gdb) comm 1
	Type commands for when breakpoint 1 is hit, one per line.
	End with a line saying just "end".
	silent
	cont
	end
	(gdb) comm 2
	Type commands for when breakpoint 2 is hit, one per line.
	End with a line saying just "end".
	silent
	cont
	end
	(gdb) run
	[....]
	(gdb) i br
	1   breakpoint     keep y   0x000109f1 in rx_simple_rexp at ../../rx/rxsimp.c:67
		breakpoint already hit 5802 times
		silent
		cont
	2   breakpoint     keep y   0x00010a18 in rx_simple_rexp at ../../rx/rxsimp.c:72
		breakpoint already hit 245 times
		silent
		cont

which means that caching is working just fine here (245:5802 miss ratio)

There's still a puzzle.

The expression in "s%/[a-z][a-z]*$%%" comes out to:

	(gdb) p print_rexp (256, 0, preg->pattern)
	Node 3 type 1 (r_concat), iv=0( ), iv2=0, len=-1 obs=1 cs=nil
	  Node -1 type 0 (r_cset), iv=0( ), iv2=0, len=1 obs=0 cs=[/]
	  Node 2 type 1 (r_concat), iv=0( ), iv2=0, len=-1 obs=1 cs=nil
	    Node -1 type 0 (r_cset), iv=0( ), iv2=0, len=1 obs=0 cs=[abcdefghijklmnopqrstuvwxyz]
	    Node 1 type 1 (r_concat), iv=0( ), iv2=0, len=-1 obs=1 cs=nil
	      Node -1 type 4 (r_star), iv=0( ), iv2=0, len=-1 obs=0 cs=nil
	        Node -1 type 0 (r_cset), iv=0( ), iv2=0, len=1 obs=0 cs=[abcdefghijklmnopqrstuvwxyz]
	        nil
	      Node 0 type 8 (r_conext), iv=36($), iv2=0, len=0 obs=1 cs=nil
	
even 245 non-cached calls to rx_simple_rexp seems way out of hand.   Every node
of the tree can be simplified and cached in at most:

		8	; 1 call per node
		6	; 2 recursive calls per concat
		1	; 1 recursive call per star
		--
		15	; 15 calls

probably fewer as some calls are likely counted twice.  So why 245?

pop to the main perf problem which was:

	                 0.01     0.20 6899/6899     rx_unfa [10]
	[11]    49.68    0.01     0.20 6899      canonical_unfa [11]

	there is a caching optimization in rx_unfa for the purpose of avoiding
	calls to canonical_unfa.   apparently it is buggy.  why?


What expressions is rx_unfa called for?

	$40 = (struct rexp_node *) 0x5adc0
	$41 = (struct rexp_node *) 0x5adc0
	$42 = (struct rexp_node *) 0x5adc0
	$43 = (struct rexp_node *) 0x5adc0
	[....]


Poking around in gdb says that expression's unfa is cached properly
but the cache is wrongly cleared here:


=>      rx_basic_free_solutions (solutions);
        if (answer == rx_yes)
	  ....
in rxposix.c.

This is only a few "finish" and "next" steps away from where the cache
is set.  So, it was found just by searching forward in the coarsest
steps from a call to rx_unfa.  (Watchpoints crash gdb and sometimes linux
under linux).

set a breakpoint there, ignored it 20 times, and confirmed that
the cache is cleared.

Before:
	(gdb) set $exp=solutions->exp

	(gdb) p $exp->simplified
	$3519 = (struct rexp_node *) 0x5adc0
	(gdb) p $exp->simplified->cr
	$3520 = (struct rx_cached_rexp *) 0x57000
	(gdb) p $exp->refs
	$3521 = 2
	(gdb) p $exp->simplified->refs
	$3522 = 3

After:

	(gdb) p $exp->simplified
	$3526 = (struct rexp_node *) 0x5adc0
	(gdb) p $exp->simplified->cr
	$3523 = (struct rx_cached_rexp *) 0x0
	(gdb) p $exp->refs
	$3525 = 1
	(gdb) p $exp->simplified->refs
	$3524 = 3

so next time, step into it.

ugh.... rx_free_unfa (unfa) was simply clearing the cache in
what was obviously the wrong place (when the unfa refcount dropped
to 0 instead of when it was actually flushed from the cache.)
should have checked here a few steps ago, but writing the LOG
was a distracting source of amusment.


rebuild with fix

before:
	*** Start "time ./sed -f sep.sed < sep.inp > tmp" in ~/vac/rxdispencer/sed/testsuite/ at 15:30:08
	0.66user 0.06system 0:00.81elapsed 88%CPU (0avgtext+0avgdata 0maxresident)k


after
	*** Start "time ./sed -f sep.sed < sep.inp > tmp" in /home/lord/vac/rxdispencer/sed/testsuite/ at 16:34:52
	0.35user 0.05system 0:00.45elapsed 88%CPU (0avgtext+0avgdata 0maxresident)k


2 or 3 more of those, and we're totally in business.




Thu Dec 28 15:28:26 PST 1995

	*** Start "time ./sed -f sep.sed < sep.inp > tmp" in /home/lord/vac/rxdispencer/sed/testsuite/ at 16:34:52
	0.35user 0.05system 0:00.45elapsed 88%CPU (0avgtext+0avgdata 0maxresident)k

profile has changed considerably.  good!

	% time  seconds   cumsec   calls  function
	 38.89     0.14     0.14          mcount
	 16.67     0.06     0.20   12985  malloc
	 11.11     0.04     0.24    8085  eclose_node
	  8.33     0.03     0.27    6137  rx_soluntion_fit_p
	  5.56     0.02     0.29   12637  free
	  2.78     0.01     0.30    7760  rx_free_solutions
	  2.78     0.01     0.31    6899  rx_make_solutions
	  2.78     0.01     0.32    6899  rx_terminate_system
	  2.78     0.01     0.33    6899  rx_unfa
	  2.78     0.01     0.34    6137  rx_fit_p
	  2.78     0.01     0.35     163  rx_regmatch
	  2.78     0.01     0.36      20  rx_superstate
	
eclose_node?!?!?!

but more pressing is that some tests now segfault.

...

-O3 causes the segfaults.  hopefully this is a compiler bug.  i think
i've seen this on linux before.

-O has no problem.




Stepping back a bit...here is the state of some timing tests.

This is -O vs. the mysterious sed 2.05 in /usr/bin.


	time ./sed -f enable.sed < enable.inp > tmp
	0.02user 0.03system 0:00.16elapsed 31%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp enable.good tmp

	time /usr/bin/sed -f enable.sed < enable.inp > tmp2
	0.00user 0.01system 0:00.10elapsed 10%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp enable.good tmp2




	time ./sed -f sep.sed < sep.inp > tmp
	0.13user 0.02system 0:00.16elapsed 93%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sep.good tmp

	time /usr/bin/sed -f sep.sed < sep.inp > tmp2
	0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sep.good tmp2




	time ./sed -f inclib.sed < inclib.inp > tmp
	0.10user 0.01system 0:00.12elapsed 91%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp inclib.good tmp

	time /usr/bin/sed -f inclib.sed < inclib.inp > tmp2
	0.00user 0.02system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp inclib.good tmp2




	time ./sed -f 8bit.sed < 8bit.inp > tmp
	0.03user 0.02system 0:00.05elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp 8bit.good tmp

	time /usr/bin/sed -f 8bit.sed < 8bit.inp > tmp2
	0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp 8bit.good tmp2




	time ./sed -f newjis.sed < newjis.inp > tmp
	0.03user 0.01system 0:00.09elapsed 44%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp newjis.good tmp

	time /usr/bin/sed -f newjis.sed < newjis.inp > tmp2
	0.00user 0.03system 0:00.06elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp newjis.good tmp2




	time ./sed -n -f cv-vars.sed < cv-vars.inp > tmp
	0.02user 0.05system 0:00.08elapsed 87%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp cv-vars.good tmp

	time /usr/bin/sed -n -f cv-vars.sed < cv-vars.inp > tmp2
	0.01user 0.02system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp cv-vars.good tmp2




	time ./sed -f manis.sed < manis.inp > tmp
	0.44user 0.03system 0:00.48elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp manis.inp tmp

	time /usr/bin/sed -f manis.sed < manis.inp > tmp2
	0.02user 0.02system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp manis.inp tmp2




	time ./sed -f xabcx.sed < xabcx.inp > tmp
	0.00user 0.04system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp xabcx.good tmp

	time /usr/bin/sed -f xabcx.sed < xabcx.inp > tmp2
	0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp xabcx.good tmp2




	time ./sed -f dollar.sed < dollar.inp > tmp
	0.00user 0.03system 0:00.05elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp dollar.good tmp

	time /usr/bin/sed -f dollar.sed < dollar.inp > tmp2
	0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp dollar.good tmp2




	time ./sed -f noeol.sed < noeol.inp > tmp
	0.01user 0.03system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp noeol.good tmp

	time /usr/bin/sed -f noeol.sed < noeol.inp > tmp2
	0.00user 0.02system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp noeol.good tmp2




	time ./sed -f sub-num.sed < sub-num.inp > tmp
	0.01user 0.03system 0:00.05elapsed 80%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sub-num.good tmp

	time /usr/bin/sed -f sub-num.sed < sub-num.inp > tmp2
	0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sub-num.good tmp2




	time ./sed -f sub-all.sed < sub-num.inp > tmp
	0.02user 0.02system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sub-all.good tmp

	time /usr/bin/sed -f sub-all.sed < sub-num.inp > tmp2
	0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sub-all.good tmp2




	time ./sed -f subwrite.sed < subwrite.inp > tmp1
	0.03user 0.02system 0:00.05elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp subwrite.good1 tmp1
	cmp subwrite.good2 tmp2

	time /usr/bin/sed -f subwrite.sed < subwrite.inp > tmp1
	0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp subwrite.good1 tmp1
	cmp subwrite.good2 tmp2




	time ./sed -f head.sed < head.inp > tmp
	0.01user 0.00system 0:00.01elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp head.good tmp

	time /usr/bin/sed -f head.sed < head.inp > tmp2
	0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp head.good tmp2



	time ./sed -n -f middle.sed < head.inp > tmp
	0.01user 0.00system 0:00.02elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp middle.good tmp

	time /usr/bin/sed -n -f middle.sed < head.inp > tmp2
	0.00user 0.01system 0:00.02elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp middle.good tmp2




	time ./sed --file=newjis.sed < newjis.inp > tmp
	0.02user 0.01system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp newjis.good tmp

	time /usr/bin/sed --file=newjis.sed < newjis.inp > tmp2
	0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp newjis.good tmp2



	time ./sed --quiet -f cv-vars.sed < cv-vars.inp > tmp
	0.01user 0.04system 0:00.07elapsed 71%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp cv-vars.good tmp

	time /usr/bin/sed --quiet -f cv-vars.sed < cv-vars.inp > tmp2
	0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp cv-vars.good tmp2






So far, most often ./sed loses (not always).   But we're still winning:


	time ./sed -f maddingcrowd.sed < maddingcrowd.inp > tmp
	2.17user 0.22system 0:02.40elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp maddingcrowd.good

	# DO NOT time /usr/bin/sed -f maddingcrowd.sed < maddingcrowd.inp > tmp2
	# sed 2.05....  t->+inf



but also still losing:

	time /usr/bin/sed -f mac-mf.sed < mac-mf.inp > tmp" in ~/vac/rxdispencer/sed/testsuite/ at 17:19:08
	0.29user 0.09system 0:00.39elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps


	time ./sed -f mac-mf.sed < mac-mf.inp > tmp" in ~/vac/rxdispencer/sed/testsuite/ at 17:19:08
	t->inf





Fri Dec 29 12:03:28 PST 1995


ran mac-mf.sed on small input for profiling.

	 32.17     1.66     1.66          mcount
	 10.27     0.53     2.19   262506  malloc
	  6.98     0.36     2.55   260030  free
	  6.20     0.32     2.87   129914  rx_make_solutions
	  6.01     0.31     3.18   129914  rx_start_superstate
	  5.43     0.28     3.46   129978  eclose_node
	  3.68     0.19     3.65   129972  hash_se_prog
	  3.49     0.18     3.83    4205  rx_regmatch
	  3.10     0.16     3.99   129916  rx_next_solution
	  3.10     0.16     4.15   129914  rx_unfa
	  2.52     0.13     4.28   129728  rx_basic_make_solutions
	  2.33     0.12     4.40   129914  rx_free_unfa
	  1.94     0.10     4.50   132334  bzero
	  1.74     0.09     4.59   161119  rx_free_rexp
	  1.36     0.07     4.66   161229  rx_save_rexp
	  1.16     0.06     4.72   130096  rx_free_solutions
	  1.16     0.06     4.78   129992  nfa_set_enjoin
	  1.16     0.06     4.84   129914  rx_terminate_system
	  0.97     0.05     4.89   129958  rx_state_possible_futures
	  0.97     0.05     4.94   129728  rx_basic_free_solutions
	  0.78     0.04     4.98   129914  rx_unfa_rx
	  0.58     0.03     5.01   129914  rx_init_system
	  0.58     0.03     5.04   129914  se_list_cmp
	  0.58     0.03     5.07   31241  rx_simple_rexp
	  0.39     0.02     5.09     698  inverse_translation
	  0.19     0.01     5.10   23082  rx_fit_p
	  0.19     0.01     5.11    4820  inchar
	  0.19     0.01     5.12     364  rx_hash_store
	  0.19     0.01     5.13     125  rx_bitset_difference
	  0.19     0.01     5.14      94  __sbrk
	  0.19     0.01     5.15       1  __isatty
	  0.19     0.01     5.16       1  compile_program
	
malloc is top, called many many times -- approx. half the calls to
that must be from rx_make_solutions.  

Most of those are from rx_basic_make_solutions.

All of those are from rx_regmatch, which is called far fewer times
(approx 1:31).

All of those (in this case) are from rx_regexec, called only 
138 times. 


fastmapping can prune many calls from regexec to regmatch so add
the fastmapping optimization copying/fixing code from an older rx.

before fastmapping:
	time ./sed -f mac-mf.sed < ,a
	5.14user 0.14system 0:08.13elapsed 64%CPU (0avgtext+0avgdata 0maxresident)k

after fastmapping:
	./sed -f mac-mf.sed < ,a
	0.85user 0.09system 0:01.08elapsed 87%CPU (0avgtext+0avgdata 0maxresident)k



rerun -O timing/bug tests

some bug in the spencer test....

	time ./sed -f enable.sed < enable.inp > tmp
	0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp enable.good tmp

	time /usr/bin/sed -f enable.sed < enable.inp > tmp2
	0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp enable.good tmp2




	time ./sed -f sep.sed < sep.inp > tmp
	0.02user 0.03system 0:00.05elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sep.good tmp

	time /usr/bin/sed -f sep.sed < sep.inp > tmp2
	0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sep.good tmp2




	time ./sed -f inclib.sed < inclib.inp > tmp
	0.03user 0.00system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp inclib.good tmp

	time /usr/bin/sed -f inclib.sed < inclib.inp > tmp2
	0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp inclib.good tmp2




	time ./sed -f 8bit.sed < 8bit.inp > tmp
	0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp 8bit.good tmp

	time /usr/bin/sed -f 8bit.sed < 8bit.inp > tmp2
	0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp 8bit.good tmp2




	time ./sed -f newjis.sed < newjis.inp > tmp
	0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp newjis.good tmp

	time /usr/bin/sed -f newjis.sed < newjis.inp > tmp2
	0.00user 0.02system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp newjis.good tmp2




	time ./sed -n -f cv-vars.sed < cv-vars.inp > tmp
	0.01user 0.05system 0:00.06elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp cv-vars.good tmp

	time /usr/bin/sed -n -f cv-vars.sed < cv-vars.inp > tmp2
	0.01user 0.02system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp cv-vars.good tmp2




	time ./sed -f manis.sed < manis.inp > tmp
	0.10user 0.03system 0:00.13elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp manis.inp tmp

	time /usr/bin/sed -f manis.sed < manis.inp > tmp2
	0.01user 0.03system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp manis.inp tmp2




	time ./sed -f xabcx.sed < xabcx.inp > tmp
	0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp xabcx.good tmp

	time /usr/bin/sed -f xabcx.sed < xabcx.inp > tmp2
	0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp xabcx.good tmp2




	time ./sed -f dollar.sed < dollar.inp > tmp
	0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp dollar.good tmp

	time /usr/bin/sed -f dollar.sed < dollar.inp > tmp2
	0.00user 0.02system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp dollar.good tmp2




	time ./sed -f noeol.sed < noeol.inp > tmp
	0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp noeol.good tmp

	time /usr/bin/sed -f noeol.sed < noeol.inp > tmp2
	0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp noeol.good tmp2




	time ./sed -f sub-num.sed < sub-num.inp > tmp
	0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sub-num.good tmp

	time /usr/bin/sed -f sub-num.sed < sub-num.inp > tmp2
	0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sub-num.good tmp2




	time ./sed -f sub-all.sed < sub-num.inp > tmp
	0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sub-all.good tmp

	time /usr/bin/sed -f sub-all.sed < sub-num.inp > tmp2
	0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sub-all.good tmp2




	time ./sed -f subwrite.sed < subwrite.inp > tmp1
	0.02user 0.00system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp subwrite.good1 tmp1
	cmp subwrite.good2 tmp2

	time /usr/bin/sed -f subwrite.sed < subwrite.inp > tmp1
	0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp subwrite.good1 tmp1
	cmp subwrite.good2 tmp2




	time ./sed -f head.sed < head.inp > tmp
	0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp head.good tmp

	time /usr/bin/sed -f head.sed < head.inp > tmp2
	0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp head.good tmp2




	time ./sed -n -f middle.sed < head.inp > tmp
	0.00user 0.01system 0:00.01elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp middle.good tmp

	time /usr/bin/sed -n -f middle.sed < head.inp > tmp2
	0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp middle.good tmp2




	time ./sed -f maddingcrowd.sed < maddingcrowd.inp > tmp
	2.13user 0.26system 0:02.76elapsed 86%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp maddingcrowd.good

	time /usr/bin/sed -f maddingcrowd.sed < maddingcrowd.inp > tmp2
	t->inf




	time ./sed -f mac-mf.sed < mac-mf.inp > tmp
	21.74user 0.16system 0:21.90elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp mac-mf.good

	time /usr/bin/sed -f mac-mf.sed < mac-mf.inp > tmp2
	0.28user 0.11system 0:00.39elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp2 mac-mf.good




	time ./sed -f khadafy.sed < khadafy.inp > tmp
	0.02user 0.01system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp khadafy.inp

	time /usr/bin/sed -f khadafy.sed < khadafy.inp > tmp2
	0.01user 0.03system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp2 khadafy.inp
	
	

	time ./sed -f linecnt.sed < linecnt.inp > tmp
	0.00user 0.01system 0:00.01elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp linecnt.good

	time /usr/bin/sed -f linecnt.sed < linecnt.inp > tmp2
	0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp2 linecnt.good



Generally close.  One very winning case (maddingcrowd).   One pretty much
losing case (but not as bad as before) mac-mf.


All tests pass except spencer.

All tests reasonable performance except "distrib" and "mac-mf".


Spencer:
	was typo in test suite but that fixed, still bugs:

		Test #37 failed!
		Test #62 failed!


#37 -- test suite was wrong -- sed, right -- pattern bogus.
	lines 2945-2947 of 2003.2-1992

#62 -- test suite wrong again -- sed, right -- pattern not bogus
	lines 3058-3060 and 3066-3077 of 2003.2-1992

spencer test passes with those fixes.



Fri Dec 29 13:14:02 PST 1995


last development before release issues:

	All tests reasonable performance except "distrib" and "mac-mf".



	time ./sed -f mac-mf.sed < mac-mf.inp > tmp
	22.10user 0.22system 0:22.52elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp mac-mf.good

	time /usr/bin/sed -f mac-mf.sed < mac-mf.inp > tmp2
	0.31user 0.09system 0:00.40elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp2 mac-mf.good

	% time  seconds   cumsec   calls  function
	 34.18    19.43    19.43          mcount
	  6.03     3.43    22.86   2545726  free
	  5.96     3.39    26.25   2561762  malloc
	  5.44     3.09    29.34   1324635  eclose_node
	  3.83     2.18    31.52   41025  rx_regmatch
	  3.61     2.05    33.57   1276850  rx_next_solution
	  3.36     1.91    35.48   1276625  rx_start_superstate
	  3.22     1.83    37.31   1276625  rx_make_solutions
	  3.17     1.80    39.11   1276625  rx_free_unfa
	  2.94     1.67    40.78   1217560  rx_fit_p
	  2.41     1.37    42.15   1265155  rx_basic_make_solutions
	  2.27     1.29    43.44   1276625  rx_unfa
	  2.20     1.25    44.69   1223796  rx_simple_rexp
	  2.13     1.21    45.90   1280457  bzero
	  2.01     1.14    47.04   1287172  rx_free_solutions
	  1.55     0.88    47.92   1217560  rx_soluntion_fit_p
	  1.51     0.86    48.78   1278517  rx_state_possible_futures
	  1.44     0.82    49.60   1312946  hash_se_prog
	  1.41     0.80    50.40   1276625  rx_unfa_rx
	  1.39     0.79    51.19   1217560  rx_str_vmfn
	  1.18     0.67    51.86   2500305  rx_free_rexp
	  1.13     0.64    52.50   2500621  rx_save_rexp
	  1.11     0.63    53.13   1381011  nfa_set_enjoin
	  0.83     0.47    53.60   1312343  se_list_cmp
	  0.83     0.47    54.07   12948  rx_hash_store
	  0.77     0.44    54.51   1265155  init_basic_once
	

which means, really, that no function dominates and again, avoiding
the many many calls to rx_regmatch is key.

looking at the script, there are many anchored patterns and i recall
an old rx optimization "don't waste time trying an anchored match
in the middle of a pattern."  Let's put that back in.


-pg before is_anchored
	time ./sed -f mac-mf.sed < mac-mf.inp > tmp
	22.10user 0.22system 0:22.52elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp mac-mf.good


-pg after

	time ./sed -f mac-mf.sed < mac-mf.inp > tmp
	8.22user 0.31system 0:15.97elapsed 53%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp mac-mf.good


also:

	  2.60     0.22     5.76   141219  rx_make_solutions

meaning that we cut down about O(10) on calls to rx_make_solutions.

	*** Start "make" in /home/lord/vac/rxdispencer/sed/testsuite/ at 13:49:53
	time ./sed -f enable.sed < enable.inp > tmp
	0.01user 0.04system 0:01.75elapsed 2%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp enable.good tmp
	time /usr/bin/sed -f enable.sed < enable.inp > tmp2
	0.01user 0.03system 0:00.12elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp enable.good tmp2
	time ./sed -f sep.sed < sep.inp > tmp
	0.02user 0.01system 0:00.25elapsed 12%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sep.good tmp
	time /usr/bin/sed -f sep.sed < sep.inp > tmp2
	0.00user 0.04system 0:00.16elapsed 25%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sep.good tmp2
	time ./sed -f inclib.sed < inclib.inp > tmp
	0.02user 0.01system 0:00.05elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp inclib.good tmp
	time /usr/bin/sed -f inclib.sed < inclib.inp > tmp2
	0.00user 0.02system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp inclib.good tmp2
	time ./sed -f 8bit.sed < 8bit.inp > tmp
	0.00user 0.01system 0:00.03elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp 8bit.good tmp
	time /usr/bin/sed -f 8bit.sed < 8bit.inp > tmp2
	0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp 8bit.good tmp2
	time ./sed -f newjis.sed < newjis.inp > tmp
	0.01user 0.01system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp newjis.good tmp
	time /usr/bin/sed -f newjis.sed < newjis.inp > tmp2
	0.00user 0.04system 0:00.10elapsed 40%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp newjis.good tmp2
	time ./sed -n -f cv-vars.sed < cv-vars.inp > tmp
	0.02user 0.03system 0:00.40elapsed 12%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp cv-vars.good tmp
	time /usr/bin/sed -n -f cv-vars.sed < cv-vars.inp > tmp2
	0.00user 0.04system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp cv-vars.good tmp2
	time ./sed -f manis.sed < manis.inp > tmp
	0.07user 0.04system 0:00.16elapsed 68%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp manis.inp tmp
	time /usr/bin/sed -f manis.sed < manis.inp > tmp2
	0.00user 0.04system 0:00.16elapsed 25%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp manis.inp tmp2
	time ./sed -f xabcx.sed < xabcx.inp > tmp
	0.00user 0.02system 0:00.05elapsed 40%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp xabcx.good tmp
	time /usr/bin/sed -f xabcx.sed < xabcx.inp > tmp2
	0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp xabcx.good tmp2
	time ./sed -f dollar.sed < dollar.inp > tmp
	0.00user 0.02system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp dollar.good tmp
	time /usr/bin/sed -f dollar.sed < dollar.inp > tmp2
	0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp dollar.good tmp2
	time ./sed -f noeol.sed < noeol.inp > tmp
	0.03user 0.00system 0:00.05elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp noeol.good tmp
	time /usr/bin/sed -f noeol.sed < noeol.inp > tmp2
	0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp noeol.good tmp2
	time ./sed -f sub-num.sed < sub-num.inp > tmp
	0.01user 0.01system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sub-num.good tmp
	time /usr/bin/sed -f sub-num.sed < sub-num.inp > tmp2
	0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sub-num.good tmp2
	time ./sed -f sub-all.sed < sub-num.inp > tmp
	0.01user 0.02system 0:00.08elapsed 37%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sub-all.good tmp
	time /usr/bin/sed -f sub-all.sed < sub-num.inp > tmp2
	0.00user 0.02system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp sub-all.good tmp2
	time ./sed -f subwrite.sed < subwrite.inp > tmp1
	0.01user 0.01system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp subwrite.good1 tmp1
	cmp subwrite.good2 tmp2
	time /usr/bin/sed -f subwrite.sed < subwrite.inp > tmp1
	0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp subwrite.good1 tmp1
	cmp subwrite.good2 tmp2
	time ./sed -f head.sed < head.inp > tmp
	0.00user 0.02system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp head.good tmp
	time /usr/bin/sed -f head.sed < head.inp > tmp2
	0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp head.good tmp2
	time ./sed -n -f middle.sed < head.inp > tmp
	0.00user 0.01system 0:00.01elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp middle.good tmp
	time /usr/bin/sed -n -f middle.sed < head.inp > tmp2
	0.00user 0.01system 0:00.02elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp middle.good tmp2
	time ./sed -f maddingcrowd.sed < maddingcrowd.inp > tmp
	2.18user 0.36system 0:10.25elapsed 24%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp maddingcrowd.good
	echo DO NOT time /usr/bin/sed -f maddingcrowd.sed < maddingcrowd.inp > tmp2
	echo sed 2.05....  t->+inf
	time ./sed -f mac-mf.sed < mac-mf.inp > tmp
	2.52user 0.14system 0:02.92elapsed 91%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp mac-mf.good
	time /usr/bin/sed -f mac-mf.sed < mac-mf.inp > tmp2
	0.26user 0.14system 0:00.44elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp2 mac-mf.good
	time ./sed -f khadafy.sed < khadafy.inp > tmp
	0.02user 0.00system 0:00.06elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp khadafy.inp
	time /usr/bin/sed -f khadafy.sed < khadafy.inp > tmp2
	0.01user 0.03system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp2 khadafy.inp
	sh spencer.sh ./sed <  spencer.inp > spencer.tmp 
	sh spencer.tmp
	time ./sed -f linecnt.sed < linecnt.inp > tmp
	0.00user 0.01system 0:00.05elapsed 20%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp linecnt.good
	time /usr/bin/sed -f linecnt.sed < linecnt.inp > tmp2
	0.00user 0.01system 0:00.02elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp2 linecnt.good
	sh distrib.sh ./sed < distrib.inp > tmp
	cmp tmp distrib.good
	time ./sed -f writeout.sed < writeout.inp >tmp1
	0.01user 0.03system 0:00.05elapsed 80%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp1 writeout.good1
	cmp tmp2 writeout.good2
	time ./sed -f readin.sed < readin.inp >tmp
	0.01user 0.02system 0:00.05elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp readin.good
	time /usr/bin/sed -f readin.sed < readin.inp >tmp2
	0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp2 readin.good
	./sed --help > tmp1
	./sed -h > tmp2
	./sed > tmp3 2>&1
	make: [help] Error 4 (ignored)
	cmp tmp1 tmp2
	cmp tmp2 tmp3
	cmp tmp1 help.good
	tmp1 help.good differ: char 9, line 1
	make: [help] Error 1 (ignored)
	./sed --version  > tmp1 2>&1
	./sed -V > tmp2 2>&1
	cmp tmp1 tmp2
	cmp tmp1 version.good
	time ./sed --file=newjis.sed < newjis.inp > tmp
	0.01user 0.01system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp newjis.good tmp
	time /usr/bin/sed --file=newjis.sed < newjis.inp > tmp2
	0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp newjis.good tmp2
	time ./sed --quiet -f cv-vars.sed < cv-vars.inp > tmp
	0.03user 0.03system 0:00.06elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp cv-vars.good tmp
	time /usr/bin/sed --quiet -f cv-vars.sed < cv-vars.inp > tmp2
	0.01user 0.02system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp cv-vars.good tmp2
	rm -f tmp tmp1 tmp2 tmp3 core junk spencer.tmp
	time ./sed -f 8to7.sed < 8bit.inp > tmp
	0.00user 0.01system 0:00.03elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp 8to7.good
	tmp 8to7.good differ: char 1, line 1
	make: [8to7] Error 1 (ignored)
	time /usr/bin/sed -f 8to7.sed < 8bit.inp > tmp2
	0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
	0inputs+0outputs (0major+0minor)pagefaults 0swaps
	cmp tmp2 8to7.good
	tmp2 8to7.good differ: char 1, line 1
	make: [8to7] Error 1 (ignored)
	
one (known) failure for not having an obscure posix feature in sed.
everything else works.

perf very comperable with 2.05 on most of these (small) tests.

rxdispencer totally wins on the maddingcrowd; 2.05 uses vast memory
and takes "forever"

rxdispencer annoyingly 10x slower on mac-mf.  prbly acceptable for a release
but....



Fri Dec 29 13:54:34 PST 1995

looking at mac-mf
			     calls
  0.00     0.00     8.36     470  canonical_unfa

that suggests unfa caching is doing fine.



  0.00     0.00     8.36     847  rx_really_free_superstate

aha...  we are overrunning the superstate cache.

The top functions look suspicious:

	  5.86     0.49     3.26   299341  malloc
	  5.38     0.45     3.71    4376  rx_hash_store
	  4.78     0.40     4.11   147917  eclose_node

once again ... that is a lot of calls to eclose_node


  3.35     0.28     5.08     865  rx_superstate

That is *really* weird.  Almost as many superstates
were really freed as were constructed.

br in exit and look at the "default_cache" and process size:

			      TSIZ DSIZ RSS
 9767 pp4 T     0:09     168  120 2608 1728    xx 11.6 /home/lord/vac/rxdispencer/sed/testsuite/sed -f mac-mf.sed


	  lru_superstate = 0x18c000, 
	  semifree_superstate = 0x0, 
	  empty_superset = 0x79d80, 
	  superstates = 239, 
	  semifree_superstates = 0, 
	  hits = 4, 
	  misses = 135, 
	  bytes_allowed = 1048576, 
	  bytes_used = 1052192, 

the hit/miss ratio is consistant with overrunning the cache.
but why are there *no* semifree_superstates?

	br in semifree_superstate
	comm
	silent
	c
	end


hit 584 times

rx_really_free_superstate was (in a convoluted way) semifreeing
superstates at about the same rate they were being really freed.
unlikely to fix the perf. problem on mac-mf...but that is a bug
the solution is to semifree at twice the rate of really_free.

fix that and retry test.

	before:

	time ./sed -f mac-mf.sed < mac-mf.inp > tmp
	8.22user 0.31system 0:15.97elapsed 53%CPU (0avgtext+0avgdata 0maxresident)k


	after:

	time ./sed -f mac-mf.sed < mac-mf.inp > tmp
	8.37user 0.37system 0:10.84elapsed 80%CPU (0avgtext+0avgdata 0maxresident)k

and cache stats:

	  superstates = 238, 
	  semifree_superstates = 166, 
	  hits = 5, 
	  misses = 124, 
	  bytes_allowed = 1048576, 
	  bytes_used = 1047452, 

all of which is good news (except the hit/miss which still suggests
the cache is being over-run.)

re-compile with 4x superstate cache size

	time ./sed -f mac-mf.sed < mac-mf.inp > tmp
	8.10user 0.60system 0:15.41elapsed 56%CPU (0avgtext+0avgdata 0maxresident)k

hardly any change

re-compile with 4x unfa cache size.  slow down!

	time ./sed -f mac-mf.sed < mac-mf.inp > tmp
	8.16user 0.49system 0:10.63elapsed 81%CPU (0avgtext+0avgdata 0maxresident)k

odd cache data, too:

	  superstates = 596, 
	  semifree_superstates = 0, 
	  hits = 17, 
	  misses = 596, 
	  bytes_allowed = 4194304, 
	  bytes_used = 2608228, 

far from overflowing the superstate cache

p rx_basic_uv, the unfa cache:

	  delay = 2048, 
	  delayed = 100, 

so that isn't overflowing either.

exploring that structure more shows that the hash table is
totally screwed -- everything hashes into the 0 bucket.

out of 100 regexps to rexp_hash...got these results...not the 
greatest hash function.

	0
	1
	4
	5
	61032
	61033
	61036
	61037

use more fields:

	0
	2
	6
	60954
	4294906336
	4294967290

hmm.

cribbed some hashing clue from ouster on grounds that hashing
csets and rexp_nodes is almost like hashing strings.

much nicer:

100 distinguishable calls to rexp_hash (distinct by addr of
rexp_node) giving 100 distinct hash values.  great.


	0		(struct rexp_node *) 0x0
	17006040		(struct rexp_node *) 0x74500
	19131804		(struct rexp_node *) 0x5e0c0
	21257568		(struct rexp_node *) 0x62e00
	21789009		(struct rexp_node *) 0x62c40
	22320450		(struct rexp_node *) 0x6b3c0
	24446214		(struct rexp_node *) 0x62a40
	24977655		(struct rexp_node *) 0x65cc0
	30823506		(struct rexp_node *) 0x5e7c0
	32417829		(struct rexp_node *) 0x65c80
	34543593		(struct rexp_node *) 0x70bc0
	35606475		(struct rexp_node *) 0x6e140
	35846082		(struct rexp_node *) 0x74300
	37200798		(struct rexp_node *) 0x70cc0
	37732239		(struct rexp_node *) 0x70b40
	40389444		(struct rexp_node *) 0x70c40
	44109531		(struct rexp_node *) 0x70ac0
	48892500		(struct rexp_node *) 0x6b640
	65367171		(struct rexp_node *) 0x6e0c0
	66430053		(struct rexp_node *) 0x70fc0
	86351200		(struct rexp_node *) 0x6b900
	110001468		(struct rexp_node *) 0x5eac0
	225255629		(struct rexp_node *) 0x6b480
	231371560		(struct rexp_node *) 0x70800
	312638818		(struct rexp_node *) 0x5ee00
	390934594		(struct rexp_node *) 0x70e40
	517283529		(struct rexp_node *) 0x746c0
	549067790		(struct rexp_node *) 0x1839c0
	572893326		(struct rexp_node *) 0x6b080
	601001026		(struct rexp_node *) 0x27f580
	606081253		(struct rexp_node *) 0x65dc0
	607263981		(struct rexp_node *) 0x69680
	621718215		(struct rexp_node *) 0x27f6c0
	650824273		(struct rexp_node *) 0x6ef40
	826472566		(struct rexp_node *) 0x6b2c0
	868635774		(struct rexp_node *) 0x65f00
	876091122		(struct rexp_node *) 0x206140
	888472439		(struct rexp_node *) 0x6e400
	929543565		(struct rexp_node *) 0x1e0b80
	931845394		(struct rexp_node *) 0x206180
	1058747076		(struct rexp_node *) 0x183900
	1207849365		(struct rexp_node *) 0x67880
	1278079982		(struct rexp_node *) 0x69f00
	1295802040		(struct rexp_node *) 0x27f480
	1310711465		(struct rexp_node *) 0x1e0b40
	1352930633		(struct rexp_node *) 0x76240
	1353620468		(struct rexp_node *) 0x27f700
	1356456513		(struct rexp_node *) 0x79ac0
	1379844369		(struct rexp_node *) 0x62400
	1402493327		(struct rexp_node *) 0x6bfc0
	1601102720		(struct rexp_node *) 0x5ef00
	1772669690		(struct rexp_node *) 0x183940
	1900599955		(struct rexp_node *) 0x27f440
	1968417710		(struct rexp_node *) 0xac140
	2108985499		(struct rexp_node *) 0x79b00
	2137694068		(struct rexp_node *) 0x651c0
	2204601669		(struct rexp_node *) 0x27f600
	2218807864		(struct rexp_node *) 0x799c0
	2223118861		(struct rexp_node *) 0x74780
	2236502798		(struct rexp_node *) 0x79840
	2278246773		(struct rexp_node *) 0x27f640
	2290967666		(struct rexp_node *) 0x73980
	2298725010		(struct rexp_node *) 0x1be500
	2303527273		(struct rexp_node *) 0xaca80
	2381124070		(struct rexp_node *) 0x27f680
	2418247494		(struct rexp_node *) 0x62200
	2437460954		(struct rexp_node *) 0xac000
	2439348845		(struct rexp_node *) 0x79140
	2455486158		(struct rexp_node *) 0x695c0
	2662071862		(struct rexp_node *) 0x183980
	2745345239		(struct rexp_node *) 0x74040
	2832160954		(struct rexp_node *) 0x70400
	2900057973		(struct rexp_node *) 0x76940
	2918628823		(struct rexp_node *) 0x79d00
	2956546377		(struct rexp_node *) 0x1e0b00
	3017127356		(struct rexp_node *) 0x27f400
	3031395249		(struct rexp_node *) 0xac1c0
	3111540809		(struct rexp_node *) 0xac180
	3225480365		(struct rexp_node *) 0x27f540
	3277401564		(struct rexp_node *) 0xe5b40
	3409840041		(struct rexp_node *) 0x27f740
	3441564462		(struct rexp_node *) 0x27f3c0
	3456946400		(struct rexp_node *) 0x65940
	3496700879		(struct rexp_node *) 0x27f4c0
	3531401660		(struct rexp_node *) 0x62cc0
	3546066190		(struct rexp_node *) 0x73f80
	3547538510		(struct rexp_node *) 0x790c0
	3548169742		(struct rexp_node *) 0x1e0d40
	3589031006		(struct rexp_node *) 0x79dc0
	3782143090		(struct rexp_node *) 0x79040
	3824014835		(struct rexp_node *) 0x693c0
	3837791013		(struct rexp_node *) 0x6ed80
	4036337975		(struct rexp_node *) 0x27f5c0
	4063573689		(struct rexp_node *) 0x5e580
	4107576897		(struct rexp_node *) 0x2061c0
	4140954487		(struct rexp_node *) 0x73080
	4168978309		(struct rexp_node *) 0x79b40
	4185396955		(struct rexp_node *) 0x27f500
	4200919815		(struct rexp_node *) 0x5e640
	4247337862		(struct rexp_node *) 0xaca00
	


but they still all go into the same damn bucket.

oops...H2B (hash->bucket) in rxhash.c was bogus do to a recent change away from %13.
fixed for 16 buckets --- still considering going back to %13

anyway...much better...here is rx_basic_uv...notice the spreading
of elements across all buckets in the hash table

	{
	  delay = 2048, 
	  delayed = 100, 
	  table = {
	    parent = 0x0, 
	    refs = 16, 
	    nested_p = 65535, 
	    children = {0x59180, 0xb0c80, 0x8e380, 0x14dd80,
			0xd6380, 0x8e880, 0x59d00, 0x217d80,
			0x59900, 0x59600, 0xd6000, 0x1f8380,
			0xd6580, 0x59b80, 0x59e80, 0x59f00}
	  }, 
	  free_queue = 0x103960
	}

and overall time:


	before (-pg):

	time ./sed -f mac-mf.sed < mac-mf.inp > tmp
	8.37user 0.37system 0:10.84elapsed 80%CPU (0avgtext+0avgdata 0maxresident)k


	after:

	6.94user 0.59system 0:13.71elapsed 54%CPU (0avgtext+0avgdata 0maxresident)k


Here is the superstate cache stats

	  superstates = 596, 
	  semifree_superstates = 0, 
	  hits = 17, 
	  misses = 596, 
	  bytes_allowed = 4194304, 
	  bytes_used = 2611648, 

this and the unfa cache make it clear that caching is not an issue now.

gprof says:
	 33.33     2.50     2.50          mcount
	  9.47     0.71     3.21   299018  malloc
	  5.47     0.41     3.62     613  rx_superstate
	  4.53     0.34     3.96   147465  eclose_node
	  4.13     0.31     4.27   141219  rx_unfa
	  3.73     0.28     4.55   280370  free
	  3.33     0.25     4.80    5042  rx_regmatch
	  3.20     0.24     5.04   141219  rx_free_unfa
	  3.20     0.24     5.28   141219  rx_start_superstate
	  2.13     0.16     5.44   145590  bzero
	  2.13     0.16     5.60   141219  rx_make_solutions
	  2.00     0.15     5.75   82154  rx_fit_p
	  1.87     0.14     5.89   82154  rx_str_vmfn
	  1.87     0.14     6.03    4039  rx_hash_store
	  1.47     0.11     6.14   141444  rx_next_solution
	  1.47     0.11     6.25   82154  rx_soluntion_fit_p
	  1.33     0.10     6.35   146135  hash_se_prog
	  1.33     0.10     6.45   143200  rx_free_solutions
	  1.33     0.10     6.55    9006  rx_regexec
	  1.20     0.09     6.64   142747  rx_state_possible_futures
	  1.20     0.09     6.73   138315  rx_basic_make_solutions
	


Ripe for the picken'....

every one of these:
	  2.13     0.16     5.60   141219  rx_make_solutions

which calls here:

	  3.20     0.24     5.28   141219  rx_start_superstate

which calls here

	1.20     0.09     6.64   142747  rx_state_possible_futures

which calls here

	  4.53     0.34     3.96   147465  eclose_node


the starting superstate should be better cached than that.
oops...this is another optimization not carried over from the
old rx.

looking further....grr!

	struct rx_possible_future *
	rx_state_possible_futures (rx, n)
	     struct rx * rx;
	     struct rx_nfa_state * n;
	#endif
	{
	  if (n->futures_computed)
	    return n->futures;
	  else
	    {
	      struct eclose_frame frame;
	      frame.prog_backwards = 0;
	      if (!eclose_node (rx, n, n, &frame))
		return 0;
	      else
		{
		  struct rx_possible_future * p;
		  return n->futures;
		}
	    }
	}
	
that's the only occurence of "futures_computed" ...oops...
fixing that...

	before:

	6.94user 0.59system 0:13.71elapsed 54%CPU (0avgtext+0avgdata 0maxresident)k

	after:

	5.75user 0.32system 0:07.17elapsed 84%CPU (0avgtext+0avgdata 0maxresident)k


profiling

	% time  seconds   cumsec   calls  function
	 34.00     2.05     2.05          mcount
	  7.63     0.46     2.51   299018  malloc
	  5.31     0.32     2.83   141219  rx_start_superstate
	  4.64     0.28     3.11   280370  free
	  4.48     0.27     3.38   141219  rx_unfa
	  4.15     0.25     3.63   141219  rx_make_solutions
	  3.81     0.23     3.86     613  rx_superstate
	  3.65     0.22     4.08    5042  rx_regmatch
	  3.48     0.21     4.29   141219  rx_free_unfa
	  2.49     0.15     4.44   82154  rx_fit_p
	  2.16     0.13     4.57   142747  rx_state_possible_futures
	  1.82     0.11     4.68   145590  bzero
	  1.82     0.11     4.79   138315  rx_basic_make_solutions
	  1.82     0.11     4.90    9006  regnexec
	  1.66     0.10     5.00   143200  rx_free_solutions
	  1.49     0.09     5.09   130333  supersetcmp
	  1.49     0.09     5.18   82154  rx_soluntion_fit_p
	  1.49     0.09     5.27    4039  rx_hash_store
	  1.33     0.08     5.35     745  __sbrk
	  1.16     0.07     5.42   141444  rx_next_solution
	  1.00     0.06     5.48   229493  rx_free_rexp
	

so good, eclose_node is off the map.


-O time:

	before (last known):
	time ./sed -f mac-mf.sed < mac-mf.inp > tmp
	21.74user 0.16system 0:21.90elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k

	after:
	2.34user 0.36system 0:02.72elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

but 2.05 is still:

	time /usr/bin/sed -f mac-mf.sed < mac-mf.inp > tmp2
	0.28user 0.11system 0:00.39elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k


code reordering in rx_start_superstate should eliminate calls to rx_state_possible_futures

after (-O):
	2.28user 0.34system 0:02.64elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

hehe  -O2:

	2.32user 0.31system 0:02.64elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k



Fri Dec 29 16:43:44 PST 1995

getting harder to speed up now.

one observation is that malloc is the heaviest function, and almost
all the calls there come from rx_basic_make_solutions and rx_make_solutions.

put in a (thread-losing) malloc/free buffer for the two spots where
malloc/free are called often.

-pg mac-mf before:

	5.75user 0.32system 0:07.17elapsed 84%CPU (0avgtext+0avgdata 0maxresident)k

after (!):

	3.98user 0.45system 0:04.74elapsed 93%CPU (0avgtext+0avgdata 0maxresident)k

(after profiling) inlined the common & fastest path through rx_start_superstate
into rx_make_solutions.

after:
	3.88user 0.41system 0:04.34elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k

back that one out since it is a tiny win and maintainence headache.

-O

time ./sed -f enable.sed < enable.inp > tmp
0.00user 0.03system 0:00.05elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f enable.sed < enable.inp > tmp2
0.01user 0.02system 0:00.05elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f sep.sed < sep.inp > tmp
0.02user 0.03system 0:00.06elapsed 83%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f sep.sed < sep.inp > tmp2
0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f inclib.sed < inclib.inp > tmp
0.00user 0.03system 0:00.05elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f inclib.sed < inclib.inp > tmp2
0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f 8bit.sed < 8bit.inp > tmp
0.00user 0.02system 0:00.05elapsed 40%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f 8bit.sed < 8bit.inp > tmp2
0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f newjis.sed < newjis.inp > tmp
0.01user 0.01system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f newjis.sed < newjis.inp > tmp2
0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -n -f cv-vars.sed < cv-vars.inp > tmp
0.01user 0.05system 0:00.08elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -n -f cv-vars.sed < cv-vars.inp > tmp2
0.01user 0.02system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f manis.sed < manis.inp > tmp
0.07user 0.02system 0:00.09elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f manis.sed < manis.inp > tmp2
0.02user 0.01system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f xabcx.sed < xabcx.inp > tmp
0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f xabcx.sed < xabcx.inp > tmp2
0.01user 0.03system 0:00.12elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f dollar.sed < dollar.inp > tmp
0.01user 0.02system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f dollar.sed < dollar.inp > tmp2
0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f noeol.sed < noeol.inp > tmp
0.01user 0.01system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f noeol.sed < noeol.inp > tmp2
0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f sub-num.sed < sub-num.inp > tmp
0.00user 0.03system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f sub-num.sed < sub-num.inp > tmp2
0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f sub-all.sed < sub-num.inp > tmp
0.01user 0.00system 0:00.03elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f sub-all.sed < sub-num.inp > tmp2
0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f subwrite.sed < subwrite.inp > tmp1
0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f subwrite.sed < subwrite.inp > tmp1
0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f head.sed < head.inp > tmp
0.00user 0.01system 0:00.03elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f head.sed < head.inp > tmp2
0.00user 0.01system 0:00.02elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -n -f middle.sed < head.inp > tmp
0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -n -f middle.sed < head.inp > tmp2
0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f maddingcrowd.sed < maddingcrowd.inp > tmp
2.64user 0.70system 0:05.88elapsed 56%CPU (0avgtext+0avgdata 0maxresident)k
echo DO NOT time /usr/bin/sed -f maddingcrowd.sed < maddingcrowd.inp > tmp2
echo sed 2.05....  t->+inf



time ./sed -f mac-mf.sed < mac-mf.inp > tmp
1.51user 0.30system 0:01.91elapsed 94%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f mac-mf.sed < mac-mf.inp > tmp2
0.30user 0.10system 0:00.45elapsed 88%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f khadafy.sed < khadafy.inp > tmp
0.01user 0.01system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f khadafy.sed < khadafy.inp > tmp2
0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
sh spencer.sh ./sed <  spencer.inp > spencer.tmp 
sh spencer.tmp



time ./sed -f linecnt.sed < linecnt.inp > tmp
0.00user 0.02system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f linecnt.sed < linecnt.inp > tmp2
0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed -f readin.sed < readin.inp >tmp
0.02user 0.02system 0:00.05elapsed 80%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed -f readin.sed < readin.inp >tmp2
0.01user 0.01system 0:00.06elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed --file=newjis.sed < newjis.inp > tmp
0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed --file=newjis.sed < newjis.inp > tmp2
0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k



time ./sed --quiet -f cv-vars.sed < cv-vars.inp > tmp
0.03user 0.02system 0:00.05elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
time /usr/bin/sed --quiet -f cv-vars.sed < cv-vars.inp > tmp2
0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k





