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
