Raspberry Pi 3 VideoCore 4

=======================================================
    glmark2 2014.03
=======================================================
    OpenGL Information
    GL_VENDOR:     Broadcom
    GL_RENDERER:   Gallium 0.4 on VC4 V3D 2.1
    GL_VERSION:    OpenGL ES 2.0 Mesa 13.0.0
=======================================================
[build] use-vbo=false: FPS: 127 FrameTime: 7.874 ms
[build] use-vbo=true: FPS: 136 FrameTime: 7.353 ms
[texture] texture-filter=nearest: FPS: 134 FrameTime: 7.463 ms
[texture] texture-filter=linear: FPS: 131 FrameTime: 7.634 ms
[texture] texture-filter=mipmap: FPS: 123 FrameTime: 8.130 ms
[shading] shading=gouraud: FPS: 122 FrameTime: 8.197 ms
[shading] shading=blinn-phong-inf: FPS: 121 FrameTime: 8.264 ms
[shading] shading=phong: FPS: 114 FrameTime: 8.772 ms
[shading] shading=cel: FPS: 112 FrameTime: 8.929 ms
[bump] bump-render=high-poly: FPS: 76 FrameTime: 13.158 ms
[bump] bump-render=normals: FPS: 135 FrameTime: 7.407 ms
[bump] bump-render=height: FPS: 133 FrameTime: 7.519 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 90 FrameTime: 11.111 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 63 FrameTime: 15.873 ms
[pulsar] light=false:quads=5:texture=false: FPS: 136 FrameTime: 7.353 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 40 FrameTime: 25.000 ms
[desktop] effect=shadow:windows=4: FPS: 80 FrameTime: 12.500 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 57 FrameTime: 17.544 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 56 FrameTime: 17.857 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 66 FrameTime: 15.152 ms
[ideas] speed=duration: FPS: 137 FrameTime: 7.299 ms
[jellyfish] : FPS: 89 FrameTime: 11.236 ms
[terrain] : FPS: 5 FrameTime: 200.000 ms
[shadow] : FPS: 76 FrameTime: 13.158 ms
[refract] : FPS: 21 FrameTime: 47.619 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 144 FrameTime: 6.944 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 113 FrameTime: 8.850 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 141 FrameTime: 7.092 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 128 FrameTime: 7.812 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 96 FrameTime: 10.417 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 125 FrameTime: 8.000 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 125 FrameTime: 8.000 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 81 FrameTime: 12.346 ms
=======================================================
                                  glmark2 Score: 101 
=======================================================

 

Banana Pi M1 Mali 400 MP2

=======================================================
    glmark2 2014.03+git20150611.fa71af2d
=======================================================
    OpenGL Information
    GL_VENDOR:     ARM
    GL_RENDERER:   Mali-400 MP
    GL_VERSION:    OpenGL ES 2.0
=======================================================
[build] use-vbo=false: FPS: 74 FrameTime: 13.514 ms
[build] use-vbo=true: FPS: 77 FrameTime: 12.987 ms
[texture] texture-filter=nearest: FPS: 84 FrameTime: 11.905 ms
[texture] texture-filter=linear: FPS: 83 FrameTime: 12.048 ms
[texture] texture-filter=mipmap: FPS: 84 FrameTime: 11.905 ms
[shading] shading=gouraud: FPS: 74 FrameTime: 13.514 ms
[shading] shading=blinn-phong-inf: FPS: 74 FrameTime: 13.514 ms
[shading] shading=phong: FPS: 73 FrameTime: 13.699 ms
[shading] shading=cel: FPS: 65 FrameTime: 15.385 ms
[bump] bump-render=high-poly: FPS: 54 FrameTime: 18.519 ms
[bump] bump-render=normals: FPS: 86 FrameTime: 11.628 ms
[bump] bump-render=height: FPS: 90 FrameTime: 11.111 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 32 FrameTime: 31.250 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 20 FrameTime: 50.000 ms
[pulsar] light=false:quads=5:texture=false: FPS: 92 FrameTime: 10.870 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 16 FrameTime: 62.500 ms
[desktop] effect=shadow:windows=4: FPS: 48 FrameTime: 20.833 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: Unsupported
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 39 FrameTime: 25.641 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: Unsupported
[ideas] speed=duration: FPS: 74 FrameTime: 13.514 ms
[jellyfish] : FPS: 47 FrameTime: 21.277 ms
[terrain] : Unsupported
[shadow] : FPS: 25 FrameTime: 40.000 ms
[refract] : FPS: 15 FrameTime: 66.667 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 89 FrameTime: 11.236 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 60 FrameTime: 16.667 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 90 FrameTime: 11.111 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 75 FrameTime: 13.333 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 46 FrameTime: 21.739 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 76 FrameTime: 13.158 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 75 FrameTime: 13.333 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 75 FrameTime: 13.333 ms
=======================================================
                                  glmark2 Score: 63 
