Skip to content

Commit

Permalink
Merge pull request #7 from smpurkis/main
Browse files Browse the repository at this point in the history
[numba] numba implementation
  • Loading branch information
00sapo committed May 22, 2021
2 parents e08827f + 31abeda commit b246d99
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 20 deletions.
33 changes: 25 additions & 8 deletions list_numba.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
from typing import List

from numba import njit, prange, typed, float64
from numba import njit, prange, typed


@njit
def iterate_list(a_list):

count: float = 0
for i in range(len(a_list)):
for j in range(len(a_list[i])):
Expand All @@ -14,9 +11,18 @@ def iterate_list(a_list):
return count


@njit(parallel=True)
@njit(parallel=False)
def iterate_list_par(a_list):
count: float = 0
for i in range(len(a_list)):
for j in range(len(a_list[i])):
count += a_list[i][j]
print(count)
return count


@njit(parallel=True)
def iterate_list_par_parallel(a_list):
count: float = 0
for i in prange(len(a_list)):
for j in range(len(a_list[i])):
Expand All @@ -27,9 +33,20 @@ def iterate_list_par(a_list):

@njit
def make_list(a_list):
for i in range(10**4):
new_list = typed.List(float64)
for j in range(10**4):
for i in range(10 ** 4):
new_list = typed.List()
for j in range(10 ** 4):
new_list.append(0.01)
a_list.append(new_list)
return a_list


def make_empty_numba_list():
_nb_a_list = typed.List()

# add variable, to tell numba the type, then remove it for the benchmark
dummy = typed.List([0.01])
_nb_a_list.append(dummy)
_nb_a_list.pop(0)

return _nb_a_list
48 changes: 36 additions & 12 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import os
import time
from typing import List
# from numba import typed, types, float64
from numba import typed, types, float64

from julia.api import LibJulia # noqa: autoimport
api = LibJulia.load() # noqa: autoimport
Expand All @@ -17,24 +17,36 @@
import simple_list
import list_cy
import list_rust
# import list_numba
import list_numba

list_julia.eval('include("list_julia.jl")')
list_julia.eval('include("list_julia_threads.jl")')

_a_list: List[List[float]]

# _nb_a_list = typed.List(typed.List(float64))
# ttt = time.time()
# _nb_a_list = list_numba.make_list(_nb_a_list)
# list_numba.iterate_list_par(_nb_a_list)
# print("Numba needed time: " + str(time.time() - ttt))
_nb_a_list = list_numba.make_empty_numba_list()
ttt = time.time()
_nb_a_list = list_numba.make_list(_nb_a_list)
list_numba.iterate_list_par(_nb_a_list)
print("Numba needed time: " + str(time.time() - ttt))

_nb_a_list = list_numba.make_empty_numba_list()
ttt = time.time()
_nb_a_list = list_numba.make_list(_nb_a_list)
list_numba.iterate_list_par(_nb_a_list)
print("Numba needed time (after compile): " + str(time.time() - ttt))

_nb_a_list = list_numba.make_empty_numba_list()
ttt = time.time()
_nb_a_list = list_numba.make_list(_nb_a_list)
list_numba.iterate_list_par_parallel(_nb_a_list)
print("Numba multi-threading needed time: " + str(time.time() - ttt))

# _nb_a_list = NBList() # type: ignore
# ttt = time.time()
# _nb_a_list = list_numba.make_list(_nb_a_list)
# list_numba.iterate_list(_nb_a_list)
# print("Numba multi-threading needed time: " + str(time.time() - ttt))
_nb_a_list = list_numba.make_empty_numba_list()
ttt = time.time()
_nb_a_list = list_numba.make_list(_nb_a_list)
list_numba.iterate_list_par_parallel(_nb_a_list)
print("Numba multi-threading needed time (after compile): " + str(time.time() - ttt))

a_list = [] # type: ignore
ttt = time.time()
Expand All @@ -48,12 +60,24 @@
list_julia.iterate_list(a_list)
print("Julia needed time: " + str(time.time() - ttt))

a_list = [] # type: ignore
ttt = time.time()
a_list = list_julia.make_list(a_list)
list_julia.iterate_list(a_list)
print("Julia needed time (after warm up): " + str(time.time() - ttt))

a_list = [] # type: ignore
ttt = time.time()
a_list = list_julia.make_list(a_list)
list_julia.Threaded.iterate_list(a_list)
print("Julia multi-threading needed time: " + str(time.time() - ttt))

a_list = [] # type: ignore
ttt = time.time()
a_list = list_julia.make_list(a_list)
list_julia.Threaded.iterate_list(a_list)
print("Julia multi-threading needed time (after warm up): " + str(time.time() - ttt))

a_list = [] # type: ignore
ttt = time.time()
a_list = list_rust.make_list(a_list)
Expand Down

0 comments on commit b246d99

Please sign in to comment.