Clad version 1.3
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
andstd::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
- Check results of CladArray tests by @vaithak in #600
- Fix git-clang-format run when PR not on top of master by @vaithak in #599
- Bump certifi from 2023.5.7 to 2023.7.22 by @dependabot in #603
- Fix LLVM assertion errors for vector mode by @vaithak in #607
- Fixes in github actions for clang-tidy and clang-format by @vaithak in #611
- Add matrix class in clad by @vaithak in #609
- Update readthedocs configuration by @Krishna-13-cyber in #610
- [clang-tidy] Add the tape-push branch in ci build requests by @vgvassilev in #612
- Add support for array arguments in vector mode by @vaithak in #614
- operator overload forward mode by @PhrygianGates in #605
- Fix llvm versions on macos by @alexander-penev in #620
- Fix benchmark comparison in ci by @vaithak in #621
- Fix for benchmark on master by @vaithak in #622
- Rev ref returns by @PhrygianGates in #601
- Add benchmark for comparing vector mode with existing methods by @vaithak in #623
- Fix call expr to functor inside a function by @vaithak in #626
- Add LLVM/Clang 17 support by @alexander-penev in #629
- Fix DifferentiateVarDecl for constructors in reverse mode by @vaithak in #630
- Initial support for expression templates in array and array_ref class by @vaithak in #628
- Add fix for const parameters by @vaithak in #632
- Bump urllib3 from 2.0.3 to 2.0.6 by @dependabot in #633
- Add benchmark for expression templates by @vaithak in #634
- Fix tape push expr for clad array in reverse mode by @vaithak in #640
- Operator overload in reverse mode by @PhrygianGates in #619
- Bump urllib3 from 2.0.6 to 2.0.7 by @dependabot in #643
- Set derivative to 0 for fxn calls with literal arguments by @vaithak in #644
- Fix gradient computation of higher order functions by @vaithak in #645
- Add support for std::min, std::max and std::clamp functions by @vaithak in #647
- Silence magic number warnings in clang-tidy by @vaithak in #649
- Introduce type cloning. by @PetroZarytskyi in #651
- Floating Point Error Estimation RST added by @QuillPusher in #648
- Add check for 'm_' prefix in member vars by @vaithak in #656
- Relax prefix constraint for public members by @vaithak in #661
- Try to fix llvm@14 and llvm@15 install from brew on macOS by @alexander-penev in #660
- Add Build LLVM/Clang from source and cache result when matrix.debug_build == true by @alexander-penev in #662
- Add TBR analysis to the reverse mode in Clad. by @PetroZarytskyi in #655
- Add support for call expressions in vector forward mode AD by @vaithak in #638
- Add more benchmarks for vector mode and unify all the enzyme executions by @vaithak in #670
- Enable enzyme benchmarks only if enzyme is enabled by @vgvassilev in #666
- Add test build of documentation in CI by @alexander-penev in #663
- Fix assertions seen in clang13 due to type mismatches. by @vgvassilev in #664
- Move if-stmt invariant code outside, fix a compiler warning. NFC by @vgvassilev in #672
- [cmake] Propagate the LLVM_VERSION cmake option to the way we find clang by @vgvassilev in #673
- Update our version of enzyme from 0.0.36 to 0.0.95. by @vgvassilev in #674
- [cmake] Rename Clad cmake variables to start with the CLAD prefix by @vgvassilev in #676
- Properly discover the target triple. by @vgvassilev in #677
- Make const loop variables global and drop const. by @PetroZarytskyi in #680
- Add LLVM17 support. by @vgvassilev in #675
- Simplify derivative statements in VisitBinaryOperator by @PetroZarytskyi in #690
- Add initial support for pointers in reverse mode by @vaithak in #686
- Add old, still supported versions in CI matrix by @alexander-penev in #692
- [Docs] Clad Tutorial by @Ris-Bali in #657
- Fix strong symbol definitions in Differentiator.h. Add unittests. by @vgvassilev in #694
- [cmake] Rename AddCladBenchmark as it has generic functions now. by @vgvassilev in #698
- [cmake] Add the CLAD prefix to the CODE_COVERAGE option. by @vgvassilev in #697
- [cmake] Use the compiler clad is built for if compiling benchmarks and tests by @vgvassilev in #702
- Remove the unused last know good release files. by @vgvassilev in #699
- Add test for increment operator in return statement by @vaithak in #707
- Bump jinja2 from 3.1.2 to 3.1.3 by @dependabot in #708
- Fix support for non-type template params by @vaithak in #709
- Add basic test infrastructure for Kokkos. by @vgvassilev in #705
- Moving DerivaitiveBuilder methods from ForwardModeVisitor file by @vaithak in #713
- Fix seg fault for catch(...) by @vaithak in #718
- Improve test for derivatives of Struct Method Calls by @vaithak in #719
- Reorder the statement to subtract the old derivative value in assig op by @vaithak in #733
- Update developer build process by @maximusron in #743
- Fix ambiguity in indexing for array_ref by @vaithak in #747
- Make built-in type variable declarations global by @PetroZarytskyi in #738
New Contributors
- @Krishna-13-cyber made their first contribution in #610
- @QuillPusher made their first contribution in #648
- @maximusron made their first contribution in #743
Full Changelog: v1.2...v1.3