17 "exahype2::EnclaveBookkeeping::memory-allocations"
30 std::ostringstream finishedTasksMsg;
31 finishedTasksMsg <<
"(#" << _finishedTasks.size();
32 for (
auto& p : _finishedTasks) {
33 finishedTasksMsg <<
"," << p.first <<
"->" << p.second.toString();
35 finishedTasksMsg <<
")";
36 logInfo(
"dumpStatistics()",
"finished tasks=" << finishedTasksMsg.str());
43 if (_finishedTasks.count(number) > 0) {
44 Entry storedData = _finishedTasks.at(number);
45 _finishedTasks.erase(number);
49 _tasksThatHaveToBeCancelled.insert(number);
59 Entry storedData = _finishedTasks.at(number);
60 _finishedTasks.erase(number);
61 finishedTasksLock.
free();
72 Entry storedData = waitForTaskToTerminateAndReturnResult(number);
80 int number,
double* destination,
double& maxEigenvalue
84 Entry storedData = waitForTaskToTerminateAndReturnResult(number);
86 if ( destination!=storedData.
data ) {
91 logDebug(
"waitForTaskToTerminateAndCopyResultOver(int,double*,double&)",
"target memory and enclave memory region seem to be the same, so no need to free memory on bookkeeping's side")
97 "waitForTaskToTerminateAndCopyResultOver(int,double*,double&)", maxEigenvalue, storedData.
toString()
103 int taskNumber,
int numberOfResultValues,
double* data,
double maxEigenvalue
105 logDebug(
"finishedTask()",
"task " << taskNumber <<
" has terminated. Bookkeep results");
109 if (_tasksThatHaveToBeCancelled.count(taskNumber)) {
110 logWarning(
"finishedTask(...)",
"task entry for task " << taskNumber <<
" does exist already" );
111 _tasksThatHaveToBeCancelled.erase(taskNumber);
113 lockFinishedTasks.
free();
116 logDebug(
"finishedTask(...)",
"bookmarked new outcome for task " << taskNumber <<
" at memory location " << data );
117 auto oldBucketCount = _finishedTasks.bucket_count();
118 Entry newEntry(numberOfResultValues, data, maxEigenvalue);
119 _finishedTasks.insert(std::pair<int, Entry>(taskNumber, newEntry));
120 if (_finishedTasks.bucket_count() > oldBucketCount) {
123 lockFinishedTasks.
free();
129 numberOfResultValues(numberOfResultValues_),
131 maxEigenvalue(maxEigenvalue_) {}
135 std::ostringstream msg;
136 msg <<
"(#" << numberOfResultValues <<
",\\lambda_max=" << maxEigenvalue <<
")";
#define assertionEquals1(lhs, rhs, a)
#define assertionEquals(lhs, rhs)
#define logDebug(methodName, logMacroMessageStream)
#define logTraceOut(methodName)
#define logWarning(methodName, logMacroMessageStream)
Wrapper macro around tarch::tarch::logging::Log to improve logging.
#define logTraceOutWith2Arguments(methodName, argument0, argument1)
#define logTraceInWith1Argument(methodName, argument0)
#define logInfo(methodName, logMacroMessageStream)
Wrapper macro around tarch::tarch::logging::Log to improve logging.
static EnclaveBookkeeping & getInstance()
static tarch::logging::Log _log
void dumpStatistics()
For debugging only.
void waitForTaskAndDiscardResult(int number)
Wait for a task and copy outcome into destination.
static const std::string MemoryAllocationsInLookupTableIdentifier
void finishedTask(int taskNumber, int numberOfResultValues, double *data, double maxEigenvalue)
Usually called directly by EnclaveTask.
Entry waitForTaskToTerminateAndReturnResult(int number)
Wait for a task result to become available.
void cancelTask(int number)
void waitForTaskToTerminateAndCopyResultOver(int number, double *destination, double &maxEigenvalue)
Wait for a task and copy outcome into destination.
static int getNumberOfActiveTasks()
static void releaseTaskNumber(int number)
void inc(const std::string &identifier, double value=1.0, bool disableSampling=false, bool clearAfterDatabaseDump=false)
static Statistics & getInstance()
This is not the canonical realisation of singletons as I use it usually for stats in Peano.
Create a lock around a boolean semaphore region.
void free()
Free the lock.
void waitForTask(const int taskNumber)
Wrapper around waitForTasks() with a single-element set.
void freeMemory(void *data, MemoryLocation location, int device=accelerator::Device::HostDevice)
Free memory.
@ ManagedSharedAcceleratorDeviceMemory
To be used on host only.
Entry(int numberOfResultValues_, double *data_, double maxEigenvalue_)
std::string toString() const