Add benchmark UDB
This commit is contained in:
1 parent
40c0bf79b1
commit
7b11f5afbc
4 files changed
+206
No files matched your search
@@ -0,0 +1,53 @@
|
|||||||
|
CC= gcc
|
||||||
|
CXX= g++
|
||||||
|
CFLAGS= -g -Wall -O2 -fomit-frame-pointer -march=native -lm -include stddef.h
|
||||||
|
CXXFLAGS= $(CFLAGS)
|
||||||
|
LDFLAGS=
|
||||||
|
OBJS=
|
||||||
|
LIBS= -lm
|
||||||
|
|
||||||
|
all: run
|
||||||
|
|
||||||
|
benchmarks:
|
||||||
|
git clone https://github.com/attractivechaos/benchmarks.git
|
||||||
|
|
||||||
|
build: benchmarks
|
||||||
|
mkdir -p benchmarks/udb/mlib
|
||||||
|
cp test-mlib.c benchmarks/udb/mlib/test.c
|
||||||
|
cp Makefile-mlib benchmarks/udb/mlib/Makefile
|
||||||
|
mkdir -p benchmarks/udb/mlib-oa
|
||||||
|
cp test-mlib-oa.c benchmarks/udb/mlib-oa/test.c
|
||||||
|
cp Makefile-mlib benchmarks/udb/mlib-oa/Makefile
|
||||||
|
touch build
|
||||||
|
|
||||||
|
all-recur: build
|
||||||
|
cd benchmarks/udb; \
|
||||||
|
wdir=`pwd`; \
|
||||||
|
list_c=`find . -name 'test.c'`; \
|
||||||
|
list_cc=`find . -name 'test.cc'`; \
|
||||||
|
for t in $$list_c $$list_cc ; do \
|
||||||
|
subdir=`dirname $$t`; \
|
||||||
|
cd $$subdir; \
|
||||||
|
$(MAKE) CC="$(CC)" CXX="$(CXX)" DFLAGS="$(DFLAGS)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" || exit 1; \
|
||||||
|
cd $$wdir; \
|
||||||
|
done;
|
||||||
|
|
||||||
|
run: all-recur
|
||||||
|
@cd benchmarks/udb; \
|
||||||
|
echo ; echo "LIBRARY | INT TIME | STR TIME" ; \
|
||||||
|
for i in `find . -name 'test'` ; do \
|
||||||
|
printf "%s|" `dirname $$i|sed -e 's+./++g'`; \
|
||||||
|
$$i -is | awk ' \
|
||||||
|
/\[int data\] # element/ { nbInt= $$5 } \
|
||||||
|
/\[int data\] CPU time/ {timeInt= $$5 } \
|
||||||
|
/\[str data\] # element/ { nbStr= $$5 } \
|
||||||
|
/\[str data\] CPU time/ {timeStr= $$5 } \
|
||||||
|
END { \
|
||||||
|
if (nbInt != 624444) timeInt="BRK" ; \
|
||||||
|
if (nbStr != 624444) timeStr="BRK" ; \
|
||||||
|
print timeInt,"|" ,timeStr \
|
||||||
|
}' ; \
|
||||||
|
done
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf benchmarks build
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
CC= gcc
|
||||||
|
CFLAGS= -g -Wall -O2 -march=native
|
||||||
|
OBJS= ../benchmark/benchmark.o ../runit/runlib.o test.o
|
||||||
|
DFLAGS=
|
||||||
|
INCLUDES= -I../benchmark -I../runit -I../../../../..
|
||||||
|
LIBS=
|
||||||
|
|
||||||
|
.SUFFIXES:.c .o
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
$(CC) -std=gnu11 -DNDEBUG -c $(INCLUDES) $(CFLAGS) $(DFLAGS) $< -o $@
|
||||||
|
|
||||||
|
all:test
|
||||||
|
|
||||||
|
test:$(OBJS)
|
||||||
|
$(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS)
|
||||||
|
|
||||||
|
cleanlocal:
|
||||||
|
rm -f *.o a.out *~ test
|
||||||
|
|
||||||
|
clean:cleanlocal
|
||||||
|
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
#ifndef NDEBUG
|
||||||
|
#define NDEBUG
|
||||||
|
#endif
|
||||||
|
#undef NDEBUG
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "benchmark.h"
|
||||||
|
#include "m-dict.h"
|
||||||
|
#include "m-mempool.h"
|
||||||
|
|
||||||
|
static inline bool oor_equal_p(int k, unsigned char n)
|
||||||
|
{
|
||||||
|
return k == (int)-n - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void oor_set(int *k, unsigned char n)
|
||||||
|
{
|
||||||
|
*k = (int)-n - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
DICT_OA_DEF2(dict_int,
|
||||||
|
int, M_OPEXTEND(M_DEFAULT_OPLIST, OOR_EQUAL(oor_equal_p), OOR_SET(oor_set M_IPTR)),
|
||||||
|
int, M_DEFAULT_OPLIST)
|
||||||
|
|
||||||
|
static const char *const oor[2] = { "EMPTY", "DELETED" };
|
||||||
|
|
||||||
|
static inline bool str_oor_equal_p(const char *k, unsigned char n)
|
||||||
|
{
|
||||||
|
return k == oor[n];
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void str_oor_set(const char * *k, unsigned char n)
|
||||||
|
{
|
||||||
|
*k = oor[n];
|
||||||
|
}
|
||||||
|
|
||||||
|
DICT_OA_DEF2(dict_str, const char *,
|
||||||
|
M_OPEXTEND (M_CSTR_OPLIST, OOR_EQUAL(str_oor_equal_p), OOR_SET(str_oor_set M_IPTR)),
|
||||||
|
int, M_DEFAULT_OPLIST)
|
||||||
|
|
||||||
|
|
||||||
|
int test_int(int N, const unsigned *data)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
M_LET(h, DICT_OPLIST(dict_int)) {
|
||||||
|
for (int i = 0; i < N; ++i) {
|
||||||
|
if (dict_int_get (h, data[i]) == NULL) {
|
||||||
|
dict_int_set_at (h, data[i], i);
|
||||||
|
} else {
|
||||||
|
dict_int_remove(h, data[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret = (int)dict_int_size(h);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_str(int N, char * const *data)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
M_LET(h, DICT_OPLIST(dict_str)) {
|
||||||
|
for (int i = 0; i < N; ++i) {
|
||||||
|
if (dict_str_get (h, data[i]) == NULL) {
|
||||||
|
dict_str_set_at (h, data[i], i);
|
||||||
|
} else {
|
||||||
|
dict_str_remove(h, data[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret = (int)dict_str_size(h);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
return udb_benchmark(argc, argv, test_int, test_str);
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "benchmark.h"
|
||||||
|
#include "m-dict.h"
|
||||||
|
#include "m-mempool.h"
|
||||||
|
|
||||||
|
DICT_DEF2(dict_int,
|
||||||
|
int, M_OPEXTEND(M_DEFAULT_OPLIST, MEMPOOL(mpool_int), MEMPOOL_LINKAGE(static)),
|
||||||
|
int, M_DEFAULT_OPLIST)
|
||||||
|
DICT_DEF2(dict_str,
|
||||||
|
const char *, M_OPEXTEND (M_CSTR_OPLIST, MEMPOOL(mpool_str), MEMPOOL_LINKAGE(static)),
|
||||||
|
int, M_DEFAULT_OPLIST)
|
||||||
|
|
||||||
|
int test_int(int N, const unsigned *data)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
dict_int_list_pair_mempool_init(mpool_int);
|
||||||
|
M_LET(h, DICT_OPLIST(dict_int)) {
|
||||||
|
for (int i = 0; i < N; ++i) {
|
||||||
|
if (dict_int_get (h, data[i]) == NULL) {
|
||||||
|
dict_int_set_at (h, data[i], i);
|
||||||
|
} else {
|
||||||
|
dict_int_remove(h, data[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret = (int)dict_int_size(h);
|
||||||
|
}
|
||||||
|
dict_int_list_pair_mempool_clear(mpool_int);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_str(int N, char * const *data)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
dict_str_list_pair_mempool_init(mpool_str);
|
||||||
|
M_LET(h, DICT_OPLIST(dict_str)) {
|
||||||
|
for (int i = 0; i < N; ++i) {
|
||||||
|
if (dict_str_get (h, data[i]) == NULL) {
|
||||||
|
dict_str_set_at (h, data[i], i);
|
||||||
|
} else {
|
||||||
|
dict_str_remove(h, data[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret = (int)dict_str_size(h);
|
||||||
|
}
|
||||||
|
dict_str_list_pair_mempool_clear(mpool_str);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
return udb_benchmark(argc, argv, test_int, test_str);
|
||||||
|
}
|
||||||
Reference in new issue
Block a user