Adjoint Greeks

classic Classic list List threaded Threaded
44 messages Options
123
Reply | Threaded
Open this post in threaded view
|

Adjoint Greeks

Peter Caspers-4
Hello all,

happy new year.

I revisited Ferdinando's comments on adjoint greeks during our
December workshop and started to play around with that idea.

The approach I am trying to follow is to adapt the ql library code so
that automatic differentiation _tools_ can be used with it in a
transparent way. This is opposed to writing special adjoint engines by
_hand_ like e.g. advocated in Capriotti, Giles, Algorithmic
Differentiation: Adjoint Greeks Made Easy. The relatively small and
homogeneous code basis of ql seems to allow for this kind of more
fundamental approach.

I wrote a bit about my first steps in my blog

http://quantlib.wordpress.com/

and forked a new branch from Luigi's current master on github

https://github.com/pcaspers/quantlib/tree/adjoint

where I started to template'ize the library in order to allow for AD
tools to hook in. There are already first working examples (see the
blog) and I am starting to feel confident that the approach might work
as a whole, might be doable in a reasonable amount of time and is
worthwhile following.

About the feasibility: The library seems to consist of roughly 376k
lines of code currently (all hpp and cpp files under ql / ). From that
we can subtract "data" files

78862 ./math/randomnumbers/sobolrsg.cpp
21376 ./math/randomnumbers/primitivepolynomials.cpp
14495 ./math/randomnumbers/latticerules.cpp
10115 ./experimental/volatility/noarbsabrabsprobs.cpp

which leaves us with 251k lines. It seems that I have already reviewed
and adapted around 14k lines, which is 5% and which took me
approximately 60 hours. This gives an estimation of 130 person days
still left to do. For the whole (!) library where already parts will
make much sense and give interesting applications. E.g. excluding
experimental classes (90k) and the market model (25k) reduces the
estimate already to 65 person days to go.

I would be interested in your opinions on that, in particular
regarding the design choices to make (better now than later :-) ).

I'd also be grateful for people supporting the development by forking
the adjoint branch and sending pull requests with adapted code pieces.
My personal next steps would be
- rate deltas for Legs / Swap instruments
- rate vegas for vanilla interest rate options
- Hull White model

What do you think ?

Thank you
Peter

------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

答复: Adjoint Greeks

cheng li
Hi Peter,

I have recently read the presentation writtern by Sebastian on qlws13. Are
your idea similar with his? Roughly both are template based? I am always
very interested in AD method but never know how to start from scratch...

I'd like to follow your branch and try to follow the algorithms. Once I got
that basis, I am very glad to help you to continue the development~

Regards,
Cheng

-----邮件原件-----
发件人: Peter Caspers [mailto:[hidden email]]
发送时间: 2015年1月5日 4:55
收件人: QuantLib Mailing Lists
主题: [Quantlib-dev] Adjoint Greeks

Hello all,

happy new year.

I revisited Ferdinando's comments on adjoint greeks during our December
workshop and started to play around with that idea.

The approach I am trying to follow is to adapt the ql library code so that
automatic differentiation _tools_ can be used with it in a transparent way.
This is opposed to writing special adjoint engines by _hand_ like e.g.
advocated in Capriotti, Giles, Algorithmic
Differentiation: Adjoint Greeks Made Easy. The relatively small and
homogeneous code basis of ql seems to allow for this kind of more
fundamental approach.

I wrote a bit about my first steps in my blog

http://quantlib.wordpress.com/

and forked a new branch from Luigi's current master on github

https://github.com/pcaspers/quantlib/tree/adjoint

where I started to template'ize the library in order to allow for AD tools
to hook in. There are already first working examples (see the
blog) and I am starting to feel confident that the approach might work as a
whole, might be doable in a reasonable amount of time and is worthwhile
following.

About the feasibility: The library seems to consist of roughly 376k lines of
code currently (all hpp and cpp files under ql / ). From that we can
subtract "data" files

78862 ./math/randomnumbers/sobolrsg.cpp
21376 ./math/randomnumbers/primitivepolynomials.cpp
14495 ./math/randomnumbers/latticerules.cpp
10115 ./experimental/volatility/noarbsabrabsprobs.cpp

which leaves us with 251k lines. It seems that I have already reviewed and
adapted around 14k lines, which is 5% and which took me approximately 60
hours. This gives an estimation of 130 person days still left to do. For the
whole (!) library where already parts will make much sense and give
interesting applications. E.g. excluding experimental classes (90k) and the
market model (25k) reduces the estimate already to 65 person days to go.

I would be interested in your opinions on that, in particular regarding the
design choices to make (better now than later :-) ).

I'd also be grateful for people supporting the development by forking the
adjoint branch and sending pull requests with adapted code pieces.
My personal next steps would be
- rate deltas for Legs / Swap instruments
- rate vegas for vanilla interest rate options
- Hull White model

What do you think ?

Thank you
Peter

----------------------------------------------------------------------------
--
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev


------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: 答复: Adjoint Greeks

Peter Caspers-4
Hi Cheng,
yes, exactly, Sebastian applied AD to vega computation in the Hull
White Model if I remember correctly.
It would be great, if you would join in.
Peter

On 5 January 2015 at 02:47, cheng li <[hidden email]> wrote:

> Hi Peter,
>
> I have recently read the presentation writtern by Sebastian on qlws13. Are
> your idea similar with his? Roughly both are template based? I am always
> very interested in AD method but never know how to start from scratch...
>
> I'd like to follow your branch and try to follow the algorithms. Once I got
> that basis, I am very glad to help you to continue the development~
>
> Regards,
> Cheng
>
> -----邮件原件-----
> 发件人: Peter Caspers [mailto:[hidden email]]
> 发送时间: 2015年1月5日 4:55
> 收件人: QuantLib Mailing Lists
> 主题: [Quantlib-dev] Adjoint Greeks
>
> Hello all,
>
> happy new year.
>
> I revisited Ferdinando's comments on adjoint greeks during our December
> workshop and started to play around with that idea.
>
> The approach I am trying to follow is to adapt the ql library code so that
> automatic differentiation _tools_ can be used with it in a transparent way.
> This is opposed to writing special adjoint engines by _hand_ like e.g.
> advocated in Capriotti, Giles, Algorithmic
> Differentiation: Adjoint Greeks Made Easy. The relatively small and
> homogeneous code basis of ql seems to allow for this kind of more
> fundamental approach.
>
> I wrote a bit about my first steps in my blog
>
> http://quantlib.wordpress.com/
>
> and forked a new branch from Luigi's current master on github
>
> https://github.com/pcaspers/quantlib/tree/adjoint
>
> where I started to template'ize the library in order to allow for AD tools
> to hook in. There are already first working examples (see the
> blog) and I am starting to feel confident that the approach might work as a
> whole, might be doable in a reasonable amount of time and is worthwhile
> following.
>
> About the feasibility: The library seems to consist of roughly 376k lines of
> code currently (all hpp and cpp files under ql / ). From that we can
> subtract "data" files
>
> 78862 ./math/randomnumbers/sobolrsg.cpp
> 21376 ./math/randomnumbers/primitivepolynomials.cpp
> 14495 ./math/randomnumbers/latticerules.cpp
> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>
> which leaves us with 251k lines. It seems that I have already reviewed and
> adapted around 14k lines, which is 5% and which took me approximately 60
> hours. This gives an estimation of 130 person days still left to do. For the
> whole (!) library where already parts will make much sense and give
> interesting applications. E.g. excluding experimental classes (90k) and the
> market model (25k) reduces the estimate already to 65 person days to go.
>
> I would be interested in your opinions on that, in particular regarding the
> design choices to make (better now than later :-) ).
>
> I'd also be grateful for people supporting the development by forking the
> adjoint branch and sending pull requests with adapted code pieces.
> My personal next steps would be
> - rate deltas for Legs / Swap instruments
> - rate vegas for vanilla interest rate options
> - Hull White model
>
> What do you think ?
>
> Thank you
> Peter
>
> ----------------------------------------------------------------------------
> --
> Dive into the World of Parallel Programming! The Go Parallel Website,
> sponsored by Intel and developed in partnership with Slashdot Media, is your
> hub for all things parallel software development, from weekly thought
> leadership blogs to news, videos, case studies, tutorials and more. Take a
> look and join the conversation now. http://goparallel.sourceforge.net
> _______________________________________________
> QuantLib-dev mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>

------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: Adjoint Greeks

Ferdinando M. Ametrano-2
In reply to this post by Peter Caspers-4
Thank you Peter, it sounds exciting and promising.
Why haven't you considered to just change the Real typedef from double to CppAD::AD<double>?

On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers <[hidden email]> wrote:
Hello all,

happy new year.

I revisited Ferdinando's comments on adjoint greeks during our
December workshop and started to play around with that idea.

The approach I am trying to follow is to adapt the ql library code so
that automatic differentiation _tools_ can be used with it in a
transparent way. This is opposed to writing special adjoint engines by
_hand_ like e.g. advocated in Capriotti, Giles, Algorithmic
Differentiation: Adjoint Greeks Made Easy. The relatively small and
homogeneous code basis of ql seems to allow for this kind of more
fundamental approach.

I wrote a bit about my first steps in my blog

http://quantlib.wordpress.com/

and forked a new branch from Luigi's current master on github

https://github.com/pcaspers/quantlib/tree/adjoint

where I started to template'ize the library in order to allow for AD
tools to hook in. There are already first working examples (see the
blog) and I am starting to feel confident that the approach might work
as a whole, might be doable in a reasonable amount of time and is
worthwhile following.

About the feasibility: The library seems to consist of roughly 376k
lines of code currently (all hpp and cpp files under ql / ). From that
we can subtract "data" files

78862 ./math/randomnumbers/sobolrsg.cpp
21376 ./math/randomnumbers/primitivepolynomials.cpp
14495 ./math/randomnumbers/latticerules.cpp
10115 ./experimental/volatility/noarbsabrabsprobs.cpp

which leaves us with 251k lines. It seems that I have already reviewed
and adapted around 14k lines, which is 5% and which took me
approximately 60 hours. This gives an estimation of 130 person days
still left to do. For the whole (!) library where already parts will
make much sense and give interesting applications. E.g. excluding
experimental classes (90k) and the market model (25k) reduces the
estimate already to 65 person days to go.

I would be interested in your opinions on that, in particular
regarding the design choices to make (better now than later :-) ).

I'd also be grateful for people supporting the development by forking
the adjoint branch and sending pull requests with adapted code pieces.
My personal next steps would be
- rate deltas for Legs / Swap instruments
- rate vegas for vanilla interest rate options
- Hull White model

What do you think ?

Thank you
Peter

------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev


------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: Adjoint Greeks

Luigi Ballabio
Switching Real would force you to fix compilation problems all over the library, instead of just in the code you're converting.

If you wanted to go the route of #defining the type, I guess you could introduce another type (ADReal or something) and switch the coverted code to use it.
Which might or might not be a good idea; you wouldn't be forced to templatize the code, but you would have to choose AD or not at compilation time, instead that having the choice to use both for different tasks. Hmm...

Anyway: yes, very promising. Between Peter, Klaus and Joseph, we got a lot of presents this Christmas :)

Luigi

 

On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano <[hidden email]> wrote:
Thank you Peter, it sounds exciting and promising.
Why haven't you considered to just change the Real typedef from double to CppAD::AD<double>?

On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers <[hidden email]> wrote:
Hello all,

happy new year.

I revisited Ferdinando's comments on adjoint greeks during our
December workshop and started to play around with that idea.

The approach I am trying to follow is to adapt the ql library code so
that automatic differentiation _tools_ can be used with it in a
transparent way. This is opposed to writing special adjoint engines by
_hand_ like e.g. advocated in Capriotti, Giles, Algorithmic
Differentiation: Adjoint Greeks Made Easy. The relatively small and
homogeneous code basis of ql seems to allow for this kind of more
fundamental approach.

I wrote a bit about my first steps in my blog

http://quantlib.wordpress.com/

and forked a new branch from Luigi's current master on github

https://github.com/pcaspers/quantlib/tree/adjoint

where I started to template'ize the library in order to allow for AD
tools to hook in. There are already first working examples (see the
blog) and I am starting to feel confident that the approach might work
as a whole, might be doable in a reasonable amount of time and is
worthwhile following.

About the feasibility: The library seems to consist of roughly 376k
lines of code currently (all hpp and cpp files under ql / ). From that
we can subtract "data" files

78862 ./math/randomnumbers/sobolrsg.cpp
21376 ./math/randomnumbers/primitivepolynomials.cpp
14495 ./math/randomnumbers/latticerules.cpp
10115 ./experimental/volatility/noarbsabrabsprobs.cpp

which leaves us with 251k lines. It seems that I have already reviewed
and adapted around 14k lines, which is 5% and which took me
approximately 60 hours. This gives an estimation of 130 person days
still left to do. For the whole (!) library where already parts will
make much sense and give interesting applications. E.g. excluding
experimental classes (90k) and the market model (25k) reduces the
estimate already to 65 person days to go.

I would be interested in your opinions on that, in particular
regarding the design choices to make (better now than later :-) ).

I'd also be grateful for people supporting the development by forking
the adjoint branch and sending pull requests with adapted code pieces.
My personal next steps would be
- rate deltas for Legs / Swap instruments
- rate vegas for vanilla interest rate options
- Hull White model

What do you think ?

Thank you
Peter

------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev


------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev




--

------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: Adjoint Greeks

Peter Caspers-4
I thought in a realistic application you would always need both
worlds, CppAD<double> for adjoint greek engines and double for all the
rest. I wonder what it would mean in terms of performance and memory
if you replace double by CppAD<double> in general. I can maybe just
stress test this a bit though.
Peter



On 7 January 2015 at 10:23, Luigi Ballabio <[hidden email]> wrote:

> Switching Real would force you to fix compilation problems all over the
> library, instead of just in the code you're converting.
>
> If you wanted to go the route of #defining the type, I guess you could
> introduce another type (ADReal or something) and switch the coverted code to
> use it.
> Which might or might not be a good idea; you wouldn't be forced to
> templatize the code, but you would have to choose AD or not at compilation
> time, instead that having the choice to use both for different tasks. Hmm...
>
> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we got a lot
> of presents this Christmas :)
>
> Luigi
>
>
>
> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
> <[hidden email]> wrote:
>>
>> Thank you Peter, it sounds exciting and promising.
>> Why haven't you considered to just change the Real typedef from double to
>> CppAD::AD<double>?
>>
>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers <[hidden email]>
>> wrote:
>>>
>>> Hello all,
>>>
>>> happy new year.
>>>
>>> I revisited Ferdinando's comments on adjoint greeks during our
>>> December workshop and started to play around with that idea.
>>>
>>> The approach I am trying to follow is to adapt the ql library code so
>>> that automatic differentiation _tools_ can be used with it in a
>>> transparent way. This is opposed to writing special adjoint engines by
>>> _hand_ like e.g. advocated in Capriotti, Giles, Algorithmic
>>> Differentiation: Adjoint Greeks Made Easy. The relatively small and
>>> homogeneous code basis of ql seems to allow for this kind of more
>>> fundamental approach.
>>>
>>> I wrote a bit about my first steps in my blog
>>>
>>> http://quantlib.wordpress.com/
>>>
>>> and forked a new branch from Luigi's current master on github
>>>
>>> https://github.com/pcaspers/quantlib/tree/adjoint
>>>
>>> where I started to template'ize the library in order to allow for AD
>>> tools to hook in. There are already first working examples (see the
>>> blog) and I am starting to feel confident that the approach might work
>>> as a whole, might be doable in a reasonable amount of time and is
>>> worthwhile following.
>>>
>>> About the feasibility: The library seems to consist of roughly 376k
>>> lines of code currently (all hpp and cpp files under ql / ). From that
>>> we can subtract "data" files
>>>
>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>>> 14495 ./math/randomnumbers/latticerules.cpp
>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>>>
>>> which leaves us with 251k lines. It seems that I have already reviewed
>>> and adapted around 14k lines, which is 5% and which took me
>>> approximately 60 hours. This gives an estimation of 130 person days
>>> still left to do. For the whole (!) library where already parts will
>>> make much sense and give interesting applications. E.g. excluding
>>> experimental classes (90k) and the market model (25k) reduces the
>>> estimate already to 65 person days to go.
>>>
>>> I would be interested in your opinions on that, in particular
>>> regarding the design choices to make (better now than later :-) ).
>>>
>>> I'd also be grateful for people supporting the development by forking
>>> the adjoint branch and sending pull requests with adapted code pieces.
>>> My personal next steps would be
>>> - rate deltas for Legs / Swap instruments
>>> - rate vegas for vanilla interest rate options
>>> - Hull White model
>>>
>>> What do you think ?
>>>
>>> Thank you
>>> Peter
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Dive into the World of Parallel Programming! The Go Parallel Website,
>>> sponsored by Intel and developed in partnership with Slashdot Media, is
>>> your
>>> hub for all things parallel software development, from weekly thought
>>> leadership blogs to news, videos, case studies, tutorials and more. Take
>>> a
>>> look and join the conversation now. http://goparallel.sourceforge.net
>>> _______________________________________________
>>> QuantLib-dev mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Dive into the World of Parallel Programming! The Go Parallel Website,
>> sponsored by Intel and developed in partnership with Slashdot Media, is
>> your
>> hub for all things parallel software development, from weekly thought
>> leadership blogs to news, videos, case studies, tutorials and more. Take a
>> look and join the conversation now. http://goparallel.sourceforge.net
>> _______________________________________________
>> QuantLib-dev mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>
>
>
>
> --
> <https://implementingquantlib.blogspot.com>
> <https://twitter.com/lballabio>

------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

答复: Adjoint Greeks

cheng li
Hi Peter,

Thank you for your kindly offer these new stuff for all of us!

I have cloned your branch and tried to build it on my machine. When it was
building the example/InterestRateSmile, the compiler complained as
following:

InterestRateSmiles.cpp: In function ‘void zabrExamples()’:
InterestRateSmiles.cpp:64:39: error: type/value mismatch at argument 1 in
template parameter list for ‘template<class T> class boost::shared_ptr’
     boost::shared_ptr<ZabrSmileSection> zabrln =
                                       ^
InterestRateSmiles.cpp:64:39: error:   expected a type, got
‘ZabrSmileSection’
InterestRateSmiles.cpp:64:48: error: invalid type in declaration before
‘=’ token
     boost::shared_ptr<ZabrSmileSection> zabrln =
                                                ^
InterestRateSmiles.cpp:67:13: error: ‘template<class Evaluation> class
QuantLib::ZabrSmileSection’ used without template parameters
             ZabrSmileSection::ShortMaturityLognormal);

I am not sure what is the problem... Is it due to missing template argument
for ZabrSmileSection?
My compiler is g++ 4.8.2 and with parameter "-std=c++11 -O3"

BTW, I found that quadraticlfm.hpp and quadraticlfm.cpp are missing from the
branch. However when I adjust the makefile.am to exclude them out the
compiling process works fine.


Regards,
Cheng

-----邮件原件-----
发件人: Peter Caspers [mailto:[hidden email]]
发送时间: 2015年1月9日 3:57
收件人: Luigi Ballabio
抄送: QuantLib Mailing Lists; Ferdinando M. Ametrano
主题: Re: [Quantlib-dev] Adjoint Greeks

I thought in a realistic application you would always need both worlds,
CppAD<double> for adjoint greek engines and double for all the rest. I
wonder what it would mean in terms of performance and memory if you replace
double by CppAD<double> in general. I can maybe just stress test this a bit
though.
Peter



On 7 January 2015 at 10:23, Luigi Ballabio <[hidden email]> wrote:
> Switching Real would force you to fix compilation problems all over
> the library, instead of just in the code you're converting.
>
> If you wanted to go the route of #defining the type, I guess you could
> introduce another type (ADReal or something) and switch the coverted
> code to use it.
> Which might or might not be a good idea; you wouldn't be forced to
> templatize the code, but you would have to choose AD or not at
> compilation time, instead that having the choice to use both for different
tasks. Hmm...

>
> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we got a
> lot of presents this Christmas :)
>
> Luigi
>
>
>
> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
> <[hidden email]> wrote:
>>
>> Thank you Peter, it sounds exciting and promising.
>> Why haven't you considered to just change the Real typedef from
>> double to CppAD::AD<double>?
>>
>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers
>> <[hidden email]>
>> wrote:
>>>
>>> Hello all,
>>>
>>> happy new year.
>>>
>>> I revisited Ferdinando's comments on adjoint greeks during our
>>> December workshop and started to play around with that idea.
>>>
>>> The approach I am trying to follow is to adapt the ql library code
>>> so that automatic differentiation _tools_ can be used with it in a
>>> transparent way. This is opposed to writing special adjoint engines
>>> by _hand_ like e.g. advocated in Capriotti, Giles, Algorithmic
>>> Differentiation: Adjoint Greeks Made Easy. The relatively small and
>>> homogeneous code basis of ql seems to allow for this kind of more
>>> fundamental approach.
>>>
>>> I wrote a bit about my first steps in my blog
>>>
>>> http://quantlib.wordpress.com/
>>>
>>> and forked a new branch from Luigi's current master on github
>>>
>>> https://github.com/pcaspers/quantlib/tree/adjoint
>>>
>>> where I started to template'ize the library in order to allow for AD
>>> tools to hook in. There are already first working examples (see the
>>> blog) and I am starting to feel confident that the approach might
>>> work as a whole, might be doable in a reasonable amount of time and
>>> is worthwhile following.
>>>
>>> About the feasibility: The library seems to consist of roughly 376k
>>> lines of code currently (all hpp and cpp files under ql / ). From
>>> that we can subtract "data" files
>>>
>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>>> 14495 ./math/randomnumbers/latticerules.cpp
>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>>>
>>> which leaves us with 251k lines. It seems that I have already
>>> reviewed and adapted around 14k lines, which is 5% and which took me
>>> approximately 60 hours. This gives an estimation of 130 person days
>>> still left to do. For the whole (!) library where already parts will
>>> make much sense and give interesting applications. E.g. excluding
>>> experimental classes (90k) and the market model (25k) reduces the
>>> estimate already to 65 person days to go.
>>>
>>> I would be interested in your opinions on that, in particular
>>> regarding the design choices to make (better now than later :-) ).
>>>
>>> I'd also be grateful for people supporting the development by
>>> forking the adjoint branch and sending pull requests with adapted code
pieces.

