tests/gtt_speed: try to outwit gcc
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 10 May 2012 18:25:33 +0000 (20:25 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 10 May 2012 18:25:33 +0000 (20:25 +0200)
It optimized away the read loops ;-)

Also fix up the size to not be 1/4th of the one we want for tiled
buffer tests.

Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
tests/gem_gtt_speed.c

index 8c66aee..69cd1ff 100644 (file)
@@ -102,23 +102,29 @@ int main(int argc, char **argv)
 
                /* prefault into gtt */
                {
-                       uint32_t *ptr = gem_mmap(fd, handle, size, PROT_READ);
+                       uint32_t *ptr = gem_mmap(fd, handle, size, PROT_READ | PROT_WRITE);
                        int x = 0;
 
                        for (i = 0; i < size/sizeof(*ptr); i++)
                                x += ptr[i];
 
+                       /* force overtly clever gcc to actually compute x */
+                       ptr[0] = x;
+
                        munmap(ptr, size);
                }
                /* mmap read */
                gettimeofday(&start, NULL);
                for (loop = 0; loop < 1000; loop++) {
-                       uint32_t *ptr = gem_mmap(fd, handle, size, PROT_READ);
+                       uint32_t *ptr = gem_mmap(fd, handle, size, PROT_READ | PROT_WRITE);
                        int x = 0;
 
                        for (i = 0; i < size/sizeof(*ptr); i++)
                                x += ptr[i];
 
+                       /* force overtly clever gcc to actually compute x */
+                       ptr[0] = x;
+
                        munmap(ptr, size);
                }
                gettimeofday(&end, NULL);
@@ -142,12 +148,15 @@ int main(int argc, char **argv)
                /* mmap read */
                gettimeofday(&start, NULL);
                for (loop = 0; loop < 1000; loop++) {
-                       uint32_t *ptr = gem_mmap(fd, handle, size, PROT_READ);
+                       uint32_t *ptr = gem_mmap(fd, handle, size, PROT_READ | PROT_WRITE);
                        int x = 0;
 
                        for (i = 0; i < size/sizeof(*ptr); i++)
                                x += ptr[i];
 
+                       /* force overtly clever gcc to actually compute x */
+                       ptr[0] = x;
+
                        munmap(ptr, size);
                }
                gettimeofday(&end, NULL);
@@ -214,6 +223,8 @@ int main(int argc, char **argv)
                        gettimeofday(&end, NULL);
                        printf("Time to pread %dk through the GTT (clflush):    %7.3fµs\n",
                               size/1024, elapsed(&start, &end, loop));
+
+                       size *= 4;
                }
 
        }