=======================================================

 

Raspberry Pi 3:

=======================================================
    glmark2 2014.03
=======================================================
    OpenGL Information
    GL_VENDOR:     Broadcom
    GL_RENDERER:   Gallium 0.4 on VC4 V3D 2.1
    GL_VERSION:    OpenGL ES 2.0 Mesa 13.0.0
=======================================================
[build] use-vbo=false: FPS: 127 FrameTime: 7.874 ms
[build] use-vbo=true: FPS: 136 FrameTime: 7.353 ms
[texture] texture-filter=nearest: FPS: 134 FrameTime: 7.463 ms
[texture] texture-filter=linear: FPS: 131 FrameTime: 7.634 ms
[texture] texture-filter=mipmap: FPS: 123 FrameTime: 8.130 ms
[shading] shading=gouraud: FPS: 122 FrameTime: 8.197 ms
[shading] shading=blinn-phong-inf: FPS: 121 FrameTime: 8.264 ms
[shading] shading=phong: FPS: 114 FrameTime: 8.772 ms
[shading] shading=cel: FPS: 112 FrameTime: 8.929 ms
[bump] bump-render=high-poly: FPS: 76 FrameTime: 13.158 ms
[bump] bump-render=normals: FPS: 135 FrameTime: 7.407 ms
[bump] bump-render=height: FPS: 133 FrameTime: 7.519 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 90 FrameTime: 11.111 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 63 FrameTime: 15.873 ms
[pulsar] light=false:quads=5:texture=false: FPS: 136 FrameTime: 7.353 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 40 FrameTime: 25.000 ms
[desktop] effect=shadow:windows=4: FPS: 80 FrameTime: 12.500 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 57 FrameTime: 17.544 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 56 FrameTime: 17.857 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 66 FrameTime: 15.152 ms
[ideas] speed=duration: FPS: 137 FrameTime: 7.299 ms
[jellyfish] : FPS: 89 FrameTime: 11.236 ms
[terrain] : FPS: 5 FrameTime: 200.000 ms
[shadow] : FPS: 76 FrameTime: 13.158 ms
[refract] : FPS: 21 FrameTime: 47.619 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 144 FrameTime: 6.944 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 113 FrameTime: 8.850 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 141 FrameTime: 7.092 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 128 FrameTime: 7.812 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 96 FrameTime: 10.417 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 125 FrameTime: 8.000 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 125 FrameTime: 8.000 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 81 FrameTime: 12.346 ms
=======================================================
                                  glmark2 Score: 101 
=======================================================

 

DragonBoard 410c

=======================================================
    glmark2 2017.07
=======================================================
    OpenGL Information
    GL_VENDOR:     freedreno
    GL_RENDERER:   Gallium 0.4 on FD307
    GL_VERSION:    OpenGL ES 3.0 Mesa 13.0.6
