Summary: The name `src` is confusing when combined with the plugins and the newly added `liboffload`.
60 lines
1.4 KiB
C++
60 lines
1.4 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;
|
|
|
|
void initRuntime() {
|
|
std::scoped_lock<decltype(PluginMtx)> Lock(PluginMtx);
|
|
Profiler::get();
|
|
TIMESCOPE();
|
|
|
|
if (PM == nullptr)
|
|
PM = new PluginManager();
|
|
|
|
RefCount++;
|
|
if (RefCount == 1) {
|
|
DP("Init offload library!\n");
|
|
#ifdef OMPT_SUPPORT
|
|
// Initialize OMPT first
|
|
llvm::omp::target::ompt::connectLibrary();
|
|
#endif
|
|
|
|
PM->init();
|
|
PM->registerDelayedLibraries();
|
|
}
|
|
}
|
|
|
|
void deinitRuntime() {
|
|
std::scoped_lock<decltype(PluginMtx)> Lock(PluginMtx);
|
|
assert(PM && "Runtime not initialized");
|
|
|
|
if (RefCount == 1) {
|
|
DP("Deinit offload library!\n");
|
|
PM->deinit();
|
|
delete PM;
|
|
PM = nullptr;
|
|
}
|
|
|
|
RefCount--;
|
|
}
|