[fpc-devel] Sorry for poor testing

J. Gareth Moreton gareth at moreton-family.com
Tue Jan 15 17:58:39 CET 2019

 For that very reason, I put an upper limit of 2,048 on the jump table size
(which results in an 8 KiB table), although it was modified later so this
bound doesn't apply if every single label points to a single value and more
or less forms a continuum (e.g, you have 2,500 labels and none of them are
a range).

 For a linear search, each branch takes between 2 and 4 instructions to
test, if I remember correctly, although there is a lot of dependency, since
it usually involves a subtraction followed by a conditional jump.  My
additional changes over at #34859 introduce some extra conditional jumps to
break out sooner once the program knows there won't be a match (because,
for example, there are labels for just 1 and 3 and the input value is 2). 
Before, the flow only jumped out if it reached a range and the input was
less than the lower bound.  I did some preliminary testing with
tests/bench/bcase.pp and the overall timespan is about 5% faster.

 Gareth aka. Kit

 On Tue 15/01/19 17:27 , Martok listbox at martoks-place.de sent:
 Am 14.01.2019 um 15:01 schrieb J. Gareth Moreton: 
 > Martok mentioned doing some checks differently in the bug report in
 > such as 6 comparisons being faster than a jump table.  Are there any
 > worth mentioning? 
 Not neccessarily faster, but in that code definitely smaller. Is there a
way to 
 directly estimate how large the generated code might be, maybe something

 For the "faster" question, the cache line occupation matters more than 
 instruction throughput. If your jumptable gets large enough to force a
full data 
 cache line flush, you could have done a lot of instructions in the time
the CPU 
 waits for the data. And I haven't found reliable information how the 
 Spectre-related microcode updates changed that, given that both cmp/jmp
 jmp[indirect] used to be heavily optimized, but were both affected. 


 fpc-devel maillist - fpc-devel at lists.freepascal.org [1] 


[1] mailto:fpc-devel at lists.freepascal.org
[2] http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20190115/bcd4494e/attachment.html>

More information about the fpc-devel mailing list