Skip to content

Releases: NVIDIA/warp

v0.9.0

14 Jun 00:43
Compare
Choose a tag to compare
v0.9.0 Pre-release
Pre-release

[0.9.0] - 2023-06-01

  • Add support for in-place modifications to vector, matrix, and struct types inside kernels (will warn during backward pass with wp.verbose if using gradients)
  • Add support for step-through VSCode debugging of kernel code with standalone LLVM compiler, see wp.breakpoint(), and test_debug.py
  • Add support for default values on built-in functions
  • Add support for multi-valued @wp.func functions
  • Add support for pass, continue, and break statements
  • Add missing __sincos_stret symbol for macOS
  • Add support for gradient propagation through wp.Mesh.points, and other cases where arrays are passed to native functions
  • Add support for Python @ operator as an alias for wp.matmul()
  • Add XPBD support for particle-particle collision
  • Add support for individual particle radii: ModelBuilder.add_particle has a new radius argument, Model.particle_radius is now a Warp array
  • Add per-particle flags as a Model.particle_flags Warp array, introduce PARTICLE_FLAG_ACTIVE to define whether a particle is being simulated and participates in contact dynamics
  • Add support for Python bitwise operators &, |, ~, <<, >>
  • Switch to using standalone LLVM compiler by default for cpu devices
  • Split omni.warp into omni.warp.core for Omniverse applications that want to use the Warp Python module with minimal additional dependencies
  • Disable kernel gradient generation by default inside Omniverse for improved compile times
  • Fix for bounds checking on element access of vector/matrix types
  • Fix for stream initialization when a custom (non-primary) external CUDA context has been set on the calling thread
  • Fix for duplicate @wp.struct registration during hot reload
  • Fix for array unot() operator so kernel writers can use if not array: syntax
  • Fix for case where dynamic loops are nested within unrolled loops
  • Change wp.hash_grid_point_id() now returns -1 if the wp.HashGrid has not been reserved before
  • Deprecate wp.Model.soft_contact_distance which is now replaced by wp.Model.particle_radius
  • Deprecate single scalar particle radius (should be a per-particle array)

v0.7.0

13 Feb 03:11
Compare
Choose a tag to compare
v0.7.0 Pre-release
Pre-release

[0.7.0] - 2023-02-13

  • Add support for arbitrary length / type vector and matrices e.g.: wp.vec(length=7, dtype=wp.float16), see wp.vec(), and wp.mat()
  • Add support for array.flatten(), array.reshape(), and array.view() with NumPy semantics
  • Add support for slicing wp.array types in Python
  • Add wp.from_ptr() helper to construct arrays from an existing allocation
  • Add support for break statements in ranged-for and while loops (backward pass support currently not implemented)
  • Add built-in mathematic constants, see wp.pi, wp.e, wp.log2e, etc
  • Add built-in conversion between degrees and radians, see wp.degrees(), wp.radians()
  • Add security pop-up for Kernel Node
  • Improve error handling for kernel return values

v0.5.0

31 Oct 02:55
Compare
Choose a tag to compare
v0.5.0 Pre-release
Pre-release

[0.5.0] - 2022-10-31

  • Add smoothed particle hydrodynamics (SPH) example, see example_sph.py
  • Add support for accessing array.shape inside kernels, e.g.: width = arr.shape[0]
  • Add dependency tracking to hot-reload modules if dependencies were modified
  • Add lazy acquisition of CUDA kernel contexts (save ~300Mb of GPU memory in MGPU environments)
  • Add BVH object, see wp.Bvh and bvh_query_ray(), bvh_query_aabb() functions
  • Add component index operations for spatial_vector, spatial_matrix types
  • Add wp.lerp() and wp.smoothstep() builtins
  • Add wp.optim module with implementation of the Adam optimizer for float and vector types
  • Add support for transient Python modules (fix for Houdini integration)
  • Add wp.length_sq(), wp.trace() for vector / matrix types respectively
  • Add missing adjoints for wp.quat_rpy(), wp.determinant()
  • Add wp.atomic_min(), wp.atomic_max() operators
  • Add vectorized version of warp.sim.model.add_cloth_mesh()
  • Add NVDB volume allocation API, see wp.Volume.allocate(), and wp.Volume.allocate_by_tiles()
  • Add NVDB volume write methods, see wp.volume_store_i(), wp.volume_store_f(), wp.volume_store_v()
  • Add MGPU documentation
  • Add example showing how to compute Jacobian of multiple environements in parallel, see example_jacobian_ik.py
  • Add wp.Tape.zero() support for wp.struct types
  • Make SampleBrowser an optional dependency for Kit extension
  • Make wp.Mesh object accept both 1d and 2d arrays of face vertex indices
  • Fix for reloading of class member kernel / function definitions using importlib.reload()
  • Fix for hashing of wp.constants() not invalidating kernels
  • Fix for reload when multiple .ptx versions are present
  • Improved error reporting during code-gen

