zsh-workers
 help / color / mirror / code / Atom feed
* Status of optimizations – can have native buffers
@ 2017-03-04 13:49 Sebastian Gniazdowski
  2017-03-04 15:33 ` Sebastian Gniazdowski
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Sebastian Gniazdowski @ 2017-03-04 13:49 UTC (permalink / raw)
  To: zsh-workers

[-- Attachment #1: Type: text/plain, Size: 1423 bytes --]

Hello,
with the optimizations for array (Zsh 5.3.1-dev-0):

    typeset -a array
    array[100]=""
    array[20,29]=( 1 2 3 4 5 6 7 8 9 10 )

we can now have somewhat "native" buffers in zsh. Above will not do
anything with elements outside <20,30> range.

One use case are 2-dimensional arrays, with e.g. the library I sent to
zsh-users (ID: 21926). Created are e.g. 10 fixed rows of 100 elements.
Then it's possible to fill rows by storing to computed indexes. Or to
fill entire row by storing to <row_begin,row_end>. 

The same has been done with strings (Zsh 5.3), and string can be a
native buffer too.

That said, when I test with my screen-saver zsh-morpho
(https://github.com/psprint/zsh-morpho), which uses hash tables for its
pixel native buffer, arrays are still slower. It is 55.9 s vs. 27.3 s.
Callgrind reveals the cause:

59,930,247,427  arrlen_le [/usr/local/bin/zsh-5.3.1-dev-0_O2]
15,675,075,695  szone_free_definite_size
[/usr/lib/system/libsystem_malloc.dylib]
11,983,363,082  tiny_malloc_from_free_list
[/usr/lib/system/libsystem_malloc.dylib]
 8,037,180,402  tiny_free_list_add_ptr
 [/usr/lib/system/libsystem_malloc.dylib]
 7,181,545,835  _platform_memmove$VARIANT$Nehalem
 [/usr/lib/system/libsystem_platform.dylib]
(full data in attachement)

The buffer has size 34x158=5372 elements. Without the optimizations that
are the topic, time is 367 s.
-- 
  Sebastian Gniazdowski
  psprint3@fastmail.com

[-- Attachment #2: callgrind_annotate.txt --]
[-- Type: text/plain, Size: 9089 bytes --]

--------------------------------------------------------------------------------
Profile data file 'callgrind.out.9896' (creator: callgrind-3.12.0)
--------------------------------------------------------------------------------
I1 cache: 
D1 cache: 
LL cache: 
Timerange: Basic block 0 - 44213777818
Trigger: Program termination
Profiled target:  zsh-5.3.1-dev-0_O2 ./zmorpho (PID 9896, part 1)
Events recorded:  Ir
Events shown:     Ir
Event sort order: Ir
Thresholds:       99
Include dirs:     
User annotated:   
Auto-annotation:  off

--------------------------------------------------------------------------------
             Ir 
--------------------------------------------------------------------------------
210,464,472,644  PROGRAM TOTALS

--------------------------------------------------------------------------------
            Ir  file:function
--------------------------------------------------------------------------------
59,930,247,427  ???:arrlen_le [/usr/local/bin/zsh-5.3.1-dev-0_O2]
15,675,075,695  ???:szone_free_definite_size [/usr/lib/system/libsystem_malloc.dylib]
11,983,363,082  ???:tiny_malloc_from_free_list [/usr/lib/system/libsystem_malloc.dylib]
 8,037,180,402  ???:tiny_free_list_add_ptr [/usr/lib/system/libsystem_malloc.dylib]
 7,181,545,835  ???:_platform_memmove$VARIANT$Nehalem [/usr/lib/system/libsystem_platform.dylib]
 6,887,423,013  ???:szone_size [/usr/lib/system/libsystem_malloc.dylib]
 6,701,641,389  ???:itype_end [/usr/local/bin/zsh-5.3.1-dev-0_O2]
 6,668,004,434  ???:arrlen [/usr/local/bin/zsh-5.3.1-dev-0_O2]
 5,979,575,631  ???:tiny_free_list_remove_ptr [/usr/lib/system/libsystem_malloc.dylib]
 5,583,741,132  ???:szone_malloc_should_clear [/usr/lib/system/libsystem_malloc.dylib]
 3,676,908,734  ???:strcpy [/usr/lib/dyld]
 3,229,526,238  ???:free [/usr/lib/dyld]
 3,006,353,708  ???:get_tiny_free_size [/usr/lib/system/libsystem_malloc.dylib]
 2,690,849,561  ???:strlen [/usr/lib/dyld]
 2,677,510,801  ???:stringsubst [/usr/local/bin/zsh-5.3.1-dev-0_O2]
 2,558,606,524  ???:stringsubst'2 [/usr/local/bin/zsh-5.3.1-dev-0_O2]
 2,370,009,449  ???:ingetc [/usr/local/bin/zsh-5.3.1-dev-0_O2]
 2,103,253,219  ???:zalloc [/usr/local/bin/zsh-5.3.1-dev-0_O2]
 2,010,130,192  ???:malloc_zone_malloc [/usr/lib/system/libsystem_malloc.dylib]
 1,980,835,207  ???:strtod_l [/usr/lib/system/libsystem_c.dylib]
 1,871,413,725  ???:dquote_parse [/usr/local/bin/zsh-5.3.1-dev-0_O2]
 1,651,513,719  ???:zhalloc [/usr/local/bin/zsh-5.3.1-dev-0_O2]
 1,641,875,732  ???:_platform_strcmp [/usr/lib/system/libsystem_platform.dylib]
 1,604,082,741  ???:get_tiny_previous_free_msize [/usr/lib/system/libsystem_malloc.dylib]
 1,574,144,473  ???:zzlex [/usr/local/bin/zsh-5.3.1-dev-0_O2]
 1,435,808,720  ???:malloc [/usr/lib/dyld]
 1,334,946,291  ???:ztrdup [/usr/local/bin/zsh-5.3.1-dev-0_O2]
 1,255,063,534  ???:__quorem_D2A [/usr/lib/system/libsystem_c.dylib]
 1,221,146,102  ???:__multadd_D2A [/usr/lib/system/libsystem_c.dylib]
 1,165,383,862  ???:untokenize [/usr/local/bin/zsh-5.3.1-dev-0_O2]
 1,098,371,849  ???:lexconstant [/usr/local/bin/zsh-5.3.1-dev-0_O2]
 1,069,952,015  ???:fetchvalue [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   982,451,064  ???:remnulargs [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   965,483,295  ???:paramsubst [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   853,269,280  ???:getarg [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   792,779,000  ???:op [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   790,688,907  ???:hasher [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   771,110,306  ???:checkunary [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   763,084,062  ???:setlocale [/usr/lib/system/libsystem_c.dylib]
   762,984,113  ???:setarrvalue [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   740,301,374  ???:mathparse'2 [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   717,789,930  ???:_os_lock_spin_lock [/usr/lib/system/libsystem_platform.dylib]
   687,889,980  ???:__Balloc_D2A [/usr/lib/system/libsystem_c.dylib]
   661,099,642  ???:__mult_D2A [/usr/lib/system/libsystem_c.dylib]
   645,284,640  ???:paramsubst'2 [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   644,208,465  ???:__lshift_D2A [/usr/lib/system/libsystem_c.dylib]
   628,587,537  ???:gethashnode2 [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   623,241,531  ???:addvars [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   595,811,848  ???:__dtoa [/usr/lib/system/libsystem_c.dylib]
   585,980,177  ???:__Bfree_D2A [/usr/lib/system/libsystem_c.dylib]
   585,163,299  ???:loadlocale [/usr/lib/system/libsystem_c.dylib]
   582,166,785  ???:mathparse [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   478,719,744  ???:getparamnode [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   464,243,313  ???:mathevall [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   457,242,648  ???:add [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   444,824,636  ???:zsfree [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   438,807,694  ???:getindex [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   427,077,934  ???:__vfprintf [/usr/lib/system/libsystem_c.dylib]
   418,216,827  ???:dupstring [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   406,725,998  ???:fetchvalue'2 [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   383,005,195  ???:zstrtol_underscore [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   380,580,653  ???:_platform_strchr$VARIANT$Generic [/usr/lib/system/libsystem_platform.dylib]
   379,564,975  ???:__numeric_load_locale [/usr/lib/system/libsystem_c.dylib]
   377,953,347  ???:inpoptop [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   358,951,860  ???:szone_malloc [/usr/lib/system/libsystem_malloc.dylib]
   316,823,215  ???:__cmp_D2A [/usr/lib/system/libsystem_c.dylib]
   305,846,720  ???:freearray [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   303,615,681  ???:hist_context_save [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   297,508,538  ???:watchlog_match [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   295,769,198  ???:__vsnprintf_chk [/usr/lib/system/libsystem_c.dylib]
   287,116,172  ???:os_lock_unlock [/usr/lib/system/libsystem_platform.dylib]
   287,116,172  ???:os_lock_lock [/usr/lib/system/libsystem_platform.dylib]
   287,115,972  ???:_os_lock_spin_unlock [/usr/lib/system/libsystem_platform.dylib]
   272,071,205  ???:hist_context_restore [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   268,128,151  ???:parse_context_restore [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   263,544,579  ???:execlist'2 [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   260,249,491  ???:hbegin [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   258,703,816  ???:__vsnprintf_chk'2 [/usr/lib/system/libsystem_c.dylib]
   257,234,183  ???:_platform_bzero$VARIANT$Merom [/usr/lib/system/libsystem_platform.dylib]
   245,441,859  ???:getmathparam [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   242,921,408  ???:prefork [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   240,386,850  ???:prefork'2 [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   237,246,060  ???:__s2b_D2A [/usr/lib/system/libsystem_c.dylib]
   236,583,660  ???:parse_context_save [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   228,942,730  ???:__diff_D2A [/usr/lib/system/libsystem_c.dylib]
   224,754,367  ???:inpush [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   221,552,781  ???:getstrvalue [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   215,349,190  ???:get_node_from_uniquing_table [/usr/lib/system/libsystem_malloc.dylib]
   209,424,935  ???:convbase_ptr [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   203,022,100  ???:dupstrpfx [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   197,153,050  ???:lex_context_save [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   195,374,559  ???:strncpy [/usr/lib/dyld]
   193,209,994  ???:zcontext_save_partial [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   190,469,954  ???:__d2b_D2A [/usr/lib/system/libsystem_c.dylib]
   187,983,320  ???:getnumvalue [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   187,398,894  ???:arithsubst [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   185,323,872  ???:zcontext_restore_partial [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   181,385,636  ???:hend [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   181,170,554  ???:assignstrvalue [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   177,453,442  ???:inputsetline [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   176,710,920  ???:assignsparam [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   168,822,313  ???:ecgetstr [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   165,608,562  ???:lex_context_restore [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   165,164,992  ???:execsimple'2 [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   158,197,295  ???:__error [/usr/lib/system/libsystem_kernel.dylib]
   155,692,436  ???:__sfvwrite [/usr/lib/system/libsystem_c.dylib]
   154,124,892  ???:strcatsub [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   153,573,732  ???:__b2d_D2A [/usr/lib/system/libsystem_c.dylib]
   141,574,370  ???:__pow5mult_D2A [/usr/lib/system/libsystem_c.dylib]
   140,403,054  ???:parse_subscript [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   132,539,796  ???:zshlex_raw_add [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   131,809,956  ???:filesubstr [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   130,952,151  ???:filesub [/usr/local/bin/zsh-5.3.1-dev-0_O2]
   130,475,899  ???:localeconv_l [/usr/lib/system/libsystem_c.dylib]
   110,035,356  ???:pthread_getspecific [/usr/lib/system/libsystem_pthread.dylib]
   106,487,955  ???:inungetc [/usr/local/bin/zsh-5.3.1-dev-0_O2]
    94,891,375  ???:__detect_path_locale [/usr/lib/system/libsystem_c.dylib]


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Status of optimizations – can have native buffers
  2017-03-04 13:49 Status of optimizations – can have native buffers Sebastian Gniazdowski
@ 2017-03-04 15:33 ` Sebastian Gniazdowski
  2017-03-05  0:00 ` Status of optimiza tions - can have n ative buffers Bart Schaefer
  2017-03-13  9:01 ` Status of optimizations – can have native buffers Sebastian Gniazdowski
  2 siblings, 0 replies; 7+ messages in thread
