Integrated benchmarks into main Makefile.

pull/13171/head
Joshua Haberman 16 years ago
parent 2aaea5390a
commit 84cd1538ee
  1. 84
      Makefile
  2. 59
      benchmark/gen.sh
  3. 2
      benchmarks/getgraphs.py
  4. 0
      benchmarks/google_message1.dat
  5. 0
      benchmarks/google_message2.dat
  6. 0
      benchmarks/google_messages.proto
  7. 16
      benchmarks/main.c
  8. 0
      benchmarks/parsetostruct.proto2_compiled.cc
  9. 0
      benchmarks/parsetostruct.proto2_table.cc
  10. 0
      benchmarks/parsetostruct.upb_table.c
  11. 1
      perf-cppflags

@ -2,25 +2,26 @@
# Function to expand a wildcard pattern recursively. # Function to expand a wildcard pattern recursively.
rwildcard=$(strip $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2)$(filter $(subst *,%,$2),$d))) rwildcard=$(strip $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2)$(filter $(subst *,%,$2),$d)))
.PHONY: all clean .PHONY: all clean test benchmarks
CC=gcc CC=gcc
CXX=g++ CXX=g++
CFLAGS=-std=c99 CFLAGS=-std=c99
INCLUDE=-Idescriptor -Isrc -Itests -I. 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) all: $(ALL)
clean: 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) # 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 \ 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/upb_string.o src/upb_text.o src/upb_serialize.o descriptor/descriptor.o
SRC=$(call rwildcard,,*.c) SRC=$(call rwildcard,,*.c)
HEADERS=$(call rwildcard,,*.h) HEADERS=$(call rwildcard,,*.h)
src/libupb.a: $(OBJ) $(LIBUPB): $(OBJ)
ar rcs src/libupb.a $(OBJ) ar rcs $(LIBUPB) $(OBJ)
# Tests # Tests
test: tests/tests test: tests/tests
@ -32,6 +33,77 @@ tests/tests: src/libupb.a
tools/upbc: src/libupb.a tools/upbc: src/libupb.a
# Benchmarks # 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 -include deps
deps: $(SRC) $(HEADERS) gen-deps.sh Makefile deps: $(SRC) $(HEADERS) gen-deps.sh Makefile

@ -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

@ -26,7 +26,7 @@ for benchmark, values in benchmarks.items():
values.sort(cmp) values.sort(cmp)
variants = [x[0] for x in values] variants = [x[0] for x in values]
values = [x[1] 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] encoded_values = [encode((x * 4096 / scaling) - 1) for x in values]
legend = "chdl=%s" % ("|".join(variants)) legend = "chdl=%s" % ("|".join(variants))
colors = "chco=%s" % ("|".join([color_map[x] for x in variants])) colors = "chco=%s" % ("|".join([color_map[x] for x in variants]))

@ -2,6 +2,8 @@
#include <stdbool.h> #include <stdbool.h>
#include <time.h> #include <time.h>
#include <stdio.h> #include <stdio.h>
#include <unistd.h>
#include <string.h>
static bool initialize(); static bool initialize();
static void cleanup(); static void cleanup();
@ -9,6 +11,18 @@ static size_t run();
int main (int argc, char *argv[]) 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()) { if(!initialize()) {
fprintf(stderr, "%s: failed to initialize\n", argv[0]); fprintf(stderr, "%s: failed to initialize\n", argv[0]);
return 1; return 1;
@ -26,7 +40,7 @@ int main (int argc, char *argv[])
total_bytes += bytes; total_bytes += bytes;
} }
double elapsed = ((double)clock() - before) / CLOCKS_PER_SEC; 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(); cleanup();
return 0; return 0;
} }

@ -0,0 +1 @@
-DNDEBUG -fomit-frame-pointer
Loading…
Cancel
Save