Esempio n. 1
0
    def bench_dot(lhs_shape,
                  rhs_shape,
                  lhs_stype,
                  rhs_stype,
                  lhs_den,
                  rhs_den,
                  trans_lhs,
                  ctx,
                  num_repeat=10,
                  fw="mxnet",
                  distribution="uniform"):
        set_default_device(ctx)
        assert fw == "mxnet" or fw == "scipy"
        # Set funcs
        dot_func_sparse = mx.nd.sparse.dot if fw == "mxnet" else sp.spmatrix.dot
        dot_func_dense = mx.nd.dot if fw == "mxnet" else np.dot
        # Create matrix instances
        lhs_nd = rand_ndarray(lhs_shape,
                              lhs_stype,
                              density=lhs_den,
                              distribution=distribution)
        # only uniform distribution supported for rhs
        if rhs_stype == 'csr':
            rhs_nd = rand_ndarray(rhs_shape,
                                  rhs_stype,
                                  density=rhs_den,
                                  distribution=distribution)
        else:
            rhs_nd = rand_ndarray(rhs_shape,
                                  rhs_stype,
                                  density=rhs_den,
                                  distribution="uniform")
        lhs_dns = None
        rhs_dns = None
        dense_cost = None
        sparse_cost = None

        if fw == "mxnet":
            lhs_dns = lhs_nd if lhs_stype == 'default' else lhs_nd.tostype(
                'default')
            rhs_dns = rhs_nd if rhs_stype == 'default' else rhs_nd.tostype(
                'default')
            # One warm up run, verify correctness
            out = dot_func_sparse(lhs_nd, rhs_dns, trans_lhs)
            out_expected = dot_func_dense(lhs_dns, rhs_dns, trans_lhs)
            assert_almost_equal(out.asnumpy(),
                                out_expected.asnumpy(),
                                rtol=1e-1,
                                atol=1e-1)
            sparse_cost = measure_cost(num_repeat, False, False,
                                       dot_func_sparse, lhs_nd, rhs_nd,
                                       trans_lhs)
            dense_cost = measure_cost(num_repeat, False, False, dot_func_dense,
                                      lhs_dns, rhs_dns, trans_lhs)
        else:
            lhs_dns = lhs_nd.asnumpy()
            rhs_dns = rhs_nd.asnumpy()
            lhs_nd = sp.csr_matrix(lhs_nd.asnumpy())
            rhs_nd = rhs_nd.asnumpy()
            # One warm up run, verify correctness
            lhs_nd_copy = sp.spmatrix.transpose(
                lhs_nd) if trans_lhs else lhs_nd
            out = dot_func_sparse(lhs_nd_copy, rhs_dns)
            sparse_cost = measure_cost(num_repeat, trans_lhs, False,
                                       dot_func_sparse, lhs_nd, rhs_nd)
            dense_cost = measure_cost(num_repeat, trans_lhs, True,
                                      dot_func_dense, lhs_dns, rhs_dns)

        speedup = dense_cost / sparse_cost
        # Print results
        m = lhs_shape[0]
        k = lhs_shape[1]
        n = rhs_shape[1]
        result_pattern = '{:15.1f} {:15.1f} {:>10} {:8d} {:8d} {:8d} {:13.2f} {:13.2f} {:8.2f}'
        results = result_pattern.format(lhs_den * 100, rhs_den * 100, str(ctx),
                                        m, k, n, sparse_cost * 1000,
                                        dense_cost * 1000, speedup)
        print(results)
Esempio n. 2
0
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

import mxnet as mx
from mxnet.test_utils import set_default_device
import os
import sys
curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__)))
sys.path.insert(0, os.path.join(curr_path, '../unittest'))
from test_tvm_op import *

set_default_device(mx.gpu(0))
 def f():
     set_default_device(mx.gpu(11))
     device_list.append(device.current_device())