[pypy-commit] extradoc extradoc: c version of benchmark

hakanardo noreply at buildbot.pypy.org
Thu Jun 9 16:25:56 CEST 2011


Author: Hakan Ardo <hakan at debian.org>
Branch: extradoc
Changeset: r3626:6a05ea2e1f58
Date: 2011-06-09 16:26 +0200
http://bitbucket.org/pypy/extradoc/changeset/6a05ea2e1f58/

Log:	c version of benchmark

diff --git a/talk/iwtc11/benchmarks/benchmark.sh b/talk/iwtc11/benchmarks/benchmark.sh
--- a/talk/iwtc11/benchmarks/benchmark.sh
+++ b/talk/iwtc11/benchmarks/benchmark.sh
@@ -12,6 +12,8 @@
     $* convolution/conv5.c -lm; /usr/bin/time -f %e ./a.out 100 > /dev/null
     $* convolution/conv3.c -lm; /usr/bin/time -f %e ./a.out 1000 > /dev/null
     $* convolution/conv5.c -lm; /usr/bin/time -f %e ./a.out 1000 > /dev/null
+    $* convolution/conv3x3.cc -lstdc++; /usr/bin/time -f %e ./a.out 1000000 3 > /dev/null
+    $* convolution/conv3x3.cc -lstdc++; /usr/bin/time -f %e ./a.out 1000 1000 > /dev/null
     rm a.out
 else
     $* sqrt/time_sqrt.py float
diff --git a/talk/iwtc11/benchmarks/convolution/conv3.c b/talk/iwtc11/benchmarks/convolution/conv3.c
--- a/talk/iwtc11/benchmarks/convolution/conv3.c
+++ b/talk/iwtc11/benchmarks/convolution/conv3.c
@@ -1,8 +1,9 @@
 #include <stdio.h>
 #include <math.h>
+#include <stdlib.h>
 
 #define N 100000000
-double a[N], b[N-2];
+double *a, *b;
 
 void conv(double *a, double *k, double *b, int n) {
 //void conv(double *__restrict__ a, double *__restrict__ k, double *__restrict__ b, int n) {
@@ -14,6 +15,8 @@
 
 int main(int ac, char **av) {
   double k[3] = {-1, 0, 1};
+  a = malloc(N*sizeof(double));
+  b = malloc(N*sizeof(double));
   int i;
   for (i=0; i<N; i++) a[i] = 1;
   int n = atoi(av[1]);
diff --git a/talk/iwtc11/benchmarks/convolution/conv3x3.cc b/talk/iwtc11/benchmarks/convolution/conv3x3.cc
new file mode 100644
--- /dev/null
+++ b/talk/iwtc11/benchmarks/convolution/conv3x3.cc
@@ -0,0 +1,46 @@
+// A safe array example.
+#include <stdio.h>
+#include <stdlib.h>
+
+class Array2D {
+  double *data;
+public:
+  int width, height;
+  Array2D(int w, int h) {
+    width = w;
+    height = h;
+    data = (double *) malloc(w*h*sizeof(double));
+  }
+  double &operator()(int x, int y) {
+    if (x >= 0 && x < width && y >= 0 && y < height) {
+	return data[y*width + x];
+    }
+    printf("IndexError\n");
+    exit(1);
+  }
+};
+
+void conv3x3(Array2D &a, Array2D &k, Array2D &b) {
+  int x, y;
+  for (y=1; y<a.height-1; y++) {
+    for (x=1; x<a.width-1; x++) {
+      b(x, y) = k(2,2)*a(x-1, y-1) + k(1,2)*a(x, y-1) + k(0,2)*a(x+1, y-1) +
+	        k(2,1)*a(x-1, y)   + k(1,1)*a(x, y)   + k(0,1)*a(x+1, y)   + 
+	        k(2,0)*a(x-1, y+1) + k(1,0)*a(x, y+1) + k(0,0)*a(x+1, y+1);
+
+    }
+  }
+}
+
+int main(int ac, char **av) {
+  int w = atoi(av[1]), h = atoi(av[2]);
+  int i;
+
+  for (i=0; i<10; i++) {
+    Array2D a(w, h), b(w, h), k(3, 3);
+    conv3x3(a, k, b);
+    printf("%f\n", b(1,1));
+  }
+  fprintf(stderr, "conv3x3(%d):  ", h);
+  return 0;
+}
diff --git a/talk/iwtc11/benchmarks/convolution/conv5.c b/talk/iwtc11/benchmarks/convolution/conv5.c
--- a/talk/iwtc11/benchmarks/convolution/conv5.c
+++ b/talk/iwtc11/benchmarks/convolution/conv5.c
@@ -1,8 +1,9 @@
 #include <stdio.h>
 #include <math.h>
+#include <stdlib.h>
 
 #define N 100000000
-double a[N], b[N-4];
+double *a, *b;
 
 void conv(double *a, double *k, double *b, int n) {
 //void conv(double *__restrict__ a, double *__restrict__ k, double *__restrict__ b, int n) {
@@ -14,6 +15,8 @@
 
 int main(int ac, char **av) {
     double k[5] = {1, 4, 6, 4, 1};
+    a = malloc(N*sizeof(double));
+    b = malloc(N*sizeof(double));
     int i;
     for (i=0; i<N; i++) a[i] = 1;
     int n = atoi(av[1]);


More information about the pypy-commit mailing list