cavis/jumpy/benchmarks/benchmark.py

78 lines
2.8 KiB
Python
Raw Normal View History

2019-06-06 14:21:15 +02:00
################################################################################
# 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()