>>> My personal next steps would be
>>> - rate deltas for Legs / Swap instruments
>>> - rate vegas for vanilla interest rate options
>>> - Hull White model
>>>
>>> What do you think ?
>>>
>>> Thank you
>>> Peter
>>>
>>>
>>> --------------------------------------------------------------------
>>> ---------- Dive into the World of Parallel Programming! The Go
>>> Parallel Website, sponsored by Intel and developed in partnership
>>> with Slashdot Media, is your hub for all things parallel software
>>> development, from weekly thought leadership blogs to news, videos,
>>> case studies, tutorials and more. Take a look and join the
>>> conversation now. http://goparallel.sourceforge.net 
>>> _______________________________________________
>>> QuantLib-dev mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> --------- Dive into the World of Parallel Programming! The Go
>> Parallel Website, sponsored by Intel and developed in partnership
>> with Slashdot Media, is your hub for all things parallel software
>> development, from weekly thought leadership blogs to news, videos,
>> case studies, tutorials and more. Take a look and join the
>> conversation now. http://goparallel.sourceforge.net 
>> _______________________________________________
>> QuantLib-dev mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>
>
>
>
> --
> <https://implementingquantlib.blogspot.com>
> <https://twitter.com/lballabio>

----------------------------------------------------------------------------
--
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev


------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: 答复: Adjoint Greeks

Peter Caspers-4
Hi Cheng,

you are welcome and many thanks for your interest. However you seem to
work on my master branch which I consider as my private workspace
(with some unfinished things in it). Sorry, I wasn't expecting guests
here :-)

You probably want to try out the adjoint branch instead. This should compile.

Thanks
Peter

On 11 January 2015 at 10:16, Cheng Li <[hidden email]> wrote:

> Hi Peter,
>
> Thank you for your kindly offer these new stuff for all of us!
>
> I have cloned your branch and tried to build it on my machine. When it was
> building the example/InterestRateSmile, the compiler complained as
> following:
>
> InterestRateSmiles.cpp: In function ‘void zabrExamples()’:
> InterestRateSmiles.cpp:64:39: error: type/value mismatch at argument 1 in
> template parameter list for ‘template<class T> class boost::shared_ptr’
>      boost::shared_ptr<ZabrSmileSection> zabrln =
>                                        ^
> InterestRateSmiles.cpp:64:39: error:   expected a type, got
> ‘ZabrSmileSection’
> InterestRateSmiles.cpp:64:48: error: invalid type in declaration before
> ‘=’ token
>      boost::shared_ptr<ZabrSmileSection> zabrln =
>                                                 ^
> InterestRateSmiles.cpp:67:13: error: ‘template<class Evaluation> class
> QuantLib::ZabrSmileSection’ used without template parameters
>              ZabrSmileSection::ShortMaturityLognormal);
>
> I am not sure what is the problem... Is it due to missing template argument
> for ZabrSmileSection?
> My compiler is g++ 4.8.2 and with parameter "-std=c++11 -O3"
>
> BTW, I found that quadraticlfm.hpp and quadraticlfm.cpp are missing from the
> branch. However when I adjust the makefile.am to exclude them out the
> compiling process works fine.
>
>
> Regards,
> Cheng
>
> -----邮件原件-----
> 发件人: Peter Caspers [mailto:[hidden email]]
> 发送时间: 2015年1月9日 3:57
> 收件人: Luigi Ballabio
> 抄送: QuantLib Mailing Lists; Ferdinando M. Ametrano
> 主题: Re: [Quantlib-dev] Adjoint Greeks
>
> I thought in a realistic application you would always need both worlds,
> CppAD<double> for adjoint greek engines and double for all the rest. I
> wonder what it would mean in terms of performance and memory if you replace
> double by CppAD<double> in general. I can maybe just stress test this a bit
> though.
> Peter
>
>
>
> On 7 January 2015 at 10:23, Luigi Ballabio <[hidden email]> wrote:
>> Switching Real would force you to fix compilation problems all over
>> the library, instead of just in the code you're converting.
>>
>> If you wanted to go the route of #defining the type, I guess you could
>> introduce another type (ADReal or something) and switch the coverted
>> code to use it.
>> Which might or might not be a good idea; you wouldn't be forced to
>> templatize the code, but you would have to choose AD or not at
>> compilation time, instead that having the choice to use both for different
> tasks. Hmm...
>>
>> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we got a
>> lot of presents this Christmas :)
>>
>> Luigi
>>
>>
>>
>> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
>> <[hidden email]> wrote:
>>>
>>> Thank you Peter, it sounds exciting and promising.
>>> Why haven't you considered to just change the Real typedef from
>>> double to CppAD::AD<double>?
>>>
>>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers
>>> <[hidden email]>
>>> wrote:
>>>>
>>>> Hello all,
>>>>
>>>> happy new year.
>>>>
>>>> I revisited Ferdinando's comments on adjoint greeks during our
>>>> December workshop and started to play around with that idea.
>>>>
>>>> The approach I am trying to follow is to adapt the ql library code
>>>> so that automatic differentiation _tools_ can be used with it in a
>>>> transparent way. This is opposed to writing special adjoint engines
>>>> by _hand_ like e.g. advocated in Capriotti, Giles, Algorithmic
>>>> Differentiation: Adjoint Greeks Made Easy. The relatively small and
>>>> homogeneous code basis of ql seems to allow for this kind of more
>>>> fundamental approach.
>>>>
>>>> I wrote a bit about my first steps in my blog
>>>>
>>>> http://quantlib.wordpress.com/
>>>>
>>>> and forked a new branch from Luigi's current master on github
>>>>
>>>> https://github.com/pcaspers/quantlib/tree/adjoint
>>>>
>>>> where I started to template'ize the library in order to allow for AD
>>>> tools to hook in. There are already first working examples (see the
>>>> blog) and I am starting to feel confident that the approach might
>>>> work as a whole, might be doable in a reasonable amount of time and
>>>> is worthwhile following.
>>>>
>>>> About the feasibility: The library seems to consist of roughly 376k
>>>> lines of code currently (all hpp and cpp files under ql / ). From
>>>> that we can subtract "data" files
>>>>
>>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>>>> 14495 ./math/randomnumbers/latticerules.cpp
>>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>>>>
>>>> which leaves us with 251k lines. It seems that I have already
>>>> reviewed and adapted around 14k lines, which is 5% and which took me
>>>> approximately 60 hours. This gives an estimation of 130 person days
>>>> still left to do. For the whole (!) library where already parts will
>>>> make much sense and give interesting applications. E.g. excluding
>>>> experimental classes (90k) and the market model (25k) reduces the
>>>> estimate already to 65 person days to go.
>>>>
>>>> I would be interested in your opinions on that, in particular
>>>> regarding the design choices to make (better now than later :-) ).
>>>>
>>>> I'd also be grateful for people supporting the development by
>>>> forking the adjoint branch and sending pull requests with adapted code
> pieces.
>>>> My personal next steps would be
>>>> - rate deltas for Legs / Swap instruments
>>>> - rate vegas for vanilla interest rate options
>>>> - Hull White model
>>>>
>>>> What do you think ?
>>>>
>>>> Thank you
>>>> Peter
>>>>
>>>>
>>>> --------------------------------------------------------------------
>>>> ---------- Dive into the World of Parallel Programming! The Go
>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>> with Slashdot Media, is your hub for all things parallel software
>>>> development, from weekly thought leadership blogs to news, videos,
>>>> case studies, tutorials and more. Take a look and join the
>>>> conversation now. http://goparallel.sourceforge.net
>>>> _______________________________________________
>>>> QuantLib-dev mailing list
>>>> [hidden email]
>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> --------- Dive into the World of Parallel Programming! The Go
>>> Parallel Website, sponsored by Intel and developed in partnership
>>> with Slashdot Media, is your hub for all things parallel software
>>> development, from weekly thought leadership blogs to news, videos,
>>> case studies, tutorials and more. Take a look and join the
>>> conversation now. http://goparallel.sourceforge.net
>>> _______________________________________________
>>> QuantLib-dev mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>
>>
>>
>>
>> --
>> <https://implementingquantlib.blogspot.com>
>> <https://twitter.com/lballabio>
>
> ----------------------------------------------------------------------------
> --
> Dive into the World of Parallel Programming! The Go Parallel Website,
> sponsored by Intel and developed in partnership with Slashdot Media, is your
> hub for all things parallel software development, from weekly thought
> leadership blogs to news, videos, case studies, tutorials and more. Take a
> look and join the conversation now. http://goparallel.sourceforge.net
> _______________________________________________
> QuantLib-dev mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>

------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: Adjoint Greeks

Luigi Ballabio
In reply to this post by Peter Caspers-4
Hi Peter,
     you definitely need both double and CppAD<double>. I was wondering if you needed a given engine if both adjoint and not-adjoint implementation. If not, you might choose at compile time. Otherwise, we'd have to bite the bullet and templatize lots of stuff, as you're doing already.

Luigi


On Thu, Jan 8, 2015 at 8:56 PM, Peter Caspers <[hidden email]> wrote:
I thought in a realistic application you would always need both
worlds, CppAD<double> for adjoint greek engines and double for all the
rest. I wonder what it would mean in terms of performance and memory
if you replace double by CppAD<double> in general. I can maybe just
stress test this a bit though.
Peter



On 7 January 2015 at 10:23, Luigi Ballabio <[hidden email]> wrote:
> Switching Real would force you to fix compilation problems all over the
> library, instead of just in the code you're converting.
>
> If you wanted to go the route of #defining the type, I guess you could
> introduce another type (ADReal or something) and switch the coverted code to
> use it.
> Which might or might not be a good idea; you wouldn't be forced to
> templatize the code, but you would have to choose AD or not at compilation
> time, instead that having the choice to use both for different tasks. Hmm...
>
> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we got a lot
> of presents this Christmas :)
>
> Luigi
>
>
>
> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
> <[hidden email]> wrote:
>>
>> Thank you Peter, it sounds exciting and promising.
>> Why haven't you considered to just change the Real typedef from double to
>> CppAD::AD<double>?
>>
>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers <[hidden email]>
>> wrote:
>>>
>>> Hello all,
>>>
>>> happy new year.
>>>
>>> I revisited Ferdinando's comments on adjoint greeks during our
>>> December workshop and started to play around with that idea.
>>>
>>> The approach I am trying to follow is to adapt the ql library code so
>>> that automatic differentiation _tools_ can be used with it in a
>>> transparent way. This is opposed to writing special adjoint engines by
>>> _hand_ like e.g. advocated in Capriotti, Giles, Algorithmic
>>> Differentiation: Adjoint Greeks Made Easy. The relatively small and
>>> homogeneous code basis of ql seems to allow for this kind of more
>>> fundamental approach.
>>>
>>> I wrote a bit about my first steps in my blog
>>>
>>> http://quantlib.wordpress.com/
>>>
>>> and forked a new branch from Luigi's current master on github
>>>
>>> https://github.com/pcaspers/quantlib/tree/adjoint
>>>
>>> where I started to template'ize the library in order to allow for AD
>>> tools to hook in. There are already first working examples (see the
>>> blog) and I am starting to feel confident that the approach might work
>>> as a whole, might be doable in a reasonable amount of time and is
>>> worthwhile following.
>>>
>>> About the feasibility: The library seems to consist of roughly 376k
>>> lines of code currently (all hpp and cpp files under ql / ). From that
>>> we can subtract "data" files
>>>
>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>>> 14495 ./math/randomnumbers/latticerules.cpp
>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>>>
>>> which leaves us with 251k lines. It seems that I have already reviewed
>>> and adapted around 14k lines, which is 5% and which took me
>>> approximately 60 hours. This gives an estimation of 130 person days
>>> still left to do. For the whole (!) library where already parts will
>>> make much sense and give interesting applications. E.g. excluding
>>> experimental classes (90k) and the market model (25k) reduces the
>>> estimate already to 65 person days to go.
>>>
>>> I would be interested in your opinions on that, in particular
>>> regarding the design choices to make (better now than later :-) ).
>>>
>>> I'd also be grateful for people supporting the development by forking
>>> the adjoint branch and sending pull requests with adapted code pieces.
>>> My personal next steps would be
>>> - rate deltas for Legs / Swap instruments
>>> - rate vegas for vanilla interest rate options
>>> - Hull White model
>>>
>>> What do you think ?
>>>
>>> Thank you
>>> Peter
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Dive into the World of Parallel Programming! The Go Parallel Website,
>>> sponsored by Intel and developed in partnership with Slashdot Media, is
>>> your
>>> hub for all things parallel software development, from weekly thought
>>> leadership blogs to news, videos, case studies, tutorials and more. Take
>>> a
>>> look and join the conversation now. http://goparallel.sourceforge.net
>>> _______________________________________________
>>> QuantLib-dev mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Dive into the World of Parallel Programming! The Go Parallel Website,
>> sponsored by Intel and developed in partnership with Slashdot Media, is
>> your
>> hub for all things parallel software development, from weekly thought
>> leadership blogs to news, videos, case studies, tutorials and more. Take a
>> look and join the conversation now. http://goparallel.sourceforge.net
>> _______________________________________________
>> QuantLib-dev mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>
>
>
>
> --
> <https://implementingquantlib.blogspot.com>
> <https://twitter.com/lballabio>



--

------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

答复: 答复: Adjoint Greeks

cheng li
In reply to this post by Peter Caspers-4
Oops... my fault...

Thank you peter, I'll try again with adjoint branch.

Regards,
Cheng

-----邮件原件-----
发件人: Peter Caspers [mailto:[hidden email]]
发送时间: 2015年1月11日 17:34
收件人: Cheng Li
抄送: QuantLib Mailing Lists
主题: Re: 答复: [Quantlib-dev] Adjoint Greeks

Hi Cheng,

you are welcome and many thanks for your interest. However you seem to work on my master branch which I consider as my private workspace (with some unfinished things in it). Sorry, I wasn't expecting guests here :-)

You probably want to try out the adjoint branch instead. This should compile.

Thanks
Peter

On 11 January 2015 at 10:16, Cheng Li <[hidden email]> wrote:

> Hi Peter,
>
> Thank you for your kindly offer these new stuff for all of us!
>
> I have cloned your branch and tried to build it on my machine. When it
> was building the example/InterestRateSmile, the compiler complained as
> following:
>
> InterestRateSmiles.cpp: In function ‘void zabrExamples()’:
> InterestRateSmiles.cpp:64:39: error: type/value mismatch at argument 1
> in template parameter list for ‘template<class T> class boost::shared_ptr’
>      boost::shared_ptr<ZabrSmileSection> zabrln =
>                                        ^
> InterestRateSmiles.cpp:64:39: error:   expected a type, got
> ‘ZabrSmileSection’
> InterestRateSmiles.cpp:64:48: error: invalid type in declaration
> before ‘=’ token
>      boost::shared_ptr<ZabrSmileSection> zabrln =
>                                                 ^
> InterestRateSmiles.cpp:67:13: error: ‘template<class Evaluation> class
> QuantLib::ZabrSmileSection’ used without template parameters
>              ZabrSmileSection::ShortMaturityLognormal);
>
> I am not sure what is the problem... Is it due to missing template
> argument for ZabrSmileSection?
> My compiler is g++ 4.8.2 and with parameter "-std=c++11 -O3"
>
> BTW, I found that quadraticlfm.hpp and quadraticlfm.cpp are missing
> from the branch. However when I adjust the makefile.am to exclude them
> out the compiling process works fine.
>
>
> Regards,
> Cheng
>
> -----邮件原件-----
> 发件人: Peter Caspers [mailto:[hidden email]]
> 发送时间: 2015年1月9日 3:57
> 收件人: Luigi Ballabio
> 抄送: QuantLib Mailing Lists; Ferdinando M. Ametrano
> 主题: Re: [Quantlib-dev] Adjoint Greeks
>
> I thought in a realistic application you would always need both
> worlds, CppAD<double> for adjoint greek engines and double for all the
> rest. I wonder what it would mean in terms of performance and memory
> if you replace double by CppAD<double> in general. I can maybe just
> stress test this a bit though.
> Peter
>
>
>
> On 7 January 2015 at 10:23, Luigi Ballabio <[hidden email]> wrote:
>> Switching Real would force you to fix compilation problems all over
>> the library, instead of just in the code you're converting.
>>
>> If you wanted to go the route of #defining the type, I guess you
>> could introduce another type (ADReal or something) and switch the
>> coverted code to use it.
>> Which might or might not be a good idea; you wouldn't be forced to
>> templatize the code, but you would have to choose AD or not at
>> compilation time, instead that having the choice to use both for
>> different
> tasks. Hmm...
>>
>> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we got
>> a lot of presents this Christmas :)
>>
>> Luigi
>>
>>
>>
>> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
>> <[hidden email]> wrote:
>>>
>>> Thank you Peter, it sounds exciting and promising.
>>> Why haven't you considered to just change the Real typedef from
>>> double to CppAD::AD<double>?
>>>
>>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers
>>> <[hidden email]>
>>> wrote:
>>>>
>>>> Hello all,
>>>>
>>>> happy new year.
>>>>
>>>> I revisited Ferdinando's comments on adjoint greeks during our
>>>> December workshop and started to play around with that idea.
>>>>
>>>> The approach I am trying to follow is to adapt the ql library code
>>>> so that automatic differentiation _tools_ can be used with it in a
>>>> transparent way. This is opposed to writing special adjoint engines
>>>> by _hand_ like e.g. advocated in Capriotti, Giles, Algorithmic
>>>> Differentiation: Adjoint Greeks Made Easy. The relatively small and
>>>> homogeneous code basis of ql seems to allow for this kind of more
>>>> fundamental approach.
>>>>
>>>> I wrote a bit about my first steps in my blog
>>>>
>>>> http://quantlib.wordpress.com/
>>>>
>>>> and forked a new branch from Luigi's current master on github
>>>>
>>>> https://github.com/pcaspers/quantlib/tree/adjoint
>>>>
>>>> where I started to template'ize the library in order to allow for
>>>> AD tools to hook in. There are already first working examples (see
>>>> the
>>>> blog) and I am starting to feel confident that the approach might
>>>> work as a whole, might be doable in a reasonable amount of time and
>>>> is worthwhile following.
>>>>
>>>> About the feasibility: The library seems to consist of roughly 376k
>>>> lines of code currently (all hpp and cpp files under ql / ). From
>>>> that we can subtract "data" files
>>>>
>>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>>>> 14495 ./math/randomnumbers/latticerules.cpp
>>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>>>>
>>>> which leaves us with 251k lines. It seems that I have already
>>>> reviewed and adapted around 14k lines, which is 5% and which took
>>>> me approximately 60 hours. This gives an estimation of 130 person
>>>> days still left to do. For the whole (!) library where already
>>>> parts will make much sense and give interesting applications. E.g.
>>>> excluding experimental classes (90k) and the market model (25k)
>>>> reduces the estimate already to 65 person days to go.
>>>>
>>>> I would be interested in your opinions on that, in particular
>>>> regarding the design choices to make (better now than later :-) ).
>>>>
>>>> I'd also be grateful for people supporting the development by
>>>> forking the adjoint branch and sending pull requests with adapted
>>>> code
> pieces.
>>>> My personal next steps would be
>>>> - rate deltas for Legs / Swap instruments
>>>> - rate vegas for vanilla interest rate options
>>>> - Hull White model
>>>>
>>>> What do you think ?
>>>>
>>>> Thank you
>>>> Peter
>>>>
>>>>
>>>> -------------------------------------------------------------------
>>>> -
>>>> ---------- Dive into the World of Parallel Programming! The Go
>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>> with Slashdot Media, is your hub for all things parallel software
>>>> development, from weekly thought leadership blogs to news, videos,
>>>> case studies, tutorials and more. Take a look and join the
>>>> conversation now. http://goparallel.sourceforge.net 
>>>> _______________________________________________
>>>> QuantLib-dev mailing list
>>>> [hidden email]
>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>
>>>
>>>
>>>
>>> --------------------------------------------------------------------
>>> -
>>> --------- Dive into the World of Parallel Programming! The Go
>>> Parallel Website, sponsored by Intel and developed in partnership
>>> with Slashdot Media, is your hub for all things parallel software
>>> development, from weekly thought leadership blogs to news, videos,
>>> case studies, tutorials and more. Take a look and join the
>>> conversation now. http://goparallel.sourceforge.net 
>>> _______________________________________________
>>> QuantLib-dev mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>
>>
>>
>>
>> --
>> <https://implementingquantlib.blogspot.com>
>> <https://twitter.com/lballabio>
>
> ----------------------------------------------------------------------
> ------
> --
> Dive into the World of Parallel Programming! The Go Parallel Website,
> sponsored by Intel and developed in partnership with Slashdot Media,
> is your hub for all things parallel software development, from weekly
> thought leadership blogs to news, videos, case studies, tutorials and
> more. Take a look and join the conversation now.
> http://goparallel.sourceforge.net 
> _______________________________________________
> QuantLib-dev mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>


------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

答复: Adjoint Greeks

cheng li
In reply to this post by Peter Caspers-4
Hi peter,

I have switched to adjoint brank. However I am still facing some problem... I use g++ 4.9.2 with parameter "-std=c++11 -O3"

/bin/bash ../../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../ql  -I../.. -I../..   -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP -MF .deps/averagebmacoupon.Tpo -c -o averagebmacoupon.lo averagebmacoupon.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../ql -I../.. -I../.. -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP -MF .deps/averagebmacoupon.Tpo -c averagebmacoupon.cpp  -fPIC -DPIC -o .libs/averagebmacoupon.o In file included from ../../ql/patterns/observable.hpp:29:0,
                 from ../../ql/event.hpp:29,
                 from ../../ql/cashflow.hpp:28,
                 from ../../ql/cashflows/coupon.hpp:29,
                 from ../../ql/cashflows/floatingratecoupon.hpp:33,
                 from ../../ql/cashflows/averagebmacoupon.hpp:28,
                 from averagebmacoupon.cpp:21:
../../ql/patterns/observable.hpp: In member function 'void QuantLib::Observable::notifyObservers()':
../../ql/errors.hpp:121:70: error: use of deleted function 'QuantLib::Error::Error(const QuantLib::Error&)'
                           BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
                                                                      ^
