Thank you very much Dave, I will work to convert this to opencl, as I already have the opencl library included into the admb source build steps it shouldn't be too big a deal.  I knew we needed to change the operator overloading to structs but figured it was too much work, i.e. rewriting all the overloads in admb... I was kinda hoping opencl would come out with a C++-friendly library..<br>Chris<br><br>----- Original Message -----<br>From: dave fournier <davef@otter-rsch.com><br>Date: Wednesday, September 14, 2011 1:13 pm<br>Subject: A nontrivial cuda example<br>To: CHRIS GRANDIN <cgrandin@shaw.ca><br>Cc: users@admb-project.org<br><br>> As Chris anticipated (ruining my surprise) I figured out that <br>> difficulty in understanding<br>> derivative stuff might be holding up some of the parallel <br>> processing so I<br>> took a few hours to write an example of GPU processing within ADMB.<br>> <br>> Here is a vectorized log_negative binomial density <br>> example.  It is a rather silly<br>> negative binomial regression, but it does call the <br>> log_negative_binomial density function<br>> a lot of times.  I has to do forward AD for functions of <br>> one or two variables in C<br>> rather than C++<br>> which means you put in the AD code rather than overloading the <br>> operators.<br>> It runs on the GPU or CPU depending on whether you enter 1 or 2 <br>> when prompted.<br>> <br>> The example shows how to calculate the derivatives and how to <br>> make sure they are correct.<br>> <br>> I hope we can all build on this to clean up the GPU interface <br>> and move it to opencl.<br>> the current version is cuda.<br>> <br>> In order to build the example I used the makefile from the cuda <br>> sdk examples<br>> modified to include the admb stuff.  The cpp file was <br>> renamed to a cu file<br>> 'cause cuda seems to like that.<br>> <br>> It should run a lot faster on Chris's  fancy government thing.<br>> <br>> Have fun,<br>> <br>>         Dave<br>>