Skip to content

Releases: vgvassilev/clad

Clad version 2.1

01 Oct 09:56

Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 2.1. Clad is built on top of
Clang and LLVM compiler infrastructure. Here we describe the status of Clad in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout, this document applies to the next release, not the current one.

What's New in Clad 2.1?

Clad 2.1 introduces major advancements in reverse mode differentiation, bringing smarter handling of loops, assignments, and method calls, alongside the new clad::restore_tracker for functions that modify their inputs. Forward mode gains static scheduling for Hessians and higher-order derivatives, while CUDA support expands with custom derivatives for key Thrust algorithms such as reduce, transform, and transform_reduce, plus optimizations that reduce unnecessary GPU atomics. The release also strengthens error estimation, simplifies adjoint initialization, improves tape efficiency, and enhances diagnostics. With a migration to C++17, support extended up to clang-21, and numerous bug fixes, Clad 2.1 delivers faster, safer, and more reliable automatic differentiation across CPU and GPU workflows.

Some of the major new features and improvements to Clad are listed here. Generic improvements to Clad as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Clad now works with clang-11 to clang-21.
  • Switch to C++17 standard.

Forward Mode & Reverse Mode

  • Improve support for differentiation of function/method calls:
    • Move call/argument differentiation into unified helpers.
    • Improve handling of base initializers, delegating constructors, and method bases.
  • Optimizations in Tape-Based Recording (TBR):
    • Enable TBR for pointer arithmetic, nested calls, local variables, loops, and constructors.
    • Improve analysis of pointers, nested derivatives, and division denominators.
    • Remove redundant or unsafe getZeroInit initializations in aggregates and init lists.
  • Statically schedule higher-order derivatives for Hessians.

Reverse Mode

  • Better handling of pullbacks and reverse_forw:
    • Avoid generating empty or redundant pullbacks.
    • Improve type consistency in reverse_forw.
    • Introduce clad::restore_tracker to support functions modifying their arguments.
  • Improve differentiation ordering (differentiate method bases before arguments).
  • Simplify assignments when LHS and RHS are independent.
  • Support for for-loops without increments.
  • Add optimizations to avoid unnecessary storage of unused return values.
  • Consider unions differentiable.
  • Support for not differentiating w.r.t. const references.
  • Numerous fixes in reverse_forw handling of types and aggregates.

CUDA

  • Add custom derivatives for several Thrust algorithms:
    • thrust::reduce, thrust::transform, thrust::transform_reduce,
      thrust::copy, thrust::inner_product.
  • Improve handling of CUDA atomics:
    • Avoid atomics for injective index computations.
    • Added liveness analysis for removing unnecessary atomics.

Error Estimation

  • Reverse mode error estimation now uses pullbacks consistently.
  • Fix _final_error value propagation .

Misc

  • Improve diagnostics for propagator signature mismatches.

  • Full qualification logic for generated code.

  • Better handling of consteval functions, decl refs, and unused parameters.

  • Remove unused STL derivatives and redundant infrastructure.

  • CI improvements:

    • Added valgrind test runs.
    • Updated MacOS runners, godbolt build (clang 21), and codecov handling.
  • Documentation: Update README to clarify plugin usage, C++14 requirement, and
    plugin args.

Fixed Bugs

428 691 752 768 1274 1301 1346 1349 1411 1419 1436 1445 1457 1466 1469 1472 1473 1490 1497 1498 1555 1557 1559 1560 1565 1573 1581 1582

Special Kudos

This release wouldn't have happened without the efforts of our contributors,
listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

A B (N)

PetroZarytskyi (60; major ad/tbr work)
Vassil Vassilev (30; infrastructure, ci, compiler integration)
Abdelrhman Elrawy (7; cuda/thrust support)
Max Andriychuk (7; va/tbr infrastructure, cfg/loop analysis, cuda atomics)
aditimjoshi (4; tape improvements, benchmarks)
Vipul Cariappa (1; godbolt integration)
Timo Nicolai (1; docs, usage improvements)
Rohan Timmaraju (1; tensor-specific support)
mcbarton (1; ci, runners)
Jonas Rembser (1; build fixes)
Christina Koutsou (1; nondiff structs support)

What's Changed

