78 lines
2.8 KiB
Python
78 lines
2.8 KiB
Python
################################################################################
|
|
# Copyright (c) 2015-2018 Skymind, Inc.
|
|
#
|
|
# This program and the accompanying materials are made available under the
|
|
# terms of the Apache License, Version 2.0 which is available at
|
|
# https://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.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
################################################################################
|
|
|
|
|
|
import jumpy as jp
|
|
import numpy as np
|
|
from random import randint
|
|
import timeit
|
|
import gc
|
|
|
|
gc.disable()
|
|
jp.disable_gc()
|
|
|
|
|
|
class Benchmark(object):
|
|
def __init__(self, n=1000):
|
|
print 'Running tests with [', n, 'x', n, '] dimensionality'
|
|
self.n = n
|
|
self.m = 200
|
|
self.np_arr = []
|
|
self.nd4j_arr = []
|
|
for counter in range(0, self.m + 1):
|
|
self.np_arr.append(np.linspace(1, n * n, n * n).reshape((n, n)))
|
|
|
|
for counter in range(0, self.m + 1):
|
|
self.nd4j_arr.append(jp.array(self.np_arr[counter]))
|
|
|
|
def run_nd4j_scalar(self):
|
|
self.nd4j_arr[randint(0, self.m)] += 1.0172
|
|
|
|
def run_numpy_scalar(self):
|
|
self.np_arr[randint(0, self.m)] += 1.0172
|
|
|
|
def run_nd4j_add(self):
|
|
self.nd4j_arr[randint(0, self.m)] += self.nd4j_arr[randint(0, self.m)]
|
|
|
|
def run_numpy_add(self):
|
|
self.np_arr[randint(0, self.m)] += self.np_arr[randint(0, self.m)]
|
|
|
|
def run_numpy_sub(self):
|
|
self.np_arr[randint(0, self.m)] -= self.np_arr[randint(0, self.m)]
|
|
|
|
def run_nd4j_sub(self):
|
|
self.nd4j_arr[randint(0, self.m)] -= self.nd4j_arr[randint(0, self.m)]
|
|
|
|
def run_nd4j_mmul(self):
|
|
jp.dot(self.nd4j_arr[randint(0, self.m)], self.nd4j_arr[randint(0, self.m)])
|
|
|
|
def run_numpy_mmul(self):
|
|
np.dot(self.np_arr[randint(0, self.m)], self.np_arr[randint(0, self.m)])
|
|
|
|
def run_benchmark(self, n_trials=1000):
|
|
print 'nd4j scalar ', timeit.timeit(self.run_nd4j_scalar, number=n_trials)
|
|
print 'numpy scalar ', timeit.timeit(self.run_numpy_scalar, number=n_trials)
|
|
print 'nd4j add ', timeit.timeit(self.run_nd4j_add, number=n_trials)
|
|
print 'numpy add ', timeit.timeit(self.run_numpy_add, number=n_trials)
|
|
print 'nd4j sub ', timeit.timeit(self.run_nd4j_sub, number=n_trials)
|
|
print 'numpy sub ', timeit.timeit(self.run_numpy_sub, number=n_trials)
|
|
print 'nd4j mmul ', timeit.timeit(self.run_nd4j_mmul, number=n_trials)
|
|
print 'numpy mmul ', timeit.timeit(self.run_numpy_mmul, number=n_trials)
|
|
|
|
|
|
benchmark = Benchmark()
|
|
benchmark.run_benchmark()
|