[Mlir-commits] [mlir] [MLIR] Dump sass (PR #110227)
Guray Ozen
llvmlistbot at llvm.org
Fri Sep 27 03:39:23 PDT 2024
https://github.com/grypp updated https://github.com/llvm/llvm-project/pull/110227
>From 8b2866230ae394e65a57691800fafe04eecfe760 Mon Sep 17 00:00:00 2001
From: Guray Ozen <guray.ozen at gmail.com>
Date: Fri, 27 Sep 2024 11:44:03 +0200
Subject: [PATCH 1/4] [MLIR] Dump sass
This PR dump sass by using nvdiasm
---
mlir/lib/Target/LLVM/NVVM/Target.cpp | 26 +++++++++++++++++--
.../SparseTensor/GPU/CUDA/dump-ptx.mlir | 2 +-
2 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/mlir/lib/Target/LLVM/NVVM/Target.cpp b/mlir/lib/Target/LLVM/NVVM/Target.cpp
index 806c405ac17dfa..591074a436c4e0 100644
--- a/mlir/lib/Target/LLVM/NVVM/Target.cpp
+++ b/mlir/lib/Target/LLVM/NVVM/Target.cpp
@@ -30,6 +30,7 @@
#include "llvm/Support/Process.h"
#include "llvm/Support/Program.h"
#include "llvm/Support/TargetSelect.h"
+#include "llvm/Support/raw_ostream.h"
#include <cstdlib>
@@ -92,6 +93,7 @@ SerializeGPUModuleBase::SerializeGPUModuleBase(
// If `targetOptions` have an empty toolkitPath use `getCUDAToolkitPath`
if (toolkitPath.empty())
toolkitPath = getCUDAToolkitPath();
+ llvm::errs() << toolkitPath;
// Append the files in the target attribute.
if (ArrayAttr files = target.getLink())
@@ -401,6 +403,26 @@ NVPTXSerializer::compileToBinary(const std::string &ptxCode) {
/*MemoryLimit=*/0,
/*ErrMsg=*/&message))
return emitLogError("`ptxas`");
+#define DEBUG_TYPE "dump-sass"
+ LLVM_DEBUG({
+ std::optional<std::string> nvdisasm = findTool("nvdisasm");
+ SmallVector<StringRef> nvdisasmArgs(
+ {StringRef("nvdisasm"), StringRef(cubinFile.first)});
+ if (llvm::sys::ExecuteAndWait(nvdisasm.value(), nvdisasmArgs,
+ /*Env=*/std::nullopt,
+ /*Redirects=*/redirects,
+ /*SecondsToWait=*/0,
+ /*MemoryLimit=*/0,
+ /*ErrMsg=*/&message))
+ return emitLogError("`nvdisasm`");
+ llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> logBuffer =
+ llvm::MemoryBuffer::getFile(logFile->first);
+ if (logBuffer && !(*logBuffer)->getBuffer().empty()) {
+ llvm::dbgs() << "Output:\n" << (*logBuffer)->getBuffer() << "\n";
+ llvm::dbgs().flush();
+ }
+ });
+#undef DEBUG_TYPE
// Invoke `fatbin`.
message.clear();
@@ -532,8 +554,8 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
return SerializeGPUModuleBase::moduleToObject(llvmModule);
#if !LLVM_HAS_NVPTX_TARGET
- getOperation()->emitError(
- "The `NVPTX` target was not built. Please enable it when building LLVM.");
+ getOperation()->emitError("The `NVPTX` target was not built. Please enable "
+ "it when building LLVM.");
return std::nullopt;
#endif // LLVM_HAS_NVPTX_TARGET
diff --git a/mlir/test/Integration/Dialect/SparseTensor/GPU/CUDA/dump-ptx.mlir b/mlir/test/Integration/Dialect/SparseTensor/GPU/CUDA/dump-ptx.mlir
index 0cc5d8645bb364..2f7e00e927eca8 100644
--- a/mlir/test/Integration/Dialect/SparseTensor/GPU/CUDA/dump-ptx.mlir
+++ b/mlir/test/Integration/Dialect/SparseTensor/GPU/CUDA/dump-ptx.mlir
@@ -1,5 +1,5 @@
// RUN: mlir-opt %s \
-// RUN: | mlir-opt -gpu-lower-to-nvvm-pipeline -debug-only=serialize-to-isa \
+// RUN: | mlir-opt -gpu-lower-to-nvvm-pipeline -debug-only=serialize-to-isa -debug-only=dump-sass \
// RUN: 2>&1 | FileCheck %s
// CHECK: Generated by LLVM NVPTX Back-End
>From 7f8d7c05e27bcb9c72d27b09b81d2bbba2d297b0 Mon Sep 17 00:00:00 2001
From: Guray Ozen <guray.ozen at gmail.com>
Date: Fri, 27 Sep 2024 12:27:13 +0200
Subject: [PATCH 2/4] fix
---
mlir/lib/Target/LLVM/NVVM/Target.cpp | 1 -
.../SparseTensor/GPU/CUDA/dump-ptx.mlir | 2 +-
mlir/test/Integration/GPU/CUDA/dump-sass.mlir | 18 ++++++++++++++++++
3 files changed, 19 insertions(+), 2 deletions(-)
create mode 100644 mlir/test/Integration/GPU/CUDA/dump-sass.mlir
diff --git a/mlir/lib/Target/LLVM/NVVM/Target.cpp b/mlir/lib/Target/LLVM/NVVM/Target.cpp
index 591074a436c4e0..b21d0b3a332845 100644
--- a/mlir/lib/Target/LLVM/NVVM/Target.cpp
+++ b/mlir/lib/Target/LLVM/NVVM/Target.cpp
@@ -93,7 +93,6 @@ SerializeGPUModuleBase::SerializeGPUModuleBase(
// If `targetOptions` have an empty toolkitPath use `getCUDAToolkitPath`
if (toolkitPath.empty())
toolkitPath = getCUDAToolkitPath();
- llvm::errs() << toolkitPath;
// Append the files in the target attribute.
if (ArrayAttr files = target.getLink())
diff --git a/mlir/test/Integration/Dialect/SparseTensor/GPU/CUDA/dump-ptx.mlir b/mlir/test/Integration/Dialect/SparseTensor/GPU/CUDA/dump-ptx.mlir
index 2f7e00e927eca8..bf0252b8b156b2 100644
--- a/mlir/test/Integration/Dialect/SparseTensor/GPU/CUDA/dump-ptx.mlir
+++ b/mlir/test/Integration/Dialect/SparseTensor/GPU/CUDA/dump-ptx.mlir
@@ -1,5 +1,5 @@
// RUN: mlir-opt %s \
-// RUN: | mlir-opt -gpu-lower-to-nvvm-pipeline -debug-only=serialize-to-isa -debug-only=dump-sass \
+// RUN: | mlir-opt -gpu-lower-to-nvvm-pipeline -debug-only=serialize-to-isa \
// RUN: 2>&1 | FileCheck %s
// CHECK: Generated by LLVM NVPTX Back-End
diff --git a/mlir/test/Integration/GPU/CUDA/dump-sass.mlir b/mlir/test/Integration/GPU/CUDA/dump-sass.mlir
new file mode 100644
index 00000000000000..d32f5efc29d58e
--- /dev/null
+++ b/mlir/test/Integration/GPU/CUDA/dump-sass.mlir
@@ -0,0 +1,18 @@
+// RUN: mlir-opt %s \
+// RUN: | mlir-opt -gpu-lower-to-nvvm-pipeline -debug-only=dump-sass \
+// RUN: 2>&1 | FileCheck %s
+
+// CHECK: MOV
+// CHECK: STG.E
+
+func.func @other_func(%arg0 : f32, %arg1 : memref<?xf32>) {
+ %cst = arith.constant 1 : index
+ %c0 = arith.constant 0 : index
+ %cst2 = memref.dim %arg1, %c0 : memref<?xf32>
+ gpu.launch blocks(%bx, %by, %bz) in (%grid_x = %cst, %grid_y = %cst, %grid_z = %cst)
+ threads(%tx, %ty, %tz) in (%block_x = %cst2, %block_y = %cst, %block_z = %cst) {
+ memref.store %arg0, %arg1[%tx] : memref<?xf32>
+ gpu.terminator
+ }
+ return
+}
>From 7f6f0269dd8dca3cfe10675a1b3977d40c105bd4 Mon Sep 17 00:00:00 2001
From: Guray Ozen <guray.ozen at gmail.com>
Date: Fri, 27 Sep 2024 12:38:14 +0200
Subject: [PATCH 3/4] Update dump-ptx.mlir
---
.../Integration/Dialect/SparseTensor/GPU/CUDA/dump-ptx.mlir | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mlir/test/Integration/Dialect/SparseTensor/GPU/CUDA/dump-ptx.mlir b/mlir/test/Integration/Dialect/SparseTensor/GPU/CUDA/dump-ptx.mlir
index bf0252b8b156b2..0cc5d8645bb364 100644
--- a/mlir/test/Integration/Dialect/SparseTensor/GPU/CUDA/dump-ptx.mlir
+++ b/mlir/test/Integration/Dialect/SparseTensor/GPU/CUDA/dump-ptx.mlir
@@ -1,5 +1,5 @@
// RUN: mlir-opt %s \
-// RUN: | mlir-opt -gpu-lower-to-nvvm-pipeline -debug-only=serialize-to-isa \
+// RUN: | mlir-opt -gpu-lower-to-nvvm-pipeline -debug-only=serialize-to-isa \
// RUN: 2>&1 | FileCheck %s
// CHECK: Generated by LLVM NVPTX Back-End
>From 7bc6c49a4041172c702eef10bd88c0f2fd8fb793 Mon Sep 17 00:00:00 2001
From: Guray Ozen <guray.ozen at gmail.com>
Date: Fri, 27 Sep 2024 12:39:13 +0200
Subject: [PATCH 4/4] Update Target.cpp
---
mlir/lib/Target/LLVM/NVVM/Target.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mlir/lib/Target/LLVM/NVVM/Target.cpp b/mlir/lib/Target/LLVM/NVVM/Target.cpp
index b21d0b3a332845..69602af8563aa0 100644
--- a/mlir/lib/Target/LLVM/NVVM/Target.cpp
+++ b/mlir/lib/Target/LLVM/NVVM/Target.cpp
@@ -553,8 +553,8 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) {
return SerializeGPUModuleBase::moduleToObject(llvmModule);
#if !LLVM_HAS_NVPTX_TARGET
- getOperation()->emitError("The `NVPTX` target was not built. Please enable "
- "it when building LLVM.");
+ getOperation()->emitError(
+ "The `NVPTX` target was not built. Please enable it when building LLVM.");
return std::nullopt;
#endif // LLVM_HAS_NVPTX_TARGET
More information about the Mlir-commits
mailing list