1. Remove the trailing comma for the last element of memref and add closing parenthesis. 2. Change integration tests to use the new format.
81 lines
2.7 KiB
MLIR
81 lines
2.7 KiB
MLIR
// NOTE: this test requires gpu-sm80
|
|
//
|
|
// DEFINE: %{compile} = mlir-opt %s \
|
|
// DEFINE: --sparsifier="enable-gpu-libgen gpu-triple=nvptx64-nvidia-cuda gpu-chip=sm_80 gpu-features=+ptx71 gpu-format=%gpu_compilation_format
|
|
// DEFINE: %{run} = mlir-cpu-runner \
|
|
// DEFINE: --shared-libs=%mlir_cuda_runtime \
|
|
// DEFINE: --shared-libs=%mlir_c_runner_utils \
|
|
// DEFINE: --e main --entry-point-result=void \
|
|
// DEFINE: | FileCheck %s
|
|
//
|
|
// with RT lib:
|
|
//
|
|
// RUN: %{compile} enable-runtime-library=true" | %{run}
|
|
//
|
|
// without RT lib:
|
|
//
|
|
// RUN: %{compile} enable-runtime-library=false" | %{run}
|
|
|
|
#CSR = #sparse_tensor.encoding<{
|
|
map = (d0, d1) -> (d0 : dense, d1 : compressed),
|
|
posWidth = 32,
|
|
crdWidth = 32
|
|
}>
|
|
|
|
module {
|
|
llvm.func @mgpuCreateSparseEnv()
|
|
llvm.func @mgpuDestroySparseEnv()
|
|
|
|
// Computes C = A x B with A,B,C sparse CSR.
|
|
func.func @matmulCSR(%A: tensor<8x8xf32, #CSR>,
|
|
%B: tensor<8x8xf32, #CSR>) -> tensor<8x8xf32, #CSR> {
|
|
%init = tensor.empty() : tensor<8x8xf32, #CSR>
|
|
%C = linalg.matmul
|
|
ins(%A, %B: tensor<8x8xf32, #CSR>,
|
|
tensor<8x8xf32, #CSR>)
|
|
outs(%init: tensor<8x8xf32, #CSR>) -> tensor<8x8xf32, #CSR>
|
|
return %C: tensor<8x8xf32, #CSR>
|
|
}
|
|
|
|
//
|
|
// Main driver.
|
|
//
|
|
func.func @main() {
|
|
llvm.call @mgpuCreateSparseEnv(): () -> ()
|
|
|
|
%c0 = arith.constant 0 : index
|
|
%f0 = arith.constant 0.0 : f32
|
|
|
|
%t = arith.constant dense<[
|
|
[ 1.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 3.0],
|
|
[ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
[ 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
[ 0.0, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0],
|
|
[ 0.0, 0.0, 0.0, 0.0, 6.0, 0.0, 0.0, 0.0],
|
|
[ 0.0, 7.0, 8.0, 0.0, 0.0, 0.0, 0.0, 9.0],
|
|
[ 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 11.0, 12.0],
|
|
[ 0.0, 13.0, 14.0, 0.0, 0.0, 0.0, 15.0, 16.0]
|
|
]> : tensor<8x8xf32>
|
|
%Acsr = sparse_tensor.convert %t : tensor<8x8xf32> to tensor<8x8xf32, #CSR>
|
|
|
|
%Ccsr = call @matmulCSR(%Acsr, %Acsr) : (tensor<8x8xf32, #CSR>,
|
|
tensor<8x8xf32, #CSR>) -> tensor<8x8xf32, #CSR>
|
|
|
|
//
|
|
// Verify computed result.
|
|
//
|
|
// CHECK: ---- Sparse Tensor ----
|
|
// CHECK-NEXT: nse = 20
|
|
// CHECK-NEXT: dim = ( 8, 8 )
|
|
// CHECK-NEXT: lvl = ( 8, 8 )
|
|
// CHECK-NEXT: pos[1] : ( 0, 5, 5, 6, 7, 8, 12, 16, 20 )
|
|
// CHECK-NEXT: crd[1] : ( 0, 1, 2, 6, 7, 2, 3, 4, 1, 2, 6, 7, 1, 2, 6, 7, 1, 2, 6, 7 )
|
|
// CHECK-NEXT: values : ( 1, 39, 52, 45, 51, 16, 25, 36, 117, 158, 135, 144, 156, 318, 301, 324, 208, 430, 405, 436 )
|
|
// CHECK-NEXT: ----
|
|
sparse_tensor.print %Ccsr : tensor<8x8xf32, #CSR>
|
|
|
|
llvm.call @mgpuDestroySparseEnv(): () -> ()
|
|
return
|
|
}
|
|
}
|