<div dir="ltr"><div><div><div>Wow, that's a pretty big difference!<br><br></div>Did you by any chance test with the i.MX6 with GC2000 too?  It would be interesting to see if there was a similar performance degradation as well as what the absolute difference is between the GC2000 and GC3000 platforms.<br><br></div>Also, with regard to the OCRAM, can you specify which OCRAM was used?  (Did you stick to the 2 128KB OCRAM hanging off MX6FAST2 or was the 1 256KB OCRAM hanging off MX6FAST3 also used?  The 2 128KB OCRAM hanging off MX6FAST2 should have the highest OCRAM performance.)<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Dec 11, 2016 at 8:27 AM, Wladimir J. van der Laan <span dir="ltr"><<a href="mailto:laanwj@gmail.com" target="_blank">laanwj@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Entirly deserving of its B-horror name it does unspeakable<br>
things to performance if not set up correctly.<br>
<br>
I was doing memory benchmarks and noticed a serious discrepancy<br>
between running the same CL program with the Vivante driver<br>
and replaying it on etnaviv.<br>
<br>
After carefully comparing the registers written at initialization<br>
with both kernel drivers, it became apparent that the etnaviv<br>
DRM driver is not setting up register 0x0010C. Adding a single line<br>
at the end of etnaviv_gpu_init sped up pure-read performance from shaders by<br>
7.5x and write performance by 1.5x:<br>
<br>
        gpu_write(gpu, VIVS_PM_PULSE_EATER, 0x015d0880);<br>
<br>
(instead of this line we likely want to replicate viv_gpu's per-model logic)<br>
<br>
Apart from silly CL benchmarks, I expect this to make a large impact with<br>
texturing and alpha blending as well. Exact results for i.MX6qp (GC3000) below.<br>
<br>
Wladimir<br>
<br>
("readacc" does read-and-accumulate into register, "read" does only reads, "write"<br>
does only writes, "ram" benchmarks DDR3 RAM, "ocram" i.MX6 onchip ram)<br>
<br>
kernel 4.8.4 + etnaviv<br>
----------------------<br>
<br>
Version: 1.0.0<br>
  Name: etnaviv<br>
  Date: 20151214<br>
  Description: etnaviv DRM<br>
[read]    [ram]   Speed:  15.395 MB/s<br>
[readacc] [ram]   Speed:  14.680 MB/s (compare to <a href="http://readacc4x_alt.cl" rel="noreferrer" target="_blank">readacc4x_alt.cl</a> below :( )<br>
[write]   [ram]   Speed: 148.453 MB/s (compare to <a href="http://write4x_alt.cl" rel="noreferrer" target="_blank">write4x_alt.cl</a> below :( )<br>
[read]    [ocram] Speed:  15.097 MB/s<br>
[readacc] [ocram] Speed:  14.367 MB/s<br>
[write]   [ocram] Speed: 148.419 MB/s<br>
<br>
kernel 4.1.5 + viv_gpu<br>
----------------------<br>
<br>
[ram]<br>
(no <a href="http://bench_read.cl" rel="noreferrer" target="_blank">bench_read.cl</a>: pure reads are optimized away by CL compiler)<br>
Program: <a href="http://bench_readacc4x_alt.cl" rel="noreferrer" target="_blank">bench_readacc4x_alt.cl</a>    Speed:  83.720 MB/s<br>
Program: <a href="http://bench_write4x_alt.cl" rel="noreferrer" target="_blank">bench_write4x_alt.cl</a>      Speed: 234.708 MB/s<br>
<br>
etnaviv 4.8.4 after PULSE_EATER neutered<br>
------------------------------<wbr>------------<br>
<br>
Version: 1.0.0<br>
  Name: etnaviv<br>
  Date: 20151214<br>
  Description: etnaviv DRM<br>
[read]    [ram]   Speed: 113.414 MB/s<br>
[readacc] [ram]   Speed:  82.395 MB/s (comparable to <a href="http://readacc4x_alt.cl" rel="noreferrer" target="_blank">readacc4x_alt.cl</a> above)<br>
[write]   [ram]   Speed: 234.955 MB/s (comparable to <a href="http://write4x_alt.cl" rel="noreferrer" target="_blank">write4x_alt.cl</a> above)<br>
[read]    [ocram] Speed:  87.912 MB/s<br>
[readacc] [ocram] Speed:  70.329 MB/s<br>
[write]   [ocram] Speed: 234.956 MB/s<br>
<br>
</blockquote></div><br></div>