]> git.itanic.dy.fi Git - membench/blobdiff - membench.c
Vectorize memory transfers
[membench] / membench.c
index 4aaa8b9745656e2726839a86b984cb6387969b7b..6167b6cb639928bee8a42746997e4b9f35ff2c53 100644 (file)
@@ -15,7 +15,7 @@ long long usec_diff(const struct timeval *a, const struct timeval *b)
 int main(int argc, char *argv[])
 {
        int iterations, j, k, count, size, mask, latcount;
-       unsigned long *buf, i, tmp = 0;
+       unsigned long *buf, i, tmp[8] = {0};
        struct timeval start, end;
 
        printf("Benchmark sequential access bandwidth "
@@ -27,9 +27,9 @@ int main(int argc, char *argv[])
                iterations = 24;
 
        if (argc > 2)
-               count = atoi(argv[2]);
+               count = atoi(argv[2]) * 1024;
        else
-               count = 1024;
+               count = 1024 * 64;
        latcount = count / 10;
 
        printf("Doing %d runs with buffer size goin up to %dk\n",
@@ -85,9 +85,17 @@ int main(int argc, char *argv[])
 
                gettimeofday(&start, 0);
                for (k = 0; k < count; k++) {
-                       buf[0] = tmp;
-                       for (i = 0; i < size; i++)
-                               tmp += buf[i];
+                       buf[0] = tmp[0];
+                       for (i = 0; i < size; i += 8) {
+                               tmp[0] += buf[i];
+                               tmp[1] += buf[i+1];
+                               tmp[2] += buf[i+2];
+                               tmp[3] += buf[i+3];
+                               tmp[4] += buf[i+4];
+                               tmp[5] += buf[i+5];
+                               tmp[6] += buf[i+6];
+                               tmp[7] += buf[i+7];
+                       }
                }
 
                gettimeofday(&end, 0);
@@ -102,9 +110,9 @@ int main(int argc, char *argv[])
 
                gettimeofday(&start, 0);
                for (k = 0; k < latcount; k++) {
-                       buf[0] = tmp;
+                       buf[0] = tmp[0];
                        for (i = 0; i < size; i++)
-                               tmp += buf[random() & mask];
+                               tmp[0] += buf[random() & mask];
                }
 
                gettimeofday(&end, 0);
@@ -119,8 +127,16 @@ int main(int argc, char *argv[])
 
                gettimeofday(&start, 0);
                for (k = 0; k < count; k++)
-                       for (i = 0; i < size; i++)
-                                buf[i] = i;
+                       for (i = 0; i < size; i += 8) {
+                               buf[i  ] = tmp[0];
+                               buf[i+1] = tmp[1];
+                               buf[i+2] = tmp[2];
+                               buf[i+3] = tmp[3];
+                               buf[i+4] = tmp[4];
+                               buf[i+5] = tmp[5];
+                               buf[i+6] = tmp[6];
+                               buf[i+7] = tmp[7];
+                       }
                gettimeofday(&end, 0);
 
                printf("% 9.2f  ", (double)(size * lsize) * 
@@ -142,6 +158,11 @@ int main(int argc, char *argv[])
        
                printf("\n");
 
+               count /= 2;
+               count = count ? count : 1;
+               latcount = count / 10;
+               latcount = latcount ? latcount : 1;
+
                free(buf);
        }
        return 0;