Read more

Clad version 2.0

27 Jul 14:30

Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 2.0. Clad is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Clad in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout, this document applies to the next release, not the current one.

What's New in Clad 2.0?

Some of the major new features and improvements to Clad are listed here. Generic improvements to Clad as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Clad now works with clang-10 to clang-20

Forward Mode & Reverse Mode

  • Improved handling of non-differentiable annotated types
  • Support static_assert.
  • Improved to-be-recorded (TBR) analysis.

Forward Mode

  • Added support for Useful Analysis for more efficient derivative computation.
  • Custom derivative resolution now leverages Clang's CallExpr infrastructure for correctness and compatibility.
  • Improved diagnostics for mismatched custom derivative signatures.
  • Enhanced handling of real-valued parameters only.

Reverse Mode

  • Enabled static scheduling for constructor pullbacks.
  • Reworked reverse_forw naming and logic consistency.
  • Improved support for std::shared_ptr, std::weak_ptr, and complex value-type parameters.
  • Support added for custom derivatives for STL iterators.
  • Static-only scheduling for pullbacks is now the default (excluding Hessians and special cases like error estimation).
  • Improved support for rvalue references.

CUDA

  • Tape now supports CUDA builds and works with nvcc.
  • Recalculation support for CUDA built-in index functions (threadIdx, etc.)

Error Estimation

  • The error estimation framework has been updated to maintain singleton objects per request, ensuring more consistent handling.

Misc

  • More descriptive stack traces for diagnostics.
  • Improved support for polymorphism and virtual functions in user demos.
  • A benchmark comparison script has been added.
  • The SmallPT ray tracer demo has been revised and fixed.
  • Added -version and improved --help usability.
  • Godbolt link included in documentation.
  • Reworked time reporting -- detailed performance information is shown when the env variable CLAD_ENABLE_TIMING is set or passed -ftime-report.
  • Handle custom derivatives ahead of the differentiation process improving the overall system robustness.

Fixed Bugs

1454 1452 1451 1437 1429 1423 1392 1383 1371 1369 1366 1123 985 793 751 665

Special Kudos

This release wouldn't have happened without the efforts of our contributors,
listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

A B (N)

petro.zarytskyi (57)
Vassil Vassilev (20)
ovdiiuv (4)
Vipul Cariappa (2)
dependabot[bot] (2)
aditimjoshi (2)
Rohan-T144 (1)
Rohan Timmaraju (1)
mcbarton (1)
Maki Arima (1)
Christina Koutsou (1)
Abhinav Kumar (1)
Abdelrhman Elrawy (1)

What's Changed

Read more

Clad version 1.10

26 Apr 09:16

Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 1.10. Clad is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Clad in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout, this document applies to the next release, not the current one.

What's New in Clad 1.10?

Some of the major new features and improvements to Clad are listed here. Generic improvements to Clad as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Clad now works with clang-10 to clang-20

Forward Mode & Reverse Mode

  • Improved diagnostics for unsupported features​.
  • Add custom derivatives for standard math functions.

Forward Mode

  • Add support of variadic functions.

Reverse Mode

  • Refined function analysis to mark const methods as non-differentiable​.
  • Make to-be-recorded (TBR) analysis default.
  • Automatically generate some constructor pullbacks.
  • Implemented "store per change" for method bases to reduce tape usage.
  • Enabled differentiation of global variables.
  • Enabled differentiation for static member functions.
  • Improved handling of object variables, differentiation more consistent across types​
  • Improved support for default arguments in reverse mode​.
  • Added primitive support for std::unique_ptr<T>​.
  • Refactored handling of custom STL pullbacks​.
  • Reduce tape usage for objects.

CUDA

  • Added CUDA_HOST_DEVICE attributes to zero_impl and zero_init​.
  • Created ParmVarDecl for local kernel variables in device pullbacks​.
  • Reworked indexing of pullbacks to better handle CUDA differentiation​

Misc

  • Support for LLVM 20, dropped LLVM 9​.
  • Updated GoogleTest to latest version​.
  • General CI improvements: Ubuntu 22/24 support, dropped older configs​.
  • Improved varied analysis.

Fixed Bugs