From: Sebastian Gniazdowski @ 2017-03-04 15:33 UTC (permalink / raw)
  To: zsh-workers

On Sat, Mar 4, 2017, at 05:49 AM, Sebastian Gniazdowski wrote:
> Callgrind reveals the cause:
> 
> 59,930,247,427  arrlen_le [/usr/local/bin/zsh-5.3.1-dev-0_O2]

I thought that badarrays branch would have chances for merge if a
vallgrind-based testing suite would have been developed. To reassure all
people that code is safe. With many edge cases and stress tests, and
valgrind's infallibility, it could be a no-risk merge.

-- 
  Sebastian Gniazdowski
  psprint3@fastmail.com


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Status of optimiza tions - can have n ative buffers
  2017-03-04 13:49 Status of optimizations – can have native buffers Sebastian Gniazdowski
  2017-03-04 15:33 ` Sebastian Gniazdowski
@ 2017-03-05  0:00 ` Bart Schaefer
  2017-03-05  9:32   ` Sebastian Gniazdowski
  2017-03-13  9:01 ` Status of optimizations – can have native buffers Sebastian Gniazdowski
  2 siblings, 1 reply; 7+ messages in thread
From: Bart Schaefer @ 2017-03-05  0:00 UTC (permalink / raw)
  To: Sebastian Gniazdowski, zsh-workers

