32 bit vs 64 bit speed

Hi, I use Amibroker on Windows 7 - in a virtual machine. My native OS is Linux, so I run Windows 7 in a 32 bit W7 Oracle VirtualBox.

I have been using a 32 bit version of Amibroker, but I'm wondering about installing 64 bit W7 and a 64 bit Amibroker.

Is there a noticeable speed increase?

I tend to do a lot of CMAE optimisations (OptimizerSetEngine("cmae"):wink: and walk forward tests over 10-15 years of data.

Thanks as always :slight_smile:

You can read these KB articles and it discusses it in detail.

http://www.amibroker.com/kb/2016/02/20/differences-between-32-bit-and-64-bit-version/

https://www.amibroker.com/guide/h_multithreading.html

A lot of care is taken and explained there, so just because an application ports from 32b to 64b, doesn't make sense to have 64b OHLC Arrays.
It would take twice the space in the CPUs Register, and obviously TJ has thought about that.
Also, attached are some 3rd party links if you need more clarity.

Apparently, the clear advantage of 64b is the access to a larger Address Space which is limited to 3or4GB but if your DB isn't really large than 64b isn't going to be twice as fast.
Maybe marginally mentioned in KB but not exactly specified ( but maybe due to the instruction set chosen or something) but you could run some tests and post them :smiley:

Actually it is more than larger address space.
In current incarnation (version 6.30) AmiBroker 64-bit uses completely different (modern) compiler Visual C++ 2017, while 32-bit version uses legacy Visual C++ 6. There are significant differences in how code is generated between the two, including foremostly the use of SIMD (single instruction multiple data) instructions by 64-bit and auto-vectorization of certain loops causing that some functions are significantly faster. Check "ReleaseNotes.html" for details.

1 Like

Thanks for that information, it actually struck me now since I recalled that.

But the 32b OHLC Array thing still holds, right?

Yes, data are kept in same sized arrays. And source code for both versions is pretty much the same (with very small portions being unique).

OK, so in summary - 64 bit is a bit faster?

In summary, only the 6.30 64b release, not previous 64b versions lower than 6.20 official release.
Exactly since the 6.22 beta since MS VC++ 2017
http://www.amibroker.com/devlog/2017/04/30/amibroker-6-22-0-beta-released/

Not a bit faster :slight_smile: the way Intel describes the SSEx/AVX the effect is

Many functions are faster by 30-50% but in some cases such as Min()/Max() functions as large as 8x speed up can be observed in 64-bit version.

That is wrong. It just shows you have never used 64-bit AB before and never compared it with 32-bit of same version numbers. 64 bit AB was faster than 32-bit on certain operations years ago already before 6.3! We have already tested at old Yahoo boards years ago. And several people (including me) observed that 64-bit being around 20 to 30 % faster than 32-bit AB (e.g optimization running 10 hours on 32-bit AB but same one running 2 to 3 hours less on 64-bit AB). That was around 2012 and later. I do not think 6.30 existed that time, did it? No, exactly right, I know for a fact that back then there were versions 5.5 and 5.6 available. So that is based on actual own tests of people but not based on some hearsay. So better do not make your own facts based on nothing but copying or assuming. The reasons for 64-bit AB being faster than 32-bit AB don't matter much. For the end user only thing mattering is 64-bit has been faster than 32-bit AB on certain operations (for many years already).

2 Likes

Thanks for the info. Noted.

Yes thanks for all the replies. Looks like it's worth moving to 64 bit.

@travick and @fxshrat are actually both partially right :slight_smile:
The fact is that 64 bit since it was released first back in March 22, 2006 as world's first technical analysis software in 64-bit and since the very beginning it used SSE instructions (VC++2005 at that time) and it was faster in some operations than 32-bit by 10-20% (but there were also very few things that were slightly slower).
VC++2005 compiler was used for 64-bit version till version 6.22 when I changed the compiler for 64-bit version to VC++2017. This compiler is just much better than VC++2005 in code generation including auto-vectorization of loops. This in (rare) cases can give even 8x speed up (as in case of min/max array functions). Typically it is just 30%-50% faster.

4 Likes

I can confirm 64bit is 30-40% faster with my optimization for 3 variables.