[Developers] admb threading

John Sibert sibert at hawaii.edu
Wed Dec 5 09:41:44 PST 2012


Matthew,

Putting low-level locks on variable objects (ie dvariable, 
df1b2variable) is equivalent to blocking every floating point operation 
in the model, and is guaranteed to slow things down a bit. Blocking the 
gradient structure would have the same effect. In both cases, I can 
imagine problems with the order in which the reverse calculations in 
gradcalc() are executed. This approach leaves gradcalc() as a single 
thread. Since the reverse computation typically uses 2-5 times as many 
floating point operations as the forward computation, it would be a good 
idea to find a way to do these in parallel.

Duplicating the gradient structures and making deep copies of objects 
involved in derivative computations seems at first to be a bit 
inefficient. Perhaps, but memory is cheap and creating thread-specific 
gradient structures ensures that the derivatives can be correctly computed.

I'm not saying that your approach will absolutely not work. It might 
work (in the sense that you can make the derivatives correct), but 
performance benefits will be difficult to measure and will be 
application specific.

Here is a cautionary tale. About 15 years ago, I implemented pthread in 
an easily parallel section of model for which I had written my own 
derivative code. The only way it would work was to make separate data 
structures for each thread in which the derivative information was 
stored. The derivatives were correct, and it certainly decreased the 
amount of time spent in that particular section of the code. Alas, the 
model as a whole only performed slightly better because a different 
bottleneck came to the top. So you need thread-specific gradient 
information, and there is no guarantee that things will run faster. The 
performance benefit is application specific.

So for now, Johnoel and I will try to implement Dave's approach. We will 
be looking for operations that are inherently parallelizable (Hessian 
computations, separable functions, ... ), civilizing
Dave's protoype code to make it a bit safer, extending the concept to 
higher dimensional objects, and exploring was to easily implement 
parallel sections of user models (such as those which use the funnel).

Thanks for sharing your thoughts and questions. It is one of the 
benefits of open source.

Cheers,
John

John Sibert
Emeritus Researcher, SOEST
University of Hawaii at Manoa

Visit the ADMB project http://admb-project.org/

On 12/04/2012 03:46 PM, Matthew Supernaw wrote:
> I misinterpreted your joke, I apologize.  How about we agree to be polite and continue?
>
> Would a global mutex lock on the gradient_structure work?
>
> If it would work, what is more costly copying data into a master/slave paradigm or having an operational bottle neck at the gradient_structure?
>
> On Dec 4, 2012, at 4:46 PM, dave fournier wrote:
>
>> On 12-12-04 01:15 PM, Matthew Supernaw wrote:
>>> Which book,  "Concurrent Programming for Procedural Programmers"?
>> Its usually called a joke.  I was referring to the code in my example.
>>
>>> Anyway,  lets step through the logic of:
>>>
>>> prevariable& operator+(const prevariable& v1, const prevariable& v2)
>>>
>>>
>>> you have a call to:
>>>
>>> gradient_structure::GRAD_STACK1->set_gradient_stack4(void(*),double*,double*double*)
>> Go ahead. Do what you want.
>>> and then:
>>>
>>> default_evaluation4()
>>>
>>> Why can't there be a mutex lock on gradient_structure?
>>>
>>>
>>>
>>>
>>>
>>> On Dec 4, 2012, at 3:00 PM, developers-request at admb-project.org wrote:
>>>
>>>> Send Developers mailing list submissions to
>>>> 	developers at admb-project.org
>>>>
>>>> To subscribe or unsubscribe via the World Wide Web, visit
>>>> 	http://lists.admb-project.org/mailman/listinfo/developers
>>>> or, via email, send a message with subject or body 'help' to
>>>> 	developers-request at admb-project.org
>>>>
>>>> You can reach the person managing the list at
>>>> 	developers-owner at admb-project.org
>>>>
>>>> When replying, please edit your Subject line so it is more specific
>>>> than "Re: Contents of Developers digest..."
>>>>
>>>>
>>>> Today's Topics:
>>>>
>>>>    1. Re: admb threading (dave fournier)
>>>>
>>>>
>>>> ----------------------------------------------------------------------
>>>>
>>>> Message: 1
>>>> Date: Tue, 04 Dec 2012 11:56:50 -0800
>>>> From: dave fournier <davef at otter-rsch.com>
>>>> To: developers at admb-project.org
>>>> Subject: Re: [Developers] admb threading
>>>> Message-ID: <50BE5582.3000002 at otter-rsch.com>
>>>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>>>
>>>> Read the book!
>>>>
>>>> A way to synchronize is in my example referred to earlier. Of course
>>>> that is
>>>> just for dvariables. For df1b2 variables there is a lot more structure,
>>>> but the ideas
>>>> would be the same.
>>>>
>>>>
>>>> ------------------------------
>>>>
>>>> _______________________________________________
>>>> Developers mailing list
>>>> Developers at admb-project.org
>>>> http://lists.admb-project.org/mailman/listinfo/developers
>>>>
>>>>
>>>> End of Developers Digest, Vol 46, Issue 10
>>>> ******************************************
>>> _______________________________________________
>>> Developers mailing list
>>> Developers at admb-project.org
>>> http://lists.admb-project.org/mailman/listinfo/developers
> _______________________________________________
> Developers mailing list
> Developers at admb-project.org
> http://lists.admb-project.org/mailman/listinfo/developers
>



More information about the Developers mailing list