685 760 772 800 871 879 1009 1044 1095 1125 1262 1269 1270 1276 1294 1295 1302 1304
1353

Special Kudos

This release wouldn't have happened without the efforts of our contributors,
listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

A B (N)

petro.zarytskyi (44)
Vassil Vassilev (21)
Max Andriychuk (11)
Christina Koutsou (7)
petro (1)
Shubhanjan-GGOD (1)
Rohan-T144 (1)
Petro Mozil (1)
Parth Arora (1)
Jayant (1)
Greg Hazel (1)
Errant (1)
Abdelrhman Elrawy (1)

What's Changed

Read more

Clad version 1.9

10 Feb 16:09

Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 1.9. Clad is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Clad in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout, this document applies to the next release, not the current one.

What's New in Clad 1.9?

Some of the major new features and improvements to Clad are listed here. Generic improvements to Clad as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Clad now works with clang-9 to clang-19

Forward Mode & Reverse Mode

  • Improved differentiation support for complex mathematical expressions.
  • Enhanced function overload handling in both forward and reverse modes.
  • Enable differentiation when functions are defined in transparent contexts.

Forward Mode

  • Optimized forward mode differentiation for performance improvements.
  • Added support for additional intrinsic functions.

Reverse Mode

  • Enhanced handling of control flow structures in reverse mode.
  • Improved memory efficiency during differentiation.
  • Support member calls with xvalue bases in the reverse mode.
  • Initialize object adjoints using a copy of the original when copy constructor is available. Eg:
    std::vector<...> v{x, y, z};
    std::vector<...> _d_v{v}; // The length of the vector is preserved
    clad::zero_init(_d_v); // All elements are initialized to 0
    
    The new clad::zero_init function relies on the iterators to initialize the elements.

CUDA

  • Introduced experimental support for differentiating CUDA kernels.
  • Optimized CUDA differentiation to reduce compilation overhead.

Misc

  • General improvements in documentation and code clarity.
  • Various performance optimizations across Clad.
  • Improved DiffRequest and DynamicGraph printing.

Fixed Bugs

767 917 1082 1112 1215 1216

Special Kudos

This release wouldn't have happened without the efforts of our contributors,
listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

A B (N)

Vassil Vassilev (36)
petro.zarytskyi (12)
mcbarton (2)
PetroZarytskyi (2)
dependabot[bot] (1)
ToshitJain (1)
Rohith Suresh (1)
Abdelrhman Elrawy (1)

What's Changed

New Contributors

Full Changelog: v1.8...v1.9

Clad version 1.8

17 Dec 16:21

Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 1.8. Clad is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Clad in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout, this document applies to the next release, not the current one.

What's New in Clad 1.8?

Some of the major new features and improvements to Clad are listed here. Generic improvements to Clad as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Clad works with clang-8 to clang-18.

Forward Mode & Reverse Mode

  • Support std::array, std::vector.

Forward Mode

  • Support std::tie, std::atan2 and std::acos.

Reverse Mode

  • Support std::initializer_list and sizeof.
  • Support pointer-valued functions.
  • Support range-based for loops.

CUDA

  • Add support of CUDA device pullbacks.
  • Enable computation of CUDA global kernels derivative.

