projects
/
c11tester.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ac80452
)
optimization...don't calloc the datarace tables every single time...it is really...
author
Brian Demsky
<bdemsky@uci.edu>
Thu, 15 Nov 2012 02:11:29 +0000
(18:11 -0800)
committer
Brian Demsky
<bdemsky@uci.edu>
Thu, 15 Nov 2012 02:11:29 +0000
(18:11 -0800)
config.h
patch
|
blob
|
history
datarace.cc
patch
|
blob
|
history
diff --git
a/config.h
b/config.h
index 227c9a9c7a5df0586b84c254eaab5f431bd58559..94885427b3df46782b27ccb5ded48a6fac1e8c36 100644
(file)
--- a/
config.h
+++ b/
config.h
@@
-48,5
+48,6
@@
/* Size of stack to allocate for a thread. */
#define STACK_SIZE (1024 * 1024)
/* Size of stack to allocate for a thread. */
#define STACK_SIZE (1024 * 1024)
+#define SHADOWBASETABLES 4
#endif
#endif
diff --git
a/datarace.cc
b/datarace.cc
index 270e52310730febec1e97956c787a06c7b670b7e..732d6ff748b6e77187c10f0bf5dcd6b6b834b025 100644
(file)
--- a/
datarace.cc
+++ b/
datarace.cc
@@
-5,13
+5,29
@@
#include <cstring>
#include "mymemory.h"
#include "clockvector.h"
#include <cstring>
#include "mymemory.h"
#include "clockvector.h"
+#include "config.h"
struct ShadowTable *root;
std::vector<struct DataRace *> unrealizedraces;
struct ShadowTable *root;
std::vector<struct DataRace *> unrealizedraces;
+void *memory_base;
+void *memory_top;
+
/** This function initialized the data race detector. */
void initRaceDetector() {
root = (struct ShadowTable *)snapshot_calloc(sizeof(struct ShadowTable), 1);
/** This function initialized the data race detector. */
void initRaceDetector() {
root = (struct ShadowTable *)snapshot_calloc(sizeof(struct ShadowTable), 1);
+ memory_base = snapshot_calloc(sizeof(struct ShadowBaseTable)*SHADOWBASETABLES, 1);
+ memory_top = ((char *)memory_base) + sizeof(struct ShadowBaseTable)*SHADOWBASETABLES;
+}
+
+void * table_calloc(size_t size) {
+ if ((((char *)memory_base)+size)>memory_top) {
+ return snapshot_calloc(size, 1);
+ } else {
+ void *tmp=memory_base;
+ memory_base=((char *)memory_base)+size;
+ return tmp;
+ }
}
/** This function looks up the entry in the shadow table corresponding to a
}
/** This function looks up the entry in the shadow table corresponding to a
@@
-21,13
+37,13
@@
static uint64_t * lookupAddressEntry(void * address) {
#if BIT48
currtable=(struct ShadowTable *) currtable->array[(((uintptr_t)address)>>32)&MASK16BIT];
if (currtable==NULL) {
#if BIT48
currtable=(struct ShadowTable *) currtable->array[(((uintptr_t)address)>>32)&MASK16BIT];
if (currtable==NULL) {
- currtable = (struct ShadowTable *)(root->array[(((uintptr_t)address)>>32)&MASK16BIT] =
snapshot_calloc(sizeof(struct ShadowTable), 1
));
+ currtable = (struct ShadowTable *)(root->array[(((uintptr_t)address)>>32)&MASK16BIT] =
table_calloc(sizeof(struct ShadowTable)
));
}
#endif
struct ShadowBaseTable * basetable=(struct ShadowBaseTable *) currtable->array[(((uintptr_t)address)>>16)&MASK16BIT];
if (basetable==NULL) {
}
#endif
struct ShadowBaseTable * basetable=(struct ShadowBaseTable *) currtable->array[(((uintptr_t)address)>>16)&MASK16BIT];
if (basetable==NULL) {
- basetable = (struct ShadowBaseTable *)(currtable->array[(((uintptr_t)address)>>16)&MASK16BIT] =
snapshot_calloc(sizeof(struct ShadowBaseTable), 1
));
+ basetable = (struct ShadowBaseTable *)(currtable->array[(((uintptr_t)address)>>16)&MASK16BIT] =
table_calloc(sizeof(struct ShadowBaseTable)
));
}
return &basetable->array[((uintptr_t)address)&MASK16BIT];
}
}
return &basetable->array[((uintptr_t)address)&MASK16BIT];
}