Agner`s CPU blog

Software optimization resources | E-mail subscription to this blog |

Function libraries and tools updated
Author: Agner Date: 2013-10-07 10:02

My vector class library, asmlib library, random number generator library, objconv tool, and test programs have now been updated as explained below.

Vector class library

The vector class library is a collection of C++ classes, functions and operators that makes it easier to use the the vector instructions of modern CPUs without using assembly language. Main improvements in latest version:

  • Support for Clang compiler
  • Clear distinction between boolean vectors and integer vectors for the sake of compatibility with future AVX512 instruction set
  • Added function if_add
  • Minor bug fixes
  • Workarounds for various problems in specific compilers

Link to vector class library.

Asmlib library

This is a library of optimized subroutines coded in assembly language. Supports many different compilers and operating systems. This library contains faster versions of common C/C++ memory and string functions, fast functions for string search and string parsing, fast integer division and integer vector division, random number generators, and several other useful functions not found elsewhere. Main improvements in latest version:

  • New function: memcmp
  • memcpy, memmove and memset functions updated with optimizations for newest processors, including Intel Haswell and AMD Piledriver.
  • Various random number generators included. These were previously in a separate library.

Link to asmlib library.

Random number generator library

This is a collection of pseudo random number generators for demanding scientific applications including various continuous and discrete distributions. Includes C++ class libraries and binary library files. A non-deterministic random number generator function is added for use with microprocessors that have a built-in physical random number generator. The binary library files have now been integrated with the Asmlib library in order to explore the synergy between the two libraries and make maintenance easier.

Link to random number generator library.

Objconv tool

This utility can be used for converting object files between different object file formats for all 32-bit and 64-bit x86 platforms. Can modify symbol names in object files. Can build, modify and convert function libraries across platforms. Can dump object files and executable files. Also includes a very good disassembler supporting the latest instruction sets. Main improvements in latest version:

  • Faster handling of large libraries
  • Better handling of library members with long names
  • Can change prefixes and suffixes of function names in object files and library files
  • Disassembler supports future instruction sets, including AVX-512
  • Various bug fixes

Link to objconv tool.

Test programs

This is a collection of test programs that I have used for my research. Can measure clock cycles and performance monitor counters such as cache misses, branch mispredictions, resource stalls etc. for small pieces of code. This has been updated to support the latest microprocessors, including Intel Haswell and AMD Piledriver. A lot of test scripts have been added for automated tests of instruction latencies and throughputs, instruction fetch and decode rates, data cache, microop cache, store forwarding, and many other details.

Link to test programs.

thread Function libraries and tools updated - Agner - 2013-10-07
reply asmlib virus hit new - mathew boorman - 2013-11-03
replythread Function libraries and tools updated new - Yury Hushchyn - 2014-10-17
last reply Function libraries and tools updated new - Agner - 2014-10-18
last replythread Function libraries and tools updated new - Andysem - 2015-03-05
last reply Function libraries and tools updated new - Agner - 2015-03-05