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
- Differentiate for loop condition expression by @rohanjulka19 in #818
- Fix type casting of ValueAndPushForward types by @vaithak in #986
- Move the TBR analysis in DiffRequest and provide an interface to query it. by @vgvassilev in #971
- Remove redundant function from VisitorBase by @vaithak in #991
- [ci] llvm18.1.8 is broken, turn off the ci for it. by @vgvassilev in #990
- Revert "[ci] llvm18.1.8 is broken, turn off the ci for it." by @MihailMihov in #994
- Directly set the adjoint of the LHS to 0 in assignments by @PetroZarytskyi in #997
- Prevent Clad from trying to create a void zero literal by @gojakuch in #989
- Add support for
[[clad::non_differentiable]]
in reverse mode by @MihailMihov in #916 - Use a reference to store the LHS of assignments by @PetroZarytskyi in #981
- Add basic Kokkos support for the original tests of #783 by @gojakuch in #977
- Add support for
Kokkos::resize
in the forward mode by @gojakuch in #999 - Don't assume output elements are used in the right order in jacobians by @PetroZarytskyi in #1003
- Demote m_ArgIndex to a local variable. by @vgvassilev in #1011
- Remove unused data member. by @vgvassilev in #1010
- Limit the scope of m_DerivativeOrder and m_IndependentVarIndex. by @vgvassilev in #1012
- Adding support for range-based for loop in forward mode by @ovdiiuv in #959
- Add propagators for __builtin_pow. by @vgvassilev in #1006
- Fix cloning
MemberCallExpr
for older Clang versions by @gojakuch in #1015 - Add support for
std::array
in the fwd mode by @gojakuch in #992 - Use initialization instead of assignment when possible in the reverse mode by @PetroZarytskyi in #1013
- Adding support for range-based for loops in the reverse mode by @ovdiiuv in #980
- Return const ref instead of a copy. by @vgvassilev in #1027
- Support multiple indices in clad::gradient calls by @PetroZarytskyi in #1029
- Support bitwise, shift, comparison, and remainder operators in fwd mode by @PetroZarytskyi in #1020
- Add location information and improve clarity of diagnostics. by @vgvassilev in #1031
Full Changelog: v1.6...v1.7