Misc

  • Enable immediate evaluation mode (consteval and constexpr) with a new clad mode clad::immediate_mode.
  • Make clad::CladFunction and clad::array_ref constexpr.
  • Support operators defined outside of classes.
  • Add Varied analysis to the reverse mode.
  • Add support for Kokkos::View, Kokkos::deep_copy, Kokkos::resizeandparallel_for` in reverse mode.
  • Add support for Kokkos::parallel_for, Kokkos::fence, Kokkos::View and
    Kokkos::parallel_reduce in forward mode.

Fixed Bugs

472 480 527 682 684 830 855 1000 1019 1033 1049 1057 1070 1071 1081 1087 1151 1162

Special Kudos

This release wouldn't have happened without the efforts of our contributors, listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

A B (N)

petro.zarytskyi (30)
Vassil Vassilev (22)
Atell Krasnopolski (22)
Christina Koutsou (17)
Mihail Mihov (12)
ovdiiuv (7)
kchristin (6)
Vipul Cariappa (3)
Alexander Penev (3)
mcbarton (1)
infinite-void-16 (1)
fsfod (1)
Vaibhav Thakkar (1)
Max Andriychuk (1)
Infinite Void (1)
Austeja (1)

What's Changed

Read more

Clad version 1.7

08 Aug 06:54

Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 1.7. Clad is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Clad in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout, this document applies to the next release, not the current one.

What's New in Clad 1.7?

Some of the major new features and improvements to Clad are listed here. Generic improvements to Clad as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Clad now works with clang-8 to clang-18

Forward Mode & Reverse Mode

  • Add propagators for __builtin_pow and __builtin_log
  • Support range-based for loops
  • Improve diagnostics clarity

Forward Mode

  • Advance support of frameworks such as Kokkos
  • Support std::array

Reverse Mode

  • Support non_differentiable attribute

Fixed Bugs

46 381 479 525 717 723 829 979 983 986 988 1005

Special Kudos

This release wouldn't have happened without the efforts of our contributors,
listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

A B (N)

petro.zarytskyi (11)
Vassil Vassilev (11)
Atell Krasnopolski (5)
Vaibhav Thakkar (2)
Mihail Mihov (2)
ovdiiuv (1)
Rohan Julka (1)
Max Andriychuk (1)

What's Changed

Full Changelog: v1.6...v1.7

Clad version 1.6

18 Jul 05:35

Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 1.6. Clad is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Clad in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout, this document applies to the next release, not the current one.

What's New in Clad 1.6?

Some of the major new features and improvements to Clad are listed here. Generic improvements to Clad as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Clad now works with clang-8 to clang-18

Forward Mode & Reverse Mode

  • Add support for simple lambda functions

Forward Mode

  • Support condition declarations and assignments
  • Enable logical operators in for loops
  • Support top level custom derivatives in vector mode
  • Add support for assignments in while-loops
  • Support for initializer_list
  • Support for const_cast
  • Add support for std::string variables

Reverse Mode

  • Improve consistency in the tape usage
  • Support pointer reference parameters
  • Remove redundant goto/label statements from the generated code

Misc

  • Improved CMake infrastructure via AddClad.cmake
  • Remove unnecessary clad::array_ref usages
  • Add support for computing only the diagonal hessian entries
  • Basic support for custom constructor pushforward functions

Fixed Bugs

273 352 509 789 874 899 908 911 913 922 927 951 965 972 974 978

Special Kudos

This release wouldn't have happened without the efforts of our contributors,
listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

A B (N)

Vaibhav Thakkar (16)
petro.zarytskyi (13)
Vassil Vassilev (13)
Atell Krasnopolski (11)
parth-07 (3)
dependabot[bot] (3)
Rohan Julka (2)
Jonas Rembser (2)
PetroZarytskyi (1)
Maxxxx (1)
Max Andriychuk (1)
Alexander Penev (1)

What's Changed

  • Bump requests from 2.31.0 to 2.32.0 by @dependabot in #901
  • Add support for null (empty) statements by @gojakuch in #900
  • Add a new cmake fn for using Clad with a library by @vaithak in #902
  • Add bugprone-argument-comment in clang-tidy by @vaithak in #910
  • Add check-clad-execonly target by @parth-07 in #875
  • Patch - Add cmake install of AddClad.cmake by @alexander-penev in #915
  • Make GlobalStoreAndRef consistent in usage inside and outside of loops by @PetroZarytskyi in #904
  • Fix clang tidy run failure in PR checks by @vaithak in #918
  • Fix condition declarations and assignments in for loops by @gojakuch in #905
  • Add support for the logical not operator in for-loop conds (forward mode) by @gojakuch in #920
  • Return type adjusted to depend on called function's return type by @ovdiiuv in #907
  • Improve derived variable init for const pointers by @vaithak in #919
  • Remove unnecessary usages of clad::array_ref and update the documentation by @PetroZarytskyi in #925
  • Print graph of diff requests in stats by @vaithak in #926
  • Revert removing clad::array_ref from InterfaceCompatibility.C by @PetroZarytskyi in #929
  • A reverse block is never ended in RMV::VisitConditionalStatement by @PetroZarytskyi in #928
  • Correctly handle pointer reference parameters in the reverse mode by @PetroZarytskyi in #906
  • Improve finding of higher order custom derivatives by @vaithak in #931
  • Fix an assertion when building the clad benchmarks with clang18 on osx. by @vgvassilev in #930
  • Simplify the Jacobian visitors. NFC by @vgvassilev in #924
  • Pass the DiffRequest down to the visitors. NFC. by @vgvassilev in #933
  • Emit clad::pop after clad::back when in RMV::VisitBinaryOperator by @PetroZarytskyi in #936
  • Remove useless goto/label statements by @PetroZarytskyi in #938
  • Add support for custom derivatives for top level derivatives by @vaithak in #934
  • Fix test failure on master due to rebasing by @vaithak in #942
  • Add links to the "Introduction to Clang for Clad contributors" doc by @gojakuch in #939
  • Add support for simple lambda expressions in forward mode by @gojakuch in #937
  • Remove the isVectorValued state from reverse mode visitor. NFC by @vgvassilev in #945
  • Add a link to the "Changing Everything With Clang Plugins" talk to the docs by @gojakuch in #949
  • Bump urllib3 from 2.0.7 to 2.2.2 by @dependabot in #948
  • Remove the use_enzyme state from reverse mode visitor. NFC by @vgvassilev in #946
  • Remove redundant data member in favor of centralizing in DiffRequest. NFC by @vgvassilev in #944
  • Remove the enableTBR state from reverse mode visitor. NFC by @vgvassilev in #947
  • Add support for assignments in while-loops by @ovdiiuv in #943
  • Take StorageClass from the canonical decl when cloning functions by @PetroZarytskyi in #953
  • Add validation to prevent error on empty if block by @rohanjulka19 in #952
  • [ci] Explicitly set CXX and CC as there is no default clang symlink on alpine. by @vgvassilev in #956
  • Add support for computing only the diagonal hessian entries by @vaithak in #950
  • Add support for && operator by @rohanjulka19 in #923
  • Don't synthesize 0 of the ArraySubscriptExpr type in forward mode by @PetroZarytskyi in #960
  • Add support for initializer_list in forward mode AD by @parth-07 in #935
  • Add support for const cast in fwd mode by @vaithak in #962
  • Add support for simple lambda expressions in reverse mode by @gojakuch in #955
  • Add primitive support for constructor custom pushforward functions by @parth-07 in #909
  • Fix the derivative of string literals in forward mode by @gojakuch in #967
  • Bump certifi from 2023.7.22 to 2024.7.4 by @dependabot in #969
  • Add shell.nix with an environment for building and using Clad on NixOS by @guitargeek in #973
  • Add support for std::string variables and functions with implicit constructor calls in their arguments by @gojakuch in #976
  • Fix pointer dereference in fwd mode by @vaithak in #975
  • Fix pointer arithmetic in fwd mode by @vaithak in #982

New Contributors

Full Changelog: v1.5...v1.6

Clad version 1.5

21 May 06:00

Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 1.5. Clad is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Clad in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout, this document applies to the next release, not the current one.

What's New in Clad 1.5?

Some of the major new features and improvements to Clad are listed here. Generic improvements to Clad as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Clad now works with clang-8 to clang-18

Forward Mode & Reverse Mode

  • Add support for C-style memory alloc and free

Reverse Mode

  • Replace array_ref with pointers in gradient signature
  • Initial support for new and delete operations in reverse mode

Error Estimation

  • Only track sizes of independent arrays
  • Remove .size() from error estimation
  • Simplify error estimation by removing _EERepl_ and _delta_

Misc

  • Teach binder to use the newest available version of clad
  • Simplify pullback calls by replacing _grad/_r pairs with single _r variables
  • Delay the differentiation process until the end of TU -- Clad now can operate just like clang and visit the entire translation unit to construct a precise differentiation plan
  • Remove extra lines generated when using clad::array or array_ref
  • Added timings report if -ftime-report flag is enabled

Fixed Bugs

248 350 704 715 765 769 790 792 798 805 854 865 867 886 887 890 897

Special Kudos

This release wouldn't have happened without the efforts of our contributors,
listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

A B (N)

petro.zarytskyi (30)
Vaibhav Thakkar (24)
Vassil Vassilev (21)
mcbarton (6)
Mihail Mihov (4)
dependabot[bot] (2)
Atell Krasnopolski (2)
Alexander Penev (2)
sauravUppoor (1)
kchristin22 (1)
Warren Jacinto (1)
Jonas Hahnfeld (1)
Deeptendu Santra (1)
Christina Koutsou (1)

What's Changed

New Contributors

**Full Changelo...

Read more

Clad version 1.4

29 Feb 15:55

Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 1.4. Clad is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Clad in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout, this document applies to the next release, not the current one.

What's New in Clad 1.4?

Some of the major new features and improvements to Clad are listed here. Generic improvements to Clad as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Clad now works with clang-7 to clang-17

Forward Mode & Reverse Mode

  • Improve handling of char and string literals

Reverse Mode

  • Add support for differentiating switch statements
  • Supportpassing pointers as call arguments
  • Fix pointer arithmetic for array types

Misc

  • Support BUILD_SHARED_LIBS=On

Fixed Bugs

300 313 636 735 748 753 774

Special Kudos

This release wouldn't have happened without the efforts of our contributors,
listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

A B (N)

Vassil Vassilev (9)
Vaibhav Thakkar (6)
maximusron (1)
bedupako12mas (1)
Parth (1)
Krishna Narayanan (1)
Aaron Jomy (1)

What's Changed

  • Fix for char and string literals as function args by @vaithak in #749
  • [cmake] Properly compute the path to gtest. by @vgvassilev in #754
  • [cmake] Move away from flat namespaces. by @vgvassilev in #755
  • Add support for differentiating switch stmt in the reverse mode AD. by @parth-07 in #339
  • [cmake] Clean up flags and treat warnings as errors in the ci. by @vgvassilev in #756
  • Fix passing pointers as call arguments by @vaithak in #763
  • Fix pointer arithmetic for array types by @vaithak in #764
  • [cmake] Make the compilation of gtest parallel by @vgvassilev in #770
  • [ci] Schedule the builds with debug clang earlier. by @vgvassilev in #771
  • [cmake] Support BUILD_SHARED_LIBS=On flags by @vgvassilev in #775
  • [cmake] Kokkos always requires rtti. by @vgvassilev in #776
  • Update InstallationAndUsage.rst by @bedupako12mas in #778
  • Remove implicit bool conversion check from clang-tidy by @vaithak in #784
  • [cmake] Only require git when running benchmarks. by @vgvassilev in #788
  • Update docs with dev build and higher order custom derivatives example by @maximusron in #787
  • Add support for 32bit CI build by @Krishna-13-cyber in #782
  • Add tests supporting higher order custom derivatives by @maximusron in #786

New Contributors

Full Changelog: v1.3...v1.4

Clad version 1.3

11 Feb 18:29

Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 1.3. Clad is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Clad in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout, this document applies to the next release, not the current one.

What's New in Clad 1.3?

Some of the major new features and improvements to Clad are listed here. Generic improvements to Clad as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Clad now works with clang-7 to clang-17

Forward Mode

  • Make forward vector mode more robust:
    • Implement dedicated clad::matrix class
    • Add support for array arguments
    • Add support for call expressions
  • Add support for the 'non_differentiable' attribute

Reverse Mode

  • Fix computation of higher order functions
  • Introduce experimental To-Be-Recorded Analysis in Clad
  • Improve storing of LHS/RHS in multiplication/division operators
  • Add initial support for pointers
  • Improve the overall performance by reducing the tape storage

Misc

  • Add support for std::min, std::max and std::clamp functions
  • Fix strong symbol definitions in Differentiator.h

Fixed Bugs

49 86 197 275 314 429 439 441 465 606 620 650 655 660 664 667 669 672 676 681 687 689

Special Kudos

This release wouldn't have happened without the efforts of our contributors,
listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

A B (N)

Vaibhav Thakkar (43)
Vassil Vassilev (26)
Alexander Penev (8)
petro.zarytskyi (6)
dependabot[bot] (4)
Parth (2)
Rishabh Bali (1)
QuillPusher (1)
Krishna-13-cyber (1)
daemondzh (1)
Aaron Jomy (1)

What's Changed

Read more