opencl - Or-equals on constant as reduction operation (ex. value |= 1 ) thread-safe? -
let's have variable x.
x = 0
i spawn number of threads, , each of them may or may not run following expression without use of atomics.
x |= 1
after threads have joined main thread, main thread branches on value.
if(x) { ... } else { ... }
is possible there race condition in situation? thoughts no, because doesn't seem matter whether or not thread interrupted thread between reading , writing 'x' (in both cases, either 'x == 1', or 'x == 1'). said, want make sure i'm not missing stupid obvious or ridiculously subtle.
also, if happen provide answer contrary, please provide instruction-by-instruction example!
context: i'm trying to, in opencl, have threads indicate presence or absence of feature among any of work-items. if of threads indicate presence of feature, host ought able branch on result. i'm thinking of using above method. if guys have better suggestion, works too!
detail: i'm trying add early-exit opencl radix-sort implementation, skip radix passes if data banded (i.e. 'x' above x[radix] , i'd have work groups, right after partial reduction of data, indicate presence or absence of elements in radix bins via 'x').
it may work within work-group. need insert barrier before testing x. i'm not sure faster using atomic increments.
it not work across several work-groups. imagine have 1000 work-groups run on 20 cores. typically, small number of work-groups can resident on single core, example 4, meaning 80 work-groups can in flight inside gpu @ given time. once work-group done executing, retired, , 1 started. halting kernel in middle of execution wait 1000 work-groups reach same point impossible.
Comments
Post a Comment