Hello,
Regarding OpenCL 1.1 spec, the glossary defines what thread-safe means for OpenCL:
Thread-safe: An OpenCL API call is considered to be thread-safe if the internal state as managed by OpenCL remains consistent when called simultaneously by multiple host threads. OpenCL API calls that are thread-safe allow an application to call these functions in multiple host threads without having to implement mutual exclusion across these host threads i.e. they are also re-entrant-safe.
And from the appendix:
All OpenCL API calls are thread-safe except clSetKernelArg.
From this I conclude that if an implementation conform to the OpenCL 1.1 spec, it should be possible to enqueue multiple kernels from different threads, onto the same command-queue, with a single device to execute those kernels.
Is this correct? I’m asking because with OpenCL 1.0 this does not seem to be the case, and with the NVIDIA implementation, attempting this causes a crash according to what I read in the message boards.
Can someone confirm?