Login  Register

答复: Openmp work on mcarlo : Dynamic Creator MT

Posted by cheng li on Sep 12, 2014; 3:29am
URL: http://quantlib.414.s1.nabble.com/Re-Openmp-work-on-mcarlo-Dynamic-Creator-MT-tp15832p15853.html

Hi Peter,

I have used your wrapper dcmt library and test with following codes: It
seems dcmt in single thread is 4X slower than the QL original MT. Is this
consistent with your side?

#include <ql/quantlib.hpp>
#include <boost/timer.hpp>
#include <iostream>

using namespace QuantLib;
using namespace std;

int main() {

        int samples;
        cin >> samples;
        boost::timer myTimer;

        MersenneTwisterUniformRng orignalMT;
        for(Size i=0; i<samples; ++i)
                orignalMT.next();

        cout << myTimer.elapsed() << endl;

        myTimer.restart();

        MersenneTwisterDynamicRng mt( mtdesc_0_8_19937[5] , 1);

        for(Size i=0; i<samples; ++i) {
                mt.next();
        }

        cout << myTimer.elapsed() << endl;

        int n;
        std::cin>>n;
        return 0;
}

Regards,
Cheng

-----邮件原件-----
发件人: Peter Caspers [mailto:[hidden email]]
发送时间: 2014年9月6日 20:48
收件人: Joseph Wang
抄送: QuantLib Mailing Lists
主题: Re: [Quantlib-dev] Openmp work on mcarlo : Dynamic Creator MT

Hi Joseph, all,

I added a wrapper for the dcmt library (Dynamic Creator of Mersenne
Twisters).

https://github.com/lballabio/quantlib/pull/132

I guess this is a useful building block for multithreaded monte carlo.
Since for bigger p the dynamic creation takes a long time (it feels more
like mining than computing ...), I precomputed 8 independent instances (i.e.
for use in at most 8 parallel threads), for the "standard" value p = 19937
and word size 32, which one can instantiate with

MersenneTwisterDynamicRng mt( mtdesc_0_8_19937[i] , seed_i );

for i = 0, ... , 7.

In addition the speed of random number generation seems a bit faster in the
dcmt library than with the original ql twister. I observe running times
scaled by a factor of 0.8 when generating 1E8 numbers.

All this is of course experimental and not well tested, so any feedback and
experiences are very welcome. I'd be very interested in your opinion on the
dcmt library and applications in parallel monte carlo.

Peter

On 20 October 2013 16:01, Joseph Wang <[hidden email]> wrote:
> I've done some more parallelization with openmp and quantlib.  I've
> uploaded the changes to the https://github.com/joequant/quantlib.  The
> branch openmp has some changes that I've issued a pull-request for.  
> openmp-mcario has some changes that need some more work.
>
> I've gotten the MC to work by generating the paths in a critical
situation.

> Calculating the prices once I have the path is multithreaded, but
> right now I need to generate the paths in a single thread to make sure
> that the same sequence is generated.
>
> The big issue right now is that there is a race condition in the
> calculation of barrier options which is causing one regression test to
> fail.  The problem is that the random number generator is being called
> in BarrierPathPricer, and since that is run multithread, the sequence
> that is being pulled will change from run to run based on whether
> other paths have pulled random numbers already.
>
> I think that fixing this is going to need some code restructuring, but
> I'd like to get some thoughts as to how to do this.  Basically, the
> interface needs to be changed slightly so that the random numbers are
> drawn in a fixed order, and that might mean one call to get any
> additional random numbers in a pricer, which gets called in a critical
> section, and another to run the pricer with the random numbers.
>
>
>
>
> ----------------------------------------------------------------------
> -------- October Webinars: Code for Performance Free Intel webinars
> can help you accelerate application performance.
> Explore tips for MPI, OpenMP, advanced profiling, and more. Get the
> most from the latest Intel processors and coprocessors. See abstracts
> and register >
> http://pubads.g.doubleclick.net/gampad/clk?id=60135031&iu=/4140/ostg.c
> lktrk _______________________________________________
> QuantLib-dev mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>

----------------------------------------------------------------------------
--
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev


------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev