From 429a665e7f8cd8c352f209b4c61f29a8032fd240 Mon Sep 17 00:00:00 2001 From: Lukas Rothenberger Date: Wed, 15 May 2024 16:19:39 +0200 Subject: [PATCH] feat: add stack detection to time measurements --- rtlib/functions/dp_read.cpp | 4 ++++ rtlib/functions/dp_write.cpp | 4 ++++ share/include/timer.hpp | 14 ++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/rtlib/functions/dp_read.cpp b/rtlib/functions/dp_read.cpp index e31b06355..7100300e2 100644 --- a/rtlib/functions/dp_read.cpp +++ b/rtlib/functions/dp_read.cpp @@ -74,13 +74,17 @@ void __dp_read(LID lid, ADDR addr, char *var) { // TEST // check for stack access + timers->start(TimerRegion::STACK_CHECK_READ_ACCESS); bool is_stack_access = false; if (stackAddrs->top().first && stackAddrs->top().second) { if ((addr <= stackAddrs->top().first) && (addr >= stackAddrs->top().second)) { + timers->start(TimerRegion::STACK_FOUND_READ_ACCESS); is_stack_access = true; + timers->stop_and_add(TimerRegion::STACK_FOUND_READ_ACCESS); } } + timers->stop_and_add(TimerRegion::STACK_CHECK_READ_ACCESS); // !TEST // addAccessInfo(true, lid, var, addr); diff --git a/rtlib/functions/dp_write.cpp b/rtlib/functions/dp_write.cpp index f79276ba4..73e646699 100644 --- a/rtlib/functions/dp_write.cpp +++ b/rtlib/functions/dp_write.cpp @@ -76,15 +76,19 @@ void __dp_write(LID lid, ADDR addr, char *var) { // TEST // check for stack access + timers->start(TimerRegion::STACK_CHECK_WRITE_ACCESS); bool is_stack_access = false; if (stackAddrs->top().first && stackAddrs->top().second) { if ((addr <= stackAddrs->top().first) && (addr >= stackAddrs->top().second)) { // cout << "WRITE STACK ACCESS DETECTED! " << // dputil::decodeLID(lid) << " " << var << "\n"; + timers->start(TimerRegion::STACK_FOUND_WRITE_ACCESS); is_stack_access = true; + timers->stop_and_add(TimerRegion::STACK_FOUND_WRITE_ACCESS); } } + timers->stop_and_add(TimerRegion::STACK_CHECK_WRITE_ACCESS); // !TEST int64_t workerID = diff --git a/share/include/timer.hpp b/share/include/timer.hpp index 7d742bd4b..940e8bbcb 100644 --- a/share/include/timer.hpp +++ b/share/include/timer.hpp @@ -59,6 +59,12 @@ enum class TimerRegion : unsigned int { FINALIZE_PARALLELIZATION, CLEAR_STACK_ACCESSES, + // These are statistics regarding stack access detection + STACK_CHECK_READ_ACCESS, + STACK_CHECK_WRITE_ACCESS, + STACK_FOUND_READ_ACCESS, + STACK_FOUND_WRITE_ACCESS, + SIZE_DONT_USE, }; @@ -205,6 +211,14 @@ class Timers { print(stream, " Add access information : ", TimerRegion::ADD_ACCESS_INFO); print(stream, " Clear the stack accesses : ", TimerRegion::CLEAR_STACK_ACCESSES); stream << '\n'; + + stream << "\n========== DiscoPoP TIMERS: stack access detection ==\n"; + stream << " NOTE: times to detect stack access in read and write contained in \n"; + stream << " reported times to read and write from / to memory. \n"; + print(stream, " Check for read access to stack : ", TimerRegion::STACK_CHECK_READ_ACCESS); + print(stream, " Check for write access to stack : ", TimerRegion::STACK_CHECK_WRITE_ACCESS); + print(stream, " Found read access to stack : ", TimerRegion::STACK_FOUND_READ_ACCESS); + print(stream, " Found write access to stack : ", TimerRegion::STACK_FOUND_WRITE_ACCESS); } /**