[Mlir-commits] [mlir] 6f3c7df - [mlir][sparse] add sparse sign integration test
Aart Bik
llvmlistbot at llvm.org
Thu May 12 15:56:43 PDT 2022
Author: Aart Bik
Date: 2022-05-12T15:56:36-07:00
New Revision: 6f3c7dfb7746b04cc98c2f29395dec5027e8d7f3
URL: https://github.com/llvm/llvm-project/commit/6f3c7dfb7746b04cc98c2f29395dec5027e8d7f3
DIFF: https://github.com/llvm/llvm-project/commit/6f3c7dfb7746b04cc98c2f29395dec5027e8d7f3.diff
LOG: [mlir][sparse] add sparse sign integration test
Implements a floating-point sign operator (using the new semi-ring ops)
that accomodates +/-Inf and +/-NaN in consistent way.
Reviewed By: bixia
Differential Revision: https://reviews.llvm.org/D125494
Added:
mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_sign.mlir
Modified:
Removed:
################################################################################
diff --git a/mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_sign.mlir b/mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_sign.mlir
new file mode 100644
index 0000000000000..acce488155670
--- /dev/null
+++ b/mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_sign.mlir
@@ -0,0 +1,100 @@
+// RUN: mlir-opt %s --sparse-compiler | \
+// RUN: mlir-cpu-runner \
+// RUN: -e entry -entry-point-result=void \
+// RUN: -shared-libs=%mlir_integration_test_dir/libmlir_c_runner_utils%shlibext | \
+// RUN: FileCheck %s
+
+#SparseVector = #sparse_tensor.encoding<{ dimLevelType = [ "compressed" ] }>
+
+#trait_op = {
+ indexing_maps = [
+ affine_map<(i) -> (i)>, // a
+ affine_map<(i) -> (i)> // x (out)
+ ],
+ iterator_types = ["parallel"],
+ doc = "x(i) = OP a(i)"
+}
+
+module {
+ // Performs sign operation (using semi-ring unary op)
+ // with semantics that
+ // > 0 : +1.0
+ // < 0 : -1.0
+ // +Inf: +1.0
+ // -Inf: -1.0
+ // +NaN: +NaN
+ // -NaN: -NaN
+ // +0.0: +0.0
+ // -0.0: -0.0
+ func.func @sparse_sign(%arg0: tensor<?xf64, #SparseVector>)
+ -> tensor<?xf64, #SparseVector> {
+ %c0 = arith.constant 0 : index
+ %d = tensor.dim %arg0, %c0 : tensor<?xf64, #SparseVector>
+ %xin = sparse_tensor.init [%d] : tensor<?xf64, #SparseVector>
+ %0 = linalg.generic #trait_op
+ ins(%arg0: tensor<?xf64, #SparseVector>)
+ outs(%xin: tensor<?xf64, #SparseVector>) {
+ ^bb0(%a: f64, %x: f64) :
+ %result = sparse_tensor.unary %a : f64 to f64
+ present={
+ ^bb1(%s: f64):
+ %z = arith.constant 0.0 : f64
+ %1 = arith.cmpf one, %s, %z : f64
+ %2 = arith.uitofp %1 : i1 to f64
+ %3 = math.copysign %2, %s : f64
+ %4 = arith.cmpf uno, %s, %s : f64
+ %5 = arith.select %4, %s, %3 : f64
+ sparse_tensor.yield %5 : f64
+ }
+ absent={}
+ linalg.yield %result : f64
+ } -> tensor<?xf64, #SparseVector>
+ return %0 : tensor<?xf64, #SparseVector>
+ }
+
+ // Driver method to call and verify sign kernel.
+ func.func @entry() {
+ %c0 = arith.constant 0 : index
+ %du = arith.constant 99.99 : f64
+
+ %pnan = arith.constant 0x7FF0000001000000 : f64
+ %nnan = arith.constant 0xFFF0000001000000 : f64
+ %pinf = arith.constant 0x7FF0000000000000 : f64
+ %ninf = arith.constant 0xFFF0000000000000 : f64
+
+ // Setup sparse vector.
+ %v1 = arith.constant sparse<
+ [ [0], [3], [5], [11], [13], [17], [18], [20], [21], [28], [29], [31] ],
+ [ -1.5, 1.5, -10.2, 11.3, 1.0, -1.0,
+ 0x7FF0000001000000, // +NaN
+ 0xFFF0000001000000, // -NaN
+ 0x7FF0000000000000, // +Inf
+ 0xFFF0000000000000, // -Inf
+ -0.0, // -Zero
+ 0.0 // +Zero
+ ]
+ > : tensor<32xf64>
+ %sv1 = sparse_tensor.convert %v1
+ : tensor<32xf64> to tensor<?xf64, #SparseVector>
+
+ // Call sign kernel.
+ %0 = call @sparse_sign(%sv1) : (tensor<?xf64, #SparseVector>)
+ -> tensor<?xf64, #SparseVector>
+
+ //
+ // Verify the results.
+ //
+ // CHECK: ( -1, 1, -1, 1, 1, -1, nan, -nan, 1, -1, -0, 0, 99.99 )
+ //
+ %1 = sparse_tensor.values %0 : tensor<?xf64, #SparseVector> to memref<?xf64>
+ %2 = vector.transfer_read %1[%c0], %du: memref<?xf64>, vector<13xf64>
+ vector.print %2 : vector<13xf64>
+
+ // Release the resources.
+ sparse_tensor.release %sv1 : tensor<?xf64, #SparseVector>
+ sparse_tensor.release %0 : tensor<?xf64, #SparseVector>
+ return
+ }
+}
+
+
More information about the Mlir-commits
mailing list