Here is a sketched history of changes on this site.
Since unfortunately I currently do not know
how to setup an RSS feed or similar stuff
I can only offer to inform you on updates via e-mail.
Comments or questions? E-mail:
info@sirrida.de
2023-01-23
-
Update / speed up of the routines for greatest common divisor (gcd)
by using a variant without modulo operations.
Thanks to Stefan Kanthak!
2021-08-30
-
After a successful and exciting transition journey:
Since today my new official name is Sigrid Johanna Neumann.
2020-08-30
-
The program
calcperm.cpp / calcperm.pas
crashed with an access violation
and also
gave wrong results for the new merge sublist method for
some specially optimized cases.
Fixed.
Many thanks to Robert Clausecker who found these bugs!
2020-03-17
-
After a way too long time finally some progress.
I implemented and commented the "new"
Lee's algorithm (merge lists)
and enhanced
calcperm.cpp
and its Pascal equivalent accordingly.
The online PHP version however still misses this improvement.
-
Having slowly started my transition about a year ago
I no longer want
to keep my future name Sigrid a secret (even if it sounds very similar).
Incidentally a
reference
to this name has been on my site from the very beginning
but this usage really had never been anticipated.
Looking forward in curiosity…
2018-06-01
-
Moved
hashing
stuff to a dedicated page.
2018-05-28
2018-05-07
2018-01-25
2018-01-15
2018-01-11
2017-12-30
2017-03-02
2017-02-19
2017-02-14
2016-07-02
2016-06-30
-
Scalar multiplication (upper half) in
SIMD/SWAR operations.
-
Boolean SWAR functions yielding MSB, LSB, or mask values.
2016-06-27
2016-06-23
2016-06-17
2015-10-06
2015-10-06
2014-12-25
2014-12-13
2014-09-25
2014-09-20
2014-09-16
-
Added a missing typecast to the routine testing
tbm
in
testperm.*
where the result of tbm was inverted
which failed for types smaller than int
due to the peculiar integer casting of C;
the Pascal version did not fail but nevertheless I added the typecast.
Unfortunately even now
GCC incorrectly bemoans the comparison
when specifying -Wextra as
"warning: comparison of promoted ~unsigned with unsigned".
-
Renamed
2014-09-15
2014-09-10
-
Changed the name bit_index_rot to
bit_index_ror
since we are rotating to the right.
2014-09-01
2014-08-31
-
The sources in
sources.zip
now are stored in a subdirectory.
This avoids accidentally polluting your working directory.
Other archives such as the one below might follow.
-
Submitted some source files of a prototype of a
perfect hashing library
in order to give
some facts and some code to play with
to the section on
perfect hashing.
2014-08-04
2014-07-23
2014-07-07
2014-07-07
-
Renamed the rotate functions
fror /
frol /
frot
to
fror_bfly /
frol_bfly /
frot_bfly
and
fror_alt /
frol_alt /
frot_alt
to
fror /
frol /
frot.
-
Introduced
frorc /
frolc /
frotc.
-
Corrected
calcperm.cpp:
Inverse Butterfly was signaled as always true.
The Pascal variant was correct.
2014-07-06
-
Cleaned up the sources where on few places
shifts ≥ the used word size were used.
Added some comments on this.
-
Some more comments on word sizes and representation of numbers.
-
Some tidying up on several places.
2014-06-27
-
Renamed count_bits to
nr_bits
since a proper function should describe the result
and not the action to achieve the result.
2014-06-13
-
Changed the copyright year from 2013 to 2014.
2014-06-11
2014-06-09
-
Thanked
some more people and institutes.
-
Offered to
inform on updates via e-mail.
-
Started a section on
perfect hashing
using more than one auxiliary hash function
and lookup into additional arrays,
exemplified by the method of Bob Jenkins.
Probably this section will be grow largely.
2014-02-14
-
Corrected once more links to
AMD
documents
at several places since the place appears to have changed.
2014-02-11
2014-02-10
2014-01-13
2013-10-01
-
A new and faster solution to
signed average.
-
Some changes on my proposal of the
extension to setcc.
Swapped the actions of setcc xxx,zero.
Added keywords to the table.
Added the signed average example.
2013-09-06
2013-08-22
-
Added some external links and enhanced their hints.
2013-08-21
2013-08-15
2013-06-07
-
A nice user (Harold Aptroot) gave me a link to
first timing tests
of
PEXT and PDEP.
Both commands have a latency of 3 cycles and are fully pipelined,
i.e. they a reciprocal throughput of 1 cycle.
I have adapted the relevant programs
(calcperm.*)
and the
online permutation code generator
to these findings.
-
He also gave me the hint that
all AMD and Intel processors seem to leave the target of BSR as is
if fed with 0.
AMD documents this but Intel leaves it as unspecified.
I verified this with Intel P2, Atom, i7 (32 bit OS).
2013-05-08
-
Added a chapter about
hashing integers.
-
Replaced all post-increment/decrement operations
in the C/C++ sources by postfix operations.
2013-05-03
-
Added a general chapter about
hashing.
2013-04-27
-
Added a formula to calculate the expected number of
comparisons from the load factor for
hash maps.
2013-04-18
-
There is an active programming language supporting
dimensions:
F#!
I was not aware of it before.
2013-04-16
2013-04-12
-
I made the string switch solutions thread-safe, see
case_*.* in
Switch on strings (C/C++).
However in order to safely use the solutions
in a multi-threaded environment,
you should activate USE_MUTEX in
general.h
and make sure that mutexes work by supplying a suitable compiler option
such as -pthread for GCC.
It might even be sensible to utilize the memory barriers.
-
Added a section about
Singletons / Do once only.
2013-04-05
-
I measured some times of string compares and hash functions
in order to get a better estimate of what the switches really cost.
So the string switch solutions using
self-made hash containers have new cost factors:
case_m*.* in
Switch on strings (C/C++).
2013-04-02
2013-04-01
-
Changed the following
case_m*.*:
-
Optional dump of statistics (DEBUG_CASE_STATISTICS).
-
Optional dupe recognition (DEBUG_CASE_DUPE) at runtime.
-
Fixed a minor memory issue.
-
Provided multiple case targets without using goto for
all solutions of
Switch on strings (C/C++).
-
Added a description of the
formal grammar for the Modula-style program flow statements for C / C++ in
modula.txt.
-
I developed a better version of my FOR macro in
modula.h,
see
Counting loops in C/C++.
2013-03-30
-
Added a hash container for STL strings:
case_ms.cpp.
-
Repaired ceil_power_2 used in
case_map.*.
This caused bad performance of the hash map (only 2 slots).
The error was introduced on 2013-03-27.
-
Calculated the lengths of the string constant beforehand and
changed the string comparison in
case_map.*
to memcmp which ought to be faster than strcmp;
also string identity is checked now which might speed up things.
2013-03-29
2013-03-28
2013-03-26
2013-03-25
2013-03-24
2013-03-23
2013-03-22
-
After a self-test the programs
calcperm.*
end now.
2013-03-20
2013-03-19
2013-03-17
-
Changed the default of using BMI operations to false in
calcperm.*.
-
Added a switch to control the direction of the permutation in
calcperm.*.
The new switch is named /indexes.
2013-03-14
-
Shifted the internal case number range's lower bound to 0 in
the hash map based implementations of
Switch on strings (C/C++).
2013-03-05
2013-03-03
2013-02-22
2013-02-15
-
Added a program to test
endian
access records:
endian.*:
-
Restructured the include files in order to avoid duplication.
2013-02-14
2013-02-09
-
Changed the copright year.
-
Finally got a coarse translation of
calcperm.pas
to C++ running:
calcperm.cpp.
I used C++ instead of C here in order to ease string handling.
2013-01-31
2013-01-19
-
Removed transparency from the diagrams in order to improve anti-aliasing,
i.e. make the embedded texts much better readable
and the slanted lines less ragged.
2013-01-18
2012-12-30
2012-12-21
2012-12-16
-
Changed an outdated link.
2012-11-15
-
Added small spaces between digits of long numbers.
2012-11-12
2012-11-04
2012-10-23
2012-10-20
2012-10-19
2012-10-10
-
Added the function
bswap.
-
Changes to the
permutation code generator
in Pascal
(calcperm.pas):
-
Command line option parameters now working correctly.
-
Now there is an optional optimization
by prefixing the permutation with ROL and/or BSWAP.
This massively slows down the computation
and the slow down becomes relevant for bits > 32
since the whole calculation for the remaining permutation is
done for every combination with ROL and/or BSWAP
(up to about 3*bits times).
Do not expect the
online permutation code generator
to include this feature,
since PHP is too slow for such escapades, even for 32 bits.
2012-10-06
2012-10-05
2012-10-04
2012-10-03
-
Cleaned up the
permutation code generator
in Pascal
(calcperm.pas)
and added a configuration file.
Zeros were not correctly dumped.
-
Changed the indentation of "end" in all Pascal sources
so that "end" appears as the last statement of a statement list.
This is also called
Ratliff style.
2012-10-02
2012-10-01
-
All those web search machines are too stupid to
distinguish a domain name from the address where the site is hosted.
Also a quasi-static ip address can change.
So, finally I ordered "real" web space.
That means that the domain name now appears on every page
and that also
redirection
via index.php works again.
2012-09-27
-
The server's ip address has changed again due to
a problem on the server's provider Unitymedia.
-
There are the following new functions:
2012-09-23
-
Added sources for a word size of 8 bit.
-
Corrected the types in random_int (auxiliary function).
-
Added C sources for a word size of 128 bit.
This appears to work with
GCC
under a 64 bit OS,
albeit veeery slooow,
also the constant definitions are clumsy.
I could not find a Pascal compiler
which can work with 128 bit integers.
2012-09-21
-
The permutation sources are now ready to act on
the word sizes of 16, 32 and 64 bit at your choice.
Support for other sizes can be easily added as needed.
-
I came to the conclusion that in order to support multiple word sizes
without duplicating most of the source code
it is necessary to get rid of most of the suffixes
such as "_32" and "_64".
In the assembler files these prefixes remain necessary.
The sources are now broken up into multiple files:
The include files are perm_bas.* and perm_b#.* where # is 16, 32 or 64.
The main files have not changed their name.
You can now choose which functions to use by including
one of two small bit-specific files.
The remaining stuff will need another include files.
A command line version of the
online permutation code generator
will obviously also include these files.
-
The following changes have been made on the whole site:
- "t_32u" => "t_bits"
- "randseed_32" => "my_randseed"
- "random_32" => "random_bits"
- "one_32" => "lo_bit"
- "hi_32" => "hi_bit"
- "all_32" => "all_bits"
- "_32" => ""
I hope that I did not break too much…
-
The page containing the function descriptions (testperm.html)
has been renamed to
perm_fn.html.
-
There are the following new functions:
-
All source files now reside in the archive
sources.zip
since we have now many quite small files
which really need not be downloaded one by one.
2012-09-18
-
Combined the starting pages index.php and index.html
in order to ease automated indexing and
to avoid unnecessary reloading by the browser.
The appearance has not changed but
redirection
still works.
2012-09-17
2012-09-12
2012-09-11
2012-09-09
-
Added the "don't care" (wildcard) entries of the actual permutation
as dotted lines
to the dynamically created image of the
online permutation code generator.
-
Added the following functions to
testperm.*:
-
The bit indexes (t_bit_index) now include
the value -1 with the meaning "don't care" (wildcard);
these added functions cope therewith:
2012-09-07
2012-09-06
2012-09-05
2012-09-04
-
Now there is an
online permutation code generator
for creating code for an arbitrary fixed 32 bit permutation!
Probably C and Pascal source for 32 and/or 64 bit will follow soon.
-
I also gave some hint on the inner workings of this generator
in the chapter about
speeding up permutations.
2012-07-23
2012-07-22
-
Commented several links to external sources.
2012-07-18
2012-07-17
2012-07-13
2012-07-12
2012-07-05
2012-06-19
2012-06-18
-
Corrected the stripped down variant of my
proposal of a
bit permutations
instruction once more because
it appears that amazingly only one primitive suffices
for most applications.
-
The bit permutation primitive
is now a separate chapter.
2012-06-17
-
Corrected the stripped down variant of my
proposal of a
bit permutations
instruction because we need two routines.
2012-06-11
-
I corrected the bit index rotation direction for
shuffle and unshuffle.
-
bit_index_ror
actually rotates right instead of left.
These documentation bugs have been there since the first version.
2012-06-06
-
Added a comment to a stripped down variant of my
proposal of a
bit permutations
instruction.
-
Added a chapter about
alternatives
for calculating bit permutations.
2012-06-01
2012-05-07
2012-03-29
-
The redirection feature ceased to work since
the address parameter no longer comes through.
This is a pity!
-
Replaced a dead link regarding
dimensions.
2012-02-13
2012-02-12
2012-02-04
2012-01-29
2012-01-28
-
Optimized index_of_bit_i
by assuming that i is in range.
See
perm_32.asm
and
perm_64.asm.
-
In all the images the steering lines are blue now.
I also changed the multiplexers and steering bits
which are inactive for a
Waksman network into very bright instead of dark.
2012-01-18
-
Changed the parameter order of index_of_bit_i
to save 2 MOV instructions in 64 bit mode and
also optimized these routines.
See
perm_32.asm
and
perm_64.asm.
2012-01-15
-
Added an extra example for the usage of PDEP
which makes a loopless evaluation
of the index of the i-th set bit
possible (index_of_bit_i)
in
perm_32.asm
and
perm_64.asm.
2012-01-11
-
Changed the copyright's year.
-
Added a small site icon next to the address line for all pages.
-
Enhanced the
index.
2012-01-09
-
Added an
index
to some important words
for my discussion of bit permutations.
2012-01-08
-
Comment about the parity of permutations in the text for the
Beneš network.
2012-01-01
2011-12-31
-
Added some
ideas
to enhance Pascal.
Some of these ideas apply to other languages as well.
-
Corrected some minor HTML errors.
-
Changed some lists to tables.
2011-12-28
-
Added some hints to the origin of some procedures in
the source files.
-
Several other minor changes.
2011-12-23
-
Added some text and diagrams to clarify
the correspondence of transpositions and
shuffle/unshuffle.
2011-12-21 … 2011-12-23
-
The server unfortunately was unavailable for about 2½ days
because it had hung up and the supervisor was on holidays.
2011-12-18
-
Added an image of a (hyper)cube as a visualization of the arrangement of
butterfly
stages.
2011-12-17
2011-12-16
-
Noted that some steering bits
of a
Beneš network
can be forced to be always 0,
i.e. the hardware implementation can save some multiplexers,
creating a Waksman network.
Added a test therefor in
testperm.*.
2011-12-12
-
Noted that
butterfly
stages can be visualized as actions on a hypercube.
2011-12-11
-
Noted that the
omega-flip network
is also called a shuffle exchange network and
added a diagram to justify this.
2011-12-08
-
Changed some text and added images to describe the workings
of multiplexers for the
butterfly network
2011-12-07
-
Added an image of the
Beneš network
and changed the related text a bit.
2011-12-06
2011-12-03
-
Corrected a link to an
AMD document
at several places since the place appears to have changed.
2011-12-02
-
Implemented the generation of the configuration of a
Beneš network
for arbitrary bit permutations in
gen_benes
2011-11-18
2011-10-26, 2011-10-25, 2011-10-24
-
The server's ip address has changed again three times
due to server maintenance.
2011-10-18
-
Added a comment about equation syntax in
intro.
2011-10-07
2011-10-04
-
More about
Bit index manipulations.
-
Added some new functions to the test programs
together with test procedures and brief description:
2011-09-28
-
Corrected the comment about Gray permutations with
Swap by primitives,
which can do not only this but also other permutations.
I really should read more carefully…
-
Added some comments about
bit index functions
Bit index manipulations.
2011-09-27
-
Added a chapter about
Bit index manipulations
and some related functions.
Also added some references therefor on several places.
-
Added some words to the
Word definition list
and created a word index.
2011-09-25
-
Added a comment that the two innermost stages of a
Beneš network
can easily be replaced by one,
see butterfly network.
2011-09-21
-
Yet another comment on "rep movsb" in
Gather: rep xlat
-
Globally renamed
rolc to rolc_lo
and analog similarly named ones.
-
New auxiliary function rol_lo
(currently not used).
-
I wrote an
intro
to bit permutations.
2011-09-15
-
Globally renamed
rotc to frolc
and analog similarly named ones.
2011-09-14
-
Globally renamed the fixed count SWAR rotate functions:
rot to frot,
ror to fror,
rol to frol,
and analog similarly named ones.
-
New functions
frot
and
vrot
-
I decorated
shift,
rotate,
frot, and
vrot
with images.
-
Description what a
word
is.
2011-09-13
-
Introduced a direction flag in order to be able to combine the functionality
of the left and right variant of routines to one.
Introduced these combined routines.
-
Renamed
shuffle_bits to shuffle and
unshuffle_bits to unshuffle
globally.
-
The new page
perm_fn.html
adds a detailed function description of
testperm.*.
I provided links to this list in
Comments on the test programs.
Also added several links to specific functions.
2011-09-10
-
Reordered the test programs
testperm.*.
Added all the missing compound routines.
Cleaned up the comments in the butterfly operation "class".
Added tests for the compress_mask routines.
-
In
testperm.pas
I had wrongly specified $o- instead of $q- to disable overflow check.
-
In
Compress and expand
asserted that
compress_mask(m,sw) = compress(m,m,sw).
Made the assumptions more general and
also described the assumptions more clearly.
2011-09-09
2011-09-07
2011-09-06
2011-09-05
2011-08-31
2011-08-27
2011-08-23
2011-08-22
-
Provided a link to Intel's documentation in the assembler sources
perm_32.asm
and
perm_64.asm.
-
I refined the documentation of
time stamps.
-
Added a comment that I want to be informed of errors.
2011-08-19
-
On 2011-08-18 we had a very rainy evening
(a new record for Aachen) causing several power outages.
The server was off-line for some hours and
unfortunately its ip address got changed thereafter.
On the next day about 12:00 all was up and running again.
-
Notice about possible ip address changes in
Bookmarking.
2011-07-21
-
Comments on the time format.
-
Comments on the used language in the
Intro.
-
I have placed the references to the extra source files in an own chapter.
-
Put a link to the assembler routines of
PEXT and PDEP
just under the contents listing.
-
Added a comment that this is my private hobby.
2011-07-20
-
The assembler routines [un]shuffle of
PEXT and PDEP
have only one parameter.
I removed the wrong parameter.
-
In the assembler routines I had written xbx instead of ebx.
I normally use pseudo registers such as xbx to mean ebx or rbx
dependent on the used environment.
-
I made different versions
for 32 and 64 bit assembly
as extra files
and removed the lengthy assembler code stuff from the HTML page.
2011-07-19
-
Added some test routines to
testperm.*.
-
Sketched the conversion of the configuration between
butterfly and omega-flip network,
like done in test routines.
-
Minor changes.
2011-07-18
-
Comment on [un]shuffle applied sw times.
-
Added
butterfly,
omega and
flip to
testperm.*.
-
In the diagrams with multiplexers (butterfly and omega-flip)
I marked the lines which connect to an "1"-input with the color magenta.
In the other diagrams I marked some connectors as well.
-
I changed some colors in several diagrams.
-
Some text changes and additions on
Omega-flip network.
2011-07-16
-
I have drawn some more diagrams and
added the texts Source and Target to all diagrams.
2011-07-15
-
Introduction of this list as a public means to see what has changed.
The earlier entries are partly guesswork and all but complete.
-
I found an error!
In
testperm.*:
shuffle and
unshuffle repaired:
The array index was off by one.
The once working routines broke by a refactoring operation.
Unfortunately a test routine for these procedures is still missing.
Who wants to help me writing one?
2011-07-14
2011-07-01
2011-06-13
2011-06-01
2011-05-28
-
Creation of the logos.
-
First diagrams.
2011-05-18
About 2011-02
-
Development of some of the routines you find in
testperm.c,
e.g. the gen_cef_* routines.
You may
bookmark
this page as
http://programming.sirrida.de?news.html.