../../ql/patterns/observable.hpp:139:9: note: in expansion of macro 'QL_ENSURE'
         QL_ENSURE(successful,
         ^
../../ql/errors.hpp:39:11: note: 'QuantLib::Error::Error(const QuantLib::Error&)' is implicitly deleted because the default definition would be ill-formed:
     class Error : public std::exception {
           ^
../../ql/errors.hpp:39:11: error: use of deleted function 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const boost::shared_ptr<std::basic_string<char> >&)'
In file included from /usr/include/boost/shared_ptr.hpp:17:0,
                 from ../../ql/errors.hpp:31,
                 from ../../ql/patterns/observable.hpp:29,
                 from ../../ql/event.hpp:29,
                 from ../../ql/cashflow.hpp:28,
                 from ../../ql/cashflows/coupon.hpp:29,
                 from ../../ql/cashflows/floatingratecoupon.hpp:33,
                 from ../../ql/cashflows/averagebmacoupon.hpp:28,
                 from averagebmacoupon.cpp:21:
/usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note: 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const boost::shared_ptr<std::basic_string<char> >&)' is implicitly declared as deleted because 'boost::shared_ptr<std::basic_string<char> >' declares a move constructor or move assignment operator

Any idea about this?

Regards,
Cheng

-----邮件原件-----
发件人: Peter Caspers [mailto:[hidden email]]
发送时间: 2015年1月11日 17:34
收件人: Cheng Li
抄送: QuantLib Mailing Lists
主题: Re: 答复: [Quantlib-dev] Adjoint Greeks

Hi Cheng,

you are welcome and many thanks for your interest. However you seem to work on my master branch which I consider as my private workspace (with some unfinished things in it). Sorry, I wasn't expecting guests here :-)

You probably want to try out the adjoint branch instead. This should compile.

Thanks
Peter

On 11 January 2015 at 10:16, Cheng Li <[hidden email]> wrote:

> Hi Peter,
>
> Thank you for your kindly offer these new stuff for all of us!
>
> I have cloned your branch and tried to build it on my machine. When it
> was building the example/InterestRateSmile, the compiler complained as
> following:
>
> InterestRateSmiles.cpp: In function ‘void zabrExamples()’:
> InterestRateSmiles.cpp:64:39: error: type/value mismatch at argument 1
> in template parameter list for ‘template<class T> class boost::shared_ptr’
>      boost::shared_ptr<ZabrSmileSection> zabrln =
>                                        ^
> InterestRateSmiles.cpp:64:39: error:   expected a type, got
> ‘ZabrSmileSection’
> InterestRateSmiles.cpp:64:48: error: invalid type in declaration
> before ‘=’ token
>      boost::shared_ptr<ZabrSmileSection> zabrln =
>                                                 ^
> InterestRateSmiles.cpp:67:13: error: ‘template<class Evaluation> class
> QuantLib::ZabrSmileSection’ used without template parameters
>              ZabrSmileSection::ShortMaturityLognormal);
>
> I am not sure what is the problem... Is it due to missing template
> argument for ZabrSmileSection?
> My compiler is g++ 4.8.2 and with parameter "-std=c++11 -O3"
>
> BTW, I found that quadraticlfm.hpp and quadraticlfm.cpp are missing
> from the branch. However when I adjust the makefile.am to exclude them
> out the compiling process works fine.
>
>
> Regards,
> Cheng
>
> -----邮件原件-----
> 发件人: Peter Caspers [mailto:[hidden email]]
> 发送时间: 2015年1月9日 3:57
> 收件人: Luigi Ballabio
> 抄送: QuantLib Mailing Lists; Ferdinando M. Ametrano
> 主题: Re: [Quantlib-dev] Adjoint Greeks
>
> I thought in a realistic application you would always need both
> worlds, CppAD<double> for adjoint greek engines and double for all the
> rest. I wonder what it would mean in terms of performance and memory
> if you replace double by CppAD<double> in general. I can maybe just
> stress test this a bit though.
> Peter
>
>
>
> On 7 January 2015 at 10:23, Luigi Ballabio <[hidden email]> wrote:
>> Switching Real would force you to fix compilation problems all over
>> the library, instead of just in the code you're converting.
>>
>> If you wanted to go the route of #defining the type, I guess you
>> could introduce another type (ADReal or something) and switch the
>> coverted code to use it.
>> Which might or might not be a good idea; you wouldn't be forced to
>> templatize the code, but you would have to choose AD or not at
>> compilation time, instead that having the choice to use both for
>> different
> tasks. Hmm...
>>
>> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we got
>> a lot of presents this Christmas :)
>>
>> Luigi
>>
>>
>>
>> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
>> <[hidden email]> wrote:
>>>
>>> Thank you Peter, it sounds exciting and promising.
>>> Why haven't you considered to just change the Real typedef from
>>> double to CppAD::AD<double>?
>>>
>>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers
>>> <[hidden email]>
>>> wrote:
>>>>
>>>> Hello all,
>>>>
>>>> happy new year.
>>>>
>>>> I revisited Ferdinando's comments on adjoint greeks during our
>>>> December workshop and started to play around with that idea.
>>>>
>>>> The approach I am trying to follow is to adapt the ql library code
>>>> so that automatic differentiation _tools_ can be used with it in a
>>>> transparent way. This is opposed to writing special adjoint engines
>>>> by _hand_ like e.g. advocated in Capriotti, Giles, Algorithmic
>>>> Differentiation: Adjoint Greeks Made Easy. The relatively small and
>>>> homogeneous code basis of ql seems to allow for this kind of more
>>>> fundamental approach.
>>>>
>>>> I wrote a bit about my first steps in my blog
>>>>
>>>> http://quantlib.wordpress.com/
>>>>
>>>> and forked a new branch from Luigi's current master on github
>>>>
>>>> https://github.com/pcaspers/quantlib/tree/adjoint
>>>>
>>>> where I started to template'ize the library in order to allow for
>>>> AD tools to hook in. There are already first working examples (see
>>>> the
>>>> blog) and I am starting to feel confident that the approach might
>>>> work as a whole, might be doable in a reasonable amount of time and
>>>> is worthwhile following.
>>>>
>>>> About the feasibility: The library seems to consist of roughly 376k
>>>> lines of code currently (all hpp and cpp files under ql / ). From
>>>> that we can subtract "data" files
>>>>
>>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>>>> 14495 ./math/randomnumbers/latticerules.cpp
>>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>>>>
>>>> which leaves us with 251k lines. It seems that I have already
>>>> reviewed and adapted around 14k lines, which is 5% and which took
>>>> me approximately 60 hours. This gives an estimation of 130 person
>>>> days still left to do. For the whole (!) library where already
>>>> parts will make much sense and give interesting applications. E.g.
>>>> excluding experimental classes (90k) and the market model (25k)
>>>> reduces the estimate already to 65 person days to go.
>>>>
>>>> I would be interested in your opinions on that, in particular
>>>> regarding the design choices to make (better now than later :-) ).
>>>>
>>>> I'd also be grateful for people supporting the development by
>>>> forking the adjoint branch and sending pull requests with adapted
>>>> code
> pieces.
>>>> My personal next steps would be
>>>> - rate deltas for Legs / Swap instruments
>>>> - rate vegas for vanilla interest rate options
>>>> - Hull White model
>>>>
>>>> What do you think ?
>>>>
>>>> Thank you
>>>> Peter
>>>>
>>>>
>>>> -------------------------------------------------------------------
>>>> -
>>>> ---------- Dive into the World of Parallel Programming! The Go
>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>> with Slashdot Media, is your hub for all things parallel software
>>>> development, from weekly thought leadership blogs to news, videos,
>>>> case studies, tutorials and more. Take a look and join the
>>>> conversation now. http://goparallel.sourceforge.net 
>>>> _______________________________________________
>>>> QuantLib-dev mailing list
>>>> [hidden email]
>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>
>>>
>>>
>>>
>>> --------------------------------------------------------------------
>>> -
>>> --------- Dive into the World of Parallel Programming! The Go
>>> Parallel Website, sponsored by Intel and developed in partnership
>>> with Slashdot Media, is your hub for all things parallel software
>>> development, from weekly thought leadership blogs to news, videos,
>>> case studies, tutorials and more. Take a look and join the
>>> conversation now. http://goparallel.sourceforge.net 
>>> _______________________________________________
>>> QuantLib-dev mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>
>>
>>
>>
>> --
>> <https://implementingquantlib.blogspot.com>
>> <https://twitter.com/lballabio>
>
> ----------------------------------------------------------------------
> ------
> --
> Dive into the World of Parallel Programming! The Go Parallel Website,
> sponsored by Intel and developed in partnership with Slashdot Media,
> is your hub for all things parallel software development, from weekly
> thought leadership blogs to news, videos, case studies, tutorials and
> more. Take a look and join the conversation now.
> http://goparallel.sourceforge.net
> _______________________________________________
> QuantLib-dev mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>



------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
vanity: www.gigenet.com
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

答复: 答复: Adjoint Greeks

cheng li
Hi Peter,

I'll try again later on another machine with another compiler.

Regards,
Cheng

-----邮件原件-----
发件人: Peter Caspers [mailto:[hidden email]]
发送时间: 2015年1月12日 23:59
收件人: Luigi Ballabio
抄送: Cheng Li; QuantLib developers
主题: Re: [Quantlib-dev] 答复: Adjoint Greeks

oh, actually -temporarily- I need C++11 in the adjoint branch, because I wrote some constexpr declarations (will have to revisit this later).
Also I wrote default template parameters (T = Real) that have to be removed again for 03 I guess.

Is this problem gcc 4.9.2 specific ? I have 4.9.1 and everything compiles fine (except some auto_ptr - deprecated - warnings). Also my local branch is consistent with the one on github.

Or maybe run "make clean" before compiling ?

Peter

On 12 January 2015 at 07:27, Luigi Ballabio <[hidden email]> wrote:

> Don't use C++11.
>
> Luigi
>
> On Jan 12, 2015 4:53 AM, "cheng li" <[hidden email]> wrote:
>>
>> Hi peter,
>>
>> I have switched to adjoint brank. However I am still facing some
>> problem... I use g++ 4.9.2 with parameter "-std=c++11 -O3"
>>
>> /bin/bash ../../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.
>> -I../../ql  -I../.. -I../..   -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP
>> -MF .deps/averagebmacoupon.Tpo -c -o averagebmacoupon.lo
>> averagebmacoupon.cpp
>> libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../ql -I../.. -I../..
>> -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP -MF
>> .deps/averagebmacoupon.Tpo -c averagebmacoupon.cpp  -fPIC -DPIC -o
>> .libs/averagebmacoupon.o In file included from
>> ../../ql/patterns/observable.hpp:29:0,
>>                  from ../../ql/event.hpp:29,
>>                  from ../../ql/cashflow.hpp:28,
>>                  from ../../ql/cashflows/coupon.hpp:29,
>>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>>                  from averagebmacoupon.cpp:21:
>> ../../ql/patterns/observable.hpp: In member function 'void
>> QuantLib::Observable::notifyObservers()':
>> ../../ql/errors.hpp:121:70: error: use of deleted function
>> 'QuantLib::Error::Error(const QuantLib::Error&)'
>>                            BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
>>                                                                      
>> ^
>> ../../ql/patterns/observable.hpp:139:9: note: in expansion of macro
>> 'QL_ENSURE'
>>          QL_ENSURE(successful,
>>          ^
>> ../../ql/errors.hpp:39:11: note: 'QuantLib::Error::Error(const
>> QuantLib::Error&)' is implicitly deleted because the default
>> definition would be ill-formed:
>>      class Error : public std::exception {
>>            ^
>> ../../ql/errors.hpp:39:11: error: use of deleted function
>> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
>> boost::shared_ptr<std::basic_string<char> >&)'
>> In file included from /usr/include/boost/shared_ptr.hpp:17:0,
>>                  from ../../ql/errors.hpp:31,
>>                  from ../../ql/patterns/observable.hpp:29,
>>                  from ../../ql/event.hpp:29,
>>                  from ../../ql/cashflow.hpp:28,
>>                  from ../../ql/cashflows/coupon.hpp:29,
>>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>>                  from averagebmacoupon.cpp:21:
>> /usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note:
>> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
>> boost::shared_ptr<std::basic_string<char> >&)' is implicitly declared
>> as deleted because 'boost::shared_ptr<std::basic_string<char> >'
>> declares a move constructor or move assignment operator
>>
>> Any idea about this?
>>
>> Regards,
>> Cheng
>>
>> -----邮件原件-----
>> 发件人: Peter Caspers [mailto:[hidden email]]
>> 发送时间: 2015年1月11日 17:34
>> 收件人: Cheng Li
>> 抄送: QuantLib Mailing Lists
>> 主题: Re: 答复: [Quantlib-dev] Adjoint Greeks
>>
>> Hi Cheng,
>>
>> you are welcome and many thanks for your interest. However you seem
>> to work on my master branch which I consider as my private workspace
>> (with some unfinished things in it). Sorry, I wasn't expecting guests
>> here :-)
>>
>> You probably want to try out the adjoint branch instead. This should
>> compile.
>>
>> Thanks
>> Peter
>>
>> On 11 January 2015 at 10:16, Cheng Li <[hidden email]> wrote:
>> > Hi Peter,
>> >
>> > Thank you for your kindly offer these new stuff for all of us!
>> >
>> > I have cloned your branch and tried to build it on my machine. When
>> > it was building the example/InterestRateSmile, the compiler
>> > complained as
>> > following:
>> >
>> > InterestRateSmiles.cpp: In function ‘void zabrExamples()’:
>> > InterestRateSmiles.cpp:64:39: error: type/value mismatch at
>> > argument 1 in template parameter list for ‘template<class T> class
>> > boost::shared_ptr’
>> >      boost::shared_ptr<ZabrSmileSection> zabrln =
>> >                                        ^
>> > InterestRateSmiles.cpp:64:39: error:   expected a type, got
>> > ‘ZabrSmileSection’
>> > InterestRateSmiles.cpp:64:48: error: invalid type in declaration
>> > before ‘=’ token
>> >      boost::shared_ptr<ZabrSmileSection> zabrln =
>> >                                                 ^
>> > InterestRateSmiles.cpp:67:13: error: ‘template<class Evaluation>
>> > class QuantLib::ZabrSmileSection’ used without template parameters
>> >              ZabrSmileSection::ShortMaturityLognormal);
>> >
>> > I am not sure what is the problem... Is it due to missing template
>> > argument for ZabrSmileSection?
>> > My compiler is g++ 4.8.2 and with parameter "-std=c++11 -O3"
>> >
>> > BTW, I found that quadraticlfm.hpp and quadraticlfm.cpp are missing
>> > from the branch. However when I adjust the makefile.am to exclude
>> > them out the compiling process works fine.
>> >
>> >
>> > Regards,
>> > Cheng
>> >
>> > -----邮件原件-----
>> > 发件人: Peter Caspers [mailto:[hidden email]]
>> > 发送时间: 2015年1月9日 3:57
>> > 收件人: Luigi Ballabio
>> > 抄送: QuantLib Mailing Lists; Ferdinando M. Ametrano
>> > 主题: Re: [Quantlib-dev] Adjoint Greeks
>> >
>> > I thought in a realistic application you would always need both
>> > worlds, CppAD<double> for adjoint greek engines and double for all
>> > the rest. I wonder what it would mean in terms of performance and
>> > memory if you replace double by CppAD<double> in general. I can
>> > maybe just stress test this a bit though.
>> > Peter
>> >
>> >
>> >
>> > On 7 January 2015 at 10:23, Luigi Ballabio
>> > <[hidden email]>
>> > wrote:
>> >> Switching Real would force you to fix compilation problems all
>> >> over the library, instead of just in the code you're converting.
>> >>
>> >> If you wanted to go the route of #defining the type, I guess you
>> >> could introduce another type (ADReal or something) and switch the
>> >> coverted code to use it.
>> >> Which might or might not be a good idea; you wouldn't be forced to
>> >> templatize the code, but you would have to choose AD or not at
>> >> compilation time, instead that having the choice to use both for
>> >> different
>> > tasks. Hmm...
>> >>
>> >> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we
>> >> got a lot of presents this Christmas :)
>> >>
>> >> Luigi
>> >>
>> >>
>> >>
>> >> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
>> >> <[hidden email]> wrote:
>> >>>
>> >>> Thank you Peter, it sounds exciting and promising.
>> >>> Why haven't you considered to just change the Real typedef from
>> >>> double to CppAD::AD<double>?
>> >>>
>> >>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers
>> >>> <[hidden email]>
>> >>> wrote:
>> >>>>
>> >>>> Hello all,
>> >>>>
>> >>>> happy new year.
>> >>>>
>> >>>> I revisited Ferdinando's comments on adjoint greeks during our
>> >>>> December workshop and started to play around with that idea.
>> >>>>
>> >>>> The approach I am trying to follow is to adapt the ql library
>> >>>> code so that automatic differentiation _tools_ can be used with
>> >>>> it in a transparent way. This is opposed to writing special
>> >>>> adjoint engines by _hand_ like e.g. advocated in Capriotti,
>> >>>> Giles, Algorithmic
>> >>>> Differentiation: Adjoint Greeks Made Easy. The relatively small
>> >>>> and homogeneous code basis of ql seems to allow for this kind of
>> >>>> more fundamental approach.
>> >>>>
>> >>>> I wrote a bit about my first steps in my blog
>> >>>>
>> >>>> http://quantlib.wordpress.com/
>> >>>>
>> >>>> and forked a new branch from Luigi's current master on github
>> >>>>
>> >>>> https://github.com/pcaspers/quantlib/tree/adjoint
>> >>>>
>> >>>> where I started to template'ize the library in order to allow
>> >>>> for AD tools to hook in. There are already first working
>> >>>> examples (see the
>> >>>> blog) and I am starting to feel confident that the approach
>> >>>> might work as a whole, might be doable in a reasonable amount of
>> >>>> time and is worthwhile following.
>> >>>>
>> >>>> About the feasibility: The library seems to consist of roughly
>> >>>> 376k lines of code currently (all hpp and cpp files under ql /
>> >>>> ). From that we can subtract "data" files
>> >>>>
>> >>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>> >>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>> >>>> 14495 ./math/randomnumbers/latticerules.cpp
>> >>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>> >>>>
>> >>>> which leaves us with 251k lines. It seems that I have already
>> >>>> reviewed and adapted around 14k lines, which is 5% and which
>> >>>> took me approximately 60 hours. This gives an estimation of 130
>> >>>> person days still left to do. For the whole (!) library where
>> >>>> already parts will make much sense and give interesting applications. E.g.
>> >>>> excluding experimental classes (90k) and the market model (25k)
>> >>>> reduces the estimate already to 65 person days to go.
>> >>>>
>> >>>> I would be interested in your opinions on that, in particular
>> >>>> regarding the design choices to make (better now than later :-) ).
>> >>>>
>> >>>> I'd also be grateful for people supporting the development by
>> >>>> forking the adjoint branch and sending pull requests with
>> >>>> adapted code
>> > pieces.
>> >>>> My personal next steps would be
>> >>>> - rate deltas for Legs / Swap instruments
>> >>>> - rate vegas for vanilla interest rate options
>> >>>> - Hull White model
>> >>>>
>> >>>> What do you think ?
>> >>>>
>> >>>> Thank you
>> >>>> Peter
>> >>>>
>> >>>>
>> >>>> ----------------------------------------------------------------
>> >>>> ---
>> >>>> -
>> >>>> ---------- Dive into the World of Parallel Programming! The Go
>> >>>> Parallel Website, sponsored by Intel and developed in
>> >>>> partnership with Slashdot Media, is your hub for all things
>> >>>> parallel software development, from weekly thought leadership
>> >>>> blogs to news, videos, case studies, tutorials and more. Take a
>> >>>> look and join the conversation now.
>> >>>> http://goparallel.sourceforge.net 
>> >>>> _______________________________________________
>> >>>> QuantLib-dev mailing list
>> >>>> [hidden email]
>> >>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>> >>>
>> >>>
>> >>>
>> >>>
>> >>> -----------------------------------------------------------------
>> >>> ---
>> >>> -
>> >>> --------- Dive into the World of Parallel Programming! The Go
>> >>> Parallel Website, sponsored by Intel and developed in partnership
>> >>> with Slashdot Media, is your hub for all things parallel software
>> >>> development, from weekly thought leadership blogs to news,
>> >>> videos, case studies, tutorials and more. Take a look and join
>> >>> the conversation now. http://goparallel.sourceforge.net 
>> >>> _______________________________________________
>> >>> QuantLib-dev mailing list
>> >>> [hidden email]
>> >>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>> >>>
>> >>
>> >>
>> >>
>> >> --
>> >> <https://implementingquantlib.blogspot.com>
>> >> <https://twitter.com/lballabio>
>> >
>> > -------------------------------------------------------------------
>> > ---
>> > ------
>> > --
>> > Dive into the World of Parallel Programming! The Go Parallel
>> > Website, sponsored by Intel and developed in partnership with
>> > Slashdot Media, is your hub for all things parallel software
>> > development, from weekly thought leadership blogs to news, videos,
>> > case studies, tutorials and more. Take a look and join the conversation now.
>> > http://goparallel.sourceforge.net
>> > _______________________________________________
>> > QuantLib-dev mailing list
>> > [hidden email]
>> > https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>> >
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> --------- New Year. New Location. New Benefits. New Data Center in
>> Ashburn, VA.
>> GigeNET is offering a free month of service with a new server in Ashburn.
>> Choose from 2 high performing configs, both with 100TB of bandwidth.
>> Higher redundancy.Lower latency.Increased capacity.Completely compliant.
>> vanity: www.gigenet.com
>> _______________________________________________
>> QuantLib-dev mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev


------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

答复: 答复: Adjoint Greeks

cheng li
In reply to this post by cheng li

Hi Luigi,

 

I think I can not to avoid to use c++ 11 now.. In Peter’s branch much c++ 11 stuff is used, e.g. constexpr…

 

Regards,

Cheng

 

发件人: Luigi Ballabio [mailto:[hidden email]]
发送时间: 2015112 14:28
收件人: Cheng Li
抄送: QuantLib developers; Peter Caspers
主题: Re: [Quantlib-dev] 答复: Adjoint Greeks

 

