How to get correct global variable with jupyter's timeit?
up vote
0
down vote
favorite
One first cell I have this:
from numba import cuda
@cuda.jit
def thread_counter_safe(global_counter):
cuda.atomic.add(global_counter, 0, 1) # Safely add 1 to offset 0 in global_counter array
On the next cell I have this:
global_counter = cuda.to_device(np.array([0], dtype=np.int32))
thread_counter_safe[64, 64](global_counter)
print('Should be %d:' % (64*64), global_counter.copy_to_host())
global_counter = cuda.to_device(np.array([0], dtype=np.int32))
%timeit thread_counter_safe[64, 64](global_counter)
print('Should be %d:' % (64*64), global_counter.copy_to_host())
Output of this second cell is something like this:
Should be 4096: [4096]
10000 loops, best of 3: 118 µs per loop
Should be 4096: [168390656]
Jupyter Notebook's timeit carries the global_counter
accross its iteration test. How do it get it to give back global_counter
correctly?
jupyter-notebook numba
add a comment |
up vote
0
down vote
favorite
One first cell I have this:
from numba import cuda
@cuda.jit
def thread_counter_safe(global_counter):
cuda.atomic.add(global_counter, 0, 1) # Safely add 1 to offset 0 in global_counter array
On the next cell I have this:
global_counter = cuda.to_device(np.array([0], dtype=np.int32))
thread_counter_safe[64, 64](global_counter)
print('Should be %d:' % (64*64), global_counter.copy_to_host())
global_counter = cuda.to_device(np.array([0], dtype=np.int32))
%timeit thread_counter_safe[64, 64](global_counter)
print('Should be %d:' % (64*64), global_counter.copy_to_host())
Output of this second cell is something like this:
Should be 4096: [4096]
10000 loops, best of 3: 118 µs per loop
Should be 4096: [168390656]
Jupyter Notebook's timeit carries the global_counter
accross its iteration test. How do it get it to give back global_counter
correctly?
jupyter-notebook numba
1
you would need to reset theglobal_counter
to zero as part of the function that you are runningtimeit
on. You can't safely/easily do that from thethread_counter_safe
cuda kernel, but you coulddef
a new function that resets theglobal_counter
to zero and then callsthread_counter_safe
, and runtimeit
on that.
– Robert Crovella
yesterday
Got it. A wrapper function would do, but still prefer some flag or parameter when calling timeit.
– biocyberman
yesterday
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
One first cell I have this:
from numba import cuda
@cuda.jit
def thread_counter_safe(global_counter):
cuda.atomic.add(global_counter, 0, 1) # Safely add 1 to offset 0 in global_counter array
On the next cell I have this:
global_counter = cuda.to_device(np.array([0], dtype=np.int32))
thread_counter_safe[64, 64](global_counter)
print('Should be %d:' % (64*64), global_counter.copy_to_host())
global_counter = cuda.to_device(np.array([0], dtype=np.int32))
%timeit thread_counter_safe[64, 64](global_counter)
print('Should be %d:' % (64*64), global_counter.copy_to_host())
Output of this second cell is something like this:
Should be 4096: [4096]
10000 loops, best of 3: 118 µs per loop
Should be 4096: [168390656]
Jupyter Notebook's timeit carries the global_counter
accross its iteration test. How do it get it to give back global_counter
correctly?
jupyter-notebook numba
One first cell I have this:
from numba import cuda
@cuda.jit
def thread_counter_safe(global_counter):
cuda.atomic.add(global_counter, 0, 1) # Safely add 1 to offset 0 in global_counter array
On the next cell I have this:
global_counter = cuda.to_device(np.array([0], dtype=np.int32))
thread_counter_safe[64, 64](global_counter)
print('Should be %d:' % (64*64), global_counter.copy_to_host())
global_counter = cuda.to_device(np.array([0], dtype=np.int32))
%timeit thread_counter_safe[64, 64](global_counter)
print('Should be %d:' % (64*64), global_counter.copy_to_host())
Output of this second cell is something like this:
Should be 4096: [4096]
10000 loops, best of 3: 118 µs per loop
Should be 4096: [168390656]
Jupyter Notebook's timeit carries the global_counter
accross its iteration test. How do it get it to give back global_counter
correctly?
jupyter-notebook numba
jupyter-notebook numba
edited yesterday
talonmies
58.7k17125192
58.7k17125192
asked yesterday
biocyberman
2,52922135
2,52922135
1
you would need to reset theglobal_counter
to zero as part of the function that you are runningtimeit
on. You can't safely/easily do that from thethread_counter_safe
cuda kernel, but you coulddef
a new function that resets theglobal_counter
to zero and then callsthread_counter_safe
, and runtimeit
on that.
– Robert Crovella
yesterday
Got it. A wrapper function would do, but still prefer some flag or parameter when calling timeit.
– biocyberman
yesterday
add a comment |
1
you would need to reset theglobal_counter
to zero as part of the function that you are runningtimeit
on. You can't safely/easily do that from thethread_counter_safe
cuda kernel, but you coulddef
a new function that resets theglobal_counter
to zero and then callsthread_counter_safe
, and runtimeit
on that.
– Robert Crovella
yesterday
Got it. A wrapper function would do, but still prefer some flag or parameter when calling timeit.
– biocyberman
yesterday
1
1
you would need to reset the
global_counter
to zero as part of the function that you are running timeit
on. You can't safely/easily do that from the thread_counter_safe
cuda kernel, but you could def
a new function that resets the global_counter
to zero and then calls thread_counter_safe
, and run timeit
on that.– Robert Crovella
yesterday
you would need to reset the
global_counter
to zero as part of the function that you are running timeit
on. You can't safely/easily do that from the thread_counter_safe
cuda kernel, but you could def
a new function that resets the global_counter
to zero and then calls thread_counter_safe
, and run timeit
on that.– Robert Crovella
yesterday
Got it. A wrapper function would do, but still prefer some flag or parameter when calling timeit.
– biocyberman
yesterday
Got it. A wrapper function would do, but still prefer some flag or parameter when calling timeit.
– biocyberman
yesterday
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53224406%2fhow-to-get-correct-global-variable-with-jupyters-timeit%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
1
you would need to reset the
global_counter
to zero as part of the function that you are runningtimeit
on. You can't safely/easily do that from thethread_counter_safe
cuda kernel, but you coulddef
a new function that resets theglobal_counter
to zero and then callsthread_counter_safe
, and runtimeit
on that.– Robert Crovella
yesterday
Got it. A wrapper function would do, but still prefer some flag or parameter when calling timeit.
– biocyberman
yesterday