v0.4.3

21 Sep 02:02
Compare
Choose a tag to compare
v0.4.3 Pre-release
Pre-release

[0.4.3] - 2022-09-20

  • Update all samples to use GPU interop path by default
  • Fix for arrays > 2GB in length
  • Add support for per-vertex USD mesh colors with warp.render class

[0.4.2] - 2022-09-07

  • Register Warp samples to the sample browser in Kit
  • Add NDEBUG flag to release mode kernel builds
  • Fix for particle solver node when using a large number of particles
  • Fix for broken cameras in Warp sample scenes

[0.4.1] - 2022-08-30

  • Add geometry sampling methods, see wp.sample_unit_cube(), wp.sample_unit_disk(), etc
  • Add wp.lower_bound() for searching sorted arrays
  • Add an option for disabling code-gen of backward pass to improve compilation times, see wp.set_module_options({"enable_backward": False}), True by default
  • Fix for using Warp from Script Editor or when module does not have a __file__ attribute
  • Fix for hot reload of modules containing wp.func() definitions
  • Fix for debug flags not being set correctly on CUDA when wp.config.mode == "debug", this enables bounds checking on CUDA kernels in debug mode
  • Fix for code gen of functions that do not return a value

[0.4.0] - 2022-08-09

  • Fix for FP16 conversions on GPUs without hardware support
  • Fix for runtime = None errors when reloading the Warp module
  • Fix for PTX architecture version when running with older drivers, see wp.config.ptx_target_arch
  • Fix for USD imports from __init__.py, defer them to individual functions that need them
  • Fix for robustness issues with sign determination for wp.mesh_query_point()
  • Fix for wp.HashGrid memory leak when creating/destroying grids
  • Add CUDA version checks for toolkit and driver
  • Add support for cross-module @wp.struct references
  • Support running even if CUDA initialization failed, use wp.is_cuda_available() to check availability
  • Statically linking with the CUDA runtime library to avoid deployment issues

v0.3.1

12 Jul 22:50
Compare
Choose a tag to compare
v0.3.1 Pre-release
Pre-release

[0.3.1] - 2022-07-12

  • Fix for marching cubes reallocation after initialization
  • Add support for closest point between line segment tests, see wp.closest_point_edge_edge() builtin
  • Add support for per-triangle elasticity coefficients in simulation, see wp.sim.ModelBuilder.add_cloth_mesh()

[0.3.0] - 2022-07-08

  • Add support for FP16 storage type, see wp.float16
  • Add support for per-dimension byte strides, see wp.array.strides
  • Add support for passing Python classes as kernel arguments, see @wp.struct decorator
  • Add additional bounds checks for builtin matrix types
  • Add additional floating point checks, see wp.config.verify_fp
  • Add interleaved user source with generated code to aid debugging
  • Add generalized GPU marching cubes implementation, see wp.MarchingCubes class
  • Add additional scalar*matrix vector operators
  • Add support for retrieving a single row from builtin types, e.g.: r = m33[i]
  • Add wp.log2() and wp.log10() builtins
  • Add support for quickly instancing wp.sim.ModelBuilder objects to improve env. creation performance for RL
  • Remove custom CUB version and improve compatability with CUDA 11.7
  • Fix to preserve external user-gradients when calling wp.Tape.zero()
  • Fix to only allocate gradient of a Torch tensor if requires_grad=True
  • Fix for missing wp.mat22 constructor adjoint
  • Fix for ray-cast precision in edge case on GPU (watertightness issue)
  • Fix for kernel hot-reload when definition changes
  • Fix for NVCC warnings on Linux
  • Fix for generated function names when kernels are defined as class functions
  • Fix for reload of generated CPU kernel code on Linux
  • Fix for example scripts to output USD at 60 timecodes per-second (better Kit compatibility)

v0.2.3

16 Jun 00:43
Compare
Choose a tag to compare
v0.2.3 Pre-release
Pre-release

[0.2.3] - 2022-06-13

  • Fix for incorrect 4d array bounds checking
  • Fix for wp.constant changes not updating module hash
  • Fix for stale CUDA kernel cache when CPU kernels launched first
  • Array gradients are now allocated along with the arrays and accessible as wp.array.grad, users should take care to always call wp.Tape.zero() to clear gradients between different invocations of wp.Tape.backward()
  • Added wp.array.fill_() to set all entries to a scalar value (4-byte values only currently)

Breaking Changes

  • Tape capture option has been removed, users can now capture tapes inside existing CUDA graphs (e.g.: inside Torch)
  • Scalar loss arrays should now explicitly set requires_grad=True at creation time