=======================================================
[build] use-vbo=false: FPS: 194 FrameTime: 5.155 ms
[build] use-vbo=true: FPS: 207 FrameTime: 4.831 ms
[texture] texture-filter=nearest: FPS: 162 FrameTime: 6.173 ms
[texture] texture-filter=linear: FPS: 151 FrameTime: 6.623 ms
[texture] texture-filter=mipmap: FPS: 156 FrameTime: 6.410 ms
[shading] shading=gouraud: FPS: 188 FrameTime: 5.319 ms
[shading] shading=blinn-phong-inf: FPS: 163 FrameTime: 6.135 ms
[shading] shading=phong: FPS: 130 FrameTime: 7.692 ms
[shading] shading=cel: FPS: 118 FrameTime: 8.475 ms
[bump] bump-render=high-poly: FPS: 132 FrameTime: 7.576 ms
[bump] bump-render=normals: FPS: 178 FrameTime: 5.618 ms
[bump] bump-render=height: FPS: 149 FrameTime: 6.711 ms
libpng warning: iCCP: known incorrect sRGB profile
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 65 FrameTime: 15.385 ms
libpng warning: iCCP: known incorrect sRGB profile
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 17 FrameTime: 58.824 ms
[pulsar] light=false:quads=5:texture=false: FPS: 179 FrameTime: 5.587 ms
libpng warning: iCCP: known incorrect sRGB profile
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 28 FrameTime: 35.714 ms
libpng warning: iCCP: known incorrect sRGB profile
[desktop] effect=shadow:windows=4: FPS: 92 FrameTime: 10.870 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 68 FrameTime: 14.706 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 67 FrameTime: 14.925 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 85 FrameTime: 11.765 ms
[ideas] speed=duration: FPS: 66 FrameTime: 15.152 ms
[jellyfish] : FPS: 64 FrameTime: 15.625 ms
[terrain] : FPS: 3 FrameTime: 333.333 ms
[shadow] : FPS: 56 FrameTime: 17.857 ms
[refract] : FPS: 22 FrameTime: 45.455 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 174 FrameTime: 5.747 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 110 FrameTime: 9.091 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 169 FrameTime: 5.917 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 142 FrameTime: 7.042 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 120 FrameTime: 8.333 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 136 FrameTime: 7.353 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 136 FrameTime: 7.353 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 96 FrameTime: 10.417 ms
=======================================================
                                  glmark2 Score: 115 
=======================================================

 

 

Welcome back everyone to another video, and we finally have a Dragonboard 410c courtesy of Seeed Studio who were kind enough to send one in for review, link to their store in the description down below.

First let’s take a look at some quick unboxing and the specs…

I personally quite like the box itself including the graphics on top and the black and orange color accent, opening it up reveals a “ getting started guide” with all of the io labeled out, then we finally come to the star of the show, the Dragon board 410c wrapped around in it’s anti static bag. Unwrapping that reveals the actual board.

If the board looks similar, that is because it is a part of the 96boards family and shares its design with the hikey960 and the mediatekX20 as will all the other Consumer Edition 96boards.

On the front of the blue boards we have two rf shields the bigger one housing the actual SoC which is, of obvious reasons, a Qualcomm Snapdragon 410 SoC. Powered by a quad-core cortex-a53 cpu clocked at 1.2ghz immediately reminds us of the Raspberry Pi3, more on that later.

We also have the 8GB emmc and the 1gig of RAM inside the same rf shield.

And inside the second we have the wifi, bluetooth and gps chipset.

On the back there is not a whole lot much apart from a usb hub, the bit switches for boot select and the big copper square is how the dragonboard dissipates heat from its soc… nice!

Another thing keen eyed amongst you might notice, that the dragon board actually has a very well labeled pcb which might not seem much but definitely helps while looking for something specific.

As you can probably see on one of the usb ports, the board comes preloaded with Android, so let’s go ahead and boot it up….

Android on the Dragon board boots with one of the coolest logo I have ever seen, It comes preloaded with Android lollipop 5.1

That’s about it for the android side of things for now, we’ll talk more about it on a future video.

For now let’s move on to Linux, the installation procedure is fairly straightforward. Burn the .img file to an sd card, insert the sdcard, set the boot mode to sd and boot the dragonboard 410c. Select install, wait for it to install and then reboot.

The dragonboard comes with Linaro’s build of debian based on the Debian 9, which was released just a few months back and features the 4.9 linux kernel, again I am a big fan of SBCs using a fairly recent kernel and this definitely checks the box.

Apart from that one big advantage is that this OS comes with an Open Source GPU driver for the adreno 306 gpu and it works well and it pretty stable… again more discussion and benchmarks in a future video.

Finally let’s discuss raspberry pi 3 vs dragonboard 410c… briefly,

Although the dragonboard does cost almost double with similar specs to the pi 3 there are lot more features, some of them are on the face like GPS, onboard emmc storage and a better GPU. Other are hidden like the fact that the snapdragon 410c is made on a 28nm manufacturing node and opposed to the 40nm of the bcm2837, that means slightly better performance, much less heat generation and much less power consumption.

Most of the boards that do compete with the raspberry pi 3 in performance or cost usually lack community and documentation, which the dragonboard and other 96boards sbc can go directly head to head with.

