import tempfile _SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__)) sys.path.append(_SCRIPT_PATH) from tools import mlir_pytaco_api as pt from tools import testing_utils as utils ###### This PyTACO part is taken from the TACO open-source project. ###### # See http://tensor-compiler.org/docs/scientific_computing/index.html. compressed = pt.compressed dense = pt.dense # Define formats for storing the sparse matrix and dense vectors. csr = pt.format([dense, compressed]) dv = pt.format([dense]) # Load a sparse matrix stored in the matrix market format) and store it # as a CSR matrix. The matrix in this test is a reduced version of the data # downloaded from here: # https://www.cise.ufl.edu/research/sparse/MM/Boeing/pwtk.tar.gz # In order to run the program using the matrix above, you can download the # matrix and replace this path to the actual path to the file. A = pt.read(os.path.join(_SCRIPT_PATH, "data/pwtk.mtx"), csr) # These two lines have been modified from the original program to use static # data to support result comparison. x = pt.from_array(np.full((A.shape[1], ), 1, dtype=np.float64)) z = pt.from_array(np.full((A.shape[0], ), 2, dtype=np.float64))
# RUN: SUPPORTLIB=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext %PYTHON %s | FileCheck %s import filecmp import numpy as np import os import sys import tempfile _SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__)) sys.path.append(_SCRIPT_PATH) from tools import mlir_pytaco_api as pt from tools import testing_utils as utils # Define the CSR format. csr = pt.format([pt.dense, pt.compressed], [0, 1]) # Read matrices A and B from file, infer size of output matrix C. A = pt.read(os.path.join(_SCRIPT_PATH, "data/A.mtx"), csr) B = pt.read(os.path.join(_SCRIPT_PATH, "data/B.mtx"), csr) C = pt.tensor([A.shape[0], B.shape[1]], csr) # Define the kernel. i, j, k = pt.get_index_vars(3) C[i, j] = A[i, k] * B[k, j] # Force evaluation of the kernel by writing out C. with tempfile.TemporaryDirectory() as test_dir: golden_file = os.path.join(_SCRIPT_PATH, "data/gold_C.tns") out_file = os.path.join(test_dir, "C.tns") pt.write(out_file, C)
import tempfile _SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__)) sys.path.append(_SCRIPT_PATH) from tools import mlir_pytaco_api as pt from tools import testing_utils as utils i, j, k = pt.get_index_vars(3) # Set up dense matrices. A = pt.from_array(np.full((8, 8), 2.0, dtype=np.float32)) B = pt.from_array(np.full((8, 8), 3.0, dtype=np.float32)) # Set up sparse matrices. S = pt.tensor([8, 8], pt.format([pt.compressed, pt.compressed])) X = pt.tensor([8, 8], pt.format([pt.compressed, pt.compressed])) Y = pt.tensor([8, 8], pt.compressed) # alternative syntax works too S.insert([0, 7], 42.0) # Define the SDDMM kernel. Since this performs the reduction as # sum(k, S[i, j] * A[i, k] * B[k, j]) # we only compute the intermediate dense matrix product that are actually # needed to compute the result, with proper asymptotic complexity. X[i, j] = S[i, j] * A[i, k] * B[k, j] # Alternative way to define SDDMM kernel. Since this performs the reduction as # sum(k, A[i, k] * B[k, j]) * S[i, j] # the MLIR lowering results in two separate tensor index expressions that are # fused prior to running the sparse compiler in order to guarantee proper
import tempfile _SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__)) sys.path.append(_SCRIPT_PATH) from tools import mlir_pytaco_api as pt from tools import testing_utils as utils ###### This PyTACO part is taken from the TACO open-source project. ###### # See http://tensor-compiler.org/docs/data_analytics/index.html. compressed = pt.compressed dense = pt.dense # Define formats for storing the sparse tensor and dense matrices. csf = pt.format([compressed, compressed, compressed]) rm = pt.format([dense, dense]) # Load a sparse three-dimensional tensor from file (stored in the FROSTT # format) and store it as a compressed sparse fiber tensor. We use a small # tensor for the purpose of testing. To run the program using the data from # the real application, please download the data from: # http://frostt.io/tensors/nell-2/ B = pt.read(os.path.join(_SCRIPT_PATH, "data/nell-2.tns"), csf) # These two lines have been modified from the original program to use static # data to support result comparison. C = pt.from_array(np.full((B.shape[1], 25), 1, dtype=np.float64)) D = pt.from_array(np.full((B.shape[2], 25), 2, dtype=np.float64)) # Declare the result to be a dense matrix.
import os import sys import tempfile _SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__)) sys.path.append(_SCRIPT_PATH) from tools import mlir_pytaco_api as pt from tools import testing_utils as utils i, j, k = pt.get_index_vars(3) # Set up scalar and sparse tensors. alpha = pt.tensor(42.0) S = pt.tensor([8, 8, 8], pt.format([pt.compressed, pt.compressed, pt.compressed])) X = pt.tensor([8, 8, 8], pt.format([pt.compressed, pt.compressed, pt.compressed])) S.insert([0, 0, 0], 2.0) S.insert([1, 1, 1], 3.0) S.insert([4, 4, 4], 4.0) S.insert([7, 7, 7], 5.0) # TODO: make this work: # X[i, j, k] = alpha[0] * S[i, j, k] X[i, j, k] = S[i, j, k] expected = """; extended FROSTT format 3 4 8 8 8 1 1 1 2
import tempfile _SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__)) sys.path.append(_SCRIPT_PATH) from tools import mlir_pytaco_api as pt from tools import testing_utils as utils i, j, k, l, m = pt.get_index_vars(5) # Set up scalar. alpha = pt.tensor(42.0) # Set up some sparse tensors with different dim annotations and ordering. S = pt.tensor([8, 8, 8], pt.format([pt.compressed, pt.dense, pt.compressed], [1, 0, 2])) X = pt.tensor([8, 8, 8], pt.format([pt.compressed, pt.compressed, pt.compressed], [1, 0, 2])) S.insert([0, 0, 0], 2.0) S.insert([1, 1, 1], 3.0) S.insert([4, 4, 4], 4.0) S.insert([7, 7, 7], 5.0) X[i, j, k] = alpha[0] * S[i, j, k] # Set up tensors with a dense last dimension. This results in a full # enveloping storage of all last "rows" with one or more nonzeros. T = pt.tensor([1, 2, 3, 4, 5], pt.format([ pt.compressed, pt.compressed, pt.compressed, pt.compressed,