On Mar 4,  5:49am, Sebastian Gniazdowski wrote:
}
} Callgrind reveals the cause:
} 
} 59,930,247,427  arrlen_le [/usr/local/bin/zsh-5.3.1-dev-0_O2]

Yeah, I think we've already determined that we're not getting away from
that without a significant rewrite to stop managing arrays as simple
char ** pointers.

Although the following might help in some cases -- (v->start < 0) can't
be true very often or arrlen() would have shown up nearly as much as
arrlen_le(), but maybe this shaves a few unnecessary recounts?

Anyway changing from arrlen_le() to arrlen_gt() removes a couple of
tail calls, so this might get faster, and will also reveal how many
of those arrlen_le() are coming through here.

diff --git a/Src/params.c b/Src/params.c
index 8942fef..6164ba6 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -2101,10 +2101,14 @@ getstrvalue(Value v)
 	if (v->isarr)
 	    s = sepjoin(ss, NULL, 1);
 	else {
-	    if (v->start < 0)
-		v->start += arrlen(ss);
-	    s = (arrlen_le(ss, v->start) || v->start < 0) ?
-		(char *) hcalloc(1) : ss[v->start];
+	    if (v->start < 0) {
+		if ((v->start += arrlen(ss)) < 0)
+		    s = (char *) hcalloc(1);
+		else
+		    s = ss[v->start];
+	    } else
+		s = arrlen_gt(ss, v->start) ?
+		     ss[v->start] : (char *) hcalloc(1);
 	}
 	return s;
     case PM_INTEGER:


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Status of optimiza tions - can have n ative buffers
  2017-03-05  0:00 ` Status of optimiza tions - can have n ative buffers Bart Schaefer
@ 2017-03-05  9:32   ` Sebastian Gniazdowski
  2017-03-05 16:29     ` Bart Schaefer
  0 siblings, 1 reply; 7+ messages in thread
From: Sebastian Gniazdowski @ 2017-03-05  9:32 UTC (permalink / raw)
  To: Bart Schaefer, zsh-workers

[-- Attachment #1: Type: text/plain, Size: 1116 bytes --]

On Sat, Mar 4, 2017, at 04:00 PM, Bart Schaefer wrote:
> Although the following might help in some cases -- (v->start < 0) can't
> be true very often or arrlen() would have shown up nearly as much as
> arrlen_le(), but maybe this shaves a few unnecessary recounts?
> 
> Anyway changing from arrlen_le() to arrlen_gt() removes a couple of
> tail calls, so this might get faster, and will also reveal how many
> of those arrlen_le() are coming through here.

Time is still the same, 25 s. The zrealloc-patch that was pushed helped,
before: 37 s, after: the 25 s. Hashes are 17 s. Attached callgrind
result from with-patch current-head run:

29,965,124,064  arrlen_le [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
29,965,124,049  arrlen_gt [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
 6,700,764,538  itype_end [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
 6,668,004,434  arrlen [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
 4,552,766,774  _platform_memmove$VARIANT$Nehalem
 [/usr/lib/system/libsystem_platform.dylib]
 2,677,827,871  stringsubst [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]

-- 
Sebastian Gniazdowski
psprint3@fastmail.com

[-- Attachment #2: callgrind_annotate_arrlen_le.txt --]
[-- Type: text/plain, Size: 9927 bytes --]

--------------------------------------------------------------------------------
Profile data file 'callgrind.out.96783' (creator: callgrind-3.12.0)
--------------------------------------------------------------------------------
I1 cache: 
D1 cache: 
LL cache: 
Timerange: Basic block 0 - 33571987355
Trigger: Program termination
Profiled target:  zsh-5.3.1-dev-0_O2_bopt ./zmorpho (PID 96783, part 1)
Events recorded:  Ir
Events shown:     Ir
Event sort order: Ir
Thresholds:       99
Include dirs:     
User annotated:   
Auto-annotation:  off

--------------------------------------------------------------------------------
             Ir 
--------------------------------------------------------------------------------
140,296,535,115  PROGRAM TOTALS

--------------------------------------------------------------------------------
            Ir  file:function
--------------------------------------------------------------------------------
29,965,124,064  ???:arrlen_le [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
29,965,124,049  ???:arrlen_gt [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
 6,700,764,538  ???:itype_end [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
 6,668,004,434  ???:arrlen [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
 4,552,766,774  ???:_platform_memmove$VARIANT$Nehalem [/usr/lib/system/libsystem_platform.dylib]
 2,677,827,871  ???:stringsubst [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
 2,558,606,524  ???:stringsubst'2 [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
 2,370,011,695  ???:ingetc [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
 1,994,378,494  ???:strcpy [/usr/lib/system/libsystem_c.dylib]
 1,975,384,760  ???:strtod_l [/usr/lib/system/libsystem_c.dylib]
 1,871,413,725  ???:dquote_parse [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
 1,763,948,314  ???:szone_free_definite_size [/usr/lib/system/libsystem_malloc.dylib]
 1,651,427,451  ???:zhalloc [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
 1,641,937,107  ???:_platform_strcmp [/usr/lib/system/libsystem_platform.dylib]
 1,574,721,628  ???:zzlex [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
 1,274,353,832  ???:tiny_free_list_add_ptr [/usr/lib/system/libsystem_malloc.dylib]
 1,254,904,343  ???:__quorem_D2A [/usr/lib/system/libsystem_c.dylib]
 1,226,489,880  ???:__multadd_D2A [/usr/lib/system/libsystem_c.dylib]
 1,188,316,071  ???:strlen [/usr/lib/system/libsystem_c.dylib]
 1,176,570,715  ???:tiny_malloc_from_free_list [/usr/lib/system/libsystem_malloc.dylib]
 1,165,383,862  ???:untokenize [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
 1,098,752,923  ???:lexconstant [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
 1,069,738,177  ???:fetchvalue [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   983,039,508  ???:remnulargs [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   971,165,723  ???:szone_size [/usr/lib/system/libsystem_malloc.dylib]
   965,483,295  ???:paramsubst [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   853,269,280  ???:getarg [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   816,363,124  ???:szone_malloc_should_clear [/usr/lib/system/libsystem_malloc.dylib]
   792,748,080  ???:op [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   790,606,736  ???:hasher [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   771,054,754  ???:checkunary [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   763,084,062  ???:setlocale [/usr/lib/system/libsystem_c.dylib]
   740,303,435  ???:mathparse'2 [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   690,597,783  ???:__Balloc_D2A [/usr/lib/system/libsystem_c.dylib]
   669,049,573  ???:__mult_D2A [/usr/lib/system/libsystem_c.dylib]
   645,284,640  ???:paramsubst'2 [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   642,438,873  ???:__lshift_D2A [/usr/lib/system/libsystem_c.dylib]
   628,523,356  ???:gethashnode2 [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   622,923,429  ???:addvars [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   596,886,151  ???:__dtoa [/usr/lib/system/libsystem_c.dylib]
   588,286,824  ???:__Bfree_D2A [/usr/lib/system/libsystem_c.dylib]
   585,163,299  ???:loadlocale [/usr/lib/system/libsystem_c.dylib]
   582,074,808  ???:mathparse [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   479,005,053  ???:free [/usr/lib/system/libsystem_malloc.dylib]
   478,653,459  ???:getparamnode [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   464,179,856  ???:mathevall [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   457,242,648  ???:add [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   438,807,694  ???:getindex [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   427,244,753  ???:__vfprintf [/usr/lib/system/libsystem_c.dylib]
   418,205,697  ???:dupstring [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   406,725,998  ???:fetchvalue'2 [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   392,086,757  ???:tiny_free_list_remove_ptr [/usr/lib/system/libsystem_malloc.dylib]
   383,005,195  ???:zstrtol_underscore [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   380,526,825  ???:_platform_strchr$VARIANT$Generic [/usr/lib/system/libsystem_platform.dylib]
   379,564,975  ???:__numeric_load_locale [/usr/lib/system/libsystem_c.dylib]
   377,953,347  ???:inpoptop [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   316,294,171  ???:__cmp_D2A [/usr/lib/system/libsystem_c.dylib]
   303,615,681  ???:hist_context_save [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   298,694,844  ???:malloc_zone_malloc [/usr/lib/system/libsystem_malloc.dylib]
   272,071,205  ???:hist_context_restore [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   268,128,151  ???:parse_context_restore [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   263,647,209  ???:execlist'2 [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   260,249,562  ???:hbegin [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   259,535,774  ???:__vsnprintf_chk'2 [/usr/lib/system/libsystem_c.dylib]
   256,465,400  ???:_platform_bzero$VARIANT$Merom [/usr/lib/system/libsystem_platform.dylib]
   245,406,915  ???:getmathparam [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   242,868,938  ???:prefork [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   240,386,850  ???:prefork'2 [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   237,275,094  ???:__s2b_D2A [/usr/lib/system/libsystem_c.dylib]
   236,583,660  ???:parse_context_save [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   234,598,487  ???:__vsnprintf_chk [/usr/lib/system/libsystem_c.dylib]
   229,297,192  ???:__diff_D2A [/usr/lib/system/libsystem_c.dylib]
   224,754,367  ???:inpush [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   220,048,614  ???:getstrvalue [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   213,354,900  ???:malloc [/usr/lib/system/libsystem_malloc.dylib]
   209,424,935  ???:convbase_ptr [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   208,449,767  ???:zalloc [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   203,083,989  ???:get_tiny_free_size [/usr/lib/system/libsystem_malloc.dylib]
   202,999,700  ???:dupstrpfx [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   199,346,429  ???:get_tiny_previous_free_msize [/usr/lib/system/libsystem_malloc.dylib]
   197,153,050  ???:lex_context_save [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   195,301,367  ???:strncpy [/usr/lib/system/libsystem_c.dylib]
   193,209,994  ???:zcontext_save_partial [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   190,435,519  ???:__d2b_D2A [/usr/lib/system/libsystem_c.dylib]
   187,954,648  ???:getnumvalue [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   187,239,378  ???:arithsubst [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   185,323,872  ???:zcontext_restore_partial [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   181,385,682  ???:hend [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   181,077,329  ???:assignstrvalue [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   177,453,489  ???:inputsetline [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   176,615,209  ???:assignsparam [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   168,755,279  ???:ecgetstr [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   165,608,562  ???:lex_context_restore [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   165,163,514  ???:execsimple'2 [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   158,197,505  ???:__error [/usr/lib/system/libsystem_kernel.dylib]
   155,426,633  ???:__sfvwrite [/usr/lib/system/libsystem_c.dylib]
   154,124,892  ???:strcatsub [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   151,322,700  ???:__b2d_D2A [/usr/lib/system/libsystem_c.dylib]
   145,111,600  ???:__pow5mult_D2A [/usr/lib/system/libsystem_c.dylib]
   140,403,054  ???:parse_subscript [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   132,539,922  ???:zshlex_raw_add [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   131,795,646  ???:filesubstr [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   130,934,661  ???:filesub [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   130,475,899  ???:localeconv_l [/usr/lib/system/libsystem_c.dylib]
   114,177,546  ???:watchlog_match [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
   110,387,904  ???:pthread_getspecific [/usr/lib/system/libsystem_pthread.dylib]
   106,565,100  ???:_os_lock_spin_lock [/usr/lib/system/libsystem_platform.dylib]
   106,487,955  ???:inungetc [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
    94,891,375  ???:__detect_path_locale [/usr/lib/system/libsystem_c.dylib]
    90,138,378  ???:__hi0bits_D2A [/usr/lib/system/libsystem_c.dylib]
    87,155,328  ???:parsestrnoerr [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
    82,869,602  ???:matheval [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
    80,705,915  ???:setunderscore [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
    74,920,775  ???:zfree [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
    70,977,006  ???:getsparam [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
    70,975,062  ???:init_parse_status [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
    70,653,912  ???:ugetnode [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
    67,451,051  ???:vsprintf_l [/usr/lib/system/libsystem_c.dylib]
    63,593,894  ???:isident [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
    60,058,960  ???:convfloat [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
    59,307,895  ???:spin_lock [/usr/lib/system/libsystem_platform.dylib]
    56,113,944  ???:__ratio_D2A [/usr/lib/system/libsystem_c.dylib]
    55,202,826  ???:inpop [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Status of optimiza tions - can have n ative buffers
  2017-03-05  9:32   ` Sebastian Gniazdowski