On that note, This is it for todays video I hoped you enjoyed it and stay tune for more comparisons, benchmarks and projects related to the Dragonboard 410.

Thank you for liking commenting and subscribing, till next time.

Transcript:

The Mediatek Helio X20 has very interesting cpu inside its Helio X20 SoC, now this cpu is not very interesting from the performance point of view, but they way they implement the ARM big.LITTLE heterogeneous computing architecture.
Most SoC manufacturers and designers tend to implement a two cluster architecture with on cluster dedicated to heavy tasks in this case the big cluster made up of performance cores like the a72 and a 73, and a second cluster aimed at power efficiency made up of cores such as the cortex a 53 and a 7.
However the Helio X20 has atri cluster architecture with powerful, balanced and power efficient core clusters. The balanced cluster simply being a higher clocked version of the power efficient cluster.
Before we go further into the video we must take a quick look at the different task scheduling methods implemented in the big.little multiprocessing architecture.

The first one being cluster switching:
The clustered model approach is the first and simplest implementation, arranging the processor into identically-sized clusters of “Big” or “Little” cores. The operating system scheduler can only see one cluster at a time; when the load on the whole processor changes between low and high, the system transitions to the other cluster. All relevant data is then passed through the common L2 cache, the first core cluster is powered off and the other one is activated. A Cache Coherent Interconnect (CCI) is used

The second one being In-kernel switcher (CPU migration):
CPU migration via the in-kernel switcher (IKS) involves pairing up a ‘Big’ core with a ‘Little’ core, with possibly many identical pairs in one chip. Each pair operates as one virtual core, and only one real core is (fully) powered up and running at a time. The ‘Big’ core is used when the demand is high and the ‘Little’ core is employed when demand is low. When demand on the virtual core changes (between high and low), the incoming core is powered up, running state is transferred, the outgoing is shut down, and processing continues on the new core. Switching is done via the cpufreq framework.

And Finally Heterogeneous multi-processing (global task scheduling):
The most powerful use model of Big.Little architecture is heterogeneous multi-processing (HMP), which enables the use of all physical cores at the same time. Threads with high priority or computational intensity can in this case be allocated to the “Big” cores while threads with less priority or less computational intensity, such as background tasks, can be performed by the “Little” cores.
This is used by most modern processors that follow the big.LITTLE architecture include the Helio X20.

The preferred way to control heterogeneous task scheduling so that it is effective in power savings is to disable individual cores that aren’t being used that that is done using the cpu hotplugging feature that allows for the os to individually turn off cpu cores. Luckily the x20 has the hotplugging feature exposed and we can manually override it as discovered by a forum member at the 96boards forum.

So, I thought about manually enabling all cores would give us exponentially better score on geekbench multi core… let’s take a look what happens…

So before we go ahead and enable all cores, let’s look into what the status is by default.
First we have the system monitor app that shows some of the core on and the others as offline, this is also reflected in the cat output of the status of all the cores.

Next we’ll, go ahead and disable automatic cpu hotplug and enable all the cores which can then be seen reflected in the system monitor app.

Now let’s take a look at the benchmark,
Not what I expected at all, there is a difference, in fact the multi core score is higher than the Hikey960. But this is only because, the extra cores that I enabled meant that background tasks were now being scheduled to theses smaller cores instead of taking cpu time on the performance core which meant that the benchmark could now run more efficiently on the bigger cores giving slightly better result.
But it was still only running on the bigger cores, and not on all the cores as i expected it to, the global task scheduler only uses the hotplug feature as a means to turn off cpus that aren’t in use and save power thereby increasing efficiency and hence enabling those core had next to no considerable effect on the benchmark.

So, at the end the big.LITTLE multi-processing architecture is more geared toward power savings than it is towards pure performance. So when you see an octa or deca core ARM cpu in a device, the peak performance would only be equal to its big cores but its peak power efficiency would be equal to its LITTLE cores…

And finally a huge shoutout to seeed studio for providing me with the mediatek x20.


ric@ric-ubuntu:~$ glmark2 --annotate
=======================================================
    glmark2 2014.03+git20150611.fa71af2d
=======================================================
    OpenGL Information
    GL_VENDOR:     nouveau
    GL_RENDERER:   Gallium 0.4 on NV126
    GL_VERSION:    3.0 Mesa 12.0.6