Don't use C++11.

Luigi

On Jan 12, 2015 4:53 AM, "cheng li" <[hidden email]> wrote:

Hi peter,

I have switched to adjoint brank. However I am still facing some problem... I use g++ 4.9.2 with parameter "-std=c++11 -O3"

/bin/bash ../../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../ql  -I../.. -I../..   -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP -MF .deps/averagebmacoupon.Tpo -c -o averagebmacoupon.lo averagebmacoupon.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../ql -I../.. -I../.. -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP -MF .deps/averagebmacoupon.Tpo -c averagebmacoupon.cpp  -fPIC -DPIC -o .libs/averagebmacoupon.o In file included from ../../ql/patterns/observable.hpp:29:0,
                 from ../../ql/event.hpp:29,
                 from ../../ql/cashflow.hpp:28,
                 from ../../ql/cashflows/coupon.hpp:29,
                 from ../../ql/cashflows/floatingratecoupon.hpp:33,
                 from ../../ql/cashflows/averagebmacoupon.hpp:28,
                 from averagebmacoupon.cpp:21:
../../ql/patterns/observable.hpp: In member function 'void QuantLib::Observable::notifyObservers()':
../../ql/errors.hpp:121:70: error: use of deleted function 'QuantLib::Error::Error(const QuantLib::Error&)'
                           BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
                                                                      ^
../../ql/patterns/observable.hpp:139:9: note: in expansion of macro 'QL_ENSURE'
         QL_ENSURE(successful,
         ^
../../ql/errors.hpp:39:11: note: 'QuantLib::Error::Error(const QuantLib::Error&)' is implicitly deleted because the default definition would be ill-formed:
     class Error : public std::exception {
           ^
../../ql/errors.hpp:39:11: error: use of deleted function 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const boost::shared_ptr<std::basic_string<char> >&)'
In file included from /usr/include/boost/shared_ptr.hpp:17:0,
                 from ../../ql/errors.hpp:31,
                 from ../../ql/patterns/observable.hpp:29,
                 from ../../ql/event.hpp:29,
                 from ../../ql/cashflow.hpp:28,
                 from ../../ql/cashflows/coupon.hpp:29,
                 from ../../ql/cashflows/floatingratecoupon.hpp:33,
                 from ../../ql/cashflows/averagebmacoupon.hpp:28,
                 from averagebmacoupon.cpp:21:
/usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note: 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const boost::shared_ptr<std::basic_string<char> >&)' is implicitly declared as deleted because 'boost::shared_ptr<std::basic_string<char> >' declares a move constructor or move assignment operator

Any idea about this?

Regards,
Cheng

-----
邮件原件-----
发件人: Peter Caspers [mailto:[hidden email]]
发送时间: 2015111 17:34
收件人: Cheng Li
抄送: QuantLib Mailing Lists
主题: Re: 答复: [Quantlib-dev] Adjoint Greeks

Hi Cheng,

you are welcome and many thanks for your interest. However you seem to work on my master branch which I consider as my private workspace (with some unfinished things in it). Sorry, I wasn't expecting guests here :-)

You probably want to try out the adjoint branch instead. This should compile.

Thanks
Peter

On 11 January 2015 at 10:16, Cheng Li <[hidden email]> wrote:


> Hi Peter,
>
> Thank you for your kindly offer these new stuff for all of us!
>
> I have cloned your branch and tried to build it on my machine. When it
> was building the example/InterestRateSmile, the compiler complained as
> following:
>
> InterestRateSmiles.cpp: In function ‘void zabrExamples()’:
> InterestRateSmiles.cpp:64:39: error: type/value mismatch at argument 1
> in template parameter list for ‘template<class T> class boost::shared_ptr’
>      boost::shared_ptr<ZabrSmileSection> zabrln =
>                                        ^
> InterestRateSmiles.cpp:64:39: error:   expected a type, got
> ‘ZabrSmileSection’
> InterestRateSmiles.cpp:64:48: error: invalid type in declaration
> before ‘=’ token
>      boost::shared_ptr<ZabrSmileSection> zabrln =
>                                                 ^
> InterestRateSmiles.cpp:67:13: error: ‘template<class Evaluation> class
> QuantLib::ZabrSmileSection’ used without template parameters
>              ZabrSmileSection::ShortMaturityLognormal);
>
> I am not sure what is the problem... Is it due to missing template
> argument for ZabrSmileSection?
> My compiler is g++ 4.8.2 and with parameter "-std=c++11 -O3"
>
> BTW, I found that quadraticlfm.hpp and quadraticlfm.cpp are missing
> from the branch. However when I adjust the makefile.am to exclude them
> out the compiling process works fine.
>
>
> Regards,
> Cheng
>
> -----邮件原件-----
>
发件人: Peter Caspers [mailto:[hidden email]]
>
发送时间: 201519 3:57
>
收件人: Luigi Ballabio
>
抄送: QuantLib Mailing Lists; Ferdinando M. Ametrano
>
主题: Re: [Quantlib-dev] Adjoint Greeks
>
> I thought in a realistic application you would always need both
> worlds, CppAD<double> for adjoint greek engines and double for all the
> rest. I wonder what it would mean in terms of performance and memory
> if you replace double by CppAD<double> in general. I can maybe just
> stress test this a bit though.
> Peter
>
>
>
> On 7 January 2015 at 10:23, Luigi Ballabio <[hidden email]> wrote:
>> Switching Real would force you to fix compilation problems all over
>> the library, instead of just in the code you're converting.
>>
>> If you wanted to go the route of #defining the type, I guess you
>> could introduce another type (ADReal or something) and switch the
>> coverted code to use it.
>> Which might or might not be a good idea; you wouldn't be forced to
>> templatize the code, but you would have to choose AD or not at
>> compilation time, instead that having the choice to use both for
>> different
> tasks. Hmm...
>>
>> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we got
>> a lot of presents this Christmas :)
>>
>> Luigi
>>
>>
>>
>> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
>> <[hidden email]> wrote:
>>>
>>> Thank you Peter, it sounds exciting and promising.
>>> Why haven't you considered to just change the Real typedef from
>>> double to CppAD::AD<double>?
>>>
>>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers
>>> <[hidden email]>
>>> wrote:
>>>>
>>>> Hello all,
>>>>
>>>> happy new year.
>>>>
>>>> I revisited Ferdinando's comments on adjoint greeks during our
>>>> December workshop and started to play around with that idea.
>>>>
>>>> The approach I am trying to follow is to adapt the ql library code
>>>> so that automatic differentiation _tools_ can be used with it in a
>>>> transparent way. This is opposed to writing special adjoint engines
>>>> by _hand_ like e.g. advocated in Capriotti, Giles, Algorithmic
>>>> Differentiation: Adjoint Greeks Made Easy. The relatively small and
>>>> homogeneous code basis of ql seems to allow for this kind of more
>>>> fundamental approach.
>>>>
>>>> I wrote a bit about my first steps in my blog
>>>>
>>>> http://quantlib.wordpress.com/
>>>>
>>>> and forked a new branch from Luigi's current master on github
>>>>
>>>> https://github.com/pcaspers/quantlib/tree/adjoint
>>>>
>>>> where I started to template'ize the library in order to allow for
>>>> AD tools to hook in. There are already first working examples (see
>>>> the
>>>> blog) and I am starting to feel confident that the approach might
>>>> work as a whole, might be doable in a reasonable amount of time and
>>>> is worthwhile following.
>>>>
>>>> About the feasibility: The library seems to consist of roughly 376k
>>>> lines of code currently (all hpp and cpp files under ql / ). From
>>>> that we can subtract "data" files
>>>>
>>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>>>> 14495 ./math/randomnumbers/latticerules.cpp
>>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>>>>
>>>> which leaves us with 251k lines. It seems that I have already
>>>> reviewed and adapted around 14k lines, which is 5% and which took
>>>> me approximately 60 hours. This gives an estimation of 130 person
>>>> days still left to do. For the whole (!) library where already
>>>> parts will make much sense and give interesting applications. E.g.
>>>> excluding experimental classes (90k) and the market model (25k)
>>>> reduces the estimate already to 65 person days to go.
>>>>
>>>> I would be interested in your opinions on that, in particular
>>>> regarding the design choices to make (better now than later :-) ).
>>>>
>>>> I'd also be grateful for people supporting the development by
>>>> forking the adjoint branch and sending pull requests with adapted
>>>> code
> pieces.
>>>> My personal next steps would be
>>>> - rate deltas for Legs / Swap instruments
>>>> - rate vegas for vanilla interest rate options
>>>> - Hull White model
>>>>
>>>> What do you think ?
>>>>
>>>> Thank you
>>>> Peter
>>>>
>>>>
>>>> -------------------------------------------------------------------
>>>> -
>>>> ---------- Dive into the World of Parallel Programming! The Go
>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>> with Slashdot Media, is your hub for all things parallel software
>>>> development, from weekly thought leadership blogs to news, videos,
>>>> case studies, tutorials and more. Take a look and join the
>>>> conversation now. http://goparallel.sourceforge.net
>>>> _______________________________________________
>>>> QuantLib-dev mailing list
>>>> [hidden email]
>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>
>>>
>>>
>>>
>>> --------------------------------------------------------------------
>>> -
>>> --------- Dive into the World of Parallel Programming! The Go
>>> Parallel Website, sponsored by Intel and developed in partnership
>>> with Slashdot Media, is your hub for all things parallel software
>>> development, from weekly thought leadership blogs to news, videos,
>>> case studies, tutorials and more. Take a look and join the
>>> conversation now. http://goparallel.sourceforge.net
>>> _______________________________________________
>>> QuantLib-dev mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>
>>
>>
>>
>> --
>> <https://implementingquantlib.blogspot.com>
>> <https://twitter.com/lballabio>
>
> ----------------------------------------------------------------------
> ------
> --
> Dive into the World of Parallel Programming! The Go Parallel Website,
> sponsored by Intel and developed in partnership with Slashdot Media,
> is your hub for all things parallel software development, from weekly
> thought leadership blogs to news, videos, case studies, tutorials and
> more. Take a look and join the conversation now.
> http://goparallel.sourceforge.net
> _______________________________________________
> QuantLib-dev mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>



------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
vanity: www.gigenet.com
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev


------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: 答复: 答复: Adjoint Greeks

Peter Caspers-4
I will clean up the adjoint branch to make it c++03 compliant. Unless
QuantLib 2.0 is out before the adjoint conversion has finished :-)

On 13 January 2015 at 02:28, cheng li <[hidden email]> wrote:

> Hi Luigi,
>
>
>
> I think I can not to avoid to use c++ 11 now.. In Peter’s branch much c++ 11
> stuff is used, e.g. constexpr…
>
>
>
> Regards,
>
> Cheng
>
>
>
> 发件人: Luigi Ballabio [mailto:[hidden email]]
> 发送时间: 2015年1月12日 14:28
> 收件人: Cheng Li
> 抄送: QuantLib developers; Peter Caspers
> 主题: Re: [Quantlib-dev] 答复: Adjoint Greeks
>
>
>
> Don't use C++11.
>
> Luigi
>
> On Jan 12, 2015 4:53 AM, "cheng li" <[hidden email]> wrote:
>
> Hi peter,
>
> I have switched to adjoint brank. However I am still facing some problem...
> I use g++ 4.9.2 with parameter "-std=c++11 -O3"
>
> /bin/bash ../../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.
> -I../../ql  -I../.. -I../..   -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP
> -MF .deps/averagebmacoupon.Tpo -c -o averagebmacoupon.lo
> averagebmacoupon.cpp
> libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../ql -I../.. -I../..
> -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP -MF
> .deps/averagebmacoupon.Tpo -c averagebmacoupon.cpp  -fPIC -DPIC -o
> .libs/averagebmacoupon.o In file included from
> ../../ql/patterns/observable.hpp:29:0,
>                  from ../../ql/event.hpp:29,
>                  from ../../ql/cashflow.hpp:28,
>                  from ../../ql/cashflows/coupon.hpp:29,
>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>                  from averagebmacoupon.cpp:21:
> ../../ql/patterns/observable.hpp: In member function 'void
> QuantLib::Observable::notifyObservers()':
> ../../ql/errors.hpp:121:70: error: use of deleted function
> 'QuantLib::Error::Error(const QuantLib::Error&)'
>                            BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
>                                                                       ^
> ../../ql/patterns/observable.hpp:139:9: note: in expansion of macro
> 'QL_ENSURE'
>          QL_ENSURE(successful,
>          ^
> ../../ql/errors.hpp:39:11: note: 'QuantLib::Error::Error(const
> QuantLib::Error&)' is implicitly deleted because the default definition
> would be ill-formed:
>      class Error : public std::exception {
>            ^
> ../../ql/errors.hpp:39:11: error: use of deleted function
> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
> boost::shared_ptr<std::basic_string<char> >&)'
> In file included from /usr/include/boost/shared_ptr.hpp:17:0,
>                  from ../../ql/errors.hpp:31,
>                  from ../../ql/patterns/observable.hpp:29,
>                  from ../../ql/event.hpp:29,
>                  from ../../ql/cashflow.hpp:28,
>                  from ../../ql/cashflows/coupon.hpp:29,
>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>                  from averagebmacoupon.cpp:21:
> /usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note:
> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
> boost::shared_ptr<std::basic_string<char> >&)' is implicitly declared as
> deleted because 'boost::shared_ptr<std::basic_string<char> >' declares a
> move constructor or move assignment operator
>
> Any idea about this?
>
> Regards,
> Cheng
>
> -----邮件原件-----
> 发件人: Peter Caspers [mailto:[hidden email]]
> 发送时间: 2015年1月11日 17:34
> 收件人: Cheng Li
> 抄送: QuantLib Mailing Lists
> 主题: Re: 答复: [Quantlib-dev] Adjoint Greeks
>
> Hi Cheng,
>
> you are welcome and many thanks for your interest. However you seem to work
> on my master branch which I consider as my private workspace (with some
> unfinished things in it). Sorry, I wasn't expecting guests here :-)
>
> You probably want to try out the adjoint branch instead. This should
> compile.
>
> Thanks
> Peter
>
> On 11 January 2015 at 10:16, Cheng Li <[hidden email]> wrote:
>> Hi Peter,
>>
>> Thank you for your kindly offer these new stuff for all of us!
>>
>> I have cloned your branch and tried to build it on my machine. When it
>> was building the example/InterestRateSmile, the compiler complained as
>> following:
>>
>> InterestRateSmiles.cpp: In function ‘void zabrExamples()’:
>> InterestRateSmiles.cpp:64:39: error: type/value mismatch at argument 1
>> in template parameter list for ‘template<class T> class boost::shared_ptr’
>>      boost::shared_ptr<ZabrSmileSection> zabrln =
>>                                        ^
>> InterestRateSmiles.cpp:64:39: error:   expected a type, got
>> ‘ZabrSmileSection’
>> InterestRateSmiles.cpp:64:48: error: invalid type in declaration
>> before ‘=’ token
>>      boost::shared_ptr<ZabrSmileSection> zabrln =
>>                                                 ^
>> InterestRateSmiles.cpp:67:13: error: ‘template<class Evaluation> class
>> QuantLib::ZabrSmileSection’ used without template parameters
>>              ZabrSmileSection::ShortMaturityLognormal);
>>
>> I am not sure what is the problem... Is it due to missing template
>> argument for ZabrSmileSection?
>> My compiler is g++ 4.8.2 and with parameter "-std=c++11 -O3"
>>
>> BTW, I found that quadraticlfm.hpp and quadraticlfm.cpp are missing
>> from the branch. However when I adjust the makefile.am to exclude them
>> out the compiling process works fine.
>>
>>
>> Regards,
>> Cheng
>>
>> -----邮件原件-----
>> 发件人: Peter Caspers [mailto:[hidden email]]
>> 发送时间: 2015年1月9日 3:57
>> 收件人: Luigi Ballabio
>> 抄送: QuantLib Mailing Lists; Ferdinando M. Ametrano
>> 主题: Re: [Quantlib-dev] Adjoint Greeks
>>
>> I thought in a realistic application you would always need both
>> worlds, CppAD<double> for adjoint greek engines and double for all the
>> rest. I wonder what it would mean in terms of performance and memory
>> if you replace double by CppAD<double> in general. I can maybe just
>> stress test this a bit though.
>> Peter
>>
>>
>>
>> On 7 January 2015 at 10:23, Luigi Ballabio <[hidden email]>
>> wrote:
>>> Switching Real would force you to fix compilation problems all over
>>> the library, instead of just in the code you're converting.
>>>
>>> If you wanted to go the route of #defining the type, I guess you
>>> could introduce another type (ADReal or something) and switch the
>>> coverted code to use it.
>>> Which might or might not be a good idea; you wouldn't be forced to
>>> templatize the code, but you would have to choose AD or not at
>>> compilation time, instead that having the choice to use both for
>>> different
>> tasks. Hmm...
>>>
>>> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we got
>>> a lot of presents this Christmas :)
>>>
>>> Luigi
>>>
>>>
>>>
>>> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
>>> <[hidden email]> wrote:
>>>>
>>>> Thank you Peter, it sounds exciting and promising.
>>>> Why haven't you considered to just change the Real typedef from
>>>> double to CppAD::AD<double>?
>>>>
>>>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers
>>>> <[hidden email]>
>>>> wrote:
>>>>>
>>>>> Hello all,
>>>>>
>>>>> happy new year.
>>>>>
>>>>> I revisited Ferdinando's comments on adjoint greeks during our
>>>>> December workshop and started to play around with that idea.
>>>>>
>>>>> The approach I am trying to follow is to adapt the ql library code
>>>>> so that automatic differentiation _tools_ can be used with it in a
>>>>> transparent way. This is opposed to writing special adjoint engines
>>>>> by _hand_ like e.g. advocated in Capriotti, Giles, Algorithmic
>>>>> Differentiation: Adjoint Greeks Made Easy. The relatively small and
>>>>> homogeneous code basis of ql seems to allow for this kind of more
>>>>> fundamental approach.
>>>>>
>>>>> I wrote a bit about my first steps in my blog
>>>>>
>>>>> http://quantlib.wordpress.com/
>>>>>
>>>>> and forked a new branch from Luigi's current master on github
>>>>>
>>>>> https://github.com/pcaspers/quantlib/tree/adjoint
>>>>>
>>>>> where I started to template'ize the library in order to allow for
>>>>> AD tools to hook in. There are already first working examples (see
>>>>> the
>>>>> blog) and I am starting to feel confident that the approach might
>>>>> work as a whole, might be doable in a reasonable amount of time and
>>>>> is worthwhile following.
>>>>>
>>>>> About the feasibility: The library seems to consist of roughly 376k
>>>>> lines of code currently (all hpp and cpp files under ql / ). From
>>>>> that we can subtract "data" files
>>>>>
>>>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>>>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>>>>> 14495 ./math/randomnumbers/latticerules.cpp
>>>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>>>>>
>>>>> which leaves us with 251k lines. It seems that I have already
>>>>> reviewed and adapted around 14k lines, which is 5% and which took
>>>>> me approximately 60 hours. This gives an estimation of 130 person
>>>>> days still left to do. For the whole (!) library where already
>>>>> parts will make much sense and give interesting applications. E.g.
>>>>> excluding experimental classes (90k) and the market model (25k)
>>>>> reduces the estimate already to 65 person days to go.
>>>>>
>>>>> I would be interested in your opinions on that, in particular
>>>>> regarding the design choices to make (better now than later :-) ).
>>>>>
>>>>> I'd also be grateful for people supporting the development by
>>>>> forking the adjoint branch and sending pull requests with adapted
>>>>> code
>> pieces.
>>>>> My personal next steps would be
>>>>> - rate deltas for Legs / Swap instruments
>>>>> - rate vegas for vanilla interest rate options
>>>>> - Hull White model
>>>>>
>>>>> What do you think ?
>>>>>
>>>>> Thank you
>>>>> Peter
>>>>>
>>>>>
>>>>> -------------------------------------------------------------------
>>>>> -
>>>>> ---------- Dive into the World of Parallel Programming! The Go
>>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>>> with Slashdot Media, is your hub for all things parallel software
>>>>> development, from weekly thought leadership blogs to news, videos,
>>>>> case studies, tutorials and more. Take a look and join the
>>>>> conversation now. http://goparallel.sourceforge.net
>>>>> _______________________________________________
>>>>> QuantLib-dev mailing list
>>>>> [hidden email]
>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>
>>>>
>>>>
>>>>
>>>> --------------------------------------------------------------------
>>>> -
>>>> --------- Dive into the World of Parallel Programming! The Go
>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>> with Slashdot Media, is your hub for all things parallel software
>>>> development, from weekly thought leadership blogs to news, videos,
>>>> case studies, tutorials and more. Take a look and join the
>>>> conversation now. http://goparallel.sourceforge.net
>>>> _______________________________________________
>>>> QuantLib-dev mailing list
>>>> [hidden email]
>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>
>>>
>>>
>>>
>>> --
>>> <https://implementingquantlib.blogspot.com>
>>> <https://twitter.com/lballabio>
>>
>> ----------------------------------------------------------------------
>> ------
>> --
>> Dive into the World of Parallel Programming! The Go Parallel Website,
>> sponsored by Intel and developed in partnership with Slashdot Media,
>> is your hub for all things parallel software development, from weekly
>> thought leadership blogs to news, videos, case studies, tutorials and
>> more. Take a look and join the conversation now.
>> http://goparallel.sourceforge.net
>> _______________________________________________
>> QuantLib-dev mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>
>
>
>
> ------------------------------------------------------------------------------
> New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
> GigeNET is offering a free month of service with a new server in Ashburn.
> Choose from 2 high performing configs, both with 100TB of bandwidth.
> Higher redundancy.Lower latency.Increased capacity.Completely compliant.
> vanity: www.gigenet.com
> _______________________________________________
> QuantLib-dev mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/quantlib-dev

------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

答复: 答复: 答复: Adjoint Greeks

cheng li
Hi Peter,

I'll definitely have a try. Thank you :)

Actually yesterday I tried on another machine with g++ 4.8.2 and O2 setting, then everything works fine. I think my previous problem may be due to O3.

Regards,
Cheng