@ 2017-03-05 16:29     ` Bart Schaefer
  0 siblings, 0 replies; 7+ messages in thread
From: Bart Schaefer @ 2017-03-05 16:29 UTC (permalink / raw)
  To: zsh-workers

On Mar 5,  1:32am, Sebastian Gniazdowski wrote:
}
} result from with-patch current-head run:
} 
} 29,965,124,064  arrlen_le [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
} 29,965,124,049  arrlen_gt [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]
}  6,668,004,434  arrlen [/usr/local/bin/zsh-5.3.1-dev-0_O2_bopt]

Well now THAT is interesting.  Same total number of calls but now
they're split exactly half _le and half _gt.

This in turn strongly suggests that the calls are the one my patch
changed in params.c, and the one currently at line 2567 in subst.c.

If we could figure out whether these two are actually examining the
length of the same array each time, there might be a way (cache in
the struct value, as with the "arr" field?) to cut this in half.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Status of optimizations – can have native buffers
  2017-03-04 13:49 Status of optimizations – can have native buffers Sebastian Gniazdowski
  2017-03-04 15:33 ` Sebastian Gniazdowski
  2017-03-05  0:00 ` Status of optimiza tions - can have n ative buffers Bart Schaefer
@ 2017-03-13  9:01 ` Sebastian Gniazdowski
  2017-03-13 10:51   ` Sebastian Gniazdowski
  2 siblings, 1 reply; 7+ messages in thread
From: Sebastian Gniazdowski @ 2017-03-13  9:01 UTC (permalink / raw)
  To: zsh-workers

Just encountered a positive effect of what has been done:

https://asciinema.org/a/aexw8dvhuejq5w704ybfadhrn

I'm writing (D)HTML-like library for zcurses and created a history app.
89000 entries. Zsh-5.1.1 is slow, Zsh-5.3.1-dev-0 is fast :)

(Anyone interested in the ZUI library, here's a short demo:
https://asciinema.org/a/4r5g7wd61uwbvkcskj391i2uq )
-- 
  Sebastian Gniazdowski
  psprint3@fastmail.com


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Status of optimizations – can have native buffers
  2017-03-13  9:01 ` Status of optimizations – can have native buffers Sebastian Gniazdowski