=======================================================
[build] use-vbo=false: FPS: 1255 FrameTime: 0.797 ms
[build] use-vbo=true: FPS: 1197 FrameTime: 0.835 ms
[texture] texture-filter=nearest: FPS: 999 FrameTime: 1.001 ms
[texture] texture-filter=linear: FPS: 994 FrameTime: 1.006 ms
[texture] texture-filter=mipmap: FPS: 1044 FrameTime: 0.958 ms
[shading] shading=gouraud: FPS: 1016 FrameTime: 0.984 ms
[shading] shading=blinn-phong-inf: FPS: 1019 FrameTime: 0.981 ms
[shading] shading=phong: FPS: 1005 FrameTime: 0.995 ms
[shading] shading=cel: FPS: 1001 FrameTime: 0.999 ms
[bump] bump-render=high-poly: FPS: 811 FrameTime: 1.233 ms
[bump] bump-render=normals: FPS: 1165 FrameTime: 0.858 ms
[bump] bump-render=height: FPS: 1124 FrameTime: 0.890 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 769 FrameTime: 1.300 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 499 FrameTime: 2.004 ms
[pulsar] light=false:quads=5:texture=false: FPS: 981 FrameTime: 1.019 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 382 FrameTime: 2.618 ms
[desktop] effect=shadow:windows=4: FPS: 514 FrameTime: 1.946 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 700 FrameTime: 1.429 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 738 FrameTime: 1.355 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 703 FrameTime: 1.422 ms
[ideas] speed=duration: FPS: 1072 FrameTime: 0.933 ms
[jellyfish] <default>: FPS: 770 FrameTime: 1.299 ms
[terrain] <default>: FPS: 100 FrameTime: 10.000 ms
[shadow] <default>: FPS: 939 FrameTime: 1.065 ms
[refract] <default>: FPS: 202 FrameTime: 4.950 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 1057 FrameTime: 0.946 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 1051 FrameTime: 0.951 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 1053 FrameTime: 0.950 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 1053 FrameTime: 0.950 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 1052 FrameTime: 0.951 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 1049 FrameTime: 0.953 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 1051 FrameTime: 0.951 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1029 FrameTime: 0.972 ms
=======================================================
                                  glmark2 Score: 890 
=======================================================
ric@ric-ubuntu:~$ 

ric@ric-ubuntu:~/glmark2$ glmark2 --annotate
=======================================================
    glmark2 2014.03
=======================================================
    OpenGL Information
    GL_VENDOR:     NVIDIA Corporation
    GL_RENDERER:   GeForce GTX 960/PCIe/SSE2
    GL_VERSION:    4.5.0 NVIDIA 375.66
=======================================================
[build] use-vbo=false: FPS: 5949 FrameTime: 0.168 ms
[build] use-vbo=true: FPS: 12723 FrameTime: 0.079 ms
[texture] texture-filter=nearest: FPS: 11343 FrameTime: 0.088 ms
[texture] texture-filter=linear: FPS: 11254 FrameTime: 0.089 ms
[texture] texture-filter=mipmap: FPS: 11403 FrameTime: 0.088 ms
[shading] shading=gouraud: FPS: 11415 FrameTime: 0.088 ms
[shading] shading=blinn-phong-inf: FPS: 11282 FrameTime: 0.089 ms
[shading] shading=phong: FPS: 11130 FrameTime: 0.090 ms
[shading] shading=cel: FPS: 11307 FrameTime: 0.088 ms
[bump] bump-render=high-poly: FPS: 8467 FrameTime: 0.118 ms
[bump] bump-render=normals: FPS: 12636 FrameTime: 0.079 ms
[bump] bump-render=height: FPS: 12645 FrameTime: 0.079 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 9442 FrameTime: 0.106 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 6050 FrameTime: 0.165 ms
[pulsar] light=false:quads=5:texture=false: FPS: 11289 FrameTime: 0.089 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 3758 FrameTime: 0.266 ms
[desktop] effect=shadow:windows=4: FPS: 4830 FrameTime: 0.207 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 946 FrameTime: 1.057 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 1083 FrameTime: 0.923 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 988 FrameTime: 1.012 ms
[ideas] speed=duration: FPS: 6893 FrameTime: 0.145 ms
[jellyfish] <default>: FPS: 7839 FrameTime: 0.128 ms
[terrain] <default>: FPS: 828 FrameTime: 1.208 ms
[shadow] <default>: FPS: 8126 FrameTime: 0.123 ms
[refract] <default>: FPS: 2234 FrameTime: 0.448 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 10952 FrameTime: 0.091 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 10915 FrameTime: 0.092 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 10854 FrameTime: 0.092 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 10848 FrameTime: 0.092 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 10768 FrameTime: 0.093 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 10886 FrameTime: 0.092 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 10857 FrameTime: 0.092 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 10821 FrameTime: 0.092 ms
=======================================================
                                  glmark2 Score: 8568 
