Skip to content

OpenVDB AX 0.2.0

Compare
Choose a tag to compare
@Idclip Idclip released this 05 Mar 20:20
· 43 commits to master since this release
7abc641
As of this release, a C++14 compiler is required.

New Features:
- AX now generates all target machine (host) optimizations by default. This
  includes any supported SIMD (sse, avx etc.) instructions for SLP
  vectorization
- A full restructure of the developer Function framework with the switch to
  IR functions implementations over C bindings (where available). Up until
  now, natively supported functions in AX have used their C bindings by
  default. This release defaults to their IR implementations which, along
  with full vectorization support, allows for the full potential of all LLVM
  optimizations. This is most noticeable when using function inside of loops
  or in larger AX code snippets
- New functions added: acosh, asinh, atanh, diag
- New options and output to the vdb_ax binary. --try-compile provides a way
  to test if a given AX code snippet will compile for a particular VDB
  target. Verbose mode with -v now provides better formatted output with
  more detailed timing reports.
- Added the ability to provide external string data to AX which can be
  accessed with string$ (or chs() in Houdini)
- Added support for vec4 and string VDB volumes. Note that vec4 volumes are
  not registered by default

Improvements:
- Significant performance improvements to AX execution with the introduction of:
    - Proper SLP vectorization with supported host features
    - Defaulting IR functions to ON
    - Loop allocation fixes (see bug fixes)
    - Constant Folding for scalar C bindings
- Introduced initial constant folding for scalar C bindings. Functions which
  are called with known constants are evaluated at compile time. Note that
  CF for IR Functions is left to LLVM's optimization passes
- Added support for vec2 and vec4 arguments for length() and lengthsq()
- Added a new floating point signature for abs() (which calls fabs) to avoid
  implicit casting of integer arguments

Bug Fixes:
- Fixed a bug where assignments from functions which return void could cause
  a crash
- Fixed a bug where functions which modified reference arguments (such as
  transform, posttransform) would cast the modifiable argument, resulting in
  the result not being set. These functions will now error with invalid
  signatures and require the correct argument types to be provided
- Fixed an issue which could cause stack overflows when using scalar or
  array (vec/mat) allocations within loops
- Fixed an issue which could cause a crash when using uninitialized strings
  in compound expressions
- Fixed a bug where binary string concatenations could cause spurious
  characters to appear with print()
- Fixed a bug where vec4 types were being interpreted as vec3

Code Generation:
- Assignment and binary string operators now always copy the null terminator
- Added new IR function logic for lerp and for normalization of integer
  vectors
- The ast::FunctionCall visit now always pushes back the function result
- Strings are always initialized to the empty string
- All allocations, aside from string allocs, have been converted to function
  prologue static allocas
- New codegen/ConstantFolding.h which provides the generic framework for
  constant folding C bindings
- Renamed the FunctionBase class to FunctionGroup
- Renamed the FunctionSignatureBase class to Function and re-structured its
  member implementations
- New classes for derived Functions, CFunctionBase and IRFunctionBase, which
  can be further subclassed for the respective function type.
- A new interface class SRetFunction for functions which require structural
  returns
- New framework for building and creating a function. The FunctionBuilder
  provides a way to interface with the function types in FunctionTypes.h
  without having to manually subclass.
- Exposed the ability to customize llvm function attributes.
- Removed the unnecessary use of std::function on templated classes and
  methods
- Re-structured all native functions to use the new FunctionBuilder
- A variety of IR fixes to some native functions
- Re-structured all IR functions which required structural returns.
  Previously, these function would produce invalid results unless they were
  forcefully inlined. SRET IR methods now behave in the same way as SRET C
  bindings
- Improvements to the LLVMType trait structures. These have been mostly
  consolidated to take advantage of new LLVM methods
- Added a new AliasTypeMap trait structure in Types.h to allow for safer
  and restricted front-end to back-end type mapping
- New insertStaticAlloca utility method for creating function prologue
  static allocations. New isValidCast utility method to check if a cast is
  valid between two types
- Removed a number of unused utility methods
- Removed the function arguments vector from the ComputeGenerator in favor
  of new utility methods to extract arguments (extractArgument)
- Renamed the ComputeGenerator functions to prefix with ax and suffix
  with the generator type

Compiler:
- Initial implementation of LLVM's new PassManager. Currently disabled by
  default. This has not been fully configured to work with target machine
  optimizations.
- Introduced an internal compiler function, initializeTargetMachine, to
  create the target machine representing the available feature set of the
  host
- Renamed the mPrioritiseFunctionIR Function Option to mPrioritiseIR and
  defaulted it to ON
- Introduced a mConstantFoldCBindings Function Option which defaults to ON
- Added support for AXStringMetadata during global mapping for external
  values

Math:
- Exposed the curlnoise functions from StandardFunctions to the
  OpenSimplexNoise headers

CMake / Build / Testing:
- New test suites for various back-end utilities
- Added CMake SIMD options. Note that these optional apply to the compiled
  CXX source files of OpenVDB AX, not the JIT LLVM IR. The IR is always
  optimized to the host specification.
- Set the required LANGUAGES for OpenVDB AX projects to CXX
- Added significantly more function tests with profiling options
- BISON 3.0 is now marked as required if the grammar is to be regenerated
- New developer options, USE_NEW_PASS_MANAGER and OPENVDB_AX_TEST_PROFILE
- Travis fixes to build against VDB 6.2.1
- Removed the deprecated Makefiles