Add bench for DualPushList.

This commit is contained in:
Patrick Pelissier committed 2018-06-27 20:09:24 +02:00
1 parent 522632bea6
commit 31913ae80e
2 files changed
+50 -20

No files matched your search

+2
View File
@@ -34,6 +34,7 @@ plain: bench-plain
bench-mlib: bench-mlib:
$(CC) $(CFLAGS) $(CPPFLAGS) -pthread bench-mlib.c -o bench-mlib.exe $(CC) $(CFLAGS) $(CPPFLAGS) -pthread bench-mlib.c -o bench-mlib.exe
@./bench-mlib.exe 10 @./bench-mlib.exe 10
@./bench-mlib.exe 11
@./bench-mlib.exe 20 @./bench-mlib.exe 20
@./bench-mlib.exe 30 @./bench-mlib.exe 30
@./bench-mlib.exe 31 @./bench-mlib.exe 31
@@ -47,6 +48,7 @@ bench-mlib:
bench-mlib-mempool: bench-mlib-mempool:
$(CC) $(CFLAGS) $(CPPFLAGS) bench-mlib.c -DUSE_MEMPOOL -pthread -o bench-mlib-mempool.exe $(CC) $(CFLAGS) $(CPPFLAGS) bench-mlib.c -DUSE_MEMPOOL -pthread -o bench-mlib-mempool.exe
@./bench-mlib-mempool.exe 10 @./bench-mlib-mempool.exe 10
@./bench-mlib-mempool.exe 11
@./bench-mlib-mempool.exe 20 @./bench-mlib-mempool.exe 20
@./bench-mlib-mempool.exe 30 @./bench-mlib-mempool.exe 30
@./bench-mlib-mempool.exe 31 @./bench-mlib-mempool.exe 31
+48 -20
View File
@@ -69,6 +69,37 @@ static void test_list (size_t n)
/********************************************************************************************/ /********************************************************************************************/
// Two benched mode: with or without mempool
#ifdef USE_MEMPOOL
LIST_DUAL_PUSH_DEF(dlist_uint, unsigned int, (MEMPOOL( dlist_mpool), MEMPOOL_LINKAGE(static)))
#else
LIST_DUAL_PUSH_DEF(dlist_uint, unsigned int)
#endif
static void test_dlist (size_t n)
{
#ifdef USE_MEMPOOL
dlist_uint_mempool_init(dlist_mpool);
#endif
M_LET(a1, a2, LIST_OPLIST(dlist_uint)) {
for(size_t i = 0; i < n; i++) {
dlist_uint_push_back(a1, rand_get() );
dlist_uint_push_back(a2, rand_get() );
}
unsigned int s = 0;
dlist_uint_it_t it1, it2;
for(dlist_uint_it(it1, a1), dlist_uint_it(it2,a2); !dlist_uint_end_p(it1); dlist_uint_next(it1), dlist_uint_next(it2)) {
s += *dlist_uint_cref(it1) * *dlist_uint_cref(it2);
}
g_result = s;
}
#ifdef USE_MEMPOOL
dlist_uint_mempool_clear(dlist_mpool);
#endif
}
/********************************************************************************************/
#ifdef USE_MEMPOOL #ifdef USE_MEMPOOL
RBTREE_DEF(rbtree_ulong, unsigned long, (MEMPOOL( rbtree_mpool), MEMPOOL_LINKAGE(static))) RBTREE_DEF(rbtree_ulong, unsigned long, (MEMPOOL( rbtree_mpool), MEMPOOL_LINKAGE(static)))
#else #else
@@ -104,21 +135,19 @@ BPTREE_DEF(bptree_ulong, 21, unsigned long, M_DEFAULT_OPLIST)
static void test_bptree(size_t n) static void test_bptree(size_t n)
{ {
bptree_ulong_t tree; M_LET(tree, BPTREE_OPLIST(bptree_ulong)) {
bptree_ulong_init(tree); for (size_t i = 0; i < n; i++) {
// M_LET(tree, RBTREE_OPLIST(rbtree_ulong)) { bptree_ulong_push(tree, rand_get());
for (size_t i = 0; i < n; i++) { }
bptree_ulong_push(tree, rand_get()); rand_init();
unsigned int s = 0;
for (size_t i = 0; i < n; i++) {
unsigned long *p = bptree_ulong_get(tree, rand_get());
if (p)
s += *p;
}
g_result = s;
} }
rand_init();
unsigned int s = 0;
for (size_t i = 0; i < n; i++) {
unsigned long *p = bptree_ulong_get(tree, rand_get());
if (p)
s += *p;
}
g_result = s;
bptree_ulong_clear(tree);
} }
/********************************************************************************************/ /********************************************************************************************/
@@ -192,19 +221,16 @@ test_dict_oa(size_t n)
/********************************************************************************************/ /********************************************************************************************/
typedef char char_array_t[256]; typedef char char_array_t[256];
static void char_init (char_array_t a) { a[0] = 0; } static void char_init (char_array_t a) { a[0] = 0; }
static void char_set (char_array_t a, const char_array_t b) { strcpy(a, b); } static void char_set (char_array_t a, const char_array_t b) { strcpy(a, b); }
static bool char_equal_p (const char_array_t a, const char_array_t b) { return strcmp(a,b)==0; } static bool char_equal_p (const char_array_t a, const char_array_t b) { return strcmp(a,b)==0; }
static size_t char_hash(const char_array_t a) { return m_core_hash (a, strlen(a)); } static size_t char_hash(const char_array_t a) { return m_core_hash (a, strlen(a)); }
#define M_OPL_char_array_t() (INIT(char_init), INIT_SET(char_set), SET(char_set), CLEAR(char_init), HASH(char_hash), EQUAL(char_equal_p))
// NOTE: Can't use the name OPLIST as a macro!
#define CHAR_OPLIST (INIT(char_init), INIT_SET(char_set), SET(char_set), CLEAR(char_init), HASH(char_hash), EQUAL(char_equal_p))
#ifdef USE_MEMPOOL #ifdef USE_MEMPOOL
DICT_STOREHASH_DEF2(dict_char, char_array_t, M_OPEXTEND(CHAR_OPLIST,MEMPOOL(dict_mpool2), MEMPOOL_LINKAGE(static)), char_array_t, CHAR_OPLIST) DICT_STOREHASH_DEF2(dict_char, char_array_t, M_OPEXTEND(M_OPL_char_array_t(),MEMPOOL(dict_mpool2), MEMPOOL_LINKAGE(static)), char_array_t, M_OPL_char_array_t())
#else #else
DICT_STOREHASH_DEF2(dict_char, char_array_t, CHAR_OPLIST, char_array_t, CHAR_OPLIST) DICT_STOREHASH_DEF2(dict_char, char_array_t, M_OPL_char_array_t(), char_array_t, M_OPL_char_array_t())
#endif #endif
static void static void
@@ -591,6 +617,8 @@ int main(int argc, const char *argv[])
int n = (argc > 1) ? atoi(argv[1]) : 0; int n = (argc > 1) ? atoi(argv[1]) : 0;
if (n == 10) if (n == 10)
test_function("List time",10000000, test_list); test_function("List time",10000000, test_list);
if (n == 11)
test_function("DPList time",10000000, test_dlist);
if (n == 20) if (n == 20)
test_function("Array time", 100000000, test_array); test_function("Array time", 100000000, test_array);
if (n == 30) if (n == 30)