\(\newcommand{\W}[1]{ \; #1 \; }\) \(\newcommand{\R}[1]{ {\rm #1} }\) \(\newcommand{\B}[1]{ {\bf #1} }\) \(\newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} }\) \(\newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} }\) \(\newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} }\) \(\newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }\)
2012¶
View page sourceRelease Notes for 2012¶
mm-dd¶
12-30¶
Merge changes in
branches/ipopt_solve
totrunk
, delete that branch, and advance version number tocppad-20121230
.Remove
cppad/configure.hpp
from repository because it is built by the configuration process (even for MS Visual Studio, now that we are using cmake ).Add the
AD
< Base > input stream operator >> .
12-29¶
In branches/ipopt_solve
:
Complete implementation of sparse Jacobian and Hessian calculations and add options that allow to user to choose between forward and reverse sparse Jacobians.
The ipopt_solve routine seems to be faster and simpler than cppad_ipopt_nlp . More speed comparisons would be good to have.
All of the ADFun Drivers have added specifications for the zero order Taylor coefficients after the routine is called. For example, see Hessian Uses Forward .
12-28¶
In branches/ipopt_solve
:
Add the ipopt_solve_retape.cpp and ipopt_solve_ode_inverse.cpp examples.
Use
ipopt::solve
options argument (and not a file) for all the Ipopt options. As well as allowing for addingipopt::solve
special options; e.g., Retape .
12-27¶
In branches/ipopt_solve
:
Change documentation section names that begin with cppad_ipopt
to begin with ipopt_nlp
to distinguish them from CppAD::ipopt::solve .
12-26¶
In branches/ipopt_solve
:
Convert documentation most all documentation references from the deprecated configure instructions to the new cmake instructions.
Include the Introduction programs in the cmake_check built using cmake .
Deprecate cppad_ipopt_nlp and replace it by ipopt_solve which is easier to use. This is a first version of
ipopt_solve
and its speed and memory use needs to be improved.
12-23¶
Copy development trunk
to branches/ipopt_solve
.
12-22¶
Define a doxygen module (group) for each file that has doxygen documentation.
12-20¶
The install instructions were installing
cppad/CMakeLists.txt
andcppad/configure.hpp.in
in thecppad
include directory. This has been fixed so that only * .h
and * .hpp
files get installed in thecppad
include directory.Advance the version number to
cppad-20121220
.
12-19¶
The files <stdbool.h>
and <sys/time.h>
do not exist for all C compilers,
and this caused a problem when using the Windows compiler.
This has been fixed by defining the type bool inside the
compare_c/det_by_minor.c
source code.
12-17¶
There was a mistake in a check for a valid op code in the
file hash_code.hpp
.
This mistake could generate a C++ assertion with an unknown error source.
It has been fixed.
12-15¶
Advance version number from
20121120
to20121215
. Note that the CppAD version number no longer automatically advances with the date and is rather chosen to advance to the current date.The cmake installation was putting the
cppad.pc
pkgconfig file incppad_prefix
/ cmake_install_datadir /cppad.pc
This has been fixed and is now
cppad_prefix
/ cmake_install_datadir /pkgconfig/cppad.pc
The pkgconfig documentation has been improved.
The command for running the adolc examples and eigen examples was fixed (changed from
make check
tomake check_example
).
12-14¶
Fix the old configure so that it works with the new
cppad.pc
.Fix the old installation –with_Documentation option (it was attempting to copy from the wrong directory).
12-13¶
Include documentation for ipopt
Fix the
cppad.pc
pkgconfig file so that it includes the necessary libraries and include files when include_ipopt is specified; see pkgconfig .
11-28¶
Update the wish_list :
Remove Microsoft compiler warning item that has been fixed.
Remove faster sparse set operations item that was completed using
cppad_sparse_list
(not part of user API).Remove cmake items that have been completed.
Remove CondExp items related to using
AD< std::complex<double> >
types because it is better to usestd::complex< AD<double> >
.Remove thread_alloc memory chunk item that has been completed.
Remove VecAD item about slicing from floating point type to
int
(not important).Change an Ipopt item to a cppad_ipopt_nlp (which was removed because
cppad_ipopt_nlp
is now deprecated). Add newcppad_ipopt_sum
item to the wish list. (This has been removed because checkpointing can now be used for this purpose.)Add new
atomic_one
wish_list item (since removed).
11-21¶
Fix the Version number in link to the current download files.
Change the
subversion
download instructions to use theexport
instead ofcheckout
command. This avoids downloading the source code control files.
11-20¶
The
cmake
variablescmake_install_includedir
andcmake_install_libdir
were changed to cmake_install_includedirs and cmake_install_libdirs to signify the fact that they can now be a list of directories.Advance version number to
cppad-20121120
.
11-17¶
Finish documenting the new cmake configuration instructions and deprecate the old unix instructions.
Change the specifications for CPPAD_MAX_NUM_THREADS to allow for a value of one. This enables one to have more tapes during a program execution.
Include the C versus C++ speed comparison in the cmake build.
11-16¶
Fix a warning that occurred in Rosen34
when it was compiled with the preprocessor symbol NDEBUG
defined.
11-14¶
Advanced the CppAD version to cppad-20121114
.
Started documenting the cmake configuration procedure during installation. This included factoring out the download procedure as a separate section so that the same download instruction also apply to the unix install procedure.
Changed example/compare_change.cpp to just return true when
NDEBUG
is defined. This enabled all the tests in theexample
directory to be compiled withNDEBUG
is defined and to pass.In the case where
NDEBUG
is defined, removed detection ofnan
during forward mode fromtest_more/forward.cpp%
. This enables all the tests in thetest_more
directory to be compiled withNDEBUG
is defined and to pass.Started a wish list for CppAD’s use of cmake . The wish list items were completed and removed.
11-09¶
The team_pthread.cpp was failing to link on Ubuntu 12.04 because the libraries were not at the end of the link line. This has been fixed.
11-06¶
Remove some remaining references to the old licenses CPL-1.0 and GPL-2.0; see 10-24 .
Remove out of date Microsoft project files from the distribution. The build system is being converted to use cmake which builds these files automatically and thereby keeps them up to date. This feature is not yet documented, but one can inspect the file
bin/run_cmake.sh
to see how to usecmake
with CppAD.
11-04¶
Add missing return value to the example base_alloc
CondExpOp function.
This has been fixed and the comments for this example have been improved.
10-31¶
The CppAD profiling was not compiling
the speed/src/\*.cpp
files with the profiling flag.
This has been changes
(only for the profiling speed test).
10-30¶
The fadbad_dir directory install instructions
were changed.
To be specific, FADBAD++
was changed to include/FADBAD++
.
This makes it more like the other optional packages.
10-25¶
The test runge45_1.cpp was failing when using gcc-4.5.2.
This has been fixed by properly defining fabs
( x ) where
x is a double (without the std
in front).
10-24¶
Change the CppAD licenses from CPL-1.0 and GPL-2.0 to EPL-1.0 and GPL-3.0.
10-12¶
Change all the multiple levels of AD examples to start with mul_level . To be specific, move
taylor_ode.cpp
to mul_level_ode.cpp andtaylor_ode_adolc.cpp
to mul_level_adolc_ode.cpp .Add taylor_ode.cpp as a example of Taylor’s method for solving ODEs, (mul_level_ode.cpp is an application of this method to multi-level AD.)
10-04¶
Change speed_main so that it outputs small rates (less than 1000) with two decimal points of precision (instead of as integers). In addition, flush result for each size when it finishes to give user more feedback about how things are progressing.
Add the optional test_size argument to the
time_test
routine.
10-03¶
Change the hold_memory
speed to option to just
memory .
In addition, in the speed test output, include all of the options
that are present in the output variable name;
see Speed Results .
10-02¶
Fix another problem with Debian’s /bin/sh
shell executing
example/multi_thread/test.sh
; see 03-17
09-24¶
Improve documentation for the atomic_one rev_hes_sparse argument v . In addition, add sparsity calculations to the old_reciprocal.cpp example.
09-11¶
Add user_simple.cpp
,
a simpler atomic_one example.
08-05¶
A new type was added for the internal representation of Vector of Sets sparsity patterns; see the configure
--with-sparse_option
(since removed).A new speed test, compare_c , compares the speed of the same source code compiled with C and C++.
07-30¶
The clear function was added to
CppAD::vector
.Warning !!: The
CppAD::vector
resize specifications were changed so that x .resize
(0) no longer frees the corresponding memory (use x .clear
() instead).Fix a bug in error checking during optimize procedure had the following
valgrind
symptom during theoptimize.cpp
example:==6344== Conditional jump or move depends on uninitialised value(s)
Fix mistake in old_tan.cpp where
w[2] = 0
was missing before the calldw = F.Reverse(1, w);
07-08¶
Change all the example section names to be same as corresponding file names; e.g. change
vectorBool.cpp
to vector_bool.cpp for the exampleexample/utility/vector_bool.cpp
.
07-07¶
Add the CPPAD_TAPE_ID_TYPE
argument to the
Configure command line.
07-05¶
Deprecate CPPAD_TEST_VECTOR
and use
CPPAD_TESTVECTOR in its place.
This fixes a problem introduced by changes on 07-03 whereby code that
used CPPAD_TEST_VECTOR
would no longer work.
07-04¶
Replace the requirement that the SimpleVector size function return a
size_t
value to the requirement that it can be converted to asize_t
value.The –with-eigenvector option was added to the
configure
command line.
07-03¶
Fix bug in atomic_one functions identification of variables that caused old_tan.cpp to fail with error message
Error detected by false result for
y_taddr > 0
at line 262 in the file cppad/local/dependent.hpp
07-02¶
Add eigen_plugin.hpp
so that
an Eigen vector can be used as a
SimpleVector .
This has since been removed; see
2017-05-11 .
07-01¶
Change cppad_eigen.hpp to match new specifications and example in eigen help files on Using custom scalar types .
Fix bug whereby a newly constructed VecAD object was a Variable (instead of a parameter) directly after construction (when no previous ADFun object had been created).
Change a
ok != a == 0.
took &= a == 0.
in the example ad_ctor.cpp .Add the eigen_array.cpp example.
06-17¶
Move epsilon to numeric_limits and add the functions
min
andmax
in CppAD::numeric_limits<Type
> .Convert use of the deprecated epsilon in examples to use of
numeric_limits
epsilon .Complete cppad_eigen.hpp interface to
lowest
andhighest
functions for all non-complex AD types.
06-16¶
Add the example eigen_det.cpp that uses the Eigen linear algebra package.
06-15¶
Include the base_adolc.hpp as
<cppad/example/base_adolc.hpp>
under the
prefix_dir directory.
06-12¶
Increase the size and of the sparse Jacobian speed tests .
06-10¶
Add the hold_memory option to the speed test main program. This was changed to just
memory
; see 10-03 .In cppad_sparse_jacobian.cpp , change
USE_BOOL_SPARSITY
from true to false. In addition, change the number of non-zeros per row from about approximately three to approximately ten.
06-09¶
Change adolc_sparse_jacobian.cpp to use the sparse adolc Jacobian (instead of the full Jacobian) driver. This was also done for adolc_sparse_hessian.cpp , but there is a problem with the test that is being investigated.
06-08¶
Implement the matrix multiply speed test link_mat_mul for all packages (there is a problem with the fadbad_mat_mul.cpp implementation and it is being looked into).
06-07¶
Make all the speed tests implementations (for the specific packages) uniform by having a Specification and Implementation heading and similar indexing. For example, see adolc_det_minor.cpp , cppad_det_minor.cpp , double_det_minor.cpp , fadbad_det_minor.cpp , and sacado_det_minor.cpp .
06-05¶
Add the sacado_ode.cpp speed test.
06-04¶
The specifications for Runge45 where changes so that it uses the
fabs
function instead of the<
operation. This enabled the a more precise statement about its Operation Sequence .The
fabs
function as added to the CppAD standard math library (see abs ) and the base type requirements . This enables one to write code that works withAD<double>
as well asdouble
without having to defineabs
fordouble
arguments (and similarly forfloat
).Add the adolc_ode.cpp and fadbad_ode.cpp speed tests (and edit the cppad_ode.cpp test).
06-03¶
The
CppAD::vector
class was extended to allow assignment with the target of size zero and the source of non-zero size; see Check Size .A memory leak and a bug in
cppad_mat_mul.cpp
were fixed (the bug was related to the change toCppAD::vector
above).
06-02¶
Remove the deprecated symbol
CppADvector
from the det_by_lu speed test source code det_by_lu.hpp .Include memory_leak in the list of deprecated features.
Change the ode_evaluate speed test utility so that its operation sequence does not depend on the repetition; see p == 0 in its documentation.
Use same argument for taping and derivative evaluation when
retape
speed test option is true.Implement the retape ==
false
option in cppad_ode.cpp .Have cppad_det_lu.cpp , cppad_det_minor.cpp , and cppad_poly.cpp , return false when one of the specified options is not supported. Do the same for package _ test .
cpp
for package equal toadolc
,fadbad
, andsacado
and for test equal todet_lu
,det_minor
,poly
.
06-01¶
Change
cppad_sparse_hessian.cpp and
cppad_sparse_jacobian.cpp
to use
the row , col interface to sparse_hessian .
In addition, implement the speed test
retape
speed test option for these tests.
05-31¶
Add the cppad_print_optimize
routine to so that the corresponding
code does not need to be reproduced for all the
speed_cppad tests.
In addition, during CppAD speed tests,
print out the optimization results for each test size.
05-30¶
Change specifications for
link_sparse_hessian so that the row and column indices are
inputs (instead of being chosen randomly by the test for each repetition).
This enables use of the
retape
speed test option
during sparse Hessian speed tests.
05-29¶
Add index_sort to the general purpose template utilities so that it can be used by the implementations of link_sparse_jacobian and link_sparse_hessian .
05-27¶
Split the sparse Jacobian and Hessian test function the separate function sparse_jac_fun and sparse_hes_fun (do not use sparse Hessian for both). In addition, change row and column indices from i and j to row and col .
05-24¶
Merged in changes from branches/sparse
:
A new interface was added to sparse_jacobian and sparse_hessian . This interface returns a sparse representation of the corresponding matrices using row and column index vectors.
The examples sparse_jacobian.cpp and sparse_hessian.cpp were improved and extended to include the new interface.
The definition of an AD Function was improved to include definition of the corresponding n and m .
04-19¶
The boost_dir configure command line value has been changed to be the corresponding prefix during the installation of boost. To be specific, it used to be that boost_dir / boost was the boost include directory, now boost_dir / include is the boost include directory. This make it the same as the other directory arguments on the configure command line. In addition, it fixes some bugs in the detection of the boost multi-threading library.
04-18¶
Add documentation and testing for not using free_all and atomic_one clear while in parallel mode.
04-17¶
Fix bug when using atomic_one functions with multi_threading .
04-10¶
Add control of the max_num_threads argument to the unix Configure command.
04-06¶
A change was made to the way that the tapes were managed to reduce false sharing during multi-threading . Because of this change, it is now suggest that the user call parallel_ad after the multi-threading section of the program.
The routine ta_free_all was created to make it easier to manage memory and the routine memory_leak was deprecated.
Add the
-lteuchos
flag to the link line for the speed_sacado tests. (This was not necessary fortrilinos-10.8.3
but is necessary fortrilinos-10.10.1
)
04-05¶
The restriction was added that parallel_ad cannot be called while a tape is being recorded. This was necessary inorder to initialize some new statics in the tape.
04-01¶
Fixed a race condition when using CppAD with
multi-threading .
This has been fixed and the error message below no longer occurs.
Suppose that you ran the CppAD
Configure command in the work
directory.
If you then edited the file work/multi_thread/makefile
and changed
# AM_CXXFLAGS = -g $(CXX_FLAGS)
AM_CXXFLAGS = -DNDEBUG -O2 $(CXX_FLAGS)
to:
AM_CXXFLAGS = -g $(CXX_FLAGS)
# AM_CXXFLAGS = -DNDEBUG -O2 $(CXX_FLAGS)
and then executed the commands
make clean
make pthread_test
valgrind --tool=helgrind ./pthread_test get_started
The following error message would result:
snip ...
Possible data race during write of size 4 at 0x8077460 by thread
#1at 0x804FE23: CppAD::AD<double>::tape_new
() ( tape_link.hpp:221
)snip ...
03-27¶
Reduce the amount of memory allocation and copying of information during
a Dependent operation or an ADFun
Sequence Constructor .
03-26¶
Calling taylor_capacity
, with to with capacity equal to zero,
was not
Freeing Memory .
This has been fixed.
03-23¶
Improve, the multi-threading examples openmp_get_started.cpp , bthread_get_started.cpp , and pthread_get_started.cpp . This includes separating generic code that can be used for all applications from problem specific code.
Add initialization of statics in CheckSimpleVector during
parallel_ad
call. These statics are required to use CppAD::vector .Add a debugging check to make sure CheckSimpleVector is initialized in sequential mode.
03-21¶
Fix an incorrect error check in thread_alloc
that did not allow ta_return_memory
to return memory in sequential execution mode that was allocated by a
different thread during parallel execution.
03-17¶
Debian recently converted the default shell corresponding to
/bin/sh
to dash
(which caused example/multi_thread/test.sh
to fail).
This has been fixed.
In general, Debian’s policy is that bin/sh
will be a
Posix Shell.
03-11¶
There was a bug in thread_alloc where extra memory was held onto even if hold_memory was never called and only one thread was used by the program. This caused
valgrind --leak-check
=full --show-reachable
=yes
to generate an error message.
If multiple threads are used,
one should free this
Extra Memory
for threads other than thread zero.
If hold_memory
is used,
one should call free_available for all threads.
03-03¶
Add the examples openmp_get_started.cpp , bthread_get_started.cpp and pthread_get_started.cpp .
Fix bug in finding boost multi-threading library (due to fact that boost_dir is not the prefix during the boost installation).
03-02¶
Change the name
get_started.cpp
to team_example.cppThe multi-threading
team_example.cpp
example was changed to use \(f(x) = \sqrt{ x^2 }\) instead of the function \({\rm atan2} [ \sin(x) , \cos (x) ]\) (both functions should behave like the identity function \(f(x) = x\)). This enabled the removal ofexample/multi_thread/arc_tan.cpp
.In team_example.cpp check that all of the threads pass their individual test; i.e.
work_all_
[ thread_num ]. ok is true for all thread_num .
02-11¶
The requirements in base_member were missing from the base_require documentation. In addition, the base_require.cpp example has been added.
The specifications for memory_leak where changes so that
calling routine specifies the amount of static memory to add.
In addition,
it is now possible to call
memory_leak
when num_threads
is greater than one
(still can’t be in parallel mode).
02-10¶
Add the missing Base class requirements in the entire base_member section and under the Output Operator in the base_require section.
Add the base_alloc.hpp example.
02-09¶
Add the set_static to memory_leak . This is necessary for testing base types that allocate memory for each element.
Fix memory allocation bug in
cppad/local/pod_vector.hpp
when each element of the Base type allocated memory.
01-30¶
Make another attempt to fix linking with boost threads where the wrong version of the library is in the system include directory; i.e., to have boost_dir override the default library.
01-27¶
There were some problems with configure’s automatic detection of the boost multi-threading library. These have been fixed.
01-24¶
It used to be that thread_alloc did not hold onto memory when num_threads was one in the previous call to parallel_setup . Holding onto memory is now controlled by the separate routine hold_memory . This give the user more control over the memory allocator and the ability to obtain a speed up even when there is only one thread. To convert old code to the new interface, after each call to
thread_alloc::parallel_setup
( num_threads , in_parallel , thread_num );
put the following call
thread_alloc::hold_memory
( num_threads > 1);
01-23¶
Change variable notation and use optimize in mul_level.cpp .
01-20¶
Add the example change_param.cpp which shows how to compute derivatives of functions that have parameters that change, but derivatives are not computed with respect to these parameters.
The documentation for machine epsilon has been improved. (The fact that it can be used for Base types was missing.)
01-19¶
In cases where
test.sh
is trivial, put its operations in corresponding makefile.Fix problem compiling
cppad/speed/sparse_evaluate.hpp
under gcc on Fedora 17.Run
example/multi_thread/test.sh
from source directory (no need to copy to build directory).
01-16¶
The test program example/multi_thread/test.sh
failed if the
openmp_flags not present in the
configure
command.
This has been fixed.
In addition, this test.sh
has been made faster by cycling through
the available threading systems instead of doing every system for every
test.
01-15¶
Fix make test
so it works when
Configure is run in the distribution directory
cppad-
yyyymmdd
(not just when it is run in a different directory).
01-12¶
The -lpthread
library was missing from the
multi_thread test program linker command.
This has been fixed.
01-07¶
A duplicated code block beginning with
if( fabs( fcur ) <= epsilon_ )
was removed from the routine
multi_newton_worker
.The distance between solutions that are joined to one solution has been corrected from \((b - a) / (2 n )\) to \((b - a) / n\); see xout . The correction was in the file multi_newton.cpp where
sub_length_ / 2
was change tosub_length_
.
01-02¶
The thread_alloc memory allocator was changed to avoid certain false sharing situations (cases where two different thread were changing and using memory that is on the same page of cache). On one tests machine, the execution time for the 32 thread case for the test
./openmp_test multi_newton 1 32 1000 4800 10 true
improved from 0.0302 seconds to 0.0135 seconds.
There was a problem with the correctness test section of the multi_newton_time test. The convergence criteria, and correctness criteria, needed to be scaled by the largest argument values. This was a problem with over a hundred zeros were included in the test (and the largest argument value was \(100 \pi\) or more).
There was a problem with the way that multi_newton_takedown joined two solutions into one. It is possible that one of the solutions that needs to be joined is on the boundary and very close to a solution in the next (or previous interval) that is not on the boundary. In this case, the one with the smaller function value is chosen.
for the previous