@ 2017-03-13 10:51   ` Sebastian Gniazdowski
  0 siblings, 0 replies; 7+ messages in thread
From: Sebastian Gniazdowski @ 2017-03-13 10:51 UTC (permalink / raw)
  To: zsh-workers

On Mon, Mar 13, 2017, at 02:01 AM, Sebastian Gniazdowski wrote:
> Just encountered a positive effect of what has been done:
> 
> https://asciinema.org/a/aexw8dvhuejq5w704ybfadhrn

Turned out I was testing -O0 builds (both). With -O2, zsh-5.1.1 is still
slow, basically the same, while zsh-5.3.1-dev-0 is even faster – instant
startup time, compared to 1.5-2 seconds of 5.1.1. Also, searching is
very usable with 89k elements, while 5.1.1 is like a turtle ;)

-- 
  Sebastian Gniazdowski
  psprint3@fastmail.com


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-03-13 10:51 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-04 13:49 Status of optimizations – can have native buffers Sebastian Gniazdowski
2017-03-04 15:33 ` Sebastian Gniazdowski
2017-03-05  0:00 ` Status of optimiza tions - can have n ative buffers Bart Schaefer
2017-03-05  9:32   ` Sebastian Gniazdowski
2017-03-05 16:29     ` Bart Schaefer
2017-03-13  9:01 ` Status of optimizations – can have native buffers Sebastian Gniazdowski
2017-03-13 10:51   ` Sebastian Gniazdowski

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).