I’m trying to write an OpenCL implementation of memchr to help me learn how OpenCL works. What I’m planning to do is to assign each work item a chunk of memory to search. Then, inside each work item, it loops through the chunk searching for the character.
Especially if the buffer is large, I don’t want the other threads to keep searching after an occurrence has already been found (assume there is only one occurrence of the character in any given buffer).
What I’m stuck on is how does a work item indicate, both to the host and other threads, when it has found the character?
Thanks,
One way you could do this is to use a global flag variable. You atomically set it to 1 when you find the value and other threads will check on that value when they are doing work.
For example:
This might add more overhead than by just running the whole kernel (unless you are doing a lot of work on every iteration). In addition, this method won’t work if each thread is just checking a single value in the array. Each thread must have multiple iterations of work.
Finally, I’ve seen instances where writing to an atomic variable doesn’t immediately commit, so you need to check to see if this code will deadlock on your system because the write isn’t committing.