-----邮件原件-----
发件人: Peter Caspers [mailto:[hidden email]]
发送时间: 2015年1月13日 21:18
收件人: cheng li
抄送: Luigi Ballabio; QuantLib developers
主题: Re: 答复: [Quantlib-dev] 答复: Adjoint Greeks

I will clean up the adjoint branch to make it c++03 compliant. Unless QuantLib 2.0 is out before the adjoint conversion has finished :-)

On 13 January 2015 at 02:28, cheng li <[hidden email]> wrote:

> Hi Luigi,
>
>
>
> I think I can not to avoid to use c++ 11 now.. In Peter’s branch much
> c++ 11 stuff is used, e.g. constexpr…
>
>
>
> Regards,
>
> Cheng
>
>
>
> 发件人: Luigi Ballabio [mailto:[hidden email]]
> 发送时间: 2015年1月12日 14:28
> 收件人: Cheng Li
> 抄送: QuantLib developers; Peter Caspers
> 主题: Re: [Quantlib-dev] 答复: Adjoint Greeks
>
>
>
> Don't use C++11.
>
> Luigi
>
> On Jan 12, 2015 4:53 AM, "cheng li" <[hidden email]> wrote:
>
> Hi peter,
>
> I have switched to adjoint brank. However I am still facing some problem...
> I use g++ 4.9.2 with parameter "-std=c++11 -O3"
>
> /bin/bash ../../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.
> -I../../ql  -I../.. -I../..   -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP
> -MF .deps/averagebmacoupon.Tpo -c -o averagebmacoupon.lo
> averagebmacoupon.cpp
> libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../ql -I../.. -I../..
> -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP -MF
> .deps/averagebmacoupon.Tpo -c averagebmacoupon.cpp  -fPIC -DPIC -o
> .libs/averagebmacoupon.o In file included from
> ../../ql/patterns/observable.hpp:29:0,
>                  from ../../ql/event.hpp:29,
>                  from ../../ql/cashflow.hpp:28,
>                  from ../../ql/cashflows/coupon.hpp:29,
>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>                  from averagebmacoupon.cpp:21:
> ../../ql/patterns/observable.hpp: In member function 'void
> QuantLib::Observable::notifyObservers()':
> ../../ql/errors.hpp:121:70: error: use of deleted function
> 'QuantLib::Error::Error(const QuantLib::Error&)'
>                            BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
>                                                                      
> ^
> ../../ql/patterns/observable.hpp:139:9: note: in expansion of macro
> 'QL_ENSURE'
>          QL_ENSURE(successful,
>          ^
> ../../ql/errors.hpp:39:11: note: 'QuantLib::Error::Error(const
> QuantLib::Error&)' is implicitly deleted because the default
> definition would be ill-formed:
>      class Error : public std::exception {
>            ^
> ../../ql/errors.hpp:39:11: error: use of deleted function
> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
> boost::shared_ptr<std::basic_string<char> >&)'
> In file included from /usr/include/boost/shared_ptr.hpp:17:0,
>                  from ../../ql/errors.hpp:31,
>                  from ../../ql/patterns/observable.hpp:29,
>                  from ../../ql/event.hpp:29,
>                  from ../../ql/cashflow.hpp:28,
>                  from ../../ql/cashflows/coupon.hpp:29,
>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>                  from averagebmacoupon.cpp:21:
> /usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note:
> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
> boost::shared_ptr<std::basic_string<char> >&)' is implicitly declared
> as deleted because 'boost::shared_ptr<std::basic_string<char> >'
> declares a move constructor or move assignment operator
>
> Any idea about this?
>
> Regards,
> Cheng
>
> -----邮件原件-----
> 发件人: Peter Caspers [mailto:[hidden email]]
> 发送时间: 2015年1月11日 17:34
> 收件人: Cheng Li
> 抄送: QuantLib Mailing Lists
> 主题: Re: 答复: [Quantlib-dev] Adjoint Greeks
>
> Hi Cheng,
>
> you are welcome and many thanks for your interest. However you seem to
> work on my master branch which I consider as my private workspace
> (with some unfinished things in it). Sorry, I wasn't expecting guests
> here :-)
>
> You probably want to try out the adjoint branch instead. This should
> compile.
>
> Thanks
> Peter
>
> On 11 January 2015 at 10:16, Cheng Li <[hidden email]> wrote:
>> Hi Peter,
>>
>> Thank you for your kindly offer these new stuff for all of us!
>>
>> I have cloned your branch and tried to build it on my machine. When
>> it was building the example/InterestRateSmile, the compiler
>> complained as
>> following:
>>
>> InterestRateSmiles.cpp: In function ‘void zabrExamples()’:
>> InterestRateSmiles.cpp:64:39: error: type/value mismatch at argument
>> 1 in template parameter list for ‘template<class T> class boost::shared_ptr’
>>      boost::shared_ptr<ZabrSmileSection> zabrln =
>>                                        ^
>> InterestRateSmiles.cpp:64:39: error:   expected a type, got
>> ‘ZabrSmileSection’
>> InterestRateSmiles.cpp:64:48: error: invalid type in declaration
>> before ‘=’ token
>>      boost::shared_ptr<ZabrSmileSection> zabrln =
>>                                                 ^
>> InterestRateSmiles.cpp:67:13: error: ‘template<class Evaluation>
>> class QuantLib::ZabrSmileSection’ used without template parameters
>>              ZabrSmileSection::ShortMaturityLognormal);
>>
>> I am not sure what is the problem... Is it due to missing template
>> argument for ZabrSmileSection?
>> My compiler is g++ 4.8.2 and with parameter "-std=c++11 -O3"
>>
>> BTW, I found that quadraticlfm.hpp and quadraticlfm.cpp are missing
>> from the branch. However when I adjust the makefile.am to exclude
>> them out the compiling process works fine.
>>
>>
>> Regards,
>> Cheng
>>
>> -----邮件原件-----
>> 发件人: Peter Caspers [mailto:[hidden email]]
>> 发送时间: 2015年1月9日 3:57
>> 收件人: Luigi Ballabio
>> 抄送: QuantLib Mailing Lists; Ferdinando M. Ametrano
>> 主题: Re: [Quantlib-dev] Adjoint Greeks
>>
>> I thought in a realistic application you would always need both
>> worlds, CppAD<double> for adjoint greek engines and double for all
>> the rest. I wonder what it would mean in terms of performance and
>> memory if you replace double by CppAD<double> in general. I can maybe
>> just stress test this a bit though.
>> Peter
>>
>>
>>
>> On 7 January 2015 at 10:23, Luigi Ballabio <[hidden email]>
>> wrote:
>>> Switching Real would force you to fix compilation problems all over
>>> the library, instead of just in the code you're converting.
>>>
>>> If you wanted to go the route of #defining the type, I guess you
>>> could introduce another type (ADReal or something) and switch the
>>> coverted code to use it.
>>> Which might or might not be a good idea; you wouldn't be forced to
>>> templatize the code, but you would have to choose AD or not at
>>> compilation time, instead that having the choice to use both for
>>> different
>> tasks. Hmm...
>>>
>>> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we got
>>> a lot of presents this Christmas :)
>>>
>>> Luigi
>>>
>>>
>>>
>>> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
>>> <[hidden email]> wrote:
>>>>
>>>> Thank you Peter, it sounds exciting and promising.
>>>> Why haven't you considered to just change the Real typedef from
>>>> double to CppAD::AD<double>?
>>>>
>>>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers
>>>> <[hidden email]>
>>>> wrote:
>>>>>
>>>>> Hello all,
>>>>>
>>>>> happy new year.
>>>>>
>>>>> I revisited Ferdinando's comments on adjoint greeks during our
>>>>> December workshop and started to play around with that idea.
>>>>>
>>>>> The approach I am trying to follow is to adapt the ql library code
>>>>> so that automatic differentiation _tools_ can be used with it in a
>>>>> transparent way. This is opposed to writing special adjoint
>>>>> engines by _hand_ like e.g. advocated in Capriotti, Giles,
>>>>> Algorithmic
>>>>> Differentiation: Adjoint Greeks Made Easy. The relatively small
>>>>> and homogeneous code basis of ql seems to allow for this kind of
>>>>> more fundamental approach.
>>>>>
>>>>> I wrote a bit about my first steps in my blog
>>>>>
>>>>> http://quantlib.wordpress.com/
>>>>>
>>>>> and forked a new branch from Luigi's current master on github
>>>>>
>>>>> https://github.com/pcaspers/quantlib/tree/adjoint
>>>>>
>>>>> where I started to template'ize the library in order to allow for
>>>>> AD tools to hook in. There are already first working examples (see
>>>>> the
>>>>> blog) and I am starting to feel confident that the approach might
>>>>> work as a whole, might be doable in a reasonable amount of time
>>>>> and is worthwhile following.
>>>>>
>>>>> About the feasibility: The library seems to consist of roughly
>>>>> 376k lines of code currently (all hpp and cpp files under ql / ).
>>>>> From that we can subtract "data" files
>>>>>
>>>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>>>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>>>>> 14495 ./math/randomnumbers/latticerules.cpp
>>>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>>>>>
>>>>> which leaves us with 251k lines. It seems that I have already
>>>>> reviewed and adapted around 14k lines, which is 5% and which took
>>>>> me approximately 60 hours. This gives an estimation of 130 person
>>>>> days still left to do. For the whole (!) library where already
>>>>> parts will make much sense and give interesting applications. E.g.
>>>>> excluding experimental classes (90k) and the market model (25k)
>>>>> reduces the estimate already to 65 person days to go.
>>>>>
>>>>> I would be interested in your opinions on that, in particular
>>>>> regarding the design choices to make (better now than later :-) ).
>>>>>
>>>>> I'd also be grateful for people supporting the development by
>>>>> forking the adjoint branch and sending pull requests with adapted
>>>>> code
>> pieces.
>>>>> My personal next steps would be
>>>>> - rate deltas for Legs / Swap instruments
>>>>> - rate vegas for vanilla interest rate options
>>>>> - Hull White model
>>>>>
>>>>> What do you think ?
>>>>>
>>>>> Thank you
>>>>> Peter
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------
>>>>> -
>>>>> -
>>>>> ---------- Dive into the World of Parallel Programming! The Go
>>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>>> with Slashdot Media, is your hub for all things parallel software
>>>>> development, from weekly thought leadership blogs to news, videos,
>>>>> case studies, tutorials and more. Take a look and join the
>>>>> conversation now. http://goparallel.sourceforge.net 
>>>>> _______________________________________________
>>>>> QuantLib-dev mailing list
>>>>> [hidden email]
>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>
>>>>
>>>>
>>>>
>>>> -------------------------------------------------------------------
>>>> -
>>>> -
>>>> --------- Dive into the World of Parallel Programming! The Go
>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>> with Slashdot Media, is your hub for all things parallel software
>>>> development, from weekly thought leadership blogs to news, videos,
>>>> case studies, tutorials and more. Take a look and join the
>>>> conversation now. http://goparallel.sourceforge.net 
>>>> _______________________________________________
>>>> QuantLib-dev mailing list
>>>> [hidden email]
>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>
>>>
>>>
>>>
>>> --
>>> <https://implementingquantlib.blogspot.com>
>>> <https://twitter.com/lballabio>
>>
>> ---------------------------------------------------------------------
>> -
>> ------
>> --
>> Dive into the World of Parallel Programming! The Go Parallel Website,
>> sponsored by Intel and developed in partnership with Slashdot Media,
>> is your hub for all things parallel software development, from weekly
>> thought leadership blogs to news, videos, case studies, tutorials and
>> more. Take a look and join the conversation now.
>> http://goparallel.sourceforge.net
>> _______________________________________________
>> QuantLib-dev mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>
>
>
>
> ----------------------------------------------------------------------
> -------- New Year. New Location. New Benefits. New Data Center in
> Ashburn, VA.
> GigeNET is offering a free month of service with a new server in Ashburn.
> Choose from 2 high performing configs, both with 100TB of bandwidth.
> Higher redundancy.Lower latency.Increased capacity.Completely compliant.
> vanity: www.gigenet.com
> _______________________________________________
> QuantLib-dev mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/quantlib-dev


------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: 答复: 答复: 答复: Adjoint Greeks

Peter Caspers-4
unlikely (the optimization level)
Peter


On 14 January 2015 at 02:49, cheng li <[hidden email]> wrote:

> Hi Peter,
>
> I'll definitely have a try. Thank you :)
>
> Actually yesterday I tried on another machine with g++ 4.8.2 and O2 setting, then everything works fine. I think my previous problem may be due to O3.
>
> Regards,
> Cheng
>
> -----邮件原件-----
> 发件人: Peter Caspers [mailto:[hidden email]]
> 发送时间: 2015年1月13日 21:18
> 收件人: cheng li
> 抄送: Luigi Ballabio; QuantLib developers
> 主题: Re: 答复: [Quantlib-dev] 答复: Adjoint Greeks
>
> I will clean up the adjoint branch to make it c++03 compliant. Unless QuantLib 2.0 is out before the adjoint conversion has finished :-)
>
> On 13 January 2015 at 02:28, cheng li <[hidden email]> wrote:
>> Hi Luigi,
>>
>>
>>
>> I think I can not to avoid to use c++ 11 now.. In Peter’s branch much
>> c++ 11 stuff is used, e.g. constexpr…
>>
>>
>>
>> Regards,
>>
>> Cheng
>>
>>
>>
>> 发件人: Luigi Ballabio [mailto:[hidden email]]
>> 发送时间: 2015年1月12日 14:28
>> 收件人: Cheng Li
>> 抄送: QuantLib developers; Peter Caspers
>> 主题: Re: [Quantlib-dev] 答复: Adjoint Greeks
>>
>>
>>
>> Don't use C++11.
>>
>> Luigi
>>
>> On Jan 12, 2015 4:53 AM, "cheng li" <[hidden email]> wrote:
>>
>> Hi peter,
>>
>> I have switched to adjoint brank. However I am still facing some problem...
>> I use g++ 4.9.2 with parameter "-std=c++11 -O3"
>>
>> /bin/bash ../../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.
>> -I../../ql  -I../.. -I../..   -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP
>> -MF .deps/averagebmacoupon.Tpo -c -o averagebmacoupon.lo
>> averagebmacoupon.cpp
>> libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../ql -I../.. -I../..
>> -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP -MF
>> .deps/averagebmacoupon.Tpo -c averagebmacoupon.cpp  -fPIC -DPIC -o
>> .libs/averagebmacoupon.o In file included from
>> ../../ql/patterns/observable.hpp:29:0,
>>                  from ../../ql/event.hpp:29,
>>                  from ../../ql/cashflow.hpp:28,
>>                  from ../../ql/cashflows/coupon.hpp:29,
>>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>>                  from averagebmacoupon.cpp:21:
>> ../../ql/patterns/observable.hpp: In member function 'void
>> QuantLib::Observable::notifyObservers()':
>> ../../ql/errors.hpp:121:70: error: use of deleted function
>> 'QuantLib::Error::Error(const QuantLib::Error&)'
>>                            BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
>>
>> ^
>> ../../ql/patterns/observable.hpp:139:9: note: in expansion of macro
>> 'QL_ENSURE'
>>          QL_ENSURE(successful,
>>          ^
>> ../../ql/errors.hpp:39:11: note: 'QuantLib::Error::Error(const
>> QuantLib::Error&)' is implicitly deleted because the default
>> definition would be ill-formed:
>>      class Error : public std::exception {
>>            ^
>> ../../ql/errors.hpp:39:11: error: use of deleted function
>> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
>> boost::shared_ptr<std::basic_string<char> >&)'
>> In file included from /usr/include/boost/shared_ptr.hpp:17:0,
>>                  from ../../ql/errors.hpp:31,
>>                  from ../../ql/patterns/observable.hpp:29,
>>                  from ../../ql/event.hpp:29,
>>                  from ../../ql/cashflow.hpp:28,
>>                  from ../../ql/cashflows/coupon.hpp:29,
>>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>>                  from averagebmacoupon.cpp:21:
>> /usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note:
>> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
>> boost::shared_ptr<std::basic_string<char> >&)' is implicitly declared
>> as deleted because 'boost::shared_ptr<std::basic_string<char> >'
>> declares a move constructor or move assignment operator
>>
>> Any idea about this?
>>
>> Regards,
>> Cheng
>>
>> -----邮件原件-----
>> 发件人: Peter Caspers [mailto:[hidden email]]
>> 发送时间: 2015年1月11日 17:34
>> 收件人: Cheng Li
>> 抄送: QuantLib Mailing Lists
>> 主题: Re: 答复: [Quantlib-dev] Adjoint Greeks
>>
>> Hi Cheng,
>>
>> you are welcome and many thanks for your interest. However you seem to
>> work on my master branch which I consider as my private workspace
>> (with some unfinished things in it). Sorry, I wasn't expecting guests
>> here :-)
>>
>> You probably want to try out the adjoint branch instead. This should
>> compile.
>>
>> Thanks
>> Peter
>>
>> On 11 January 2015 at 10:16, Cheng Li <[hidden email]> wrote:
>>> Hi Peter,
>>>
>>> Thank you for your kindly offer these new stuff for all of us!
>>>
>>> I have cloned your branch and tried to build it on my machine. When
>>> it was building the example/InterestRateSmile, the compiler
>>> complained as
>>> following:
>>>
>>> InterestRateSmiles.cpp: In function ‘void zabrExamples()’:
>>> InterestRateSmiles.cpp:64:39: error: type/value mismatch at argument
>>> 1 in template parameter list for ‘template<class T> class boost::shared_ptr’
>>>      boost::shared_ptr<ZabrSmileSection> zabrln =
>>>                                        ^
>>> InterestRateSmiles.cpp:64:39: error:   expected a type, got
>>> ‘ZabrSmileSection’
>>> InterestRateSmiles.cpp:64:48: error: invalid type in declaration
>>> before ‘=’ token
>>>      boost::shared_ptr<ZabrSmileSection> zabrln =
>>>                                                 ^
>>> InterestRateSmiles.cpp:67:13: error: ‘template<class Evaluation>
>>> class QuantLib::ZabrSmileSection’ used without template parameters
>>>              ZabrSmileSection::ShortMaturityLognormal);
>>>
>>> I am not sure what is the problem... Is it due to missing template
>>> argument for ZabrSmileSection?
>>> My compiler is g++ 4.8.2 and with parameter "-std=c++11 -O3"
>>>
>>> BTW, I found that quadraticlfm.hpp and quadraticlfm.cpp are missing
>>> from the branch. However when I adjust the makefile.am to exclude
>>> them out the compiling process works fine.
>>>
>>>
>>> Regards,
>>> Cheng
>>>
>>> -----邮件原件-----
>>> 发件人: Peter Caspers [mailto:[hidden email]]
>>> 发送时间: 2015年1月9日 3:57
>>> 收件人: Luigi Ballabio
>>> 抄送: QuantLib Mailing Lists; Ferdinando M. Ametrano
>>> 主题: Re: [Quantlib-dev] Adjoint Greeks
>>>
>>> I thought in a realistic application you would always need both
>>> worlds, CppAD<double> for adjoint greek engines and double for all
>>> the rest. I wonder what it would mean in terms of performance and
>>> memory if you replace double by CppAD<double> in general. I can maybe
>>> just stress test this a bit though.
>>> Peter
>>>
>>>
>>>
>>> On 7 January 2015 at 10:23, Luigi Ballabio <[hidden email]>
>>> wrote:
>>>> Switching Real would force you to fix compilation problems all over
>>>> the library, instead of just in the code you're converting.
>>>>
>>>> If you wanted to go the route of #defining the type, I guess you
>>>> could introduce another type (ADReal or something) and switch the
>>>> coverted code to use it.
>>>> Which might or might not be a good idea; you wouldn't be forced to
>>>> templatize the code, but you would have to choose AD or not at
>>>> compilation time, instead that having the choice to use both for
>>>> different
>>> tasks. Hmm...
>>>>
>>>> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we got
>>>> a lot of presents this Christmas :)
>>>>
>>>> Luigi
>>>>
>>>>
>>>>
>>>> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
>>>> <[hidden email]> wrote:
>>>>>
>>>>> Thank you Peter, it sounds exciting and promising.
>>>>> Why haven't you considered to just change the Real typedef from
>>>>> double to CppAD::AD<double>?
>>>>>
>>>>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers
>>>>> <[hidden email]>
>>>>> wrote:
>>>>>>
>>>>>> Hello all,
>>>>>>
>>>>>> happy new year.
>>>>>>
>>>>>> I revisited Ferdinando's comments on adjoint greeks during our
>>>>>> December workshop and started to play around with that idea.
>>>>>>
>>>>>> The approach I am trying to follow is to adapt the ql library code
>>>>>> so that automatic differentiation _tools_ can be used with it in a
>>>>>> transparent way. This is opposed to writing special adjoint
>>>>>> engines by _hand_ like e.g. advocated in Capriotti, Giles,
>>>>>> Algorithmic
>>>>>> Differentiation: Adjoint Greeks Made Easy. The relatively small
>>>>>> and homogeneous code basis of ql seems to allow for this kind of
>>>>>> more fundamental approach.
>>>>>>
>>>>>> I wrote a bit about my first steps in my blog
>>>>>>
>>>>>> http://quantlib.wordpress.com/
>>>>>>
>>>>>> and forked a new branch from Luigi's current master on github
>>>>>>
>>>>>> https://github.com/pcaspers/quantlib/tree/adjoint
>>>>>>
>>>>>> where I started to template'ize the library in order to allow for
>>>>>> AD tools to hook in. There are already first working examples (see
>>>>>> the
>>>>>> blog) and I am starting to feel confident that the approach might
>>>>>> work as a whole, might be doable in a reasonable amount of time
>>>>>> and is worthwhile following.
>>>>>>
>>>>>> About the feasibility: The library seems to consist of roughly
>>>>>> 376k lines of code currently (all hpp and cpp files under ql / ).
>>>>>> From that we can subtract "data" files
>>>>>>
>>>>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>>>>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>>>>>> 14495 ./math/randomnumbers/latticerules.cpp
>>>>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>>>>>>
>>>>>> which leaves us with 251k lines. It seems that I have already
>>>>>> reviewed and adapted around 14k lines, which is 5% and which took
>>>>>> me approximately 60 hours. This gives an estimation of 130 person
>>>>>> days still left to do. For the whole (!) library where already
>>>>>> parts will make much sense and give interesting applications. E.g.
>>>>>> excluding experimental classes (90k) and the market model (25k)
>>>>>> reduces the estimate already to 65 person days to go.
>>>>>>
>>>>>> I would be interested in your opinions on that, in particular
>>>>>> regarding the design choices to make (better now than later :-) ).
>>>>>>
>>>>>> I'd also be grateful for people supporting the development by
>>>>>> forking the adjoint branch and sending pull requests with adapted
>>>>>> code
>>> pieces.
>>>>>> My personal next steps would be
>>>>>> - rate deltas for Legs / Swap instruments
>>>>>> - rate vegas for vanilla interest rate options
>>>>>> - Hull White model
>>>>>>
>>>>>> What do you think ?
>>>>>>
>>>>>> Thank you
>>>>>> Peter
>>>>>>
>>>>>>
>>>>>> ------------------------------------------------------------------
>>>>>> -
>>>>>> -
>>>>>> ---------- Dive into the World of Parallel Programming! The Go
>>>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>>>> with Slashdot Media, is your hub for all things parallel software
>>>>>> development, from weekly thought leadership blogs to news, videos,
>>>>>> case studies, tutorials and more. Take a look and join the
>>>>>> conversation now. http://goparallel.sourceforge.net
>>>>>> _______________________________________________
>>>>>> QuantLib-dev mailing list
>>>>>> [hidden email]
>>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> -------------------------------------------------------------------
>>>>> -
>>>>> -
>>>>> --------- Dive into the World of Parallel Programming! The Go
>>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>>> with Slashdot Media, is your hub for all things parallel software
>>>>> development, from weekly thought leadership blogs to news, videos,
>>>>> case studies, tutorials and more. Take a look and join the
>>>>> conversation now. http://goparallel.sourceforge.net
>>>>> _______________________________________________
>>>>> QuantLib-dev mailing list
>>>>> [hidden email]
>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> <https://implementingquantlib.blogspot.com>
>>>> <https://twitter.com/lballabio>
>>>
>>> ---------------------------------------------------------------------
>>> -
>>> ------
>>> --
>>> Dive into the World of Parallel Programming! The Go Parallel Website,
>>> sponsored by Intel and developed in partnership with Slashdot Media,
>>> is your hub for all things parallel software development, from weekly
>>> thought leadership blogs to news, videos, case studies, tutorials and
>>> more. Take a look and join the conversation now.
>>> http://goparallel.sourceforge.net
>>> _______________________________________________
>>> QuantLib-dev mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>
>>
>>
>>
>> ----------------------------------------------------------------------
>> -------- New Year. New Location. New Benefits. New Data Center in
>> Ashburn, VA.
>> GigeNET is offering a free month of service with a new server in Ashburn.
>> Choose from 2 high performing configs, both with 100TB of bandwidth.
>> Higher redundancy.Lower latency.Increased capacity.Completely compliant.
>> vanity: www.gigenet.com
>> _______________________________________________
>> QuantLib-dev mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>