[0.2.2] - 2022-05-30

  • Fix for from import * inside Warp initialization
  • Fix for body space velocity when using deforming Mesh objects with scale
  • Fix for noise gradient discontinuities affecting wp.curlnoise()
  • Fix for wp.from_torch() to correctly preserve shape
  • Fix for URDF parser incorrectly passing density to scale parameter
  • Optimizations for startup time from 3s -> 0.3s
  • Add support for custom kernel cache location, Warp will now store generated binaries in the user's application directory
  • Add support for cross-module function references, e.g.: call another modules @wp.func functions
  • Add support for overloading @wp.func functions based on argument type
  • Add support for calling built-in functions directly from Python interpreter outside kernels (experimental)
  • Add support for auto-complete and docstring lookup for builtins in IDEs like VSCode, PyCharm, etc
  • Add support for doing partial array copys, see wp.copy() for details
  • Add support for accessing mesh data directly in kernels, see wp.mesh_get_point(), wp.mesh_get_index(), wp.mesh_eval_face_normal()
  • Change to only compile for targets where kernel is launched (e.g.: will not compile CPU unless explicitly requested)

Breaking Changes

  • Builtin methods such as wp.quat_identity() now call the Warp native implementation directly and will return a wp.quat object instead of NumPy array
  • NumPy implementations of many builtin methods have been moved to warp.utils and will be deprecated
  • Local @wp.func functions should not be namespaced when called, e.g.: previously wp.myfunc() would work even if myfunc() was not a builtin
  • Removed wp.rpy2quat(), please use wp.quat_rpy() instead

[0.2.1] - 2022-05-11

  • Fix for unit tests in Kit

v0.2.0

05 May 04:15
Compare
Choose a tag to compare
v0.2.0 Pre-release
Pre-release

Warp Core

  • Fix for unrolling loops with negative bounds
  • Fix for unresolved symbol hash_grid_build_device() not found when lib is compiled without CUDA support
  • Fix for failure to load nvrtc-builtins64_113.dll when user has a newer CUDA toolkit installed on their machine
  • Fix for conversion of Torch tensors to wp.arrays() with a vector dtype (incorrect row count)
  • Fix for warp.dll not found on some Windows installations
  • Fix for macOS builds on Clang 13.x
  • Fix for step-through debugging of kernels on Linux
  • Add argument type checking for user defined @wp.func functions
  • Add support for custom iterable types, supports ranges, hash grid, and mesh query objects
  • Add support for multi-dimensional arrays, for example use x = array[i,j,k] syntax to address a 3-dimensional array
  • Add support for multi-dimensional kernel launches, use launch(kernel, dim=(i,j,k), ... and i,j,k = wp.tid() to obtain thread indices
  • Add support for bounds-checking array memory accesses in debug mode, use wp.config.mode = "debug" to enable
  • Add support for differentiating through dynamic and nested for-loops
  • Add support for evaluating MLP neural network layers inside kernels with custom activation functions, see wp.mlp()
  • Add additional NVDB sampling methods and adjoints, see wp.volume_sample_i(), wp.volume_sample_f(), and wp.volume_sample_vec()
  • Add support for loading zlib compressed NVDB volumes, see wp.Volume.load_from_nvdb()
  • Add support for triangle intersection testing, see wp.intersect_tri_tri()
  • Add support for NVTX profile zones in wp.ScopedTimer()
  • Add support for additional transform and quaternion math operations, see wp.inverse(), wp.quat_to_matrix(), wp.quat_from_matrix()
  • Add fast math (--fast-math) to kernel compilation by default
  • Add warp.torch import by default (if PyTorch is installed)

Warp Kit

  • Add Kit menu for browsing Warp documentation and example scenes under 'Window->Warp'
  • Fix for OgnParticleSolver.py example when collider is coming from Read Prim into Bundle node

Warp Sim

  • Fix for joint attachment forces
  • Fix for URDF importer and floating base support
  • Add examples showing how to use differentiable forward kinematics to solve inverse kinematics
  • Add examples for URDF cartpole and quadruped simulation

Breaking Changes

  • wp.volume_sample_world() is now replaced by wp.volume_sample_f/i/vec() which operate in index (local) space. Users should use wp.volume_world_to_index() to transform points from world space to index space before sampling.
  • wp.mlp() expects multi-dimensional arrays instead of one-dimensional arrays for inference, all other semantics remain the same as earlier versions of this API.
  • wp.array.length member has been removed, please use wp.array.shape to access array dimensions, or use wp.array.size to get total element count
  • Marking dense_gemm(), dense_chol(), etc methods as experimental until we revisit them

v0.1.25-alpha

22 Mar 00:27
Compare
Choose a tag to compare
v0.1.25-alpha Pre-release
Pre-release

Contains a snapshot of the repository with binaries for Windows, Linux x86-64.