More intelligent std::async decision to make new thread
Periklis Tsirakidis
periklis.tsirakidis@mayflower.de
Tue Mar 14 09:58:00 GMT 2017
Ko Stoffelen <k.stoffelen@cs.ru.nl> writes:
> Hi,
>
> I have a bunch of tasks that I'd like to execute in parallel as fast as
> possible. I'm using std::async for this purpose, without a launch
> policy, which is then std::launch::async | std::launch::deferred by
> default. Now if I understand correctly, the C++ standard leaves it to
> the implementation how it should handle this launch policy. libstdc++
> always first tries to create a new thread and only if that raises an
> exception, the task is deferred.
>
> https://gcc.gnu.org/onlinedocs/gcc-6.1.0/libstdc++/api/a01298_source.html#l01716
>
> In practice, this could imply that I'm running >100 threads on 4 cores
> and the OS is only switching tasks all the time, actually delaying the
> computation. Is it possible to make a more intelligent decision at
> runtime, based on, e.g., the number of cores or the current CPU load?
>
> Thanks,
>
> Ko
>
You could, ask std::thread::hardware_concurrency() before selecting a
policy. For cpu load you need some library to ask for it, i think.
jm2c,
--
Periklis Tsirakidis Mayflower GmbH
Mannhardtstraße 6 Tel.: +49 89 24 20 54 1145
D-80538 München Fax : +49 89 24 20 54 29
periklis.tsirakidis@mayflower.de http://www.mayflower.de
Blog: http://blog.mayflower.de
Twitter: http://twitter.com/mayflowerphp
Slideshare: http://slideshare.net/mayflowergmbh
Mayflower GmbH, Standort München
Firmensitz: Mannhardtstraße 6, 80538 München
Registergericht: Amtsgericht München, HRB 142039
Geschäftsführer: Björn Schotte, Albrecht Günther, Johann-Peter Hartmann
More information about the Libstdc++
mailing list