=======================================================
ric@ric-ubuntu:~/glmark2$ 

								

Buy: https://www.seeedstudio.com/MediaTek-X20-Development-Board-p-2702.html

Today we have with us the MediaTek X20, courtesy of Seeed Studio. This $200 dev board comes in the 96boards form factor with all the bells and whistles, but before heading into specs, performance and features let’s take a look at the unboxing.

The box looked more like a box for a new smartphone rather than a dev board, in other words, pretty darn fancy for a development board. On two of the sides we have the mediaTek branding and on the two sides we have branding for archer mind,  96boards and linaro.

At the bottom we find two “Warranty void if removed” stickers for some reason, maybe they don’t give a crap about the board being destroyed. Anyways once we are through that we are welcomed by a quick start guide which lists most of the components on boards and the specs.

With that said the board is powered by a MediaTek Helio X20 SoC which has a 10 core CPU consisting of three clusters, the most power efficient cluster has quad cortex a53 cores clocked at 1.4ghz, a balanced cluster consisting of quad cortex a53 cores clocked at 1.85ghz and lastly the most powerful cluster containing dual cortex A-72 cores at up to 2.3ghz. And that was straight up the most complicated specsheet I’ve ever seen for an SoC from the CPU point of view. It als sports a Mali T-880 MP4 GPU.

Apart from that we have 2 gigabyte of LPDDR3 RAM and 8 gigabyte of EMMC storage. On the connectivity side we have dual band wifi, bluetooth and GPS on board.

Once we are done with that piece of paper we see another compartment that houses the actual board covered in some ESD protective packaging, we are also provided with for standoff screws which I thought were a nice addon. However I was not provided with a power supply, had I not had the power supply from the hkey 960 this review would have been very much delayed, but since it is not a part of the actual board I will not take it against the X20.

One the dev board is out of its protective package, we can clearly see the SoC and RAM in a Package on Package config. On the left we have the emmc and on the right we have the power management IC. On the extreme left we have the wifi bluetooth and GPS chipset all in one single package.

So now it’s time to add the stand offs and boot it for the first time… And, yes the pre installed version on Android boots in a weird letter boxed portrait mode, but a quick update to the latest version of android from the 96boards website and everything works as expected.

Talking about Android, the only version available is android 6.0 with kernel 3.18 and the last release was in november 2016, but with that said the full sourcecode is available to download and compile.

Before we get into the benchmarks let’s take look into the gpio, I wasn’t able to find much documentation to access gpio on the low speed heder but the on board led’s are user programmable.

Now let’s get to the benchmarks, I will be comparing the X20 with the Hikey 960 as both of them lie in the same price point, the X20 coming in at $200 and the Hikey960 coming in at $239 and both of the prices are taken from seeed studio at the time of recording this video. Now that I’m done feeling like Linustechtips of the Single Board computers, let’s take a look at the series benchmarks which would be done against the hikey 960 and an air cooled x20 with an aftermarket heatsink and fan added on separately since the hikey 960 already had the heat sink pre installed.

First we have geekbench with single core cpu performance, the hikey 960 tops with 1,731 points followed by the air cooled x20 with 1,637 and very closely by stock x20 with 1,610 points.

Next we have the geekbench multi-core cpu performance with the air cooled x20 marginally beating the hikey 960 with 4,759 point following by hikey 960 at 4,662 points and the stock x20 with just 3,559 points, here we can clearly see a significant performance boost due to enhanced cooling.

Then we have the Antutu benchmark where the hikey 960 takes the cake with 113,449 points followed by the air cooled x20 with half of that at 67,247 points and finally we have the stock x20 with a mere 56,212 points.

