From owner-svn-src-head@FreeBSD.ORG Tue Apr 28 21:32:30 2015 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 4A0E28BB; Tue, 28 Apr 2015 21:32:30 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2AFB719CB; Tue, 28 Apr 2015 21:32:30 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t3SLWUIS029660; Tue, 28 Apr 2015 21:32:30 GMT (envelope-from pfg@FreeBSD.org) Received: (from pfg@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t3SLWSfR029647; Tue, 28 Apr 2015 21:32:28 GMT (envelope-from pfg@FreeBSD.org) Message-Id: <201504282132.t3SLWSfR029647@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: pfg set sender to pfg@FreeBSD.org using -f From: "Pedro F. Giffuni" Date: Tue, 28 Apr 2015 21:32:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r282201 - in head: contrib/gcclibs/libgomp contrib/gcclibs/libgomp/config/bsd gnu/lib/libgomp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Apr 2015 21:32:30 -0000 Author: pfg Date: Tue Apr 28 21:32:27 2015 New Revision: 282201 URL: https://svnweb.freebsd.org/changeset/base/282201 Log: libgomp: bring initial BSD support from upstream. Initial support for FreeBSD specific routines related to counting online processors and dynamic load balancing. Fix "detection" of the header which upstream seems to have done wrong. Obtained from: GCC pre-4.4 branch (rev. 140497; LGPLv2.1+) Added: head/contrib/gcclibs/libgomp/ChangeLog.gcc44 head/contrib/gcclibs/libgomp/config/bsd/ head/contrib/gcclibs/libgomp/config/bsd/proc.c (contents, props changed) Modified: head/contrib/gcclibs/libgomp/config.h.in head/contrib/gcclibs/libgomp/configure head/contrib/gcclibs/libgomp/configure.ac head/contrib/gcclibs/libgomp/configure.tgt head/gnu/lib/libgomp/config.h Added: head/contrib/gcclibs/libgomp/ChangeLog.gcc44 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/contrib/gcclibs/libgomp/ChangeLog.gcc44 Tue Apr 28 21:32:27 2015 (r282201) @@ -0,0 +1,8 @@ +2008-09-19 Jakub Jelinek (r140497) + Andreas Tobler + + * config/bsd/proc.c: New file. + * configure.tgt (*-*-darwin*): Use config_path "darwin posix". + * configure.ac: Check for header + * configure: Regenerate. + * config.h.in: Likewise. Modified: head/contrib/gcclibs/libgomp/config.h.in ============================================================================== --- head/contrib/gcclibs/libgomp/config.h.in Tue Apr 28 20:33:31 2015 (r282200) +++ head/contrib/gcclibs/libgomp/config.h.in Tue Apr 28 21:32:27 2015 (r282201) @@ -57,6 +57,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SYSCTL_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H Added: head/contrib/gcclibs/libgomp/config/bsd/proc.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/contrib/gcclibs/libgomp/config/bsd/proc.c Tue Apr 28 21:32:27 2015 (r282201) @@ -0,0 +1,117 @@ +/* Copyright (C) 2005, 2006, 2008 Free Software Foundation, Inc. + Contributed by Richard Henderson . + + This file is part of the GNU OpenMP Library (libgomp). + + Libgomp is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with libgomp; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +/* As a special exception, if you link this library with other files, some + of which are compiled with GCC, to produce an executable, this library + does not by itself cause the resulting executable to be covered by the + GNU General Public License. This exception does not however invalidate + any other reasons why the executable file might be covered by the GNU + General Public License. */ + +/* This file contains system specific routines related to counting + online processors and dynamic load balancing. It is expected that + a system may well want to write special versions of each of these. + + The following implementation uses a mix of POSIX and BSD routines. */ + +#include "libgomp.h" +#include +#include +#ifdef HAVE_GETLOADAVG +# ifdef HAVE_SYS_LOADAVG_H +# include +# endif +#endif +#ifdef HAVE_SYS_SYSCTL_H +# include +#endif + +static int +get_num_procs (void) +{ +#ifdef _SC_NPROCESSORS_ONLN + return sysconf (_SC_NPROCESSORS_ONLN); +#elif defined HW_NCPU + int ncpus = 1; + size_t len = sizeof(ncpus); + sysctl((int[2]) {CTL_HW, HW_NCPU}, 2, &ncpus, &len, NULL, 0); + return ncpus; +#else + return 0; +#endif +} + +/* At startup, determine the default number of threads. It would seem + this should be related to the number of cpus online. */ + +void +gomp_init_num_threads (void) +{ + int ncpus = get_num_procs (); + + if (ncpus > 0) + gomp_global_icv.nthreads_var = ncpus; +} + +/* When OMP_DYNAMIC is set, at thread launch determine the number of + threads we should spawn for this team. */ +/* ??? I have no idea what best practice for this is. Surely some + function of the number of processors that are *still* online and + the load average. Here I use the number of processors online + minus the 15 minute load average. */ + +unsigned +gomp_dynamic_max_threads (void) +{ + unsigned n_onln, loadavg; + unsigned nthreads_var = gomp_icv (false)->nthreads_var; + + n_onln = get_num_procs (); + if (!n_onln || n_onln > nthreads_var) + n_onln = nthreads_var; + + loadavg = 0; +#ifdef HAVE_GETLOADAVG + { + double dloadavg[3]; + if (getloadavg (dloadavg, 3) == 3) + { + /* Add 0.1 to get a kind of biased rounding. */ + loadavg = dloadavg[2] + 0.1; + } + } +#endif + + if (loadavg >= n_onln) + return 1; + else + return n_onln - loadavg; +} + +int +omp_get_num_procs (void) +{ + int ncpus = get_num_procs (); + if (ncpus <= 0) + ncpus = gomp_icv (false)->nthreads_var; + return ncpus; +} + +ialias (omp_get_num_procs) Modified: head/contrib/gcclibs/libgomp/configure ============================================================================== --- head/contrib/gcclibs/libgomp/configure Tue Apr 28 20:33:31 2015 (r282200) +++ head/contrib/gcclibs/libgomp/configure Tue Apr 28 21:32:27 2015 (r282201) @@ -13428,7 +13428,7 @@ fi -for ac_header in unistd.h semaphore.h sys/loadavg.h sys/time.h +for ac_header in unistd.h semaphore.h sys/loadavg.h sys/sysctl.h sys/time.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then Modified: head/contrib/gcclibs/libgomp/configure.ac ============================================================================== --- head/contrib/gcclibs/libgomp/configure.ac Tue Apr 28 20:33:31 2015 (r282200) +++ head/contrib/gcclibs/libgomp/configure.ac Tue Apr 28 21:32:27 2015 (r282201) @@ -154,7 +154,7 @@ AC_SUBST(libtool_VERSION) # Check header files. AC_STDC_HEADERS AC_HEADER_TIME -AC_CHECK_HEADERS(unistd.h semaphore.h sys/loadavg.h sys/time.h) +AC_CHECK_HEADERS(unistd.h semaphore.h sys/loadavg.h sys/sysctl.h sys/time.h) GCC_HEADER_STDINT(gstdint.h) Modified: head/contrib/gcclibs/libgomp/configure.tgt ============================================================================== --- head/contrib/gcclibs/libgomp/configure.tgt Tue Apr 28 20:33:31 2015 (r282200) +++ head/contrib/gcclibs/libgomp/configure.tgt Tue Apr 28 21:32:27 2015 (r282201) @@ -107,6 +107,10 @@ case "${target}" in XLDFLAGS="${XLDFLAGS} -lposix4" ;; + *-*-darwin*) + config_path="bsd posix" + ;; + *) ;; Modified: head/gnu/lib/libgomp/config.h ============================================================================== --- head/gnu/lib/libgomp/config.h Tue Apr 28 20:33:31 2015 (r282200) +++ head/gnu/lib/libgomp/config.h Tue Apr 28 21:32:27 2015 (r282201) @@ -55,6 +55,9 @@ /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SYSCTL_H 1 + /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIME_H 1