- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I tried implementing a simple lock/mutex using OpenCL atomic functions. The following kernel demonstrates the general idea:
__kernel void lock() {
volatile __local int mutex;
// Every thread waits until it gets the lock.
int done = 0;
while (!done) {
// Try to get the lock
int lock = !atomic_cmpxchg(&(mutex), 0, 1);
if (lock) {
done = 1;
// Release the lock
atomic_xchg(&(mutex), 0);
}
}
return;
}
On my Nvidia GPU, the kernel works fine. However, on the latest Intel OCL SDK (version 2.0.31360.31426 on x64 Linux, running on Xeon CPU) the kernel seems to deadlock. Am I missing something here?
Max
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You made an assumption of parallel execution of work items. However, it's not a always true.
The appropriate way to synchronize inside a work group is barrier() built-in.
Thanks,
Evgeny

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page