summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Haberman <joshua@reverberate.org>2009-08-04 19:46:42 -0700
committerJoshua Haberman <joshua@reverberate.org>2009-08-04 19:46:42 -0700
commit84cd1538ee20b934c6892f38578a08106a934fe8 (patch)
treeecfc5baa4d47a276bf1509243778ae7940e08e83
parent2aaea5390a841e2682a318746e90aebbe8a955b9 (diff)
Integrated benchmarks into main Makefile.
-rw-r--r--Makefile84
-rwxr-xr-xbenchmark/gen.sh59
-rw-r--r--benchmarks/getgraphs.py (renamed from benchmark/getgraphs.py)2
-rw-r--r--benchmarks/google_message1.dat (renamed from benchmark/google_message1.dat)bin228 -> 228 bytes
-rw-r--r--benchmarks/google_message2.dat (renamed from benchmark/google_message2.dat)bin84570 -> 84570 bytes
-rw-r--r--benchmarks/google_messages.proto (renamed from benchmark/google_messages.proto)0
-rw-r--r--benchmarks/main.c (renamed from benchmark/main.c)16
-rw-r--r--benchmarks/parsetostruct.proto2_compiled.cc (renamed from benchmark/parsetostruct_proto2_compiled.cc)0
-rw-r--r--benchmarks/parsetostruct.proto2_table.cc (renamed from benchmark/parsetostruct_proto2_table.cc)0
-rw-r--r--benchmarks/parsetostruct.upb_table.c (renamed from benchmark/parsetostruct_upb_table.c)0
-rw-r--r--perf-cppflags1
11 files changed, 95 insertions, 67 deletions
diff --git a/Makefile b/Makefile
index f61d85b..210f4ac 100644
--- a/Makefile
+++ b/Makefile
@@ -2,25 +2,26 @@
# Function to expand a wildcard pattern recursively.
rwildcard=$(strip $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2)$(filter $(subst *,%,$2),$d)))
-.PHONY: all clean
+.PHONY: all clean test benchmarks
CC=gcc
CXX=g++
CFLAGS=-std=c99
INCLUDE=-Idescriptor -Isrc -Itests -I.
-CPPFLAGS=-O3 -fomit-frame-pointer -Wall -Wextra -g -DNDEBUG $(INCLUDE)
+CPPFLAGS=-O3 -Wall -Wextra -g $(INCLUDE) $(strip $(shell cat perf-cppflags))
-ALL=deps $(OBJ) src/libupb.a tests/test_table tests/tests tools/upbc
+LIBUPB=src/libupb.a
+ALL=deps $(OBJ) $(LIBUPB) tests/test_table tests/tests tools/upbc
all: $(ALL)
clean:
- rm -f $(call rwildcard,,*.o) $(ALL) benchmark/google_messages.proto.pb benchmark/google_messages.pb.* benchmark/b_*
+ rm -f $(call rwildcard,,*.o) $(ALL) benchmark/google_messages.proto.pb benchmark/google_messages.pb.* benchmarks/b.* benchmarks/*.pb*
# The core library (src/libupb.a)
OBJ=src/upb_parse.o src/upb_table.o src/upb_msg.o src/upb_enum.o src/upb_context.o \
src/upb_string.o src/upb_text.o src/upb_serialize.o descriptor/descriptor.o
SRC=$(call rwildcard,,*.c)
HEADERS=$(call rwildcard,,*.h)
-src/libupb.a: $(OBJ)
- ar rcs src/libupb.a $(OBJ)
+$(LIBUPB): $(OBJ)
+ ar rcs $(LIBUPB) $(OBJ)
# Tests
test: tests/tests
@@ -32,6 +33,77 @@ tests/tests: src/libupb.a
tools/upbc: src/libupb.a
# Benchmarks
+BENCHMARKS=benchmarks/b.parsetostruct_googlemessage1.upb_table_byval \
+ benchmarks/b.parsetostruct_googlemessage1.upb_table_byref \
+ benchmarks/b.parsetostruct_googlemessage2.upb_table_byval \
+ benchmarks/b.parsetostruct_googlemessage2.upb_table_byref \
+ benchmarks/b.parsetostruct_googlemessage1.proto2_table \
+ benchmarks/b.parsetostruct_googlemessage2.proto2_table \
+ benchmarks/b.parsetostruct_googlemessage1.proto2_compiled \
+ benchmarks/b.parsetostruct_googlemessage2.proto2_compiled
+benchmarks: $(BENCHMARKS)
+
+benchmarks/google_messages.proto.pb: benchmarks/google_messages.proto
+ # TODO: replace with upbc.
+ protoc benchmarks/google_messages.proto -obenchmarks/google_messages.proto.pb
+
+benchmarks/google_messages.pb.cc: benchmarks/google_messages.proto
+ protoc benchmarks/google_messages.proto --cpp_out=.
+
+benchmarks/b.parsetostruct_googlemessage1.upb_table_byval \
+benchmarks/b.parsetostruct_googlemessage1.upb_table_byref \
+benchmarks/b.parsetostruct_googlemessage2.upb_table_byval \
+benchmarks/b.parsetostruct_googlemessage2.upb_table_byref: \
+ benchmarks/parsetostruct.upb_table.c $(LIBUPB) benchmarks/google_messages.proto.pb
+ $(CC) $(CFLAGS) $(CPPFLAGS) -o benchmarks/b.parsetostruct_googlemessage1.upb_table_byval $< \
+ -DMESSAGE_NAME=\"benchmarks.SpeedMessage1\" \
+ -DMESSAGE_DESCRIPTOR_FILE=\"google_messages.proto.pb\" \
+ -DMESSAGE_FILE=\"google_message1.dat\" \
+ -DBYREF=false $(LIBUPB)
+ $(CC) $(CFLAGS) $(CPPFLAGS) -o benchmarks/b.parsetostruct_googlemessage1.upb_table_byref $< \
+ -DMESSAGE_NAME=\"benchmarks.SpeedMessage1\" \
+ -DMESSAGE_DESCRIPTOR_FILE=\"google_messages.proto.pb\" \
+ -DMESSAGE_FILE=\"google_message1.dat\" \
+ -DBYREF=true $(LIBUPB)
+ $(CC) $(CFLAGS) $(CPPFLAGS) -o benchmarks/b.parsetostruct_googlemessage2.upb_table_byval $< \
+ -DMESSAGE_NAME=\"benchmarks.SpeedMessage2\" \
+ -DMESSAGE_DESCRIPTOR_FILE=\"google_messages.proto.pb\" \
+ -DMESSAGE_FILE=\"google_message2.dat\" \
+ -DBYREF=false $(LIBUPB)
+ $(CC) $(CFLAGS) $(CPPFLAGS) -o benchmarks/b.parsetostruct_googlemessage2.upb_table_byref $< \
+ -DMESSAGE_NAME=\"benchmarks.SpeedMessage2\" \
+ -DMESSAGE_DESCRIPTOR_FILE=\"google_messages.proto.pb\" \
+ -DMESSAGE_FILE=\"google_message2.dat\" \
+ -DBYREF=true $(LIBUPB)
+
+benchmarks/b.parsetostruct_googlemessage1.proto2_table \
+benchmarks/b.parsetostruct_googlemessage2.proto2_table: \
+ benchmarks/parsetostruct.proto2_table.cc benchmarks/google_messages.pb.cc
+ $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o benchmarks/b.parsetostruct_googlemessage1.proto2_table $< \
+ -DMESSAGE_CIDENT="benchmarks::SpeedMessage1" \
+ -DMESSAGE_FILE=\"google_message1.dat\" \
+ -DMESSAGE_HFILE=\"google_messages.pb.h\" \
+ benchmarks/google_messages.pb.cc -lprotobuf -lpthread
+ $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o benchmarks/b.parsetostruct_googlemessage2.proto2_table $< \
+ -DMESSAGE_CIDENT="benchmarks::SpeedMessage2" \
+ -DMESSAGE_FILE=\"google_message2.dat\" \
+ -DMESSAGE_HFILE=\"google_messages.pb.h\" \
+ benchmarks/google_messages.pb.cc -lprotobuf -lpthread
+
+benchmarks/b.parsetostruct_googlemessage1.proto2_compiled \
+benchmarks/b.parsetostruct_googlemessage2.proto2_compiled: \
+ benchmarks/parsetostruct.proto2_compiled.cc \
+ benchmarks/parsetostruct.proto2_table.cc benchmarks/google_messages.pb.cc
+ $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o benchmarks/b.parsetostruct_googlemessage1.proto2_compiled $< \
+ -DMESSAGE_CIDENT="benchmarks::SpeedMessage1" \
+ -DMESSAGE_FILE=\"google_message1.dat\" \
+ -DMESSAGE_HFILE=\"google_messages.pb.h\" \
+ benchmarks/google_messages.pb.cc -lprotobuf -lpthread
+ $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o benchmarks/b.parsetostruct_googlemessage2.proto2_compiled $< \
+ -DMESSAGE_CIDENT="benchmarks::SpeedMessage2" \
+ -DMESSAGE_FILE=\"google_message2.dat\" \
+ -DMESSAGE_HFILE=\"google_messages.pb.h\" \
+ benchmarks/google_messages.pb.cc -lprotobuf -lpthread
-include deps
deps: $(SRC) $(HEADERS) gen-deps.sh Makefile
diff --git a/benchmark/gen.sh b/benchmark/gen.sh
deleted file mode 100755
index 288071e..0000000
--- a/benchmark/gen.sh
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/bash
-
-cd `dirname $0`
-CXXFLAGS="-O3 -msse3 -I../src -I../descriptor -Wall"
-CFLAGS="-std=c99 $CXXFLAGS"
-set -e
-set -v
-
-gcc -DMESSAGE_NAME=\"benchmarks.SpeedMessage1\" \
- -DMESSAGE_DESCRIPTOR_FILE=\"google_messages.proto.pb\" \
- -DMESSAGE_FILE=\"google_message1.dat\" \
- -DBYREF=false \
- $CFLAGS \
- parsetostruct_upb_table.c -o b_parsetostruct_googlemessage1_upb_table_byval ../src/libupb.a
-
-gcc -DMESSAGE_NAME=\"benchmarks.SpeedMessage1\" \
- -DMESSAGE_DESCRIPTOR_FILE=\"google_messages.proto.pb\" \
- -DMESSAGE_FILE=\"google_message1.dat\" \
- -DBYREF=true \
- $CFLAGS \
- parsetostruct_upb_table.c -o b_parsetostruct_googlemessage1_upb_table_byref ../src/libupb.a
-
-gcc -DMESSAGE_NAME=\"benchmarks.SpeedMessage2\" \
- -DMESSAGE_DESCRIPTOR_FILE=\"google_messages.proto.pb\" \
- -DMESSAGE_FILE=\"google_message2.dat\" \
- -DBYREF=false \
- $CFLAGS \
- parsetostruct_upb_table.c -o b_parsetostruct_googlemessage2_upb_table_byval ../src/libupb.a
-
-gcc -DMESSAGE_NAME=\"benchmarks.SpeedMessage2\" \
- -DMESSAGE_DESCRIPTOR_FILE=\"google_messages.proto.pb\" \
- -DMESSAGE_FILE=\"google_message2.dat\" \
- -DBYREF=true \
- $CFLAGS \
- parsetostruct_upb_table.c -o b_parsetostruct_googlemessage2_upb_table_byref ../src/libupb.a
-
-g++ -DMESSAGE_CIDENT="benchmarks::SpeedMessage2" \
- -DMESSAGE_FILE=\"google_message2.dat\" \
- -DMESSAGE_HFILE=\"google_messages.pb.h\" \
- $CXXFLAGS \
- parsetostruct_proto2_table.cc -o b_parsetostruct_googlemessage2_proto2_table -lprotobuf -lpthread google_messages.pb.o
-
-g++ -DMESSAGE_CIDENT="benchmarks::SpeedMessage2" \
- -DMESSAGE_FILE=\"google_message2.dat\" \
- -DMESSAGE_HFILE=\"google_messages.pb.h\" \
- $CXXFLAGS \
- parsetostruct_proto2_compiled.cc -o b_parsetostruct_googlemessage2_proto2_compiled -lprotobuf -lpthread google_messages.pb.o
-
-g++ -DMESSAGE_CIDENT="benchmarks::SpeedMessage1" \
- -DMESSAGE_FILE=\"google_message1.dat\" \
- -DMESSAGE_HFILE=\"google_messages.pb.h\" \
- $CXXFLAGS \
- parsetostruct_proto2_table.cc -o b_parsetostruct_googlemessage1_proto2_table -lprotobuf -lpthread google_messages.pb.o
-
-g++ -DMESSAGE_CIDENT="benchmarks::SpeedMessage1" \
- -DMESSAGE_FILE=\"google_message1.dat\" \
- -DMESSAGE_HFILE=\"google_messages.pb.h\" \
- $CXXFLAGS \
- parsetostruct_proto2_compiled.cc -o b_parsetostruct_googlemessage1_proto2_compiled -lprotobuf -lpthread google_messages.pb.o
diff --git a/benchmark/getgraphs.py b/benchmarks/getgraphs.py
index 392b6ef..aacf6b2 100644
--- a/benchmark/getgraphs.py
+++ b/benchmarks/getgraphs.py
@@ -26,7 +26,7 @@ for benchmark, values in benchmarks.items():
values.sort(cmp)
variants = [x[0] for x in values]
values = [x[1] for x in values]
- scaling = 300
+ scaling = 400
encoded_values = [encode((x * 4096 / scaling) - 1) for x in values]
legend = "chdl=%s" % ("|".join(variants))
colors = "chco=%s" % ("|".join([color_map[x] for x in variants]))
diff --git a/benchmark/google_message1.dat b/benchmarks/google_message1.dat
index bc0f064..bc0f064 100644
--- a/benchmark/google_message1.dat
+++ b/benchmarks/google_message1.dat
Binary files differ
diff --git a/benchmark/google_message2.dat b/benchmarks/google_message2.dat
index 06c0944..06c0944 100644
--- a/benchmark/google_message2.dat
+++ b/benchmarks/google_message2.dat
Binary files differ
diff --git a/benchmark/google_messages.proto b/benchmarks/google_messages.proto
index 17cace7..17cace7 100644
--- a/benchmark/google_messages.proto
+++ b/benchmarks/google_messages.proto
diff --git a/benchmark/main.c b/benchmarks/main.c
index c038287..f66b4d0 100644
--- a/benchmark/main.c
+++ b/benchmarks/main.c
@@ -2,6 +2,8 @@
#include <stdbool.h>
#include <time.h>
#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
static bool initialize();
static void cleanup();
@@ -9,6 +11,18 @@ static size_t run();
int main (int argc, char *argv[])
{
+ (void)argc;
+
+ /* Change cwd to where the binary is. */
+ char *lastslash = strrchr(argv[0], '/');
+ char *progname = argv[0];
+ if(lastslash) {
+ *lastslash = '\0';
+ chdir(argv[0]);
+ *lastslash = '/';
+ progname = lastslash + 3; /* "/b_" */
+ }
+
if(!initialize()) {
fprintf(stderr, "%s: failed to initialize\n", argv[0]);
return 1;
@@ -26,7 +40,7 @@ int main (int argc, char *argv[])
total_bytes += bytes;
}
double elapsed = ((double)clock() - before) / CLOCKS_PER_SEC;
- printf("%s: %d\n", argv[0], (int)(total_bytes / elapsed / (1 << 20)));
+ printf("%s:%d\n", progname, (int)(total_bytes / elapsed / (1 << 20)));
cleanup();
return 0;
}
diff --git a/benchmark/parsetostruct_proto2_compiled.cc b/benchmarks/parsetostruct.proto2_compiled.cc
index 339e184..339e184 100644
--- a/benchmark/parsetostruct_proto2_compiled.cc
+++ b/benchmarks/parsetostruct.proto2_compiled.cc
diff --git a/benchmark/parsetostruct_proto2_table.cc b/benchmarks/parsetostruct.proto2_table.cc
index 815834e..815834e 100644
--- a/benchmark/parsetostruct_proto2_table.cc
+++ b/benchmarks/parsetostruct.proto2_table.cc
diff --git a/benchmark/parsetostruct_upb_table.c b/benchmarks/parsetostruct.upb_table.c
index f93a6a7..f93a6a7 100644
--- a/benchmark/parsetostruct_upb_table.c
+++ b/benchmarks/parsetostruct.upb_table.c
diff --git a/perf-cppflags b/perf-cppflags
new file mode 100644
index 0000000..a8d2641
--- /dev/null
+++ b/perf-cppflags
@@ -0,0 +1 @@
+-DNDEBUG -fomit-frame-pointer
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback