From patchwork Tue Mar 19 15:24:04 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tobias Burnus X-Patchwork-Id: 229097 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "localhost", Issuer "www.qmailtoaster.com" (not verified)) by ozlabs.org (Postfix) with ESMTPS id 0B5382C00C0 for ; Wed, 20 Mar 2013 02:24:16 +1100 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:subject:content-type; q= dns; s=dkim1; b=pQQw7obXE4azymI9hgY643Q6tOKwQB8bsUKnB6rbWI/0LVkR FGut1mqkaEaMnOrilTElJ+cEePbj3tGp9aU1ql99SWWBZ5Vrt6jpl0WQFtG4E3qF 6oGXcl+1zPUBGD8jFXeP8uEY96q5sN+DywW6HxI3FH1NisbR/RvqZPs30tw= DKIM-Signature: v=1; a=rsa-sha1; c=simple; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:subject:content-type; s= dkim1; bh=b5GDO8DrgTUwjiyI2viJsVT1THw=; b=IblB60ERb7zCkqI67KgXvY /rgJqVZnSM5XbwTveDvOn1DZMegp2BSVcyH0FVPHSwZEa/a7YnC22+EXfZihQNvZ F5QBqQojIX3NtYcq3+/xBQyqnZpChSLwHMfe8qPnbG9eQl4P20GWdP/Xqwiebjls AvQKMoxrgYvg1FQqk5lUQ= Received: (qmail 2836 invoked by alias); 19 Mar 2013 15:24:11 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2826 invoked by uid 89); 19 Mar 2013 15:24:11 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE X-Spam-Check-By: sourceware.org Received: from mx02.qsc.de (HELO mx02.qsc.de) (213.148.130.14) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 19 Mar 2013 15:24:07 +0000 Received: from archimedes.net-b.de (port-92-195-211-180.dynamic.qsc.de [92.195.211.180]) by mx02.qsc.de (Postfix) with ESMTP id 267B43330B; Tue, 19 Mar 2013 16:24:04 +0100 (CET) Message-ID: <51488314.6090308@net-b.de> Date: Tue, 19 Mar 2013 16:24:04 +0100 From: Tobias Burnus User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130215 Thunderbird/17.0.3 MIME-Version: 1.0 To: gcc patches Subject: [gomp 4.0] Handle OMP_DISPLAY_ENV Attached is a first shot for OMP_DISPLAY_ENV. One could think about how to handle GOMP_CPU_AFFINITY and OMP_WAIT_POLICY. I currently print an empty list for affinity (although using GOMP_CPU_AFFINITY='' leads to a warning that the list is empty) and for OMP_WAIT_POLICY, an unset variable is handled as something between ACTIVE and PASSIVE; the patch prints PASSIVE in that case. Build and regtested on x86-64-gnu-linux. OK for the gomp-4_0-branch - after is has been created? Tobias 2013-03-19 Tobias Burnus * env.c (handle_omp_display_env): New function. (initialize_env): Use it. diff --git a/libgomp/env.c b/libgomp/env.c index 65cbba8..e228bd9 100644 --- a/libgomp/env.c +++ b/libgomp/env.c @@ -29,6 +29,8 @@ #include "libgomp_f.h" #include #include +#include +#include /* For PRIu64. */ #ifdef STRING_WITH_STRINGS # include # include @@ -565,6 +567,117 @@ parse_affinity (void) return false; } + +static void +handle_omp_display_env (bool proc_bind, unsigned long stacksize, + int wait_policy) +{ + const char *env; + bool display = false; + bool verbose = false; + int i; + + env = getenv ("OMP_DISPLAY_ENV"); + if (env == NULL) + return; + + while (isspace ((unsigned char) *env)) + ++env; + if (strncasecmp (env, "true", 4) == 0) + { + env += 4; + } + else if (strncasecmp (env, "false", 5) == 0) + { + display = false; + env += 5; + } + else if (strncasecmp (env, "verbose", 7) == 0) + { + display = true; + verbose = true; + env += 7; + } + else + env = "X"; + while (isspace ((unsigned char) *env)) + ++env; + if (*env != '\0') + gomp_error ("Invalid value for environment variable OMP_DISPLAY_ENV"); + + if (!display) + return; + + fputs ("\nOPENMP DISPLAY ENVIRONMENT BEGIN\n", stderr); + + fputs (" _OPENMP = '201107'\n", stderr); + fprintf (stderr, " OMP_DYNAMIC = '%s'\n", + gomp_global_icv.dyn_var ? "TRUE" : "FALSE"); + fprintf (stderr, " OMP_NESTED = '%s'\n", + gomp_global_icv.nest_var ? "TRUE" : "FALSE"); + + fprintf (stderr, " OMP_NUM_THREADS = '%lu", gomp_global_icv.nthreads_var); + for (i = 1; i < gomp_nthreads_var_list_len; i++) + fprintf (stderr, ",%lu", gomp_nthreads_var_list[i]); + fputs ("'\n", stderr); + + fprintf (stderr, " OMP_SCHEDULE = '"); + switch (gomp_global_icv.run_sched_var) + { + case GFS_RUNTIME: + fputs ("RUNTIME", stderr); + break; + case GFS_STATIC: + fputs ("STATIC", stderr); + break; + case GFS_DYNAMIC: + fputs ("DYNAMIC", stderr); + break; + case GFS_GUIDED: + fputs ("GUIDED", stderr); + break; + case GFS_AUTO: + fputs ("AUTO", stderr); + break; + } + fputs ("'\n", stderr); + + fprintf (stderr, " OMP_PROC_BIND = '%s'\n", + proc_bind ? "TRUE" : "FALSE"); + fprintf (stderr, " OMP_STACKSIZE = '%lu'\n", stacksize); + + /* GOMP's default value is actually neither active nor passive. */ + fprintf (stderr, " OMP_WAIT_POLICY = '%s'\n", + wait_policy > 0 ? "ACTIVE" : "PASSIVE"); + fprintf (stderr, " OMP_THREAD_LIMIT = '%lu'\n", + gomp_thread_limit_var); + fprintf (stderr, " OMP_MAX_ACTIVE_LEVELS = '%lu'\n", + gomp_max_active_levels_var); + +/* FIXME: Unimplemented OpenMP 4.0 environment variables. + fprintf (stderr, " OMP_PLACES = ''\n"); + fprintf (stderr, " OMP_CANCELLATION = ''\n"); + fprintf (stderr, " OMP_DEFAULT_DEVICE = ''\n"); */ + + if (verbose) + { + fputs (" GOMP_CPU_AFFINITY = '", stderr); + if (gomp_cpu_affinity_len) + { + fprintf (stderr, "%d", gomp_cpu_affinity[0]); + for (i = 1; i < gomp_cpu_affinity_len; i++) + fprintf (stderr, " %d", gomp_cpu_affinity[i]); + } + fputs ("'\n", stderr); + fprintf (stderr, " GOMP_STACKSIZE = '%lu'\n", stacksize); + fprintf (stderr, " GOMP_SPINCOUNT = '%"PRIu64"'\n", + (uint64_t) gomp_spin_count_var); + } + + fputs ("OPENMP DISPLAY ENVIRONMENT END\n", stderr); +} + + static void __attribute__((constructor)) initialize_env (void) { @@ -645,6 +758,8 @@ initialize_env (void) if (err != 0) gomp_error ("Stack size change failed: %s", strerror (err)); } + + handle_omp_display_env (bind_var, stacksize, wait_policy); }