  OpenCL, along with CUDA, is one of the main tools used to program GPGPUs.
However, it allows running the same code on multi-core CPUs too, making it a
rival for the long-established OpenMP. In this paper we compare OpenCL and
OpenMP when developing and running compute-heavy code on a CPU. Both ease of
programming and performance aspects are considered. Since, unlike a GPU, no
memory copy operation is involved, our comparisons measure the code generation
quality, as well as thread management efficiency of OpenCL and OpenMP. We
evaluate the performance of these development tools under two conditions: a
large number of short-running compute-heavy parallel code executions, when more
thread management is performed, and a small number of long-running parallel
code executions, when less thread management is required. The results show that
OpenCL and OpenMP each win in one of the two conditions. We argue that while
using OpenMP requires less setup, OpenCL can be a viable substitute for OpenMP
from a performance point of view, especially when a high number of thread
invocations is required. We also provide a number of potential pitfalls to
watch for when moving from OpenMP to OpenCL.
