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
?
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.