Now on to the more graphics oriented benchmarks with antutu 3d, we once again see the hikey960 dominate the scoreboard with 13 and 22 fps followed by the air cooled x20 with 4 and 4 and then stock x20 with 3 and 4 fps.

Then we have 3d mark slingshot with the hikey 960 at 1,333 points followed by the air cooled x20 with 651 points and the stock x20 at 622 points

Then finally we have GFXBench with the hikey960 at 11fps in car chase, 18fps in manhattan 3.1 and 47 fps in T-Rex. In this benchmark both the air cooled and stock X20 had the exact same result at 6.8, 15 and 35 fps in car chase, manhattan 3.1 and T-Rex respectively.

Also keep in mind that the graphic benchmarks were running at 720p on the x20 compared to 1080p on the hikey 960.

To conclude the benchmarks, overall the hikey 960 dominated the x20 air cooled or not, thanks to higher number of top tier cores as well as the hikey 960 having cortex a73 cores as opposed to a72 on the x20. On the gpu side of thing the hikey960 has a more powerful Mali G71 MP8

8 core gpu clocked at 1Ghz as opposed to the X20’s quad core Mali T880 MP4 clocked at 750mhz. The only exception being geekbench multi core benchmark which gets affected by too much heat being generated on the hikey 960 and the cpus being mostly under clocked.

Since both the hikey 960 and X20 are based on the 96boards platform, the basic layout and feature set are the same, so let’s take a look at some features that makes them unique.

The hikey 960 has more ram at 3 gigabytes compared to 2 gigabytes of the x20, and more storage at 32 gigabytes compared to just 8 gigabytes on the x20. Apart from that the hikey960 has usb 3 host compared to usb to on the x20. The hikey 960 also support pcie gen 3 expansion via an m.2 slot. But the x20 has an in built gps receiver.

So till now it seems the hikey 960 is a better but there is more that what meets the eye, there are certain advantages to the x20 that make it seem like a better competitor. One of the main advantage is that the x20 is a fully developed and stable platform, whereas the hikey 960 is under constant development on the os side of things, at the moments it is only supported on the master branch of Android open source project that is it is not stable and the kernel is under heavy development as well so the x20 is much better from a stability point of view.

Next up is the tri-cluster cpu design of the helio x20 soc which allows for more granular control over performance and efficiency making it a more power efficient solution than the hikey 960 along with generating lesser amount of heat.

So at the end of the day, the X20 is a pretty decent dev board, although it could have been 20-$50 cheaper and then it probably would have made a bit more sense.

Compile from Source:

When I tested It I had trouble with compiling from source using the following branches:

  • Chinook 3.0.1: failed to sync repository
  • Latest on Chinook Branch: failed to compile
  • Master: failed to compile

However this may change soon. I you are interested in compiling AGL for Raspberry Pi try the following documentation page: http://docs.automotivelinux.org/docs/getting_started/en/dev/

 

Download Binaries:

Download link for the rpi3 image on this page ( https://wiki.automotivelinux.org/agl-distro?&#supported_hardware ) Does NOT work.

For me this link works: https://download.automotivelinux.org/AGL/release/chinook/3.0.1/raspberrypi3/deploy/images/raspberrypi3/agl-demo-platform-raspberrypi3.rpi-sdimg-ota

Before Getting Started I would recommend having a working UART connection to you raspberry pi: https://pinout.xyz/pinout/uart

  1. Write the downloaded file to a SD card (minimum 8GB) using you favourite tool like dd, win32 or etcher.
  2. Power on the raspberry pi, you should see a blank screen but some output on the uart, make sure you can login with the user root on the uart console.

Now we need to get around the no-display issue:

  1. Have a good read here: https://wiki.automotivelinux.org/agl-distro/agl-raspberrypi
  2. In that page follow the steps under “Disabling Homescreen in AGL 3.0.x CC release”
  3. I would recommend doing it manually on another system by inserting the pi’s sd card as many of the files are write protected
  4. If you are on a separate machine you would have to navigate to the following directory to get the thr rootfs to be able to modify the files
    <montpoint>/ostree/boot.1/agl/<random string>/0/<this is the rootfs>

Getting demo apps running:

  1. After the modifications have been done boot the raspberry pi and login as root using uart
  2. we will use the command afm-util, run “afm-util –help” for more detail
  3. “afm-util list” will give you a list of demos pre installed
  4. “afm-util run <demo id>” will run the demo from the above mentioned list.