[Mlir-commits] [mlir] [mlir][target] RAII wrap moduleToObject timer to ensure call `clear` function (PR #136142)
Zichen Lu
llvmlistbot at llvm.org
Thu Apr 17 07:04:11 PDT 2025
https://github.com/MikaOvO created https://github.com/llvm/llvm-project/pull/136142
As title, we need to call `Timer::clear` to avoid extra log like this:
```
===-------------------------------------------------------------------------===
...
===-------------------------------------------------------------------------===
Total Execution Time: 0.0000 seconds (0.0000 wall clock)
---Wall Time--- --- Name ---
----- ....
----- Total
```
>From 71dae2896b871dd52454eb4b1a90f459f8f72372 Mon Sep 17 00:00:00 2001
From: Zichen Lu <mikaovo2000 at gmail.com>
Date: Thu, 17 Apr 2025 22:00:59 +0800
Subject: [PATCH] [mlir][target] RAII wrap moduleToObject timer to ensure call
clear function
---
mlir/lib/Target/LLVM/NVVM/Target.cpp | 30 ++++++++++++++++++----------
1 file changed, 19 insertions(+), 11 deletions(-)
diff --git a/mlir/lib/Target/LLVM/NVVM/Target.cpp b/mlir/lib/Target/LLVM/NVVM/Target.cpp
index 5a2b829fbd1bd..ea0c2b6663fbb 100644
--- a/mlir/lib/Target/LLVM/NVVM/Target.cpp
+++ b/mlir/lib/Target/LLVM/NVVM/Target.cpp
@@ -669,10 +669,6 @@ NVPTXSerializer::compileToBinaryNVPTX(const std::string &ptxCode) {
std::optional<SmallVector<char, 0>>
NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
- llvm::Timer moduleToObjectTimer(
- "moduleToObjectTimer",
- "Timer for perf llvm-ir -> isa and isa -> binary.");
- moduleToObjectTimer.startTimer();
// Return LLVM IR if the compilation target is `offload`.
#define DEBUG_TYPE "serialize-to-llvm"
LLVM_DEBUG({
@@ -691,6 +687,18 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
return std::nullopt;
#endif // LLVM_HAS_NVPTX_TARGET
+ auto timerDeleter = [](llvm::Timer *timer) {
+ if (timer != nullptr) {
+ timer->clear();
+ delete timer;
+ }
+ };
+ std::unique_ptr<llvm::Timer, decltype(timerDeleter)> moduleToObjectTimer(
+ new llvm::Timer("moduleToObjectTimer",
+ "Timer for perf llvm-ir -> isa and isa -> binary."),
+ timerDeleter);
+ moduleToObjectTimer->startTimer();
+
// Emit PTX code.
std::optional<llvm::TargetMachine *> targetMachine =
getOrCreateTargetMachine();
@@ -706,9 +714,9 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
return std::nullopt;
}
- moduleToObjectTimer.stopTimer();
- llvmToISATimeInMs = moduleToObjectTimer.getTotalTime().getWallTime() * 1000;
- moduleToObjectTimer.clear();
+ moduleToObjectTimer->stopTimer();
+ llvmToISATimeInMs = moduleToObjectTimer->getTotalTime().getWallTime() * 1000;
+ moduleToObjectTimer->clear();
if (isaCallback)
isaCallback(serializedISA.value());
@@ -729,7 +737,7 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
}
std::optional<SmallVector<char, 0>> result;
- moduleToObjectTimer.startTimer();
+ moduleToObjectTimer->startTimer();
// Compile to binary.
#if MLIR_ENABLE_NVPTXCOMPILER
result = compileToBinaryNVPTX(*serializedISA);
@@ -737,9 +745,9 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
result = compileToBinary(*serializedISA);
#endif // MLIR_ENABLE_NVPTXCOMPILER
- moduleToObjectTimer.stopTimer();
- isaToBinaryTimeInMs = moduleToObjectTimer.getTotalTime().getWallTime() * 1000;
- moduleToObjectTimer.clear();
+ moduleToObjectTimer->stopTimer();
+ isaToBinaryTimeInMs =
+ moduleToObjectTimer->getTotalTime().getWallTime() * 1000;
return result;
}
More information about the Mlir-commits
mailing list