forked from rjhogan/Adept-2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ChangeLog
295 lines (267 loc) · 12.7 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
version 2.1.3
- Added interp2d and interp3d interpolation functions
- Added option of nearest-neighbour interpolation
version 2.1.2 (3 Oct 2023)
- Further bug fixes to reduction of active arrays which did not
have addequate space allocated by check_space, including "product"
which requires an additional differential operation per element
- Fixed out-of-bounds access in test_thread_safe_arrays
- Slight change to reduce_dimension to avoid incorrect warning
about ExpressionSize array subscript of -1
- Fixed broken benchmark/autodiff_benchmark to work with ADOL-C
- Changed COMPILE_FLAGS argument order in test/Makefile in case
CPPFLAGS contains Timer.h or other conflicting header file
- Added benchmark/math_benchmark program
version 2.1.1 (10 April 2022)
- interp function can perform 1D interpolation of higher
dimensional Y arrays
- Bug fix in reduction of an "n" dimensional active array to an
"n-1" dimensional array: check_space had been forgotten
- Added Newton-Levenberg[-Marquardt] options to test_minimizer,
which use the exact Hessian of the Rosenbrock banana function
version 2.1 (5 February 2021)
- Removed README in favour of README.md
version 2.0.9 (28 January 2021)
- Fix bug in Array::alignment_offset causing occasional
crashes reduce and assign operations due to unaligned AVX access,
now tested in test_packet_operations
- Added Conjugate-Gradient and L-BFGS minimization methods, both
bounded and unbounded methods
- Disabled vectorization on 32-bit ARM NEON targets as there are
insufficient floating-point intrinsics
- Fixed interp(x,y,xi) function in case x and y have 0 or 1
elements
version 2.0.8 (22 August 2020)
- Added adept_optimize.h header file providing minimization
capability, initially with the constrained and unconstrained
Levenberg-Marquardt minimization algorithm
- Test program test_minimizer tests with the N-dimensional
Rosenbrock function
- The Stack member function "jacobian" can now operate on or
return Adept matrices, rather than solely on raw pointers which
had to point to data in column-major order
- Removed "using namespace internal" from several header files so
that adept namespace is clean
- Fixed C++98 compatibility
version 2.0.7 (23 June 2020)
- Added fast, vectorizable exponential function "fastexp", or can
use as adept::exp if the ADEPT_FAST_EXPONENTIAL preprocessor
variable is defined
- Moved all the vector intrinsic stuff to quick_e.h
- Added ARM-NEON support to quick_e.h
- Adept is now thread safe on Mac OS versions that support the
thread_local keyword
- Fixed bug that caused incorrect differentiation of
Active<double>/int
- Preprocessor option ADEPT_INIT_REAL_SNAN and
ADEPT_INIT_REAL_ZERO initialize real numbers (and complex numbers)
to signaling NaN or zero, useful for debugging
- Fixed bug that caused incorrect result of maxval and minval
applied to active arrays
- Fixed bug that caused incorrect differentiation of "product"
function
- Fixed bug that caused incorrect norm2 for passive vector large
enough to use vectorization
version 2.0.6 (20 February 2020)
- Fixed bug in hand-coded adjoint of Toon advection scheme
(benchmark/advection_schemes_AD.h), as well as other bugs that
would have prevented the Adjoint and hand-coded adjoints from
being correct compared to each other
- Fixed memory leak in Packet.h by ensuring memory is freed in the
case that neither _POSIX_VERSION nor _MSC_VER are defined
- Fixed bug in FixedArray.h that prevented active fixed arrays
from registering themselves with the stack when initialized using
an initializer list
- Fixed missing "template" directives in UnaryOperation.h that
prevented isfinite, isnan and isinf from working correctly on
arrays
- Added Array::resize_contigous functions
- minval and maxval now work correctly with negative and +/-Inf
arguments; previously minval gave incorrect results even for
negative arguments
- Added array_fortran.h to provide the ability to exchange arrays
between C++/Adept and Fortran, for those Fortran compilers that
support the 2018 standard
- Added support for AVX512 vectorization: operations on 16 floats
and 8 doubles at a time;
- Added test_packet_operations to check Intel vector intrinsics
correctly implemented
version 2.0.5 (6 February 2018)
- Use set_array_print_style(x) to set behaviour of <<Array;
available are x=PRINT_STYLE_[PLAIN|CSV|CURLY|MATLAB]
- Fix use of _mm_undefined_ps intrinsic: only use on GCC>=4.9.1
and Clang if appropriate built-in is present; can't guarantee its
presence with other compilers
- Fix writing of active scalar expressions to a stream
- Added missing fmin/fmax(Expr,Scalar)
version 2.0.4 (8 January 2018)
- Packet.h copes with undefined _mm_undefined_ps in GCC<4.9.1
- Fix Packet.h in case SSE2 not enabled
- ADEPT_FAST preprocessor variable enables
ADEPT_NO_DIMENSION_CHECKING, ADEPT_NO_ALIAS_CHECKING and
ADEPT_STACK_THREAD_UNSAFE
- Divide by scalar now only converts to multiply by (1.0/scalar)
if scalar is of floating-point type; this fixes indexing with
"end/2"
- Fix bug in Packet.h (found by valgrind) to ensure new[] followed
by delete[] and posix_memalign followed by free
- Increase initial stack size from 1000 to 1024^2
- Fixed two bugs in IndexedArray.h that broke indexing a matrix
with Matrix(int,intVector)
- Allocated memory in non-OpenMP jacobian_forward is now freed
version 2.0.3 (28 October 2017)
- Replaced template class "cast" with "expr_cast" to avoid clash
with Expression's non-template member function; this enables
compilation with Visual C++.
- Added adept::have_matrix_multiplication() and
adept::have_linear_algebra() to test for BLAS and LAPACK
(respectively) at run-time
version 2.0.2 (21 October 2017)
- Fixed standards-compliance problem with use of Expression in
Curiously Recurring Template Pattern, by removing any "static
const" members that referred to the derived class. This enabled
the same code to work with g++, clang++ and the Intel compiler icc.
version 2.0.1 (18 October 2017)
- Basic passive complex arrays work, tested with
test/test_complex_arrays
- Added ADEPT_NO_DIMENSION_CHECKING option
- Vectorized sqrt, unary-, unary+, max and min
- Removed the option to vectorize with Packet representing a
*pair* of SSE2/AVX packed vector; now a Packet can only represent
a single packed vector. This simplifies maintenance of Packet.h,
and the pair option offered no performance advantage anyway.
- Vectorized reduce operations sum, product etc.
- Many fixes to enable compilation with clang++
- Fixed FixedArray::operator[] for rank>1
version 2.0 (September 2017)
- Finalized version for release
- PDF documentation is no longer installed, so that Git users are
not obliged to have pdflatex
version 1.9.11 (30 September 2017)
- Fixed get_gradient member function of Array and FixedArray
- Added test_array_derivatives test program
- Fixed indexing of FixedArrays of rank>1
- Fixed IndexedArray applied to FixedArrays (before had reference
to temporary dimension object
- Test and benchmarking programs now work with single precision
- Stack functions accept Index passed by value rather than
reference, so that "static const int" passed from FixedArray does
not need to be explicitly instantiated
- Active::add_derivative_dependence and
append_derivative_dependence no longer only accept arguments of
type "Real"
- ADEPT_STORAGE_THREAD_SAFE option to protect Storage reference
counter in multi-threaded environment (C++11 only)
- Added Array::soft_link() as another means to get thread safety
- Added test program test_thread_safe_arrays
- Added adept_reference latex file to doc directory
- Added "dimensions" function for creating ExpressionSize objects
version 1.9.10 (25 September 2017)
- Added link syntax A >>= B
- Added assignment and initialization from initializer_lists for
Array and FixedArray classes
- Implemented Fortran-like "count" reduction function
- Bug fix sending active expression to a stream with "<<"
- Added "spread<dim>(array,n)" to match Fortran spread(array,dim,n)
- Added outer_product(x,y)
- Fixed adept_source.h for non-Unix systems
- Moved mathematical functions from global to adept namespace
- Fixed pausable recording and added test_adept_active_pausable
- Removed unsafe ADEPT_COPY_CONSTRUCTOR_ONLY_ON_RETURN_FROM_FUNCTION
- C++98 and C++11 correctly take cmath functions from :: and std::
respectively
- "make check" now runs test script test/run_tests.sh
- inv and solve now take general expression arguments
- Enabled indexed arrays to be assigned to an initializer list
- BLAS now optional (without it matrix multiplication causes
run-time exception)
- Added test_derivatives to test quality of derivatives for all
mathematical functions
- Enabled SpecialMatrix and IndexedArray to be assigned to an
active scalar expression
- Added fmax and fmin functions (even if C++11 not used)
- Added atan2 support
- C++11 on non-Mac platforms uses thread_local keyword instead of
C++98 compiler extensions
- Matrix multiplication on active special matrices implemented by
copying them to a dense Array<2,Real,true>. Very inefficient, but
it works.
- Matrix multiplication on inactive triangular and "square"
matrices now works by converting to them to a dense Array<2,Real,false>.
- Added alias detection in IndexedArray
- Alias detection in IndexedArray and SpecialMatrix can be
deactivated with ADEPT_NO_ALIAS_CHECKING
- Added "eval" function to evaluate an expression that might be
subject to aliasing
version 1.9.9 (August 2017)
- Put on GitHub as rjhogan/Adept-2
- Added Expression::next_value_contiguous for faster inner loops
in the case that all expressions have a contiguous and increasing
inner dimension
- Preliminary vectorization via Packet class and
Expression::next_packet
- Vectorized forward Jacobian calculation using packets
- Split Expression.h into also UnaryOperation.h and BinaryOperation.h
- Fixed bug in matmul.h that causes failure if matrix in
matrix-vector multiplication is strided in both dimensions
- Added move semantics if C++11 enabled
version 1.9.8 (April 2016):
- Completed FixedArray.h and tested for active arguments
- Added array_shortcuts for FixedArrays: (a)VectorX, (a)MatrixXX
- Added array_shortcuts for Arrays: (a)ArrayXD (for X = 3 to 7)
- interp permits general Expression arguments
version 1.9.7 (April 2016):
- Nearly completed FixedArray.h
version 1.9.6 (March 2016):
- Started FixedArray.h
version 1.9.5 (March 2016):
- Fixed add_derivative_dependence and append_derivative_dependence
when applied to elements of arrays
- Added ADEPT_BOUNDS_CHECKING capability, and fixed IndexedArray
to work with this
- Now call BLAS and LAPACK (Fortran) routines, rather than C-BLAS
and LAPACKE functions
- Added matrix multiplication benchmark program
- Added IndexedArray for dimensions up to 7
- Added Array::data() and Array::const_data() for direct access
- Added Array::subset(); slightly more concise than using "range"
version 1.9.4 (January 2016):
- Completed changes to documentation in doc directory
- Added control/inquiry of settings, e.g. set_max_blas_threads()
and configuration()
version 1.9.3 (December 2015):
- Added "max" and "min" as binary operators (note that "maxval"
and "minval" are reduction operators as in Fortran)
version 1.9.2 (December 2015):
- Added ActiveConstReference type for active constant references
version 1.9.1 (November 2015):
- New matmul.h/matmul.cpp - not yet complete
version 1.9.0 (November 2015):
- SUBSTANTIAL REWRITE TO INCORPORATE ARRAY FUNCTIONALITY
version 1.1 (June 2015):
- Added ./configure script using autotools
- Added support for additional mathematical functions: asinh,
acosh, atanh, expm1, log1p, cbrt, erf, erfc, exp2, log2
- Changed license from GNU General Public License to Apache
License, Version 2.0
- Jacobian calculation uses OpenMP parallelization
- Removed multiscatter example code
- New benchmarking program in benchmark/ that compares to other
automatic differentiation tools if available
- Fixed bug so that gaps in the gradient list now merge properly
- Provided capability to compile code without an external library,
to facilitate porting to Windows
- Added programs in test/ demonstrating checkpointing,
thread-safety and compiling without an external library
version 1.0 (September 2013):
- Very many internal changes and added features
- Detailed documentation in the doc/ directory
- Removed the LIFO requirement on the order with which aReal
objects ought to be created and destroyed
- For users of version 0.9, the main change to the interface is
that the Stack::start() member function is no longer supported;
rather you should call the Stack::new_recording() member function
*after* the independent variables have been initialized but
*before* any mathematical operations are performed using them
version 0.9:
- First public release