------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: 答复: 答复: 答复: Adjoint Greeks

Peter Caspers-4
Hello,

this weekend I have reached a level of conversion that allows to
tackle Vanilla Swaps. This is maybe the first "full-blown" example, so
if you are interested you can find some results in my blog

http://quantlib.wordpress.com

Comments are welcome.

Thanks and best regards
Peter

On 14 January 2015 at 10:54, Peter Caspers <[hidden email]> wrote:

> unlikely (the optimization level)
> Peter
>
>
> On 14 January 2015 at 02:49, cheng li <[hidden email]> wrote:
>> Hi Peter,
>>
>> I'll definitely have a try. Thank you :)
>>
>> Actually yesterday I tried on another machine with g++ 4.8.2 and O2 setting, then everything works fine. I think my previous problem may be due to O3.
>>
>> Regards,
>> Cheng
>>
>> -----邮件原件-----
>> 发件人: Peter Caspers [mailto:[hidden email]]
>> 发送时间: 2015年1月13日 21:18
>> 收件人: cheng li
>> 抄送: Luigi Ballabio; QuantLib developers
>> 主题: Re: 答复: [Quantlib-dev] 答复: Adjoint Greeks
>>
>> I will clean up the adjoint branch to make it c++03 compliant. Unless QuantLib 2.0 is out before the adjoint conversion has finished :-)
>>
>> On 13 January 2015 at 02:28, cheng li <[hidden email]> wrote:
>>> Hi Luigi,
>>>
>>>
>>>
>>> I think I can not to avoid to use c++ 11 now.. In Peter’s branch much
>>> c++ 11 stuff is used, e.g. constexpr…
>>>
>>>
>>>
>>> Regards,
>>>
>>> Cheng
>>>
>>>
>>>
>>> 发件人: Luigi Ballabio [mailto:[hidden email]]
>>> 发送时间: 2015年1月12日 14:28
>>> 收件人: Cheng Li
>>> 抄送: QuantLib developers; Peter Caspers
>>> 主题: Re: [Quantlib-dev] 答复: Adjoint Greeks
>>>
>>>
>>>
>>> Don't use C++11.
>>>
>>> Luigi
>>>
>>> On Jan 12, 2015 4:53 AM, "cheng li" <[hidden email]> wrote:
>>>
>>> Hi peter,
>>>
>>> I have switched to adjoint brank. However I am still facing some problem...
>>> I use g++ 4.9.2 with parameter "-std=c++11 -O3"
>>>
>>> /bin/bash ../../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.
>>> -I../../ql  -I../.. -I../..   -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP
>>> -MF .deps/averagebmacoupon.Tpo -c -o averagebmacoupon.lo
>>> averagebmacoupon.cpp
>>> libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../ql -I../.. -I../..
>>> -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP -MF
>>> .deps/averagebmacoupon.Tpo -c averagebmacoupon.cpp  -fPIC -DPIC -o
>>> .libs/averagebmacoupon.o In file included from
>>> ../../ql/patterns/observable.hpp:29:0,
>>>                  from ../../ql/event.hpp:29,
>>>                  from ../../ql/cashflow.hpp:28,
>>>                  from ../../ql/cashflows/coupon.hpp:29,
>>>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>>>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>>>                  from averagebmacoupon.cpp:21:
>>> ../../ql/patterns/observable.hpp: In member function 'void
>>> QuantLib::Observable::notifyObservers()':
>>> ../../ql/errors.hpp:121:70: error: use of deleted function
>>> 'QuantLib::Error::Error(const QuantLib::Error&)'
>>>                            BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
>>>
>>> ^
>>> ../../ql/patterns/observable.hpp:139:9: note: in expansion of macro
>>> 'QL_ENSURE'
>>>          QL_ENSURE(successful,
>>>          ^
>>> ../../ql/errors.hpp:39:11: note: 'QuantLib::Error::Error(const
>>> QuantLib::Error&)' is implicitly deleted because the default
>>> definition would be ill-formed:
>>>      class Error : public std::exception {
>>>            ^
>>> ../../ql/errors.hpp:39:11: error: use of deleted function
>>> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
>>> boost::shared_ptr<std::basic_string<char> >&)'
>>> In file included from /usr/include/boost/shared_ptr.hpp:17:0,
>>>                  from ../../ql/errors.hpp:31,
>>>                  from ../../ql/patterns/observable.hpp:29,
>>>                  from ../../ql/event.hpp:29,
>>>                  from ../../ql/cashflow.hpp:28,
>>>                  from ../../ql/cashflows/coupon.hpp:29,
>>>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>>>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>>>                  from averagebmacoupon.cpp:21:
>>> /usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note:
>>> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
>>> boost::shared_ptr<std::basic_string<char> >&)' is implicitly declared
>>> as deleted because 'boost::shared_ptr<std::basic_string<char> >'
>>> declares a move constructor or move assignment operator
>>>
>>> Any idea about this?
>>>
>>> Regards,
>>> Cheng
>>>
>>> -----邮件原件-----
>>> 发件人: Peter Caspers [mailto:[hidden email]]
>>> 发送时间: 2015年1月11日 17:34
>>> 收件人: Cheng Li
>>> 抄送: QuantLib Mailing Lists
>>> 主题: Re: 答复: [Quantlib-dev] Adjoint Greeks
>>>
>>> Hi Cheng,
>>>
>>> you are welcome and many thanks for your interest. However you seem to
>>> work on my master branch which I consider as my private workspace
>>> (with some unfinished things in it). Sorry, I wasn't expecting guests
>>> here :-)
>>>
>>> You probably want to try out the adjoint branch instead. This should
>>> compile.
>>>
>>> Thanks
>>> Peter
>>>
>>> On 11 January 2015 at 10:16, Cheng Li <[hidden email]> wrote:
>>>> Hi Peter,
>>>>
>>>> Thank you for your kindly offer these new stuff for all of us!
>>>>
>>>> I have cloned your branch and tried to build it on my machine. When
>>>> it was building the example/InterestRateSmile, the compiler
>>>> complained as
>>>> following:
>>>>
>>>> InterestRateSmiles.cpp: In function ‘void zabrExamples()’:
>>>> InterestRateSmiles.cpp:64:39: error: type/value mismatch at argument
>>>> 1 in template parameter list for ‘template<class T> class boost::shared_ptr’
>>>>      boost::shared_ptr<ZabrSmileSection> zabrln =
>>>>                                        ^
>>>> InterestRateSmiles.cpp:64:39: error:   expected a type, got
>>>> ‘ZabrSmileSection’
>>>> InterestRateSmiles.cpp:64:48: error: invalid type in declaration
>>>> before ‘=’ token
>>>>      boost::shared_ptr<ZabrSmileSection> zabrln =
>>>>                                                 ^
>>>> InterestRateSmiles.cpp:67:13: error: ‘template<class Evaluation>
>>>> class QuantLib::ZabrSmileSection’ used without template parameters
>>>>              ZabrSmileSection::ShortMaturityLognormal);
>>>>
>>>> I am not sure what is the problem... Is it due to missing template
>>>> argument for ZabrSmileSection?
>>>> My compiler is g++ 4.8.2 and with parameter "-std=c++11 -O3"
>>>>
>>>> BTW, I found that quadraticlfm.hpp and quadraticlfm.cpp are missing
>>>> from the branch. However when I adjust the makefile.am to exclude
>>>> them out the compiling process works fine.
>>>>
>>>>
>>>> Regards,
>>>> Cheng
>>>>
>>>> -----邮件原件-----
>>>> 发件人: Peter Caspers [mailto:[hidden email]]
>>>> 发送时间: 2015年1月9日 3:57
>>>> 收件人: Luigi Ballabio
>>>> 抄送: QuantLib Mailing Lists; Ferdinando M. Ametrano
>>>> 主题: Re: [Quantlib-dev] Adjoint Greeks
>>>>
>>>> I thought in a realistic application you would always need both
>>>> worlds, CppAD<double> for adjoint greek engines and double for all
>>>> the rest. I wonder what it would mean in terms of performance and
>>>> memory if you replace double by CppAD<double> in general. I can maybe
>>>> just stress test this a bit though.
>>>> Peter
>>>>
>>>>
>>>>
>>>> On 7 January 2015 at 10:23, Luigi Ballabio <[hidden email]>
>>>> wrote:
>>>>> Switching Real would force you to fix compilation problems all over
>>>>> the library, instead of just in the code you're converting.
>>>>>
>>>>> If you wanted to go the route of #defining the type, I guess you
>>>>> could introduce another type (ADReal or something) and switch the
>>>>> coverted code to use it.
>>>>> Which might or might not be a good idea; you wouldn't be forced to
>>>>> templatize the code, but you would have to choose AD or not at
>>>>> compilation time, instead that having the choice to use both for
>>>>> different
>>>> tasks. Hmm...
>>>>>
>>>>> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we got
>>>>> a lot of presents this Christmas :)
>>>>>
>>>>> Luigi
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
>>>>> <[hidden email]> wrote:
>>>>>>
>>>>>> Thank you Peter, it sounds exciting and promising.
>>>>>> Why haven't you considered to just change the Real typedef from
>>>>>> double to CppAD::AD<double>?
>>>>>>
>>>>>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers
>>>>>> <[hidden email]>
>>>>>> wrote:
>>>>>>>
>>>>>>> Hello all,
>>>>>>>
>>>>>>> happy new year.
>>>>>>>
>>>>>>> I revisited Ferdinando's comments on adjoint greeks during our
>>>>>>> December workshop and started to play around with that idea.
>>>>>>>
>>>>>>> The approach I am trying to follow is to adapt the ql library code
>>>>>>> so that automatic differentiation _tools_ can be used with it in a
>>>>>>> transparent way. This is opposed to writing special adjoint
>>>>>>> engines by _hand_ like e.g. advocated in Capriotti, Giles,
>>>>>>> Algorithmic
>>>>>>> Differentiation: Adjoint Greeks Made Easy. The relatively small
>>>>>>> and homogeneous code basis of ql seems to allow for this kind of
>>>>>>> more fundamental approach.
>>>>>>>
>>>>>>> I wrote a bit about my first steps in my blog
>>>>>>>
>>>>>>> http://quantlib.wordpress.com/
>>>>>>>
>>>>>>> and forked a new branch from Luigi's current master on github
>>>>>>>
>>>>>>> https://github.com/pcaspers/quantlib/tree/adjoint
>>>>>>>
>>>>>>> where I started to template'ize the library in order to allow for
>>>>>>> AD tools to hook in. There are already first working examples (see
>>>>>>> the
>>>>>>> blog) and I am starting to feel confident that the approach might
>>>>>>> work as a whole, might be doable in a reasonable amount of time
>>>>>>> and is worthwhile following.
>>>>>>>
>>>>>>> About the feasibility: The library seems to consist of roughly
>>>>>>> 376k lines of code currently (all hpp and cpp files under ql / ).
>>>>>>> From that we can subtract "data" files
>>>>>>>
>>>>>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>>>>>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>>>>>>> 14495 ./math/randomnumbers/latticerules.cpp
>>>>>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>>>>>>>
>>>>>>> which leaves us with 251k lines. It seems that I have already
>>>>>>> reviewed and adapted around 14k lines, which is 5% and which took
>>>>>>> me approximately 60 hours. This gives an estimation of 130 person
>>>>>>> days still left to do. For the whole (!) library where already
>>>>>>> parts will make much sense and give interesting applications. E.g.
>>>>>>> excluding experimental classes (90k) and the market model (25k)
>>>>>>> reduces the estimate already to 65 person days to go.
>>>>>>>
>>>>>>> I would be interested in your opinions on that, in particular
>>>>>>> regarding the design choices to make (better now than later :-) ).
>>>>>>>
>>>>>>> I'd also be grateful for people supporting the development by
>>>>>>> forking the adjoint branch and sending pull requests with adapted
>>>>>>> code
>>>> pieces.
>>>>>>> My personal next steps would be
>>>>>>> - rate deltas for Legs / Swap instruments
>>>>>>> - rate vegas for vanilla interest rate options
>>>>>>> - Hull White model
>>>>>>>
>>>>>>> What do you think ?
>>>>>>>
>>>>>>> Thank you
>>>>>>> Peter
>>>>>>>
>>>>>>>
>>>>>>> ------------------------------------------------------------------
>>>>>>> -
>>>>>>> -
>>>>>>> ---------- Dive into the World of Parallel Programming! The Go
>>>>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>>>>> with Slashdot Media, is your hub for all things parallel software
>>>>>>> development, from weekly thought leadership blogs to news, videos,
>>>>>>> case studies, tutorials and more. Take a look and join the
>>>>>>> conversation now. http://goparallel.sourceforge.net
>>>>>>> _______________________________________________
>>>>>>> QuantLib-dev mailing list
>>>>>>> [hidden email]
>>>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> -------------------------------------------------------------------
>>>>>> -
>>>>>> -
>>>>>> --------- Dive into the World of Parallel Programming! The Go
>>>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>>>> with Slashdot Media, is your hub for all things parallel software
>>>>>> development, from weekly thought leadership blogs to news, videos,
>>>>>> case studies, tutorials and more. Take a look and join the
>>>>>> conversation now. http://goparallel.sourceforge.net
>>>>>> _______________________________________________
>>>>>> QuantLib-dev mailing list
>>>>>> [hidden email]
>>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> <https://implementingquantlib.blogspot.com>
>>>>> <https://twitter.com/lballabio>
>>>>
>>>> ---------------------------------------------------------------------
>>>> -
>>>> ------
>>>> --
>>>> Dive into the World of Parallel Programming! The Go Parallel Website,
>>>> sponsored by Intel and developed in partnership with Slashdot Media,
>>>> is your hub for all things parallel software development, from weekly
>>>> thought leadership blogs to news, videos, case studies, tutorials and
>>>> more. Take a look and join the conversation now.
>>>> http://goparallel.sourceforge.net
>>>> _______________________________________________
>>>> QuantLib-dev mailing list
>>>> [hidden email]
>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>
>>>
>>>
>>>
>>> ----------------------------------------------------------------------
>>> -------- New Year. New Location. New Benefits. New Data Center in
>>> Ashburn, VA.
>>> GigeNET is offering a free month of service with a new server in Ashburn.
>>> Choose from 2 high performing configs, both with 100TB of bandwidth.
>>> Higher redundancy.Lower latency.Increased capacity.Completely compliant.
>>> vanity: www.gigenet.com
>>> _______________________________________________
>>> QuantLib-dev mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>

------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

答复: 答复: 答复: 答复: Adjoint Greeks

cheng li
Hi Peter,

Thank you for the gifts for all of us. I have tried your example. It looks very promising!

Now I am following your steps and trying to make my first example. My fist goal is to make FixedRateBond AD available (I am most familiar with bonds part:)).

When I finished I'll raise a pull request for that change to your trunk.

Regards,
Cheng

-----邮件原件-----
发件人: Peter Caspers [mailto:[hidden email]]
发送时间: 2015年1月26日 3:06
收件人: cheng li
抄送: Luigi Ballabio; QuantLib developers
主题: Re: 答复: 答复: [Quantlib-dev] 答复: Adjoint Greeks

Hello,

this weekend I have reached a level of conversion that allows to tackle Vanilla Swaps. This is maybe the first "full-blown" example, so if you are interested you can find some results in my blog

http://quantlib.wordpress.com

Comments are welcome.

Thanks and best regards
Peter

On 14 January 2015 at 10:54, Peter Caspers <[hidden email]> wrote:

