11 uint32_t stack_pointer;
16 EventBuffer(
unsigned max) : max_events(max), stack_pointer(max) {
17 abort_event =
new Event();
19 int err = posix_memalign((
void **)&buffer, 64, max*
sizeof(
Event*));
24 int buf_size = 8 * (((
sizeof(
Event) - 1) / 8) + 1);
25 err = posix_memalign((
void **)&temp_buf, 64, stack_pointer*buf_size);
27 if (buf_size <
sizeof(
Event)) {
28 CkAbort(
"ERROR: Per-event buffer size broken\n");
31 for (
int i = 0; i < max; i++) {
32 buffer[i] = (
Event*)temp_buf;
37 Event* get_abort_event()
const {
42 TW_ASSERT(stack_pointer > 0,
"Out of events to allocate!\n");
43 buffer[--stack_pointer]->clear();
44 if(max_events - stack_pointer >
PE_STATS(max_events_used)) {
45 PE_STATS(max_events_used) = max_events - stack_pointer;
47 return buffer[stack_pointer];
49 void free_event(
Event* e) {
50 TW_ASSERT(stack_pointer < max_events,
"Freeing event to full buffer\n");
51 buffer[stack_pointer++] = e;
54 unsigned current_size()
const {
58 unsigned max_size()
const {
62 double percent_used()
const {
63 return ((
double)stack_pointer / max_events);
Declaration of the Statistics class and associated methods/variables.
Definition: event_buffer.h:8
#define PE_STATS(x)
MACRO to more easily access PE local statistics.
Definition: statistics.h:38