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?










share|improve this question



















  • 1




    you would need to reset the global_counter to zero as part of the function that you are running timeiton. 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














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?










share|improve this question



















  • 1




    you would need to reset the global_counter to zero as part of the function that you are running timeiton. 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












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?










share|improve this question















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited yesterday









talonmies

58.7k17125192




58.7k17125192










asked yesterday









biocyberman

2,52922135




2,52922135







  • 1




    you would need to reset the global_counter to zero as part of the function that you are running timeiton. 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












  • 1




    you would need to reset the global_counter to zero as part of the function that you are running timeiton. 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







1




1




you would need to reset the global_counter to zero as part of the function that you are running timeiton. 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 timeiton. 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

















active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













 

draft saved


draft discarded


















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



































active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes















 

draft saved


draft discarded















































 


draft saved


draft discarded














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














































































Popular posts from this blog

Use pre created SQLite database for Android project in kotlin

Darth Vader #20

Ondo