> unlikely (the optimization level)
> Peter
>
>
> On 14 January 2015 at 02:49, cheng li <[hidden email]> wrote:
>> Hi Peter,
>>
>> I'll definitely have a try. Thank you :)
>>
>> Actually yesterday I tried on another machine with g++ 4.8.2 and O2 setting, then everything works fine. I think my previous problem may be due to O3.
>>
>> Regards,
>> Cheng
>>
>> -----邮件原件-----
>> 发件人: Peter Caspers [mailto:[hidden email]]
>> 发送时间: 2015年1月13日 21:18
>> 收件人: cheng li
>> 抄送: Luigi Ballabio; QuantLib developers
>> 主题: Re: 答复: [Quantlib-dev] 答复: Adjoint Greeks
>>
>> I will clean up the adjoint branch to make it c++03 compliant. Unless
>> QuantLib 2.0 is out before the adjoint conversion has finished :-)
>>
>> On 13 January 2015 at 02:28, cheng li <[hidden email]> wrote:
>>> Hi Luigi,
>>>
>>>
>>>
>>> I think I can not to avoid to use c++ 11 now.. In Peter’s branch
>>> much
>>> c++ 11 stuff is used, e.g. constexpr…
>>>
>>>
>>>
>>> Regards,
>>>
>>> Cheng
>>>
>>>
>>>
>>> 发件人: Luigi Ballabio [mailto:[hidden email]]
>>> 发送时间: 2015年1月12日 14:28
>>> 收件人: Cheng Li
>>> 抄送: QuantLib developers; Peter Caspers
>>> 主题: Re: [Quantlib-dev] 答复: Adjoint Greeks
>>>
>>>
>>>
>>> Don't use C++11.
>>>
>>> Luigi
>>>
>>> On Jan 12, 2015 4:53 AM, "cheng li" <[hidden email]> wrote:
>>>
>>> Hi peter,
>>>
>>> I have switched to adjoint brank. However I am still facing some problem...
>>> I use g++ 4.9.2 with parameter "-std=c++11 -O3"
>>>
>>> /bin/bash ../../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.
>>> -I../../ql  -I../.. -I../..   -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP
>>> -MF .deps/averagebmacoupon.Tpo -c -o averagebmacoupon.lo
>>> averagebmacoupon.cpp
>>> libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../ql -I../.. -I../..
>>> -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP -MF
>>> .deps/averagebmacoupon.Tpo -c averagebmacoupon.cpp  -fPIC -DPIC -o
>>> .libs/averagebmacoupon.o In file included from
>>> ../../ql/patterns/observable.hpp:29:0,
>>>                  from ../../ql/event.hpp:29,
>>>                  from ../../ql/cashflow.hpp:28,
>>>                  from ../../ql/cashflows/coupon.hpp:29,
>>>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>>>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>>>                  from averagebmacoupon.cpp:21:
>>> ../../ql/patterns/observable.hpp: In member function 'void
>>> QuantLib::Observable::notifyObservers()':
>>> ../../ql/errors.hpp:121:70: error: use of deleted function
>>> 'QuantLib::Error::Error(const QuantLib::Error&)'
>>>                            
>>> BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
>>>
>>> ^
>>> ../../ql/patterns/observable.hpp:139:9: note: in expansion of macro
>>> 'QL_ENSURE'
>>>          QL_ENSURE(successful,
>>>          ^
>>> ../../ql/errors.hpp:39:11: note: 'QuantLib::Error::Error(const
>>> QuantLib::Error&)' is implicitly deleted because the default
>>> definition would be ill-formed:
>>>      class Error : public std::exception {
>>>            ^
>>> ../../ql/errors.hpp:39:11: error: use of deleted function
>>> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
>>> boost::shared_ptr<std::basic_string<char> >&)'
>>> In file included from /usr/include/boost/shared_ptr.hpp:17:0,
>>>                  from ../../ql/errors.hpp:31,
>>>                  from ../../ql/patterns/observable.hpp:29,
>>>                  from ../../ql/event.hpp:29,
>>>                  from ../../ql/cashflow.hpp:28,
>>>                  from ../../ql/cashflows/coupon.hpp:29,
>>>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>>>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>>>                  from averagebmacoupon.cpp:21:
>>> /usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note:
>>> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
>>> boost::shared_ptr<std::basic_string<char> >&)' is implicitly
>>> declared as deleted because 'boost::shared_ptr<std::basic_string<char> >'
>>> declares a move constructor or move assignment operator
>>>
>>> Any idea about this?
>>>
>>> Regards,
>>> Cheng
>>>
>>> -----邮件原件-----
>>> 发件人: Peter Caspers [mailto:[hidden email]]
>>> 发送时间: 2015年1月11日 17:34
>>> 收件人: Cheng Li
>>> 抄送: QuantLib Mailing Lists
>>> 主题: Re: 答复: [Quantlib-dev] Adjoint Greeks
>>>
>>> Hi Cheng,
>>>
>>> you are welcome and many thanks for your interest. However you seem
>>> to work on my master branch which I consider as my private workspace
>>> (with some unfinished things in it). Sorry, I wasn't expecting
>>> guests here :-)
>>>
>>> You probably want to try out the adjoint branch instead. This should
>>> compile.
>>>
>>> Thanks
>>> Peter
>>>
>>> On 11 January 2015 at 10:16, Cheng Li <[hidden email]> wrote:
>>>> Hi Peter,
>>>>
>>>> Thank you for your kindly offer these new stuff for all of us!
>>>>
>>>> I have cloned your branch and tried to build it on my machine. When
>>>> it was building the example/InterestRateSmile, the compiler
>>>> complained as
>>>> following:
>>>>
>>>> InterestRateSmiles.cpp: In function ‘void zabrExamples()’:
>>>> InterestRateSmiles.cpp:64:39: error: type/value mismatch at
>>>> argument
>>>> 1 in template parameter list for ‘template<class T> class boost::shared_ptr’
>>>>      boost::shared_ptr<ZabrSmileSection> zabrln =
>>>>                                        ^
>>>> InterestRateSmiles.cpp:64:39: error:   expected a type, got
>>>> ‘ZabrSmileSection’
>>>> InterestRateSmiles.cpp:64:48: error: invalid type in declaration
>>>> before ‘=’ token
>>>>      boost::shared_ptr<ZabrSmileSection> zabrln =
>>>>                                                 ^
>>>> InterestRateSmiles.cpp:67:13: error: ‘template<class Evaluation>
>>>> class QuantLib::ZabrSmileSection’ used without template parameters
>>>>              ZabrSmileSection::ShortMaturityLognormal);
>>>>
>>>> I am not sure what is the problem... Is it due to missing template
>>>> argument for ZabrSmileSection?
>>>> My compiler is g++ 4.8.2 and with parameter "-std=c++11 -O3"
>>>>
>>>> BTW, I found that quadraticlfm.hpp and quadraticlfm.cpp are missing
>>>> from the branch. However when I adjust the makefile.am to exclude
>>>> them out the compiling process works fine.
>>>>
>>>>
>>>> Regards,
>>>> Cheng
>>>>
>>>> -----邮件原件-----
>>>> 发件人: Peter Caspers [mailto:[hidden email]]
>>>> 发送时间: 2015年1月9日 3:57
>>>> 收件人: Luigi Ballabio
>>>> 抄送: QuantLib Mailing Lists; Ferdinando M. Ametrano
>>>> 主题: Re: [Quantlib-dev] Adjoint Greeks
>>>>
>>>> I thought in a realistic application you would always need both
>>>> worlds, CppAD<double> for adjoint greek engines and double for all
>>>> the rest. I wonder what it would mean in terms of performance and
>>>> memory if you replace double by CppAD<double> in general. I can
>>>> maybe just stress test this a bit though.
>>>> Peter
>>>>
>>>>
>>>>
>>>> On 7 January 2015 at 10:23, Luigi Ballabio
>>>> <[hidden email]>
>>>> wrote:
>>>>> Switching Real would force you to fix compilation problems all
>>>>> over the library, instead of just in the code you're converting.
>>>>>
>>>>> If you wanted to go the route of #defining the type, I guess you
>>>>> could introduce another type (ADReal or something) and switch the
>>>>> coverted code to use it.
>>>>> Which might or might not be a good idea; you wouldn't be forced to
>>>>> templatize the code, but you would have to choose AD or not at
>>>>> compilation time, instead that having the choice to use both for
>>>>> different
>>>> tasks. Hmm...
>>>>>
>>>>> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we
>>>>> got a lot of presents this Christmas :)
>>>>>
>>>>> Luigi
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
>>>>> <[hidden email]> wrote:
>>>>>>
>>>>>> Thank you Peter, it sounds exciting and promising.
>>>>>> Why haven't you considered to just change the Real typedef from
>>>>>> double to CppAD::AD<double>?
>>>>>>
>>>>>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers
>>>>>> <[hidden email]>
>>>>>> wrote:
>>>>>>>
>>>>>>> Hello all,
>>>>>>>
>>>>>>> happy new year.
>>>>>>>
>>>>>>> I revisited Ferdinando's comments on adjoint greeks during our
>>>>>>> December workshop and started to play around with that idea.
>>>>>>>
>>>>>>> The approach I am trying to follow is to adapt the ql library
>>>>>>> code so that automatic differentiation _tools_ can be used with
>>>>>>> it in a transparent way. This is opposed to writing special
>>>>>>> adjoint engines by _hand_ like e.g. advocated in Capriotti,
>>>>>>> Giles, Algorithmic
>>>>>>> Differentiation: Adjoint Greeks Made Easy. The relatively small
>>>>>>> and homogeneous code basis of ql seems to allow for this kind of
>>>>>>> more fundamental approach.
>>>>>>>
>>>>>>> I wrote a bit about my first steps in my blog
>>>>>>>
>>>>>>> http://quantlib.wordpress.com/
>>>>>>>
>>>>>>> and forked a new branch from Luigi's current master on github
>>>>>>>
>>>>>>> https://github.com/pcaspers/quantlib/tree/adjoint
>>>>>>>
>>>>>>> where I started to template'ize the library in order to allow
>>>>>>> for AD tools to hook in. There are already first working
>>>>>>> examples (see the
>>>>>>> blog) and I am starting to feel confident that the approach
>>>>>>> might work as a whole, might be doable in a reasonable amount of
>>>>>>> time and is worthwhile following.
>>>>>>>
>>>>>>> About the feasibility: The library seems to consist of roughly
>>>>>>> 376k lines of code currently (all hpp and cpp files under ql / ).
>>>>>>> From that we can subtract "data" files
>>>>>>>
>>>>>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>>>>>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>>>>>>> 14495 ./math/randomnumbers/latticerules.cpp
>>>>>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>>>>>>>
>>>>>>> which leaves us with 251k lines. It seems that I have already
>>>>>>> reviewed and adapted around 14k lines, which is 5% and which
>>>>>>> took me approximately 60 hours. This gives an estimation of 130
>>>>>>> person days still left to do. For the whole (!) library where
>>>>>>> already parts will make much sense and give interesting applications. E.g.
>>>>>>> excluding experimental classes (90k) and the market model (25k)
>>>>>>> reduces the estimate already to 65 person days to go.
>>>>>>>
>>>>>>> I would be interested in your opinions on that, in particular
>>>>>>> regarding the design choices to make (better now than later :-) ).
>>>>>>>
>>>>>>> I'd also be grateful for people supporting the development by
>>>>>>> forking the adjoint branch and sending pull requests with
>>>>>>> adapted code
>>>> pieces.
>>>>>>> My personal next steps would be
>>>>>>> - rate deltas for Legs / Swap instruments
>>>>>>> - rate vegas for vanilla interest rate options
>>>>>>> - Hull White model
>>>>>>>
>>>>>>> What do you think ?
>>>>>>>
>>>>>>> Thank you
>>>>>>> Peter
>>>>>>>
>>>>>>>
>>>>>>> ----------------------------------------------------------------
>>>>>>> --
>>>>>>> -
>>>>>>> -
>>>>>>> ---------- Dive into the World of Parallel Programming! The Go
>>>>>>> Parallel Website, sponsored by Intel and developed in
>>>>>>> partnership with Slashdot Media, is your hub for all things
>>>>>>> parallel software development, from weekly thought leadership
>>>>>>> blogs to news, videos, case studies, tutorials and more. Take a
>>>>>>> look and join the conversation now.
>>>>>>> http://goparallel.sourceforge.net 
>>>>>>> _______________________________________________
>>>>>>> QuantLib-dev mailing list
>>>>>>> [hidden email]
>>>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> -----------------------------------------------------------------
>>>>>> --
>>>>>> -
>>>>>> -
>>>>>> --------- Dive into the World of Parallel Programming! The Go
>>>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>>>> with Slashdot Media, is your hub for all things parallel software
>>>>>> development, from weekly thought leadership blogs to news,
>>>>>> videos, case studies, tutorials and more. Take a look and join
>>>>>> the conversation now. http://goparallel.sourceforge.net 
>>>>>> _______________________________________________
>>>>>> QuantLib-dev mailing list
>>>>>> [hidden email]
>>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> <https://implementingquantlib.blogspot.com>
>>>>> <https://twitter.com/lballabio>
>>>>
>>>> -------------------------------------------------------------------
>>>> --
>>>> -
>>>> ------
>>>> --
>>>> Dive into the World of Parallel Programming! The Go Parallel
>>>> Website, sponsored by Intel and developed in partnership with
>>>> Slashdot Media, is your hub for all things parallel software
>>>> development, from weekly thought leadership blogs to news, videos,
>>>> case studies, tutorials and more. Take a look and join the conversation now.
>>>> http://goparallel.sourceforge.net
>>>> _______________________________________________
>>>> QuantLib-dev mailing list
>>>> [hidden email]
>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>
>>>
>>>
>>>
>>> --------------------------------------------------------------------
>>> --
>>> -------- New Year. New Location. New Benefits. New Data Center in
>>> Ashburn, VA.
>>> GigeNET is offering a free month of service with a new server in Ashburn.
>>> Choose from 2 high performing configs, both with 100TB of bandwidth.
>>> Higher redundancy.Lower latency.Increased capacity.Completely compliant.
>>> vanity: www.gigenet.com
>>> _______________________________________________
>>> QuantLib-dev mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>


------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: 答复: 答复: 答复: 答复: Adjoint Greeks

Peter Caspers-4
Hi Cheng,

great, I am looking forward to receive your contributions !

Kind regards
Peter

On 2 February 2015 at 02:35, cheng li <[hidden email]> wrote:

> Hi Peter,
>
> Thank you for the gifts for all of us. I have tried your example. It looks very promising!
>
> Now I am following your steps and trying to make my first example. My fist goal is to make FixedRateBond AD available (I am most familiar with bonds part:)).
>
> When I finished I'll raise a pull request for that change to your trunk.
>
> Regards,
> Cheng
>
> -----邮件原件-----
> 发件人: Peter Caspers [mailto:[hidden email]]
> 发送时间: 2015年1月26日 3:06
> 收件人: cheng li
> 抄送: Luigi Ballabio; QuantLib developers
> 主题: Re: 答复: 答复: [Quantlib-dev] 答复: Adjoint Greeks
>
> Hello,
>
> this weekend I have reached a level of conversion that allows to tackle Vanilla Swaps. This is maybe the first "full-blown" example, so if you are interested you can find some results in my blog
>
> http://quantlib.wordpress.com
>
> Comments are welcome.
>
> Thanks and best regards
> Peter
>
> On 14 January 2015 at 10:54, Peter Caspers <[hidden email]> wrote:
>> unlikely (the optimization level)
>> Peter
>>
>>
>> On 14 January 2015 at 02:49, cheng li <[hidden email]> wrote:
>>> Hi Peter,
>>>
>>> I'll definitely have a try. Thank you :)
>>>
>>> Actually yesterday I tried on another machine with g++ 4.8.2 and O2 setting, then everything works fine. I think my previous problem may be due to O3.
>>>
>>> Regards,
>>> Cheng
>>>
>>> -----邮件原件-----
>>> 发件人: Peter Caspers [mailto:[hidden email]]
>>> 发送时间: 2015年1月13日 21:18
>>> 收件人: cheng li
>>> 抄送: Luigi Ballabio; QuantLib developers
>>> 主题: Re: 答复: [Quantlib-dev] 答复: Adjoint Greeks
>>>
>>> I will clean up the adjoint branch to make it c++03 compliant. Unless
>>> QuantLib 2.0 is out before the adjoint conversion has finished :-)
>>>
>>> On 13 January 2015 at 02:28, cheng li <[hidden email]> wrote:
>>>> Hi Luigi,
>>>>
>>>>
>>>>
>>>> I think I can not to avoid to use c++ 11 now.. In Peter’s branch
>>>> much
>>>> c++ 11 stuff is used, e.g. constexpr…
>>>>
>>>>
>>>>
>>>> Regards,
>>>>
>>>> Cheng
>>>>
>>>>
>>>>
>>>> 发件人: Luigi Ballabio [mailto:[hidden email]]
>>>> 发送时间: 2015年1月12日 14:28
>>>> 收件人: Cheng Li
>>>> 抄送: QuantLib developers; Peter Caspers
>>>> 主题: Re: [Quantlib-dev] 答复: Adjoint Greeks
>>>>
>>>>
>>>>
>>>> Don't use C++11.
>>>>
>>>> Luigi
>>>>
>>>> On Jan 12, 2015 4:53 AM, "cheng li" <[hidden email]> wrote:
>>>>
>>>> Hi peter,
>>>>
>>>> I have switched to adjoint brank. However I am still facing some problem...
>>>> I use g++ 4.9.2 with parameter "-std=c++11 -O3"
>>>>
>>>> /bin/bash ../../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.
>>>> -I../../ql  -I../.. -I../..   -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP
>>>> -MF .deps/averagebmacoupon.Tpo -c -o averagebmacoupon.lo
>>>> averagebmacoupon.cpp
>>>> libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../ql -I../.. -I../..
>>>> -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP -MF
>>>> .deps/averagebmacoupon.Tpo -c averagebmacoupon.cpp  -fPIC -DPIC -o
>>>> .libs/averagebmacoupon.o In file included from
>>>> ../../ql/patterns/observable.hpp:29:0,
>>>>                  from ../../ql/event.hpp:29,
>>>>                  from ../../ql/cashflow.hpp:28,
>>>>                  from ../../ql/cashflows/coupon.hpp:29,
>>>>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>>>>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>>>>                  from averagebmacoupon.cpp:21:
>>>> ../../ql/patterns/observable.hpp: In member function 'void
>>>> QuantLib::Observable::notifyObservers()':
>>>> ../../ql/errors.hpp:121:70: error: use of deleted function
>>>> 'QuantLib::Error::Error(const QuantLib::Error&)'
>>>>
>>>> BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
>>>>
>>>> ^
>>>> ../../ql/patterns/observable.hpp:139:9: note: in expansion of macro
>>>> 'QL_ENSURE'
>>>>          QL_ENSURE(successful,
>>>>          ^
>>>> ../../ql/errors.hpp:39:11: note: 'QuantLib::Error::Error(const
>>>> QuantLib::Error&)' is implicitly deleted because the default
>>>> definition would be ill-formed:
>>>>      class Error : public std::exception {
>>>>            ^
>>>> ../../ql/errors.hpp:39:11: error: use of deleted function
>>>> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
>>>> boost::shared_ptr<std::basic_string<char> >&)'
>>>> In file included from /usr/include/boost/shared_ptr.hpp:17:0,
>>>>                  from ../../ql/errors.hpp:31,
>>>>                  from ../../ql/patterns/observable.hpp:29,
>>>>                  from ../../ql/event.hpp:29,
>>>>                  from ../../ql/cashflow.hpp:28,
>>>>                  from ../../ql/cashflows/coupon.hpp:29,
>>>>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>>>>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>>>>                  from averagebmacoupon.cpp:21:
>>>> /usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note:
>>>> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
>>>> boost::shared_ptr<std::basic_string<char> >&)' is implicitly
>>>> declared as deleted because 'boost::shared_ptr<std::basic_string<char> >'
>>>> declares a move constructor or move assignment operator
>>>>
>>>> Any idea about this?
>>>>
>>>> Regards,
>>>> Cheng
>>>>
>>>> -----邮件原件-----
>>>> 发件人: Peter Caspers [mailto:[hidden email]]
>>>> 发送时间: 2015年1月11日 17:34
>>>> 收件人: Cheng Li
>>>> 抄送: QuantLib Mailing Lists
>>>> 主题: Re: 答复: [Quantlib-dev] Adjoint Greeks
>>>>
>>>> Hi Cheng,
>>>>
>>>> you are welcome and many thanks for your interest. However you seem
>>>> to work on my master branch which I consider as my private workspace
>>>> (with some unfinished things in it). Sorry, I wasn't expecting
>>>> guests here :-)
>>>>
>>>> You probably want to try out the adjoint branch instead. This should
>>>> compile.
>>>>
>>>> Thanks
>>>> Peter
>>>>
>>>> On 11 January 2015 at 10:16, Cheng Li <[hidden email]> wrote:
>>>>> Hi Peter,
>>>>>
>>>>> Thank you for your kindly offer these new stuff for all of us!
>>>>>
>>>>> I have cloned your branch and tried to build it on my machine. When
>>>>> it was building the example/InterestRateSmile, the compiler
>>>>> complained as
>>>>> following:
>>>>>
>>>>> InterestRateSmiles.cpp: In function ‘void zabrExamples()’:
>>>>> InterestRateSmiles.cpp:64:39: error: type/value mismatch at
>>>>> argument
>>>>> 1 in template parameter list for ‘template<class T> class boost::shared_ptr’
>>>>>      boost::shared_ptr<ZabrSmileSection> zabrln =
>>>>>                                        ^
>>>>> InterestRateSmiles.cpp:64:39: error:   expected a type, got
>>>>> ‘ZabrSmileSection’
>>>>> InterestRateSmiles.cpp:64:48: error: invalid type in declaration
>>>>> before ‘=’ token
>>>>>      boost::shared_ptr<ZabrSmileSection> zabrln =
>>>>>                                                 ^
>>>>> InterestRateSmiles.cpp:67:13: error: ‘template<class Evaluation>
>>>>> class QuantLib::ZabrSmileSection’ used without template parameters
>>>>>              ZabrSmileSection::ShortMaturityLognormal);
>>>>>
>>>>> I am not sure what is the problem... Is it due to missing template
>>>>> argument for ZabrSmileSection?
>>>>> My compiler is g++ 4.8.2 and with parameter "-std=c++11 -O3"
>>>>>
>>>>> BTW, I found that quadraticlfm.hpp and quadraticlfm.cpp are missing
>>>>> from the branch. However when I adjust the makefile.am to exclude
>>>>> them out the compiling process works fine.
>>>>>
>>>>>
>>>>> Regards,
>>>>> Cheng
>>>>>
>>>>> -----邮件原件-----
>>>>> 发件人: Peter Caspers [mailto:[hidden email]]
>>>>> 发送时间: 2015年1月9日 3:57
>>>>> 收件人: Luigi Ballabio
>>>>> 抄送: QuantLib Mailing Lists; Ferdinando M. Ametrano
>>>>> 主题: Re: [Quantlib-dev] Adjoint Greeks
>>>>>
>>>>> I thought in a realistic application you would always need both
>>>>> worlds, CppAD<double> for adjoint greek engines and double for all
>>>>> the rest. I wonder what it would mean in terms of performance and
>>>>> memory if you replace double by CppAD<double> in general. I can
>>>>> maybe just stress test this a bit though.
>>>>> Peter
>>>>>
>>>>>
>>>>>
>>>>> On 7 January 2015 at 10:23, Luigi Ballabio
>>>>> <[hidden email]>
>>>>> wrote:
>>>>>> Switching Real would force you to fix compilation problems all
>>>>>> over the library, instead of just in the code you're converting.
>>>>>>
>>>>>> If you wanted to go the route of #defining the type, I guess you
>>>>>> could introduce another type (ADReal or something) and switch the
>>>>>> coverted code to use it.
>>>>>> Which might or might not be a good idea; you wouldn't be forced to
>>>>>> templatize the code, but you would have to choose AD or not at
>>>>>> compilation time, instead that having the choice to use both for
>>>>>> different
>>>>> tasks. Hmm...
>>>>>>
>>>>>> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we
>>>>>> got a lot of presents this Christmas :)
>>>>>>
>>>>>> Luigi
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
>>>>>> <[hidden email]> wrote:
>>>>>>>
>>>>>>> Thank you Peter, it sounds exciting and promising.
>>>>>>> Why haven't you considered to just change the Real typedef from
>>>>>>> double to CppAD::AD<double>?
>>>>>>>
>>>>>>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers
>>>>>>> <[hidden email]>
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Hello all,
>>>>>>>>
>>>>>>>> happy new year.
>>>>>>>>
>>>>>>>> I revisited Ferdinando's comments on adjoint greeks during our
>>>>>>>> December workshop and started to play around with that idea.
>>>>>>>>
>>>>>>>> The approach I am trying to follow is to adapt the ql library
>>>>>>>> code so that automatic differentiation _tools_ can be used with
>>>>>>>> it in a transparent way. This is opposed to writing special
>>>>>>>> adjoint engines by _hand_ like e.g. advocated in Capriotti,
>>>>>>>> Giles, Algorithmic
>>>>>>>> Differentiation: Adjoint Greeks Made Easy. The relatively small
>>>>>>>> and homogeneous code basis of ql seems to allow for this kind of
>>>>>>>> more fundamental approach.
>>>>>>>>
>>>>>>>> I wrote a bit about my first steps in my blog
>>>>>>>>
>>>>>>>> http://quantlib.wordpress.com/
>>>>>>>>
>>>>>>>> and forked a new branch from Luigi's current master on github
>>>>>>>>
>>>>>>>> https://github.com/pcaspers/quantlib/tree/adjoint
>>>>>>>>
>>>>>>>> where I started to template'ize the library in order to allow
>>>>>>>> for AD tools to hook in. There are already first working
>>>>>>>> examples (see the
>>>>>>>> blog) and I am starting to feel confident that the approach
>>>>>>>> might work as a whole, might be doable in a reasonable amount of
>>>>>>>> time and is worthwhile following.
>>>>>>>>
>>>>>>>> About the feasibility: The library seems to consist of roughly
>>>>>>>> 376k lines of code currently (all hpp and cpp files under ql / ).
>>>>>>>> From that we can subtract "data" files
>>>>>>>>
>>>>>>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>>>>>>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>>>>>>>> 14495 ./math/randomnumbers/latticerules.cpp
>>>>>>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>>>>>>>>
>>>>>>>> which leaves us with 251k lines. It seems that I have already
>>>>>>>> reviewed and adapted around 14k lines, which is 5% and which
>>>>>>>> took me approximately 60 hours. This gives an estimation of 130
>>>>>>>> person days still left to do. For the whole (!) library where
>>>>>>>> already parts will make much sense and give interesting applications. E.g.
>>>>>>>> excluding experimental classes (90k) and the market model (25k)
>>>>>>>> reduces the estimate already to 65 person days to go.
>>>>>>>>
>>>>>>>> I would be interested in your opinions on that, in particular
>>>>>>>> regarding the design choices to make (better now than later :-) ).
>>>>>>>>
>>>>>>>> I'd also be grateful for people supporting the development by
>>>>>>>> forking the adjoint branch and sending pull requests with
>>>>>>>> adapted code
>>>>> pieces.
>>>>>>>> My personal next steps would be
>>>>>>>> - rate deltas for Legs / Swap instruments
>>>>>>>> - rate vegas for vanilla interest rate options
>>>>>>>> - Hull White model
>>>>>>>>
>>>>>>>> What do you think ?
>>>>>>>>
>>>>>>>> Thank you
>>>>>>>> Peter
>>>>>>>>
>>>>>>>>
>>>>>>>> ----------------------------------------------------------------
>>>>>>>> --
>>>>>>>> -
>>>>>>>> -
>>>>>>>> ---------- Dive into the World of Parallel Programming! The Go
>>>>>>>> Parallel Website, sponsored by Intel and developed in
>>>>>>>> partnership with Slashdot Media, is your hub for all things
>>>>>>>> parallel software development, from weekly thought leadership
>>>>>>>> blogs to news, videos, case studies, tutorials and more. Take a
>>>>>>>> look and join the conversation now.
>>>>>>>> http://goparallel.sourceforge.net
>>>>>>>> _______________________________________________
>>>>>>>> QuantLib-dev mailing list
>>>>>>>> [hidden email]
>>>>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> -----------------------------------------------------------------
>>>>>>> --
>>>>>>> -
>>>>>>> -
>>>>>>> --------- Dive into the World of Parallel Programming! The Go
>>>>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>>>>> with Slashdot Media, is your hub for all things parallel software
>>>>>>> development, from weekly thought leadership blogs to news,
>>>>>>> videos, case studies, tutorials and more. Take a look and join
>>>>>>> the conversation now. http://goparallel.sourceforge.net
>>>>>>> _______________________________________________
>>>>>>> QuantLib-dev mailing list
>>>>>>> [hidden email]
>>>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> <https://implementingquantlib.blogspot.com>
>>>>>> <https://twitter.com/lballabio>
>>>>>
>>>>> -------------------------------------------------------------------
>>>>> --
>>>>> -
>>>>> ------
>>>>> --
>>>>> Dive into the World of Parallel Programming! The Go Parallel
>>>>> Website, sponsored by Intel and developed in partnership with
>>>>> Slashdot Media, is your hub for all things parallel software
>>>>> development, from weekly thought leadership blogs to news, videos,
>>>>> case studies, tutorials and more. Take a look and join the conversation now.
>>>>> http://goparallel.sourceforge.net
>>>>> _______________________________________________
>>>>> QuantLib-dev mailing list
>>>>> [hidden email]
>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>>
>>>>
>>>>
>>>>
>>>> --------------------------------------------------------------------
>>>> --
>>>> -------- New Year. New Location. New Benefits. New Data Center in
>>>> Ashburn, VA.
>>>> GigeNET is offering a free month of service with a new server in Ashburn.
>>>> Choose from 2 high performing configs, both with 100TB of bandwidth.
>>>> Higher redundancy.Lower latency.Increased capacity.Completely compliant.
>>>> vanity: www.gigenet.com
>>>> _______________________________________________
>>>> QuantLib-dev mailing list
>>>> [hidden email]
>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>
>

