Visualizations of the 8th generations of this Mandelbrot are available here.
All systems use the same algorithm that calculates 128x256 dots of Mandelbrot. They also use almost the same ways to visualize it. Every dot is encoded with 4 bits. So all systems have to output exactly 16 KB of graphical data for every picture. Detailed information about graphic modes used is in the next table (the number in parentheses is the effective CPU frequency).
# | System | Video mode | Window | Comments |
---|---|---|---|---|
1 | БK0010, K1801BM1@3(2) MHz | 512x256, monochrome | 512x256x1 | 4x1 texture/pixel |
2 | " | 256x256, 4 colors | 256x256x4 | 2x1 texture/pixel |
3 | БK0011, K1801BM1@4(2.3) MHz | 256x256x4 | " | " |
4 | Amstrad CPC 4, Z80@4(3.2) MHz | " | " | " |
5 | " | 128x256, 16 colors | 128x256x16 | |
6 | BBC Micro, 6502@2 MHz | 256x256, 4 colors | 256x256x4 | 2x1 texture/pixel |
7 | " | 128x256, 16 colors | 128x256x16 | |
8 | Commodore +4 (PAL), 6502@1.7 (1) MHz | 160x256, 4 colors | 128x256x4 | 2 flashing dots/pixel |
9 | IBM PC (EGA), 8088@4.8 MHz | 640x350, 16 colors | 128x256x16 | |
10 | Amiga 500 (PAL), 68000@7.1 MHz | 320x256, 16 colors | 128x256x16 | |
11 | Acorn Archimedes 305, ARM2@8 MHz | " | " | |
12 | Sinclair QL, 68008@7.5 MHz | 256x256, 16 colors | 128x256x16 | |
13 | Corvette, 8080@2.5 MHz | 512x256, 8 colors | 256x256x4 | 2x1 texture/pixel |
14 | " | " | 256x256x8 | " |
The Mandelbrot algorithm uses the next parameters for the first 16 visualizations.
# | iterations | x-interval | y-interval |
---|---|---|---|
1 | 7 | [-4.64062, 4.28906] | [-4.5, 4.5] |
2 | 8 | [-4.09375, 3.5957] | [-3.75, 3.75] |
3 | 9 | [-3.69336, 3.00391] | [-3.25, 3.25] |
4 | 10 | [-3.20508, 2.5] | [-2.75, 2.75] |
5 | 11 | [-2.89258, 2.06836] | [-2.5, 2.5] |
6 | 12 | [-2.76562, 1.69922] | [-2, 2] |
7 | 13 | [-2.83203, 1.38477] | [-1.5, 1.5] |
8 | 14 | [-2.60352, 1.11719] | [-1, 1] |
9 | 15 | [-2.33594, 0.888672] | [-0.75, 0.75] |
10 | 16 | [-2.0332, 0.695312] | [-0.75, 0.75] |
11 | 17 | [-1.95117, 0.529297] | [-0.75, 0.75] |
12 | 18 | [-2.09766, 0.382812] | [-0.75, 0.75] |
13 | 19 | [-2.22266, 0.257812] | [-0.75, 0.75] |
14 | 20 | [-2.33203, 0.148438] | [-0.75, 0.75] |
15 | 21 | [-2.42578, 0.0546875] | [-0.75, 0.75] |
16 | 22 | [-2.50586, -0.0253906] | [-0.75, 0.75] |
All systems also provide timing information. The next table shows timings for drawing of pictures #1-16.
# | C+4 | БK 0010 | CPC 16 colors | CPC 4 colors | BBC Micro 16 colors | BBC Micro 4 colors | Corvette 8 colors color mode | Corvette 4 colors planar mode |
---|---|---|---|---|---|---|---|---|
v2 | v1 | |||||||
1 | 4.72 | 3.63 | 2.55 | 2.76 | 2.24 | 2.35 | 5.00 | 5.38 |
2 | 5.42 | 3.89 | 2.86 | 3.06 | 2.60 | 2.70 | 5.54 | 5.92 |
3 | 6.27 | 4.20 | 3.22 | 3.43 | 3.03 | 3.13 | 6.22 | 6.60 |
4 | 7.66 | 4.70 | 3.82 | 4.03 | 3.73 | 3.84 | 7.32 | 7.66 |
5 | 9.08 | 5.22 | 4.44 | 4.65 | 4.46 | 4.56 | 8.44 | 8.82 |
6 | 11.64 | 6.15 | 5.54 | 5.75 | 5.75 | 5.86 | 10.46 | 10.84 |
7 | 14.92 | 7.34 | 6.95 | 7.16 | 7.41 | 7.51 | 13.04 | 13.42 |
8 | 21.68 | 9.81 | 9.89 | 10.10 | 10.85 | 10.96 | 18.42 | 18.78 |
9 | 29.13 | 12.51 | 13.10 | 13.31 | 14.64 | 14.74 | 24.30 | 24.66 |
10 | 34.82 | 14.59 | 15.56 | 15.77 | 17.52 | 17.63 | 28.72 | 29.16 |
11 | 38.94 | 16.09 | 17.34 | 17.55 | 19.62 | 19.72 | 32.06 | 32.42 |
12 | 39.44 | 16.27 | 17.56 | 17.77 | 19.87 | 19.98 | 32.46 | 32.82 |
13 | 39.40 | 15.89 | 17.11 | 17.32 | 19.34 | 19.44 | 31.62 | 32.02 |
14 | 37.22 | 15.46 | 16.60 | 16.81 | 18.74 | 18.84 | 30.70 | 31.06 |
15 | 36.20 | 15.04 | 16.09 | 16.30 | 18.13 | 18.24 | 29.76 | 30.12 |
16 | 34.80 | 14.59 | 15.56 | 15.77 | 17.51 | 17.62 | 28.78 | 29.16 |
total | 371.34 | 165.38 | 168.19 | 171.54 | 185.44 | 187.12 | 312.84 | 318.84 |
The color writing mode for the Corvette writes data for all 3 graphic planes simultaneously, so it actually updates 24 KB of video RAM on each screen in this mode.
The next table shows the timings for faster computers.
# | БK 0011 | Amiga 500 | IBM PC 5160 EGA mode 0 | IBM PC 5160 EGA mode 2 | Acorn Archimedes 305 | QL | QL external RAM |
---|---|---|---|---|---|---|---|
v2 | v1 | ||||||
1 | 3.40 | 0.94 | 1.87 | 1.59 | 0.12 | 1.94 | 1.14 |
2 | 3.63 | 1.00 | 1.98 | 1.76 | 0.14 | 2.16 | 1.26 |
3 | 3.91 | 1.06 | 2.08 | 1.93 | 0.17 | 2.39 | 1.38 |
4 | 4.37 | 1.20 | 2.36 | 2.14 | 0.21 | 2.61 | 1.50 |
5 | 4.84 | 1.30 | 2.64 | 2.42 | 0.25 | 3.18 | 1.83 |
6 | 5.68 | 1.52 | 3.07 | 2.85 | 0.32 | 3.91 | 2.23 |
7 | 6.76 | 1.82 | 3.68 | 3.46 | 0.41 | 4.83 | 2.77 |
8 | 8.99 | 2.36 | 4.89 | 4.72 | 0.59 | 6.75 | 3.86 |
9 | 11.45 | 3.00 | 6.20 | 6.04 | 0.80 | 8.82 | 5.03 |
10 | 13.32 | 3.48 | 7.25 | 7.08 | 0.96 | 10.42 | 5.96 |
11 | 14.69 | 3.82 | 8.08 | 7.80 | 1.07 | 11.60 | 6.63 |
12 | 14.85 | 3.86 | 8.13 | 7.91 | 1.09 | 11.75 | 6.71 |
13 | 14.51 | 3.78 | 7.96 | 7.69 | 1.06 | 11.45 | 6.54 |
14 | 14.12 | 3.70 | 7.69 | 7.53 | 1.03 | 11.13 | 6.37 |
15 | 13.73 | 3.58 | 7.52 | 7.30 | 0.99 | 10.79 | 6.16 |
16 | 13.33 | 3.48 | 7.30 | 7.09 | 0.96 | 10.45 | 5.97 |
total | 151.58 | 39.90 | 82.70 | 79.31 | 10.17 | 114.17 | 65.35 |
Writing modes 0 and 2 were used for the EGA. Both produce the same picture. I can think that for the VGA results will be the same. The results for the Amiga 500 with fast RAM are only about 1% faster so I haven't included them.
Emulators were used to get these results.
Machine | Emulator |
---|---|
БK0010 | BK2010 v0.5 |
БK0011M | GID v3.10 |
Commodore+4 | plus4emu v1.2.10 |
Amstrad CPC | ep128emu v2.0.11 |
BBC Master | b-em v-ec63538 |
Amiga 500 | FS-UAE 3.0.5 |
IBM PC XT EGA | pcem 17 |
Acorn Archimedes 305 | Arculator v2.1 |
Sinclair QL | QemuLator 3.4 |
Corvette | emu80 v4.0.396 |
Qemulator appears to be about 7% faster than real hardware. So the unexpanded QL results are adjusted with this 7%. Real QL results have been provided by mk79. A lot of thanks to him. The data is also used for the QL with external memory. It seems that pcem is also about 7% faster than the real IBM PC but I have only indirect information about this so I didn't apply any correction to data from pcem.
The Commodore +4 results can be about 5% faster if we turn on the NTSC mode during vertical retrace time.
The next table contains approximate values of efficiency reciprocals (ER) for the tested CPUs. These values are calculated by multiplication of the total time of the calculation of 16 first Mandelbrot pictures by the effective CPU frequency. The ER value reflects the efficiency of CPU electronics, it gives the reciprocal of the CPU performance at 1 MHz.
Rank | Processor | The effective frequency | ER |
---|---|---|---|
1 | ARM2 | 8 | 82 |
2 | 68000 | 7.1 | 282 |
3 | K1801BM1 | 2 | 330 |
4 | 6502 | 2 | 371 |
5 | 8088 | 4.8 | 378 |
6 | 68008 | 7.5 | 490 |
7 | Z80 | 3.2 | 538 |
8 | 8080 | 2.5 | 782 |
It is also interesting to compare the code density for this task. Two values are provided for this: the total program size and the size of the main loop.
Rank | Platform | CPU | Program size | Main loop size | |
---|---|---|---|---|---|
bytes | LOC | ||||
1 | БK | T-11 | 806 | 32 | 13 |
2 | IBM PC | 8088 | 879 | 46 | 20 |
3 | QL | 68008 | 2029 | " | " |
4 | Amiga | 68000 | 2384 | " | " |
5 | Amstrad, 16c | Z80 | 979 | 54 | 37 |
6 | Amstrad, 4c | Z80 | 1016 | " | " |
7 | Corvette, color | 8080 | 1057 | 84 | 66 |
8 | Corvette, planar | 8080 | 1102 | " | " |
9 | Archimedes | ARM2 | 1342 | 100 | 25 |
10 | BBC Micro, 16c | 6502 | 1266 | 131 | 81 |
11 | BBC Micro, 4c | 6502 | 1298 | " | " |
12 | Plus4 | 6502 | 1684 | " | " |
The QL code consists of two Basic programs which generate and use ML code.
Sources for all these programs are available at github. You also can download their executables there.
If anybody finds a way to speed up these implementations of Mandelbrot calculations, or just creates new implementations, please inform me and I should update this page. Send your reports to zliztwr@yzandex.ru but remove all z from the address.