Skip to content

Releases: vgvassilev/clad

Clad version 0.8

28 May 15:52
Compare
Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 0.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 0.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 now works with clang-5.0 to clang-12

Forward Mode & Reverse Mode

  • Implement #pragma clad ON/OFF/DEFAULT to control regions where clad is active
  • Support member functions with qualifiers in differentiation calls
  • Add getCode() interface for interactive use
  • Add support for using casts, * and & operators. For example:
    clad::differentiate(*&ptr_to_ptr, "...");

Misc

  • Add support for clang-11.1.0
  • Add support for clang-12

Fixed Bugs

  • Fixed several crashes in reverse mode.

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)

  • Vassil Vassilev (14)
  • Baidyanath Kundu (10)
  • Garima Singh (7)
  • Alexander Penev (5)
  • Pratyush Das (3)
  • Parth Arora (2)
  • Ioana Ifrim (2)
  • Oksana Shadura (1)
  • Alex Efremov (1)

Clad version 0.7

20 Sep 06:11
Compare
Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 0.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 0.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-5.0 to clang-10

Forward Mode & Reverse Mode

  • Implement hessian matrices via the clad::jacobian interface.

Fixed Bugs

  • Fixed the discovery of llvm in special builds with clang and libcxx.

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)

  • Roman Shakhov (3)
  • Philippe Canal (2)
  • Alexander Penev (2)
  • Vassil Vassilev (1)

Clad version 0.6

02 Apr 17:25
Compare
Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 0.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 0.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-5.0, clang-6.0, clang-7.0, clang-8.0 and clang-9.0

Forward Mode & Reverse Mode

  • Implement hessian matrices via the clad::hessian interface.

Reverse Mode

  • Reduce the quadratic cloning complexity to linear.
  • Support variable reassignments pontentially depending on control flow.
  • Support operators +=, -=, *=, /=, ,, ++, --.
  • Allow assignments to array subscripts.
  • Support nested assignments in expressions a = b * ((c ? d : e) = f = g);
  • Enable differentiation of for-loops

Fixed Bugs

Issue 138

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)

  • Alexander Penev (19)
  • Vassil Vassilev (15)
  • Aleksandr Efremov (11)
  • Shakhov Roman (2)
  • Marco Foco (2)
  • Jack Qiu (1)

Clad version 0.5

07 Apr 14:10
Compare
Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 0.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 0.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

  • clang-5.0

Forward & Reverse Mode

  • Extend the way to specify a dependent variables. Consider function, double f(double x, double y, double z) {...}, clad::differentiate(f, "z") is equivalent to clad::differentiate(f, 2). clad::gradient(f, "x, y") differentiates with respect to x and y but not z. The gradient results are stored in a _result parameter in the same order as x and y were specified. Namely, the result of x is stored in _result[0] and the result of y in _result[1]. If we invert the arguments specified in the string to clad::gradient(f, "y, x") the results will be stored inversely.
  • Enable recursive differentiation.
  • Support single- and multi-dimensional arrays -- works for arrays with constant size like double A[] = {1, 2, 3};, double A[3]; or double A[1][2][3][4];

Reverse Mode

  • Support variable reassignments. For example,
double f(double x, double y) {
  double a = x * x;
  double b = y * y;
  double c = a + b;
  return c;
}

Misc

  • Add coverity static analyzer to the pull request builds.
  • Fix found by coverity issues.
  • Improved README.

Fixed Bugs

Issue 77
Issue 105

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):

  • Aleksandr Efremov(7)
  • Vassil Vassilev (6)
  • Oksana Shadura (2)

Clad version 0.4

05 Nov 11:06
Compare
Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 0.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 0.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

  • clang-5.0

Forward Mode

  • Support x += y, x -= y, x *= y, x /= y, x++, x--, ++x, --x.
  • Reduce emission of unused expressions -- in a few (trivial) cases we know if the expression is unused and clang will produce a warning. We use the same heuristics to detect such cases and produce less code.

Reverse Mode

  • Improve integration with CERN's data analysis framework ROOT.

Misc

  • Generate the derivatives in the correct namespace.
  • Improve error handling in the cases we failed to produce a derivative.
  • Reduce amount of clang libraries we link against.
  • Exclude code which clad sees but knows has no derivatives.
  • Add a special #pragma clad ON/OFF/DEFAULT to annotate regions which contain derivatives.

Fixed Bugs

Issue 97

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)

Vassil Vassilev (7)
Aleksandr Efremov (4)

Clad version 0.3

28 Sep 14:21
Compare
Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 0.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 0.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

  • clang-5.0

Misc

  • Improvements in both Forward and Reverse mode:

    • Better correctness of C++ constructs -- handle scopes properly; allow proper
      variable shadowing; and preserve namespaces.
  • Forward Mode:

    • Efficient evaluation in forward mode -- for given:
    double t = std::sin(x) * std::cos(x);

    is converted into:

    double _t0 = std::sin(x);
    double _t1 = std::cos(x);
    double _d_t = sin_darg0(x) * (_d_x) * _t1 + _t0 * cos_darg0(x) * (_d_x);
    double t = _t0 * _t1;

    instead of

    double _d_t = sin_darg0(x) * (_d_x) * cos(x) + sin(x) * cos_darg0(x) * (_d_x);
    double t = sin(x) * cos(x);

    to avoid re-evaluation.

    • Reduced cloning complexity -- the recursive cloning of complexity O(n^2) is
      replaced by cloning the whole tree at once yielding O(2n).

    • Handle more C++ constructs -- variable reassignments and for loops.

Fixed Bugs

Issue 47
Issue 92

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)

Aleksandr Efremov (6)
Vassil Vassilev (2)

Clad version 0.2

08 Aug 15:14
Compare
Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 0.2. Clad is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Cla 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 0.2?

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.

Misc

  • Support Windows -- clad can compile on Windows.
  • Improve build infrastructure.

Fixed Bugs

Issue 78 Issue 74

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)

Vassil Vassilev (7)

Clad version 0.1

02 Aug 21:20
Compare
Choose a tag to compare

Introduction

This document contains the release notes for the automatic differentiation plugin for clang Clad, release 0.1. Clad is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Cla 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 0.1?

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

  • Upgrade to clang 5.0.

Misc

  • Implement forward automatic differentiation mode to compute derivatives of arbitrary C/C++ functions.

Experimental Features

  • Implement reverse automatic differentiation mode to compute gradients of arbitrary C/C++ functions.

Fixed Bugs

Issue 7 Issue 8 Issue 9 Issue 13 Issue 14 Issue 16 Issue 17 Issue 18 Issue 19 Issue 20 Issue 21
Issue 23 Issue 24 Issue 25 Issue 26 Issue 27 Issue 29 Issue 40 Issue 61

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)

Vassil Vassilev (214)
Martin Vassilev (108)
Alexander Penev (25)
Violeta Ilieva (19)
Aleksandr Efremov (10)
Oksana Shadura (2)