------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: 答复: 答复: 答复: 答复: Adjoint Greeks

Peter Caspers-4
Hi,

the adjoint branch is now c++11 - free (among other things thanks to
Cheng who backported the error function class). This covers the
library, test-suite and all existing examples.

However note that depending on how you built CppAD it might require
c++11 (and as a consequence also the adjoint example).

best regards
Peter


On 2 February 2015 at 13:51, Peter Caspers <[hidden email]> wrote:

> Hi Cheng,
>
> great, I am looking forward to receive your contributions !
>
> Kind regards
> Peter
>
> On 2 February 2015 at 02:35, cheng li <[hidden email]> wrote:
>> Hi Peter,
>>
>> Thank you for the gifts for all of us. I have tried your example. It looks very promising!
>>
>> Now I am following your steps and trying to make my first example. My fist goal is to make FixedRateBond AD available (I am most familiar with bonds part:)).
>>
>> When I finished I'll raise a pull request for that change to your trunk.
>>
>> Regards,
>> Cheng
>>
>> -----邮件原件-----
>> 发件人: Peter Caspers [mailto:[hidden email]]
>> 发送时间: 2015年1月26日 3:06
>> 收件人: cheng li
>> 抄送: Luigi Ballabio; QuantLib developers
>> 主题: Re: 答复: 答复: [Quantlib-dev] 答复: Adjoint Greeks
>>
>> Hello,
>>
>> this weekend I have reached a level of conversion that allows to tackle Vanilla Swaps. This is maybe the first "full-blown" example, so if you are interested you can find some results in my blog
>>
>> http://quantlib.wordpress.com
>>
>> Comments are welcome.
>>
>> Thanks and best regards
>> Peter
>>
>> On 14 January 2015 at 10:54, Peter Caspers <[hidden email]> wrote:
>>> unlikely (the optimization level)
>>> Peter
>>>
>>>
>>> On 14 January 2015 at 02:49, cheng li <[hidden email]> wrote:
>>>> Hi Peter,
>>>>
>>>> I'll definitely have a try. Thank you :)
>>>>
>>>> Actually yesterday I tried on another machine with g++ 4.8.2 and O2 setting, then everything works fine. I think my previous problem may be due to O3.
>>>>
>>>> Regards,
>>>> Cheng
>>>>
>>>> -----邮件原件-----
>>>> 发件人: Peter Caspers [mailto:[hidden email]]
>>>> 发送时间: 2015年1月13日 21:18
>>>> 收件人: cheng li
>>>> 抄送: Luigi Ballabio; QuantLib developers
>>>> 主题: Re: 答复: [Quantlib-dev] 答复: Adjoint Greeks
>>>>
>>>> I will clean up the adjoint branch to make it c++03 compliant. Unless
>>>> QuantLib 2.0 is out before the adjoint conversion has finished :-)
>>>>
>>>> On 13 January 2015 at 02:28, cheng li <[hidden email]> wrote:
>>>>> Hi Luigi,
>>>>>
>>>>>
>>>>>
>>>>> I think I can not to avoid to use c++ 11 now.. In Peter’s branch
>>>>> much
>>>>> c++ 11 stuff is used, e.g. constexpr…
>>>>>
>>>>>
>>>>>
>>>>> Regards,
>>>>>
>>>>> Cheng
>>>>>
>>>>>
>>>>>
>>>>> 发件人: Luigi Ballabio [mailto:[hidden email]]
>>>>> 发送时间: 2015年1月12日 14:28
>>>>> 收件人: Cheng Li
>>>>> 抄送: QuantLib developers; Peter Caspers
>>>>> 主题: Re: [Quantlib-dev] 答复: Adjoint Greeks
>>>>>
>>>>>
>>>>>
>>>>> Don't use C++11.
>>>>>
>>>>> Luigi
>>>>>
>>>>> On Jan 12, 2015 4:53 AM, "cheng li" <[hidden email]> wrote:
>>>>>
>>>>> Hi peter,
>>>>>
>>>>> I have switched to adjoint brank. However I am still facing some problem...
>>>>> I use g++ 4.9.2 with parameter "-std=c++11 -O3"
>>>>>
>>>>> /bin/bash ../../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.
>>>>> -I../../ql  -I../.. -I../..   -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP
>>>>> -MF .deps/averagebmacoupon.Tpo -c -o averagebmacoupon.lo
>>>>> averagebmacoupon.cpp
>>>>> libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../ql -I../.. -I../..
>>>>> -std=c++11 -O3 -MT averagebmacoupon.lo -MD -MP -MF
>>>>> .deps/averagebmacoupon.Tpo -c averagebmacoupon.cpp  -fPIC -DPIC -o
>>>>> .libs/averagebmacoupon.o In file included from
>>>>> ../../ql/patterns/observable.hpp:29:0,
>>>>>                  from ../../ql/event.hpp:29,
>>>>>                  from ../../ql/cashflow.hpp:28,
>>>>>                  from ../../ql/cashflows/coupon.hpp:29,
>>>>>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>>>>>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>>>>>                  from averagebmacoupon.cpp:21:
>>>>> ../../ql/patterns/observable.hpp: In member function 'void
>>>>> QuantLib::Observable::notifyObservers()':
>>>>> ../../ql/errors.hpp:121:70: error: use of deleted function
>>>>> 'QuantLib::Error::Error(const QuantLib::Error&)'
>>>>>
>>>>> BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
>>>>>
>>>>> ^
>>>>> ../../ql/patterns/observable.hpp:139:9: note: in expansion of macro
>>>>> 'QL_ENSURE'
>>>>>          QL_ENSURE(successful,
>>>>>          ^
>>>>> ../../ql/errors.hpp:39:11: note: 'QuantLib::Error::Error(const
>>>>> QuantLib::Error&)' is implicitly deleted because the default
>>>>> definition would be ill-formed:
>>>>>      class Error : public std::exception {
>>>>>            ^
>>>>> ../../ql/errors.hpp:39:11: error: use of deleted function
>>>>> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
>>>>> boost::shared_ptr<std::basic_string<char> >&)'
>>>>> In file included from /usr/include/boost/shared_ptr.hpp:17:0,
>>>>>                  from ../../ql/errors.hpp:31,
>>>>>                  from ../../ql/patterns/observable.hpp:29,
>>>>>                  from ../../ql/event.hpp:29,
>>>>>                  from ../../ql/cashflow.hpp:28,
>>>>>                  from ../../ql/cashflows/coupon.hpp:29,
>>>>>                  from ../../ql/cashflows/floatingratecoupon.hpp:33,
>>>>>                  from ../../ql/cashflows/averagebmacoupon.hpp:28,
>>>>>                  from averagebmacoupon.cpp:21:
>>>>> /usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note:
>>>>> 'boost::shared_ptr<std::basic_string<char> >::shared_ptr(const
>>>>> boost::shared_ptr<std::basic_string<char> >&)' is implicitly
>>>>> declared as deleted because 'boost::shared_ptr<std::basic_string<char> >'
>>>>> declares a move constructor or move assignment operator
>>>>>
>>>>> Any idea about this?
>>>>>
>>>>> Regards,
>>>>> Cheng
>>>>>
>>>>> -----邮件原件-----
>>>>> 发件人: Peter Caspers [mailto:[hidden email]]
>>>>> 发送时间: 2015年1月11日 17:34
>>>>> 收件人: Cheng Li
>>>>> 抄送: QuantLib Mailing Lists
>>>>> 主题: Re: 答复: [Quantlib-dev] Adjoint Greeks
>>>>>
>>>>> Hi Cheng,
>>>>>
>>>>> you are welcome and many thanks for your interest. However you seem
>>>>> to work on my master branch which I consider as my private workspace
>>>>> (with some unfinished things in it). Sorry, I wasn't expecting
>>>>> guests here :-)
>>>>>
>>>>> You probably want to try out the adjoint branch instead. This should
>>>>> compile.
>>>>>
>>>>> Thanks
>>>>> Peter
>>>>>
>>>>> On 11 January 2015 at 10:16, Cheng Li <[hidden email]> wrote:
>>>>>> Hi Peter,
>>>>>>
>>>>>> Thank you for your kindly offer these new stuff for all of us!
>>>>>>
>>>>>> I have cloned your branch and tried to build it on my machine. When
>>>>>> it was building the example/InterestRateSmile, the compiler
>>>>>> complained as
>>>>>> following:
>>>>>>
>>>>>> InterestRateSmiles.cpp: In function ‘void zabrExamples()’:
>>>>>> InterestRateSmiles.cpp:64:39: error: type/value mismatch at
>>>>>> argument
>>>>>> 1 in template parameter list for ‘template<class T> class boost::shared_ptr’
>>>>>>      boost::shared_ptr<ZabrSmileSection> zabrln =
>>>>>>                                        ^
>>>>>> InterestRateSmiles.cpp:64:39: error:   expected a type, got
>>>>>> ‘ZabrSmileSection’
>>>>>> InterestRateSmiles.cpp:64:48: error: invalid type in declaration
>>>>>> before ‘=’ token
>>>>>>      boost::shared_ptr<ZabrSmileSection> zabrln =
>>>>>>                                                 ^
>>>>>> InterestRateSmiles.cpp:67:13: error: ‘template<class Evaluation>
>>>>>> class QuantLib::ZabrSmileSection’ used without template parameters
>>>>>>              ZabrSmileSection::ShortMaturityLognormal);
>>>>>>
>>>>>> I am not sure what is the problem... Is it due to missing template
>>>>>> argument for ZabrSmileSection?
>>>>>> My compiler is g++ 4.8.2 and with parameter "-std=c++11 -O3"
>>>>>>
>>>>>> BTW, I found that quadraticlfm.hpp and quadraticlfm.cpp are missing
>>>>>> from the branch. However when I adjust the makefile.am to exclude
>>>>>> them out the compiling process works fine.
>>>>>>
>>>>>>
>>>>>> Regards,
>>>>>> Cheng
>>>>>>
>>>>>> -----邮件原件-----
>>>>>> 发件人: Peter Caspers [mailto:[hidden email]]
>>>>>> 发送时间: 2015年1月9日 3:57
>>>>>> 收件人: Luigi Ballabio
>>>>>> 抄送: QuantLib Mailing Lists; Ferdinando M. Ametrano
>>>>>> 主题: Re: [Quantlib-dev] Adjoint Greeks
>>>>>>
>>>>>> I thought in a realistic application you would always need both
>>>>>> worlds, CppAD<double> for adjoint greek engines and double for all
>>>>>> the rest. I wonder what it would mean in terms of performance and
>>>>>> memory if you replace double by CppAD<double> in general. I can
>>>>>> maybe just stress test this a bit though.
>>>>>> Peter
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 7 January 2015 at 10:23, Luigi Ballabio
>>>>>> <[hidden email]>
>>>>>> wrote:
>>>>>>> Switching Real would force you to fix compilation problems all
>>>>>>> over the library, instead of just in the code you're converting.
>>>>>>>
>>>>>>> If you wanted to go the route of #defining the type, I guess you
>>>>>>> could introduce another type (ADReal or something) and switch the
>>>>>>> coverted code to use it.
>>>>>>> Which might or might not be a good idea; you wouldn't be forced to
>>>>>>> templatize the code, but you would have to choose AD or not at
>>>>>>> compilation time, instead that having the choice to use both for
>>>>>>> different
>>>>>> tasks. Hmm...
>>>>>>>
>>>>>>> Anyway: yes, very promising. Between Peter, Klaus and Joseph, we
>>>>>>> got a lot of presents this Christmas :)
>>>>>>>
>>>>>>> Luigi
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Wed, Jan 7, 2015 at 9:41 AM, Ferdinando M. Ametrano
>>>>>>> <[hidden email]> wrote:
>>>>>>>>
>>>>>>>> Thank you Peter, it sounds exciting and promising.
>>>>>>>> Why haven't you considered to just change the Real typedef from
>>>>>>>> double to CppAD::AD<double>?
>>>>>>>>
>>>>>>>> On Sun, Jan 4, 2015 at 9:55 PM, Peter Caspers
>>>>>>>> <[hidden email]>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> Hello all,
>>>>>>>>>
>>>>>>>>> happy new year.
>>>>>>>>>
>>>>>>>>> I revisited Ferdinando's comments on adjoint greeks during our
>>>>>>>>> December workshop and started to play around with that idea.
>>>>>>>>>
>>>>>>>>> The approach I am trying to follow is to adapt the ql library
>>>>>>>>> code so that automatic differentiation _tools_ can be used with
>>>>>>>>> it in a transparent way. This is opposed to writing special
>>>>>>>>> adjoint engines by _hand_ like e.g. advocated in Capriotti,
>>>>>>>>> Giles, Algorithmic
>>>>>>>>> Differentiation: Adjoint Greeks Made Easy. The relatively small
>>>>>>>>> and homogeneous code basis of ql seems to allow for this kind of
>>>>>>>>> more fundamental approach.
>>>>>>>>>
>>>>>>>>> I wrote a bit about my first steps in my blog
>>>>>>>>>
>>>>>>>>> http://quantlib.wordpress.com/
>>>>>>>>>
>>>>>>>>> and forked a new branch from Luigi's current master on github
>>>>>>>>>
>>>>>>>>> https://github.com/pcaspers/quantlib/tree/adjoint
>>>>>>>>>
>>>>>>>>> where I started to template'ize the library in order to allow
>>>>>>>>> for AD tools to hook in. There are already first working
>>>>>>>>> examples (see the
>>>>>>>>> blog) and I am starting to feel confident that the approach
>>>>>>>>> might work as a whole, might be doable in a reasonable amount of
>>>>>>>>> time and is worthwhile following.
>>>>>>>>>
>>>>>>>>> About the feasibility: The library seems to consist of roughly
>>>>>>>>> 376k lines of code currently (all hpp and cpp files under ql / ).
>>>>>>>>> From that we can subtract "data" files
>>>>>>>>>
>>>>>>>>> 78862 ./math/randomnumbers/sobolrsg.cpp
>>>>>>>>> 21376 ./math/randomnumbers/primitivepolynomials.cpp
>>>>>>>>> 14495 ./math/randomnumbers/latticerules.cpp
>>>>>>>>> 10115 ./experimental/volatility/noarbsabrabsprobs.cpp
>>>>>>>>>
>>>>>>>>> which leaves us with 251k lines. It seems that I have already
>>>>>>>>> reviewed and adapted around 14k lines, which is 5% and which
>>>>>>>>> took me approximately 60 hours. This gives an estimation of 130
>>>>>>>>> person days still left to do. For the whole (!) library where
>>>>>>>>> already parts will make much sense and give interesting applications. E.g.
>>>>>>>>> excluding experimental classes (90k) and the market model (25k)
>>>>>>>>> reduces the estimate already to 65 person days to go.
>>>>>>>>>
>>>>>>>>> I would be interested in your opinions on that, in particular
>>>>>>>>> regarding the design choices to make (better now than later :-) ).
>>>>>>>>>
>>>>>>>>> I'd also be grateful for people supporting the development by
>>>>>>>>> forking the adjoint branch and sending pull requests with
>>>>>>>>> adapted code
>>>>>> pieces.
>>>>>>>>> My personal next steps would be
>>>>>>>>> - rate deltas for Legs / Swap instruments
>>>>>>>>> - rate vegas for vanilla interest rate options
>>>>>>>>> - Hull White model
>>>>>>>>>
>>>>>>>>> What do you think ?
>>>>>>>>>
>>>>>>>>> Thank you
>>>>>>>>> Peter
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ----------------------------------------------------------------
>>>>>>>>> --
>>>>>>>>> -
>>>>>>>>> -
>>>>>>>>> ---------- Dive into the World of Parallel Programming! The Go
>>>>>>>>> Parallel Website, sponsored by Intel and developed in
>>>>>>>>> partnership with Slashdot Media, is your hub for all things
>>>>>>>>> parallel software development, from weekly thought leadership
>>>>>>>>> blogs to news, videos, case studies, tutorials and more. Take a
>>>>>>>>> look and join the conversation now.
>>>>>>>>> http://goparallel.sourceforge.net
>>>>>>>>> _______________________________________________
>>>>>>>>> QuantLib-dev mailing list
>>>>>>>>> [hidden email]
>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> -----------------------------------------------------------------
>>>>>>>> --
>>>>>>>> -
>>>>>>>> -
>>>>>>>> --------- Dive into the World of Parallel Programming! The Go
>>>>>>>> Parallel Website, sponsored by Intel and developed in partnership
>>>>>>>> with Slashdot Media, is your hub for all things parallel software
>>>>>>>> development, from weekly thought leadership blogs to news,
>>>>>>>> videos, case studies, tutorials and more. Take a look and join
>>>>>>>> the conversation now. http://goparallel.sourceforge.net
>>>>>>>> _______________________________________________
>>>>>>>> QuantLib-dev mailing list
>>>>>>>> [hidden email]
>>>>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> <https://implementingquantlib.blogspot.com>
>>>>>>> <https://twitter.com/lballabio>
>>>>>>
>>>>>> -------------------------------------------------------------------
>>>>>> --
>>>>>> -
>>>>>> ------
>>>>>> --
>>>>>> Dive into the World of Parallel Programming! The Go Parallel
>>>>>> Website, sponsored by Intel and developed in partnership with
>>>>>> Slashdot Media, is your hub for all things parallel software
>>>>>> development, from weekly thought leadership blogs to news, videos,
>>>>>> case studies, tutorials and more. Take a look and join the conversation now.
>>>>>> http://goparallel.sourceforge.net
>>>>>> _______________________________________________
>>>>>> QuantLib-dev mailing list
>>>>>> [hidden email]
>>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --------------------------------------------------------------------
>>>>> --
>>>>> -------- New Year. New Location. New Benefits. New Data Center in
>>>>> Ashburn, VA.
>>>>> GigeNET is offering a free month of service with a new server in Ashburn.
>>>>> Choose from 2 high performing configs, both with 100TB of bandwidth.
>>>>> Higher redundancy.Lower latency.Increased capacity.Completely compliant.
>>>>> vanity: www.gigenet.com
>>>>> _______________________________________________
>>>>> QuantLib-dev mailing list
>>>>> [hidden email]
>>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>>
>>

------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
123