This PR introduces new debug macros that allow a more fined control of which debug message to output and introduce C++ stream style for debug messages. Changing existing messages (except a few that I changed for testing) will come in subsequent PRs. I also think that we should make debug enabling OpenMP agnostic but, for now, I prioritized maintaing the current libomptarget behavior for now, and we might need more changes further down the line as we we decouple libomptarget.
72 lines
1.8 KiB
C++
72 lines
1.8 KiB
C++
//===----------- rtl.cpp - Target independent OpenMP target RTL -----------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Initialization and tear down of the offload runtime.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "OpenMP/OMPT/Callback.h"
|
|
#include "PluginManager.h"
|
|
|
|
#include "Shared/Debug.h"
|
|
#include "Shared/Profile.h"
|
|
|
|
#ifdef OMPT_SUPPORT
|
|
extern void llvm::omp::target::ompt::connectLibrary();
|
|
#endif
|
|
|
|
static std::mutex PluginMtx;
|
|
static uint32_t RefCount = 0;
|
|
std::atomic<bool> RTLAlive{false};
|
|
std::atomic<int> RTLOngoingSyncs{0};
|
|
|
|
void initRuntime() {
|
|
std::scoped_lock<decltype(PluginMtx)> Lock(PluginMtx);
|
|
Profiler::get();
|
|
TIMESCOPE();
|
|
|
|
if (PM == nullptr)
|
|
PM = new PluginManager();
|
|
|
|
RefCount++;
|
|
if (RefCount == 1) {
|
|
ODBG() << "Init offload library!";
|
|
#ifdef OMPT_SUPPORT
|
|
// Initialize OMPT first
|
|
llvm::omp::target::ompt::connectLibrary();
|
|
#endif
|
|
|
|
PM->init();
|
|
PM->registerDelayedLibraries();
|
|
|
|
// RTL initialization is complete
|
|
RTLAlive = true;
|
|
}
|
|
}
|
|
|
|
void deinitRuntime() {
|
|
std::scoped_lock<decltype(PluginMtx)> Lock(PluginMtx);
|
|
assert(PM && "Runtime not initialized");
|
|
|
|
if (RefCount == 1) {
|
|
DP("Deinit offload library!\n");
|
|
// RTL deinitialization has started
|
|
RTLAlive = false;
|
|
while (RTLOngoingSyncs > 0) {
|
|
DP("Waiting for ongoing syncs to finish, count: %d\n",
|
|
RTLOngoingSyncs.load());
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
|
}
|
|
PM->deinit();
|
|
delete PM;
|
|
PM = nullptr;
|
|
}
|
|
|
|
RefCount--;
|
|
}
|