Dipende da 2 cose: la base del codice e il proprio posto all'interno. Le domande chiave sono: 1) "Il codice base ha thread, threadpool e le primitive di controllo (serrature, eventi, ecc.)" E 2) "Stai sviluppando librerie riutilizzabili o app ordinarie?"
Se la libreria dispone di strumenti di thread (quasi sempre basati su alcuni aspetti di PThread), UTILIZZARLI. Se sei uno sviluppatore di librerie, dedica il tempo (se possibile) a costruirle.Ne vale la pena: puoi mettere insieme più threading a grana fine e avanzati di quelli che OpenMP ti offre.
Al contrario, se si preme per tempo o semplicemente lo sviluppo di app o qualcosa di diverso da strumenti di terze parti, utilizzare OpenMP. Puoi racchiuderlo in poche macro e ottenere il parallelismo di base di cui hai bisogno.
In generale, OpenMP è sufficiente per il multi-threading di base. Una volta che si arriva al punto che si sta gestendo risorse di sistema direttamente sulla costruzione di un codice altamente asincrono, il vantaggio della facilità d'uso si affievolisce per le prestazioni e problemi di interfaccia.
fonte
2013-08-07 18:46:39
Re: la tua modifica (kernel o livello utente?) - dipende dall'implementazione! Un'API è proprio questo: un'interfaccia ** **. OpenMP non è l'implementazione - [ma queste sono alcune implementazioni] (http://en.wikipedia.org/wiki/OpenMP#Implementations). (C'è anche un po 'di informazioni in [questo articolo di Wikipedia] (http://en.wikipedia.org/wiki/Native_POSIX_Thread_Library)). –
Fondamentalmente, se puoi fare ciò che ti serve in OpenMP, dovresti farlo in OpenMP. –
OpenMP deve essere usato per i loop che devono essere calcolati su tutti i core. PThread può farlo anche se questo è molto lavoro ed è molto difficile da mantenere, di solito usi PThread se hai bisogno di avviare un processo separato che non dovrebbe bloccare il thread principale. Ad esempio: si dispone di un server, i client si connettono e devono mantenere la connessione con il server e parlare con esso, si crea un thread per client e si lavora con il client in quel thread senza bloccare il thread principale. È come se creasse una nuova applicazione e la lasciasse funzionare sul sistema operativo senza disturbare l'applicazione principale. –