\(\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}} }\)
2011¶
View page sourceRelease Notes for 2011¶
mm-dd¶
12-30¶
There was a bug when using abs with an
AD< AD<double> >
argument, whereby the correspondingAD<double>
operation sequence depended on the value of the argument to theabs
function.Change the specifications for the derivative of the abs function to be the sign function instead of a directional derivative.
Add the sign function to the
AD
< Base > list of available functions. In addition, add the sign function to the list of base type requirements .
12-28¶
The file time_test.hpp
was not being included by cppad/cppad.hpp
.
This has been fixed.
12-21¶
The types
SizeVector
,
NumberVector
,
ADNumber
, and
ADVector
,
were in the global namespace and this was causing warnings
about the shadowing of these declarations.
The
cppad_ipopt namespace
was created to avoid these problems.
The simplest way to make old cppad_ipopt_nlp code work with this
change is to use the command
using namespace cppad_ipopt;
12-20¶
Change
team_start
to team_create andteam_stop
to team_destroy .Change
NDEBUG
mentions to include link to NDEBUG .Improve memory_leak documentation.
11-29¶
THe time_test routine was still executing the test at least twice, even if that was not necessary for the specified minimum time. This has been fixed.
11-27¶
Move multi_thread.cpp
to thread_test.cpp
and fix its running instructions.
11-24¶
Create preprocessor section with pointers to all the preprocessor symbols that are in the CppAD API.
11-21¶
Separate –with-boostvector for boost_dir . This enables one to specify boost_dir for team_bthread.cpp with out using boost vectors.
11-20¶
Move
sum_i_inv.cpp
to harmonic.cpp .Include the date, time, CppAD version, and team_name in the thread_test.cpp output.
11-18¶
The thread_test.cpp program was truncating test_time to the nearest integer. This has been fixed.
The time_test routine has been made more efficient and now check for the case where only one execution of the test is necessary to achieve the desired test_time (it used to always run at least two).
The
sum_i_inv_time.cpp
and multi_newton.cpp routines were calling the test an extra time at the end to check for correctness. The results of the last test are now cached and used for the correctness test so that an extra call is not necessary (to make the tests run faster when only a few repetitions are necessary).
11-17¶
Create another speed testing routine time_test which is like speed_test but it returns the time instead of rate and as a
double
instead of asize_t
. The use it for the timing tests insum_i_inv_time.cpp
and multi_newton_time .Add test_time as a command line argument to the multi-threading
sum_i_inv
and multi_newton timing tests.
11-09¶
Change thread_team.hpp
to team_thread.hpp and do
the same for all other names that ended in _team
; e.g.,
team_openmp.cpp .
11-07¶
The users choice for test_vector
was not actually changing
the tests that the user ran. This have been fixed.
11-06¶
Make all the output generated by multi_newton.cpp valid matlab and octave input so it is easy to plot the results.
11-04¶
Use thread specific data to simplify team_openmp.cpp .
11-01¶
Make team_bthread.cpp more similar to team_pthread.cpp .
10-30¶
Reorganize and improve the multi_thread section and its subsections.
There was a bug in multi_newton.cpp that only showed up when the number of threads was greater than or equal 4. This has been fixed. In addition, CPPAD_MAX_NUM_THREADS was increased from 2 to 4 (to enable testing for this bug).
The accuracy expected in the
sum_i_inv.cpp
results were failing whenmega_sum
was large. This check has been modified to include a correction for mega_sum .
10-29¶
The following changes were merged in from branches/thread
:
Move
openmp
toexample/multi_thread/openmp
. and createexample/multi_thread/bthread
,multi_thread/pthread
with similar tests.Put multi-threading common code in
multi_thread
directory and threading system specific code inexample/multi_thread/
threading for threading equal toopenmp
,bthread
, andpthread
.Update the README file.
Remove the
bug/optimize.sh
file (no longer a bug).Make
arc_tan.cpp
utility that can be used by multiple multi-threading tests.Create team_thread.hpp specifications, move OpenMP management to team_openmp.cpp , Boost thread management to team_bthread.cpp , and pthread management to team_pthread.cpp .
All of the make files were modified so that the command
make test
would run the tests for the current directory.
Extend the multi-threading speed tests
sum_i_inv.cpp
and multi_newton.cpp so they run using Boost threads and pthreads (as well as OpenMP threads).
10-14¶
Fix some compiler warnings about shadowed variables that were
detected by g++
version 4.6.1 20110908
.
10-12¶
The MAC version of the
pthread
library does not include thepthread_barrier_wait
function; i.e., is not compliant with the IEEE Std 1003.1, 2004 Edition forpthread
. This caused thepthread_simple_ad.cpp
to fail to compile on the MAC. This has been fixed by not compiling thepthread
examples unlesspthread_barrier_wait
is present.The cppad_ipopt_nlp routine has been changed to optimize the functions \(r_k (u)\) such that
retape
( k ) is false.
09-06¶
Add the boost multi-threading examples a11c_bthread.cpp and
bthread_simple_ad.cpp
.Improve documentation for thread_num argument to
parallel_setup
.More simplification of
bthread_simple_ad.cpp
example.
09-05¶
Simply and fix some problems with pthread_simple_ad.cpp
,
including avoiding a Bug in Cygwin .
09-02¶
The OpenMP speed test program
openmp/run.cpp
was not setting the number of threads for the one thread case (so dynamic thread adjustment was used). This has been fixed.The thread_alloc.cpp example was missing from the Microsoft
example/example.vcproj
file and a attempt was made to link to missing OpenMP routines (this has been fixed). In addition, some Microsoft compiler warning have been fixed; see the examples and tests in the Windows install instructions.There was an oversight, and
CPPAD_MAX_NUM_THREAD
was being set to 2 when_OPENMP
was not defined. This has been fixed and CPPAD_MAX_NUM_THREADS has been documented and is now part of the CppAD API.The
pthread_simple_ad.cpp
test failed under cygwin. This was because the previous testopenmp_ad.cpp
was set up calls to OpenMP routines that were still in effect whenpthread/simple_ad
ran. This has been fixed by making num_threads == 1 a special case in parallel_setup .
09-01¶
Modify the CppAD trunk using the changes from svn revision 2060 to revision 2081 in the branch
https://projects.coin-or.org/svn/CppAD/branches/pthread
These changes are described below.
09-01: There was a bug in the atomic_one functions in the case where none of the elements of the argument to the function was a Variable . This has been fixed. In addition, old_tan.cpp generated an assert for this case and this has also been fixed (in addition to including an example for this case).
08-31: Move the
sum_i_inv_time.cpp
test fromopenmp/run.sh
toopenmp/run.cpp
.08-31: Change
--with-openmp
to OPENMP_FLAGS=openmp_flags configure command line argument.08-30: Create the
openmp/run.cpp
program and move theopenmp_multi_newton.cpp
test fromopenmp/run.sh
toopenmp/run.cpp
. This uses Configure information for building the tests.08-30: Document the
--with-openmp
configure command line argument.08-30: Move
openmp/multi_newton.hpp
toopenmp/newton_method.hpp
andopenmp/multi_newton.cpp
toopenmp/newton_example.cpp
.08-25: Replace omp_alloc by thread_alloc in multi_thread , the section on how to use CppAD in parallel.
08-25: Implement omp_alloc as links to corresponding thread_alloc sections.
08-25: Create the
pthread_simple_ad.cpp
example that does AD using the pthread library. In addition, fix some problems inopenmp_simple_ad.cpp
08-25: Move
openmp/example_a11c.cpp
to example/a11c_openmp.cpp .08-25: Move
openmp/parallel_ad.cpp
toopenmp_simple_ad.cpp
.08-23: Beginning steps in replacing omp_alloc by thread_alloc : Replace omp_alloc by thread_alloc in the utilities .
08-23: move omp_alloc to the deprecated section of the documentation.
08-23: Change all omp_alloc section names to begin with
omp_
, and change all thread_alloc section names to begin withnew_
.08-23: Convert CppAD_vector from using omp_alloc to using thread_alloc for memory allocation.
08-23: Extend the memory_leak routine to also check the thread_alloc allocator.
08-21: Create the OpenMP and pthread examples a11c_openmp.cpp , a11c_pthread.cpp , and
openmp_simple_ad.cpp
. These OpenMP examples were originally in theopenmp
directory, and have been moved, and modified to conform, to the normal example directory.
08-11¶
Modify the CppAD trunk using the changes from svn revision 2044 to revision 2056 in the branch
https://projects.coin-or.org/svn/CppAD/branches/base_require
These changes are described below.
08-10: Add the output stream optional argument s in
f .
Forward
(0, x , s )See zero order forward mode and PrintFor .
08-10: Improve omp_alloc.cpp example.
08-09: base_require : Add epsilon to the Base type requirements.
08-09: Extend
epsilon
to AD types.08-08: Improve the base_require documentation for standard math functions .
08-08: base_require : Add
abs_geq
to the requirements for a user defined Base type.08-08: Check that zero order forward mode results are approximately equal, instead of exactly equal, after an optimize operation. This fixes a bug in the optimize correctness check (The order of operations can be changed by
optimize
and hence the zero order forward mode results may not be exactly the same.)08-07: Improve the base_require documentation for EqualOpSeq , Identical Integer , and Ordered operations.
08-06: Add the CondExpRel paragraph to the base requirements documentation. This was missing and are required for CondExp to work with
AD
< Base > arguments and a non-standard Base type.08-04: base_require : Change the include file name to base_require.hpp .
08-04: Use base_float.hpp and base_double.hpp as additional examples for the CondExp Base requirements .
08-03¶
Change PrintFor condition from less than or equal zero
to not greater than zero;i.e., not positive.
This makes nan
print because it results in false for all comparisons.
08-02¶
Change PrintFor so it no longer aborts execution when there is no operation sequence being recording; see Start Recording .
Improve the print_for_cout.cpp example.
07-31¶
Add a conditional version of the PrintFor command
PrintFor
( text , y , z )
which only prints when z <= 0 .
This is useful for error reporting during forward mode; i.e.,
reporting when the argument to the log
function is not valid.
07-29¶
The routines set_max_num_threads and
get_max_num_threads
were created. User’s will need to replace calls to max_num_threads by calls toset_max_num_threads
.The functions omp_efficient was deprecated because it has not been shown to be useful.
07-28¶
Change omp_return_memory so that if omp_max_num_threads is one (the default), omp_alloc does not hold onto memory (keep it available for the corresponding thread).
Add files that were missing from the Microsoft Visual Studio
example
andtest_more
subdirectory project files.Fix some warnings generated by Microsoft Visual Studio 2010 build.
07-27¶
Make tan
and tanh
atomic_base
operations; see tan_forward and tan_reverse .
07-25¶
Finish the atomic_one example old_tan.cpp.
This is also a design and implementation of the routines necessary
to make tan
and tanh
CppAD atomic operations.
07-18¶
The reverse mode formulas for \(Z(t)\) need to involve the lower order Taylor coefficients for \(Y(t)\). This has been fixed in tan_reverse .
07-17¶
Fix bug in atomic_one functions. To be specific, the Taylor coefficients for \(y\), of order less than k , were not passed into the
atomic_one
forward callback function.Derive the theory for including the tangent and hyperbolic tangent as CppAD atomic operations tan_forward and tan_reverse ; see the wish list item
Tan and Tanh
.Implement and test forward mode calculation of derivative for the tangent and hyperbolic tangent functions; see the new atomic_one example old_tan.cpp.
07-14¶
The configure instructions for running the individual correctness and speed tests were out of date. This has been fixed; see example and tests .
Move
parallel_ad.cpp
fromexample
directory toopenmp
directory (and convert it from a function to a program).Simplify
example_a11c.cpp
by making it just a correctness test.Change
openmp/run.sh
so that it runs correctness tests with the compiler debugging flags.
07-13¶
static hash code data that was begin used by multiple threads when recording
AD
< Base > operations omp_in_parallel execution mode. This has been fixed.Make the sparse calculations safe for use during omp_in_parallel execution mode.
Add the
parallel_ad.cpp
example.Change
example_a11c.cpp
example so that is just a correctness (not speed) test.
07-11¶
Change the upper limit for omp_max_num_threads from 32 to 48.
Add parallel documentation for,
nan
, Rosen34 , and Runge45 .Fix CheckNumericType and CheckSimpleVector so they work properly when used in parallel mode.
The changes below were made on the
openmp/run.sh
branch:Change to
openmp/run.sh
maximum number of threads instead of specifying the entire set of values to be tested.Change settings for
newton_example
so thatn_gird
is a multiple of the maximum number of threads.Report dynamic number of thread results as a separate result in the summary output line.
Fix automatic removal of executables from
openmp
directory (was commented out).The documentation for
openmp/run.sh
was moved to themulti_thread
section.
07-10¶
Add link to Discrete AD Functions in multi_thread .
Make use of the track_new_del routines omp_in_parallel execution mode an error (it never worked properly); see TrackNewDel multi-threading .
Change memory_leak so that it checks for a leak in all threads. This is what
openmp_newton_example.cpp
andsum_i_inv_time.cpp
assumed was being done.
07-09¶
All the OpenMP parallel execution requirements have been grouped in the section multi_thread .
07-07¶
Add the routine parallel_ad to fix bug when using
AD
< Base > in parallel execution mode.
06-23¶
Fix a bug whereby the assert
Error detected by false result for
!omp_in_parallel
()at line
nin the file
prefix /include/cppad/omp_alloc.hpp
sometimes occurred.
The routine omp_max_thread was deprecated, use the routine omp_max_num_threads instead.
The deprecated routines have been grouped together in the deprecated section of the CppAD manual.
06-21¶
The
openmp/run.sh
routine was changed to use zero, instead ofautomatic
, for automatic choice ofopenmp/run.sh
number of repeats and maximum number of threads.The output of each of the OpenMP examples / speed tests (run by
openmp/run.sh
) was changed to be valid matlab / octave assignment statements.In the case where OpenMP is enabled during compilation, a summary for the different number of threads as added at the end of the
openmp/run.sh
output.
06-18¶
The tape_addr_type option was added to the Configure command line.
The function size_op_seq results uses
sizeof(CppAD_TAPE_ADDR_TYPE)
where it used to usesizeof(size_t)
.Remove
cppad/config.h
from CppAD distribution, (put the information incppad/configure.hpp
.) This removes the need to undefine symbols that were defined bycppad/config.h
and that did not begin withCPPAD_
.Change adolc library linkage so it works with version
ADOL-C-2.2.0
.
05-29¶
Fix bug (introduced on 05-22 ) whereby constructor might not be called (but required) when the base type is not plain old data.
05-28¶
Add the omp_efficient routine to the omp_alloc system.
Improve the
omp_alloc
tracing so it prints the same pointer as returned to the user (not an offset version of that pointer).
05-26¶
Fix Visual Studio project files that were broken during the change on 05-22.
In addition, in the file cppad/omp_alloc.hpp
,
suppress the following Microsoft Visual Studio warning
warning C4345: behavior change: an object of POD type constructed with
an initializer of the form () will be default-initialized
05-22¶
The old memory tracking routines track_new_del have been deprecated. Their use should be replaced using the omp_alloc a memory allocator which is designed to work well in a multi-threading OpenMP environment; see Purpose .
The replacement of
TrackNewDel
byomp_alloc
has been throughout the CppAD source code, including the examples that usedTrackNewDel
; namely, mul_level_adolc.cpp , mul_level_adolc_ode.cpp .The CppAD vector template class and the vectorBool class were modified to use the
omp_alloc
memory manager. This should improves its speed of memory allocation omp_in_parallel sections of a program.The speed_test argument size_vec call was by value, instead of by reference (as documented). This has been fixed and the call is now by reference.
The capacity function has been added to the CppAD vector class.
The simple vector Element Constructor and Destructor description has been changed to explicitly specify that the default constructor is used to initialize elements of the array.
The size_op_seq documentation has been improved to mention that the allocated memory may be larger.
05-11¶
Avoid ambiguity in the definition of the complex isnan function.
Errors during
make test
were not being detected. This has been fixed.
05-03¶
If
NDEBUG
is not defined, the hasnan function is used to make sure that the results of any Forward operation does not contain a nan (not a number). If so, an error message is generated and the program terminates. This error message and termination can be caught; see ErrorHandler .In the event that the cppad_ipopt_nlp objective function, the constraints, or their derivatives are infinite, an error message is generated and the program terminates (proved that
NDEBUG
is not defined and the default error handler has not been replaced).
04-29¶
The Microsoft Visual Studio 2003 project files for the Windows examples and tests no longer worked because the current version of CppAD uses local types in template instantiation. These project files were converted to Visual Studio 2008 where they do work (if you use a later version, Visual Studio should automatically convert them for you).
The old speed test directory was moved to
speed_cppad
before the new speed test organization was created on 2006-12-11 (revision 715 of the repository). The old speed tests have not been used for years and so have been deleted.
04-20¶
The openmp/run.sh
script what changed
to take an argument that specifies which tests is run
(it no longer runs all the tests).
Also improve the openmp test program output formatting.
04-19¶
The use_ad option was added to the
openmp_newton_example.cpp
test case.
03-19¶
The subversion write protected directory
bin/.svn
was mistakenly part of the
compressed tar file It has been removed.
03-11¶
The vector of sets argument
r
to the atomic_one
function rev_hes_sparse
must have size greater than or equal to n .
There was a check that its size was greater than or equal q .
This was incorrect and has been fixed.
03-05¶
Add the conjugate gradient example.
02-22¶
Add the atomic option to the speed test program and use old_mat_mul.hpp during the cppad_mat_mul.cpp speed test when the atomic option is specified.
02-19¶
There was a bug when omp_max_thread was set to one,
and NDEBUG
was not defined,
the thread corresponding to parameters was one, but the only valid thread
number was zero (only one thread)
and an CPPAD stopped with an assertion error.
This has been fixed.
02-17¶
There was a mistake in openmp/run.sh
where it attempted
to remove a non-existent file in the case where
openmp/run.sh
openmp_flag was not ""
.
This has been fixed.
02-15¶
A matrix multiply speed test has been added. So far, this has only implemented for the cppad and double cases. (For the time being this test is not available for the other speed comparison cases.)
02-09¶
A variable in atomic_one.hpp
was declare of type Base
when it should have been declared of type size_t
.
It caused the atomic_one feature to fail with some base types.
This has been fixed.
The old_mat_mul.hpp example has been improved by caching the \(x\) variable information and using it during reverse Hessian sparsity calculations.
Some of the atomic_one documentation was extended to include more explanation.
02-06¶
The use can now define complex atomic_base operations and store them in a CppAD ADFun object. This item has been remove from the wish list .
The documentation for RevSparseHes had a dimension error. This has been fixed.
A faster set operations item was added to the wish list.
This has since been satisfied by
cppad_sparse_list
choice during
the install process (since removed).
02-02¶
The documentation for ForSparseJac had some formatting errors. The errors have been fix and the documentation has been improved.
02-01¶
The subversion
install instructions were brought up to date.
They have since been replaced by just separate
subversion
instructions.
01-19¶
The directory where the pkgconfig file cppad.pc
is stored has been moved from
prefixdir / lib/pkgconfig/cppad.pc
to
prefixdir / share/pkgconfig/cppad.pc
.
01-16¶
The following have been fixed:
The install of the documentation failed when it was done from a directory other than the top source directory.
The GPL distribution had the output of the Configure command in it.
Since the change on 01-09, the file
omh/appendix/11.omh
has been required to build the documentation (and it has been missing from the distribution).Fadbad was generating warnings due to the
-Wshadow
flag with theg++
compiler. The Fadbad speed tests have a special flag with this warning removed from the cxx_flags .
01-09¶
There were some problems running make test
in the releases
https://www.coin-or.org/download/source/CppAD/cppad-20110101.0.
license .tgz
where license is gpl
or cpl
.
The version of automake used to build the corresponding
makefile.in
files did not defineabs_top_builddir
.The include file
cppad_ipopt_nlp.hpp
was always installed, even if ipopt_dir was not defined on theconfigure
command line.The speed test library
libspeed.a
was being installed (it is only intended for testing).
These problems are fixed in the trunk and these fixes will be copied to the corresponding stable and release versions; i.e.,
https://www.coin-or.org/download/source/CppAD/cppad-20110101.1.
license .tgz
will not have this problem.