Saya gunakan std::for_each
dengan std::execution::par
untuk melakukan perhitungan kompleks pada input besar yang direpresentasikan sebagai vektor struktur. Perhitungan tidak memerlukan penundaan yang terkait dengan perangkat keras (misalnya jaringan atau disk IO), itu adalah komputasi "hanya CPU". Bagi saya kelihatannya logis bahwa tidak ada gunanya membuat lebih banyak utas OS yang kami miliki yang perangkat kerasnya; namun, Visual C ++ 2019 menciptakan rata-rata 50 utas, dan terkadang hingga 500 utas bahkan hanya ada 12 utas perangkat keras.
Apakah ada cara untuk membatasi jumlah thread paralel hardware_concurrency
dengan std::for_each
dan std::execution::par
, atau satu-satunya cara untuk membuat jumlah thread yang masuk akal adalah dengan menggunakan kode khusus std::thread
?
sumber
std::for_each
dan algoritma lainnya dari<algorithm>
header. Gagasan utama di belakangstd::execution::par
adalah membuat kode paralel dekat sesederhana yang berurutan, dan memparalelkan algoritma yang ada dengan kode minimal dan perubahan semantik.Jawaban:
Tidak, setidaknya tidak di C ++ 17. Namun, ada proposal untuk
executors
standar yang akan datang, yang pada dasarnya memberi Anda kemampuan untuk mempengaruhi konteks eksekusi (dalam hal lokasi dan waktu) untuk antarmuka algoritma STL tingkat tinggi:Hingga saat itu, Anda harus memercayai vendor kompiler Anda bahwa ia tahu apa yang terbaik untuk kinerja keseluruhan, seperti misalnya pengembang keadaan Visual Studio :
Pilihan lain adalah menyerah hanya mengandalkan perpustakaan standar dan menggunakan implementasi STL yang sudah menampilkan proposal baru.
sumber