Używam std::for_each
z std::execution::par
do wykonywania złożonych obliczeń na ogromnych danych wejściowych reprezentowanych jako wektor struktur. Obliczenia nie wymagają żadnych opóźnień związanych ze sprzętem (na przykład IO sieci lub dysku), są obliczeniami „tylko procesora”. Dla mnie wydaje się logiczne, że nie ma sensu tworzyć więcej wątków systemu operacyjnego niż mamy wątki sprzętowe; jednak Visual C ++ 2019 tworzy średnio 50 wątków, a czasem nawet 500 wątków, nawet jeśli jest tylko 12 wątków sprzętowych.
Czy istnieje sposób, aby ograniczyć równoległe wątki liczyć do hardware_concurrency
z std::for_each
i std::execution::par
czy jedynym sposobem na stworzenie racjonalne wątki liczyć jest użycie kodu niestandardowego z std::thread
?
c++
multithreading
Vitalii
źródło
źródło
std::for_each
inne algorytmy z<algorithm>
nagłówka. Główną ideąstd::execution::par
jest uczynienie kodu równoległego tak prostym jak kod sekwencyjny oraz zrównoleglenie istniejących algorytmów z minimalnymi zmianami kodu i semantyki.Odpowiedzi:
Nie, przynajmniej nie w C ++ 17. Jednak
executors
w standardzie pojawi się propozycja , która w zasadzie daje możliwość wpływania na kontekst wykonania (pod względem lokalizacji i czasu) interfejsu algorytmu wysokiego poziomu STL:Do tego czasu trzeba albo zaufania ze sprzedawcą kompilatora, który wie, co jest najlepsze dla ogólnej wydajności, jak np twórcy Visual Studio stanu :
Inną opcją byłoby zrezygnowanie z polegania wyłącznie na standardowej bibliotece i stosowanie implementacji STL, które już zawierają nową propozycję.
źródło