Esistono diversi modi per implementare il multithreading. std::thread
è stato infine portato dallo standard C++ 11, ma invece è possibile utilizzare efficacemente lo boost::thread
. Ogni tecnologia ha una sintassi specifica e roba, ma - approssimativamente - utilizzata per la programmazione parallela della CPU. Ma hanno un effetto diverso. So che, ad esempio, MPI e OpenMP sono utilizzati per diversi modelli di memoria.Come correlare i thread OpenMP, MPI, POSIX, std :: thread, boost :: thread?
So anche che la scelta di una tecnologia non è in realtà esclusiva, quindi è possibile utilizzarne un'altra (ancora, MPI e OpenMP). Come mai vengono usati per effetti diversi ma funzionano ancora con la stessa fonte (CPU)?
Quale sarebbe la differenza (dal punto di vista del sistema operativo e dell'hardware) se compilo un programma C++ con parallelismo basato su ciascuna di queste tecnologie? Ad esempio, OpenMP o std::thread
utilizza i thread POSIX? In tal caso, in che modo i thread di C++ 11 funzionano su Windows? O ognuna di queste tecnologie lavora direttamente con la CPU tramite linguaggio assembly o qualcosa del genere?
Miscelare OpenMP con un altro paradigma di threading, ad es. 'std :: thread', non è un comportamento specificato. Non è esplicitamente vietato nelle specifiche. ma ancora se funziona o meno è molto specifico per l'implementazione. La combinazione di MPI con OpenMP o altri paradigmi di threading va bene, a condizione che MPI sia inizializzato correttamente con il supporto per i thread. –