Depende de 2 cosas: su código base y su lugar dentro de él. Las preguntas clave son: 1) "¿La base del código tiene subprocesos, grupos de subprocesos y las primitivas de control (bloqueos, eventos, etc.)" y 2) "¿Está desarrollando bibliotecas reutilizables o aplicaciones normales?"
Si su biblioteca tiene herramientas de subprocesos (casi siempre se basan en cierto sabor de PThread), USE ESOS. Si es un desarrollador de biblioteca, dedique el tiempo (si es posible) para construirlos.Vale la pena: puedes armar mucho más fino y avanzado que el que OpenMP te dará.
Por el contrario, si está presionado por el tiempo o simplemente el desarrollo de aplicaciones o algo fuera de las herramientas de terceros, utilice OpenMP. Puede envolverlo en algunas macros y obtener el paralelismo básico que necesita.
En general, OpenMP es lo suficientemente bueno para multi-threading básico. Una vez que empiezas a llegar al punto de que estás administrando los recursos del sistema directamente en la creación de un código altamente asincrónico, su ventaja de facilidad de uso se ve obstaculizada por problemas de rendimiento y de interfaz.
Re: su edición (núcleo o nivel de usuario?) - ¡Depende de la implementación! Una API es solo eso, una ** interfaz **. OpenMP no es la implementación, [pero estas son algunas implementaciones] (http://en.wikipedia.org/wiki/OpenMP#Implementations). (Hay un poco de información en [este artículo de Wikipedia, también] (http://en.wikipedia.org/wiki/Native_POSIX_Thread_Library)). –
Básicamente, si puede hacer lo que necesita en OpenMP, debe hacerlo en OpenMP. –
OpenMP se debe usar para bucles que deben computarse en todos los núcleos. PThread también puede hacer eso, pero eso es mucho trabajo y es muy difícil de mantener, normalmente usas PThread si necesitas comenzar un proceso separado que no debería bloquear el hilo principal. Por ejemplo: tiene un servidor, los clientes se conectan y tiene que mantener la conexión con el servidor y hablar con él, crea un hilo por cliente y trabaja con el cliente en ese hilo sin bloquear el hilo principal. Es como crear una nueva aplicación y dejarla funcionar en el sistema operativo sin molestar a la aplicación principal. –