Julia: getting the best performance out of your data types

Anyone using Julia?

Whenever you just start with Julia every book suggests you to forget about data type annotation and let compiler decide and define it. For example:

Yes, it works great… in 99% of the scenarios. I followed the same approach until I noticed an enormous memory consumption when working with large datasets.

Today I would like to show how using the right data type can go along way toward minimising problems, optimising performance and reducing memory consumption.

So the reason for enormously high memory consumption is the number of bits required to store your value. I suspect you are using 64 bit system. Int64 is standard for Integers.

Type Signed? Number of bits Smallest value Largest value
Int8 8 -2^7 2^7 – 1
UInt8 8 0 2^8 – 1
Int16 16 -2^15 2^15 – 1
UInt16 16 0 2^16 – 1
Int32 32 -2^31 2^31 – 1
UInt32 32 0 2^32 – 1
Int64 64 -2^63 2^63 – 1
UInt64 64 0 2^64 – 1
Int128 128 -2^127 2^127 – 1
UInt128 128 0 2^128 – 1
Bool N/A 8 false (0) true (1)
Float16 N/A 16 N/A N/A
Float32 N/A 32 N/A N/A
Float64 N/A 64 N/A N/A

So the example we had above could be easily defined as an array of Int8 and we would have saved 56*4 bits in total:

a = Int8[1, 2, 3, 4]

But does it really matter that much? I will run some tests below to prove that choosing the appropriate data type matters.

We will randomly generate integers from 0 to 100 and store them as Int64, Float32, Int8 and compare benchmarks.

NB: The script below runs in a global scope and that can affect the results.

From the Git below you can see that both speed and memory consumption are highly linked to the data types. There is over 60MB difference between Int64 and Int8!

Now imagine having multi-dimensional array. What would be the difference there?

We have chosen Julia for its speed being close to C/ Fortran so lets be careful.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s