W przypadku programowania wielowątkowego, z uwzględnieniem kombinacji z aplikacją HPC (MPI), która z nich jest lepsza, można powiedzieć, że pod względem funkcjonalności, Intel TBB (blokowanie wątków) jest porównywalne z pthread czy nie? Mam tylko doświadczenie w open mp, ale słyszałem, że zarówno TBB, jak i Pthread oferują dokładniejszą kontrolę wątków w porównaniu do open mp, ale czy TBB lub TBB + OpenMP oferują podobną funkcjonalność w porównaniu z pthread?pthread kontra intel TBB i ich związek z OpenMP?
Odpowiedz
pthread to cienki wrapper nad infrastrukturą OS. Pozwala ci utworzyć wątek z daną główną funkcją wątku, oraz niektóre prymitywy synchronizacji (muteksy semafory itp.). W systemie Linux pthread jest implementowany na szczycie wywołania systemowego clone(2)
. Odpowiednik pod Windows nazywa się CreateThread
. Wszystkie pozostałe wątki są budowane na tej bazie.
Intel TBB jest wyższym poziomem, daje parallel_for
i parallel_reduce
i podobne konstrukcje wyższego poziomu podobne do OpenMP, ale zaimplementowane jako biblioteka, a nie rozszerzenie językowe.
OpenMPI jest jeszcze wyższy poziom z infrastrukturą rozproszoną wielu maszyn, ale jest bardzo staroświecki i trochę niezgrabny.
Moja rada to najpierw nauka biblioteki pthread, aż całkowicie ją zrozumiesz, a potem zajrzyj do bibliotek wyższych poziomów.
TBB umożliwia pisanie przenośnego kodu na natywnej funkcjonalności wątków, dzięki czemu kod jest bardziej przenośny w różnych architekturach systemu operacyjnego. Nie sądzę, że jest "bardziej efektywny" niż pthread.
Nie korzystałem z otwartego MP osobiście, ale w przeszłości pracowałem z programistami używającymi otwartego MP (jako specjalisty ds. Technicznych na procesorach, z których korzystali), i wydaje się, że działa dość dobrze dla pewnych rzeczy, ale inne są trudniejsze do użycia w otwartym mp niż pisanie własnego kodu. Wszystko zależy od tego, co dokładnie robisz. Jedną z zalet OpenMP oczywiście jest to, że zawsze można przekompilować kod bez opcji openmp, a kod działa bezpośrednio tak, jak tego oczekujesz [ale nie rozdziela się, oczywiście].
Dzięki podejściu do wątków programowych możesz mieć większą kontrolę nad tym, co dzieje się w danym wątku, tak. Ale to także oznacza dużo więcej pracy ...
OpenMPI to szczególna implementacja interfejsu przekazywania komunikatów. –