On Jul 3, 2013, at 12:35 AM, Chandler Carruth <[email protected]> wrote:

> On Tue, Jul 2, 2013 at 9:10 PM, Nico Rieck <[email protected]> wrote:
> On 02.07.2013 23:55, Óscar Fuentes wrote:
> Nico and Howard,
> 
> Nico Rieck <[email protected]> writes:
> 
> On 02.07.2013 19:53, Howard Hinnant wrote:
> +#elif defined(_WIN32)
> +    SYSTEM_INFO info;
> +    GetSystemInfo(&info);
> +    return info.dwNumberOfProcessors;
>    #else  // defined(CTL_HW) && defined(HW_NCPU)
> 
> I'm not that familiar with the implementation for the other platforms,
> but this snippet returns the number of logical processors. In my local
> Windows port I use the number of cores, as I think that's more
> appropriate. This is also what MSVCRT does on Windows.
> 
> As per my interpretation of the standard, returning the number of
> logical processors is the right thing.
> 
> I checked VS2013 on a hyperthreaded machine and
> std::thread::hardware_concurrency does just that. Same for
> boost::thread::hardware_concurrency.
> 
> Did they change that? VS2012 uses GetLogicalProcessorInformation/Ex for 
> Vista/7+, and GetSystemInfo below. Boost seems to use the latter.
> And if people use this to (for example) determine the amount of threads to 
> spawn, number of cores makes more sense to me.
> 
> No, just the opposite. You want to spawn a number of software threads based 
> on how many hardware threads your system can handle. For hyperthreaded 
> systems each core can handle two hardware threads so that's how many should 
> be spawned.

Agreed this is the intent.

On Mac OS X, using an iMac equipped with a Core i5, this program:

#include <iostream>
#include <thread>

int
main()
{
    std::cout << std::thread::hardware_concurrency() << '\n';
}

outputs:

4

Howard



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to