[M3devel] Thread.HardwareConcurrency()?
Rodney M. Bates
rodney_bates at lcwb.coop
Wed Jul 5 18:16:57 CEST 2017
On 07/04/2017 02:27 AM, Jay K wrote:
> Clearing out more backlog...
>
>
> I suggest, for example, the cm3 compiler should use
> a thread per "processor" for the backend.
>
>
> I acknowledge that "processor" isn't well defined, such as with Intel
> hyperthreading and in general with various resources (registers, integer ALU,
> floating point ALU, branch predictor memory, cache) not being equally duplicated.
>
>
> I acknowledge that hogging all the CPU is deleterious to interactive
> performance, or overall system performance if anything else is running.
>
When I have the option, I usually use one fewer threads than processors, so
I can read email, etc. while waiting. The compiler could alternatively be
set up to do this.
>
> Adapting to overall system load and being good citizen is quite difficult
> unless you are the semi-omniscient operating system kernel.
>
>
> I believe C++11 exposes this notion and Boost did before it.
> (C++11 finally acknowledged the existance of threads and has
> a memory model and library for them, 20 years late)
>
>
> I propose that we can freely integrate Boost code into our runtime.
> That its license is close in spirit to ours.
>
>
> edit m3-libs/m3core/src/thread/Common/BoostThread.cpp
>
>
> #ifndef _WIN32
> // Copyright (C) 2001-2003
> // William E. Kempf
> // Copyright (C) 2007-8 Anthony Williams
> // (C) Copyright 2011-2012 Vicente J. Botet Escriba
> //
> // Distributed under the Boost Software License, Version 1.0. (See accompanying
> // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
> #ifdef __GLIBC__
> #include <sys/sysinfo.h>
> #elif defined(__APPLE__) || defined(__FreeBSD__)
> #include <sys/types.h>
> #include <sys/sysctl.h>
> #else // if defined BOOST_HAS_UNISTD_H
> #include <unistd.h>
> #endif
> #endif
>
>
> extern "C"
> unsigned m3_thread_hardware_concurrency()
> {
> #if defined(PTW32_VERSION) || defined(__hpux)
> return pthread_num_processors_np();
> #elif defined(__APPLE__) || defined(__FreeBSD__)
> int count;
> size_t size = sizeof(count);
> return sysctlbyname("hw.ncpu", &count, &size, NULL, 0) ? 0 : count;
> #elif defined(BOOST_HAS_UNISTD_H) && defined(_SC_NPROCESSORS_ONLN)
> int const count = sysconf(_SC_NPROCESSORS_ONLN);
> return (count > 0) ? count : 0;
> #elif defined(__GLIBC__)
> return get_nprocs();
> #else
> return 0;
> #endif
> }
> #else
> #include <windows.h>
> // Distributed under the Boost Software License, Version 1.0. (See
> // accompanying file LICENSE_1_0.txt or copy at
> // http://www.boost.org/LICENSE_1_0.txt)
> // (C) Copyright 2007 Anthony Williams
> // (C) Copyright 2007 David Deakins
> // (C) Copyright 2011-2013 Vicente J. Botet Escriba
> extern "C"
> unsigned m3_m3_thread_hardware_concurrency()
> {
> SYSTEMINFO info;
> GetSystemInfo(&info);
> return info.dwNumberOfProcessors;
> }
> #endif
>
>
>
> and then something in Thread.i3.
>
>
> <* external m3_thread_hardware_concurrent *>
> PROCEDURE Thread.HardwareConcurrency(): INTEGER;
>
>
> ?
>
>
> - Jay
>
>
>
>
>
> _______________________________________________
> M3devel mailing list
> M3devel at elegosoft.com
> https://m3lists.elegosoft.com/mailman/listinfo/m3devel
>
--
Rodney Bates
rodney.m.bates at acm.org
More information about the M3devel
mailing list