Fractally uses an efficient threading model, to take advantage of the many CPU cores that are available on modern devices. The app also takes advantage of vector instructions, using the largest vectors available on the device (128, 256 or 512 bit vectors.)

Depending on the zoom level and maximum iteration count, the app may choose to use single or double precision floating point (32 or 64 bit.) Single precision is faster, double precision is required for higher iteration counts and higher zoom levels.

The following performance table records the maximum number of iterations per second on each device. These values can be seen by showing the metrics, by tapping on the Show Metrics menu item.

For example:


At the end of the first line in the metrics view, there will either be (s) or (d) which indicates if the iterations per second value applies to single precision (32 bit) floating point, or double precision (64 bit) floating point.

An iteration is one cycle through the Mandelbrot equation, along with the bookkeeping required to increment the iteration counts and determine when each point escapes the bounded complex number plane. Each iteration involves many floating point calculations.

The app has been tested on the following devices:

ModelraterateProcessorVector, credit
2019 iMac29,36014,1496 core i3-8500256 bit (AVX-2), by Gregory H.
2020 MacBookPro 13”24,01011,090quad core i5512 bit (AVX-512)
2021 iMac M119,30010,1008 core M1128 bit, apple native.
2021 iMac M112,8505,2808 core M1128 bit, Rosetta translation.
2022 iPhone SE211,6505,7106 core A13128 bit (NEON)
2017 MacbookPro 13”9,2204,860dual core i5256 bit (AVX-2)
2018 iPhone XR5,6952,7236 core A12128 bit, by Gregory H.
2012 MacbookPro 13”4,2512,553dual core i5256 bit (AVX-1)
2016 iPhone SE2,6231,318dual core A9128 bit (NEON)
2017 5th gen iPad2,5471,284dual core A9128 bit (NEON)

(The iteration rates above are in millions of iterations per second.)

The 2020 13” MacBookPro is doing over 20 billion iterations per second! Even an old iPhone, from 2016, is able to perform over two billion iterations per second. Its astounding how fast our devices have become.

Showing both the Julia and Mandelbrot sets.

The most demanding task you can ask of a Mandelbrot / Julia set viewer, such as Fractally, is to view both at the same time. In Fractally, as you scroll around the Mandelbrot set, there is a new seed value used to generate a new Julia set. Each Julia set calculation starts all over, there is nothing saved from the earlier calculation. Updating the Julia set when the Mandelbrot set scrolls requires raw brute force speed.


As you zoom in and out, Fractally will adaptively adjust the quality of the images produced in order to maintain a high frame rate. On slower devices, the quality of a zoomed image will appear pixelated. This resolves as soon as you pause zooming. On faster devices, the quality of the zoomed images will be higher. On my 2020 13” MBP the zooms are often generated at full retina resolution, in real time.

I will be curious to hear about the experiences of others as they run on the newer Apple Silicon devices (A14, A14X, etc.)

Doing your own performance test.

If you measure the performance on your own device, please let me know what the results are.

When doing this test I only show the Mandelbrot set. On the Mac, make the app full screen (with no menu bar being shown.) Zoom fully out, and then zoom into the interior of the set so that the entire screen is occupied with inside pixels. Set the maximum iteration count to 400. Then zoom a little in, pause, a little out, pause, a little in, pause, a little out, etc. Keep doing these small zooms until the performance metrics number appears to stop changing.

Do the test for both single and double precision.