[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Re: Freakishly fast backtest using 64 cores



PureBytes Links

Trading Reference Links

Amazing... thanks so much for bringing this to our attention.


----- Original Message ----- 
From: "dloyer123" <dloyer123@xxxxxxxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
Sent: Tuesday, August 05, 2008 10:06 AM
Subject: [amibroker] Re: Freakishly fast backtest using 64 cores


> The same hardware that lets a game render life like 3d graphics.  
> They perform single percision floating point math at rates that are 
> in the relm of the super computers of a few years ago.  Lots of 
> floating point operations per second and lots of bandwidth to 
> memory.  The graphics cores have advanced to the point of being able 
> to run a subset of "c", making it programable with freely 
> downloadable tools.
> 
> 
> 
> 
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "cstrader" <cstrader232@xxx> wrote:
>>
>> Re: [amibroker] Freakishly fast backtest using 64 coresYes, I'm 
> puzzled too.  
>> 
>> Looping should depend upon the speed of the CPU (or so I thought).  
> Why would putting the data in a different memory store increase 
> looping speed?  
>> 
>> I noticed that AB runs its second backtest much faster than the 
> first -- I assumed because somehow it caches all of the files on the 
> first run (although these are big files, and how it does that is a 
> mystery to me).
>> 
>> In any case, completely fascinating!
>> 
>> cs
>> 
>>   ----- Original Message ----- 
>>   From: Herman 
>>   To: dloyer123 
>>   Cc: amibroker@xxxxxxxxxxxxxxx 
>>   Sent: Tuesday, August 05, 2008 5:09 AM
>>   Subject: Re: [amibroker] Freakishly fast backtest using 64 cores
>> 
>> 
>>   This is amazing... But, i am sorry to say, i don't understand 
> what you are doing...
>> 
>> 
>> 
>> 
>>   can you put this in layman's terms?
>> 
>> 
>> 
>> 
>>   best regards,
>> 
>>   herman
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>>   Monday, August 4, 2008, 7:18:45 PM, you wrote:
>> 
>> 
>> 
>> 
>>   > Greetings,
>> 
>> 
>> 
>> 
>>   > I ported part of my AFL backtest code to a plugin, that takes 
>> 
>>   > advantage of the graphics math cores on the video card that are 
>> 
>>   > normally used for 3d graphics.  
>> 
>> 
>> 
>> 
>>   > I was able to get a several thousand fold performance 
> improvement 
>> 
>>   > over AFL code alone.
>> 
>> 
>> 
>> 
>>   > My goal was to reduce the 25 seconds AFL code alone uses for a 
> single 
>> 
>>   > portfolio level back test to less than 1 second, allowing multi 
> day 
>> 
>>   > optimization and walkforward runs to complete in a more 
> reasonable 
>> 
>>   > time, and also just to see how fast I could get it to run.
>> 
>> 
>> 
>> 
>>   > The backtest runs over 1 year of 5 minute bars for about 1000 
>> 
>>   > symbols.  1 year of data normally takes 25 seconds for 
> AmiBroker 
>> 
>>   > alone, or 18 seconds for 6 months of data.  A typical 
> optimization 
>> 
>>   > run takes hundreds of these passes per walk forward step, 
> taking 
>> 
>>   > hours.
>> 
>> 
>> 
>> 
>>   > Using the Nvidia CUDA API, running on my mid range video card.  
> It 
>> 
>>   > was much faster.  Much, much, much faster.  How fast?
>> 
>> 
>> 
>> 
>>   > It reduced the run time from 25s to... 4.4ms.  That is more 
> than 
>> 
>>   > 200/s!  
>> 
>> 
>> 
>> 
>>   > I didnt believe the timing when I saw it at first.  So, I put 
> 1,000 
>> 
>>   > runs in a loop and sure enough, it ran 1,000 iterations in 
> about 4 
>> 
>>   > 1/2 seconds.  This far exceeded my gaol or expectations.
>> 
>> 
>> 
>> 
>>   > The resulting trade list matches that obtained by the AFL 
> version of 
>> 
>>   > this code. 
>> 
>> 
>> 
>> 
>>   > I estimate that it is processing 32GB of bar data/sec.
>> 
>>   >   
>> 
>>   > Getting this to work at peak performance was tricky.  Most of 
> what I 
>> 
>>   > have learned about code optimization does not apply.  
>> 
>> 
>> 
>> 
>>   > It uses AmiBroker to load the symbol data and perform 
> calculations 
>> 
>>   > that do not depend on the optimization parameters.  Once loaded 
> into 
>> 
>>   > video memory, repeated passes can be made with different 
> parameters, 
>> 
>>   > avoiding any overhead. 
>> 
>> 
>> 
>> 
>>   > For non backtest/optimization runs, the code just evaluates one 
>> 
>>   > symbol and passes the data back to AmiBroker 
> buy/sell/short/cover 
>> 
>>   > arrays, making it easy to test, validate and visualize the 
> trades.  
>> 
>>   > There is very little performance gain in this case.  
>> 
>> 
>> 
>> 
>>   > There are problems, however.  To run optimizations at peak 
> speed, I 
>> 
>>   > can not use AmiBroker to calculate the optimization goal 
> function.  
>> 
>>   > So, I am in the process of writing code to match signals and 
>> 
>>   > calculate the portfolio fitness function.  Once I do this, I 
> will be 
>> 
>>   > able to perform full optimizations and walk forwards at 3 
> orders of 
>> 
>>   > magnitude faster than is possible with AmiBroker alone.
>> 
>> 
>> 
>> 
>>   > Also, this is not general purpose code.  Changing the system 
> code 
>> 
>>   > means changing a dll written in C.  However, there is no reason 
> that 
>> 
>>   > this could not be made more general. 
>> 
>> 
>> 
>> 
>>   > I have made some prototypes of "Cuda" versions of basic AFL 
>> 
>>   > functions.  The idea is to queue the function calls into a 
> definition 
>> 
>>   > executed by a micro kernel running on the graphics cores.  The 
> result 
>> 
>>   > would be the ability to use the full power of the graphics 
> cores by 
>> 
>>   > modifying AFL code to use Cuda aware versions with no changes 
> to C 
>> 
>>   > code. It would be an interesting, but big project.  
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>>   > ------------------------------------
>> 
>> 
>> 
>> 
>>   > Please note that this group is for discussion between users 
> only.
>> 
>> 
>> 
>> 
>>   > To get support from AmiBroker please send an e-mail directly to 
>> 
>>   > SUPPORT {at} amibroker.com
>> 
>> 
>> 
>> 
>>   > For NEW RELEASE ANNOUNCEMENTS and other news always check 
> DEVLOG:
>> 
>>   > http://www.amibroker.com/devlog/
>> 
>> 
>> 
>> 
>>   > For other support material please check also:
>> 
>>   > http://www.amibroker.com/support.html
>> 
>>   > Yahoo! Groups Links
>> 
>> 
>> 
>> 
>>   >     http://groups.yahoo.com/group/amibroker/
>> 
>> 
>> 
>> 
>>   >     Individual Email | Traditional
>> 
>> 
>> 
>> 
>>   >     http://groups.yahoo.com/group/amibroker/join
>> 
>>   >     (Yahoo! ID required)
>> 
>> 
>> 
>> 
>>   >     mailto:amibroker-digest@xxxxxxxxxxxxxxx 
>> 
>>   >     mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx
>> 
>> 
>> 
>> 
>>   >     amibroker-unsubscribe@xxxxxxxxxxxxxxx
>> 
>> 
>> 
>> 
>>   >     http://docs.yahoo.com/info/terms/
>>
> 
> 
> 
> ------------------------------------
> 
> Please note that this group is for discussion between users only.
> 
> To get support from AmiBroker please send an e-mail directly to 
> SUPPORT {at} amibroker.com
> 
> For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> http://www.amibroker.com/devlog/
> 
> For other support material please check also:
> http://www.amibroker.com/support.html
> Yahoo! Groups Links
> 
> 
> 

------------------------------------

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

For other support material please check also:
http://www.amibroker.com/support.html
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/