From patchwork Tue Oct 4 13:14:08 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nathan Sidwell X-Patchwork-Id: 678085 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.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3spKBf6nR2z9s3v for ; Wed, 5 Oct 2016 00:14:34 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=u/kMHDuj; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to :from:subject:message-id:date:mime-version:content-type; q=dns; s=default; b=NdwfOLTs56J5nOxPvv58GDYXgCjxoV2wczFTLgPNCsq71nxXk5 2vj2iT9+ZNsXkppvLhNGLXG2gnaFSF30oYc9LkOi16rAQ5JSuzgk6RvOzVMfH0Q7 IHV5ZEEWDu0ni94/UPAcdcN4hUGVOWNyQlo+YiIoqm9ZI57FtNPTCCUFA= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to :from:subject:message-id:date:mime-version:content-type; s= default; bh=0nKQoGL2WeH07VVr4N3a64haKrM=; b=u/kMHDujCAvWkdly8lPs mUOTFIJHOUeqvGBuxNiBe/Aq4j8Dy80QyRd8hproFJrUY/CU589iWyUBxpvL2p5L gtd9bUv2JvQW3iZtmDQ8c3n6yBmxUcFY84GoTj91nZPbykhBg/OteDNeK23keg9V UP3pPy+hHDK0+gCpKbANBEQ= Received: (qmail 13863 invoked by alias); 4 Oct 2016 13:14:22 -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 13852 invoked by uid 89); 4 Oct 2016 13:14:21 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS, URIBL_RED autolearn=ham version=3.3.2 spammy=AUTO, SEQ, gomp_dim_mask, sk:oacc_lo X-HELO: mail-qt0-f175.google.com Received: from mail-qt0-f175.google.com (HELO mail-qt0-f175.google.com) (209.85.216.175) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 04 Oct 2016 13:14:11 +0000 Received: by mail-qt0-f175.google.com with SMTP id 38so93308995qte.1 for ; Tue, 04 Oct 2016 06:14:11 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:to:from:subject:message-id:date :user-agent:mime-version; bh=czUYDB56wknC7zgnv9CKAUORCMFDGMb+JEFdKB3v/0I=; b=ioxZVSA6ZQ3Cw8o9wavYO6cMm2xG4QQADPDfc5Y3v9Akjf4tEkpAradJ7yySkRC89d jpyiGRGMskh/rlc9jOAau7l4oA3Mk97JFCQh+/XBUMtHZTg340tYN5nB+CjgHPrrUyY0 j1laU+XetlrlZOU4mNDtfiJEfpg5BRyIQ/0YrEvqwUQ2jqj+lKAPZWSeHqBbLSAnxyeY y2gb1wZ12A/oYJnCgc3wXbLEhUyXRJQ51bwhfHu4HoBRbjgYdyElqrd9nrPFdYkPAlm5 NfnfOW52RMu/fMm5mWhv+624nTX3uVeCU9Y+hShSJN3lvSmKaDFrr1oQIGdbakm/eDOz OQBQ== X-Gm-Message-State: AA6/9Rk88Vvl+glxLP+3BYbC0fHORL0u5b7HC+gYz9sn5iqhlgVqiIiF04SY0iYB3OzvtQ== X-Received: by 10.200.45.246 with SMTP id q51mr3491739qta.108.1475586849729; Tue, 04 Oct 2016 06:14:09 -0700 (PDT) Received: from ?IPv6:2601:181:c003:1930:3fe6:c217:b86a:6e86? ([2601:181:c003:1930:3fe6:c217:b86a:6e86]) by smtp.googlemail.com with ESMTPSA id k65sm1514860qkf.7.2016.10.04.06.14.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 04 Oct 2016 06:14:09 -0700 (PDT) To: GCC Patches From: Nathan Sidwell Subject: [gomp4] auto partitioning tweak Message-ID: Date: Tue, 4 Oct 2016 09:14:08 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0 MIME-Version: 1.0 We were determining in the host compiler as to whethe a particular loop had no explicit partitioning. That'll break down if device_type comes into play. My tiling patch exposed this difficulty, as tiling itself ends up essentially being two nested loops, one of which could be explicitly partitioned and the other not. So addressing this problem now. Hopefully this is the last tweak before the tile patch itself. nathan 2016-10-04 Nathan Sidwell * omp-low.c (lower_oacc_head_mark): Don't determine default auto here ... (oacc_loop_fixed_partitions): ... do it here instead. Index: omp-low.c =================================================================== --- omp-low.c (revision 240731) +++ omp-low.c (working copy) @@ -6394,14 +6394,13 @@ lower_oacc_head_mark (location_t loc, tr if (!tgt || is_oacc_parallel (tgt)) tag |= OLF_INDEPENDENT; - /* A loop lacking SEQ, GANG, WORKER and/or VECTOR is implicitly AUTO. */ - if (!(tag & (((GOMP_DIM_MASK (GOMP_DIM_MAX) - 1) << OLF_DIM_BASE) - | OLF_SEQ))) - tag |= OLF_AUTO; - - /* Ensure at least one level, or 2 for AUTO partitioning */ - if (levels < 1 + ((tag & OLF_AUTO) != 0)) - levels = 1 + ((tag & OLF_AUTO) != 0); + /* A loop lacking SEQ, GANG, WORKER and/or VECTOR could be AUTO */ + bool maybe_auto = !(tag & (((GOMP_DIM_MASK (GOMP_DIM_MAX) - 1) + << OLF_DIM_BASE) | OLF_SEQ)); + + /* Ensure at least one level, or 2 for possible auto partitioning */ + if (levels < 1u + maybe_auto) + levels = 1u + maybe_auto; args.quick_push (build_int_cst (integer_type_node, levels)); args.quick_push (build_int_cst (integer_type_node, tag)); @@ -19759,6 +19758,8 @@ oacc_loop_fixed_partitions (oacc_loop *l this_mask = ((loop->flags >> OLF_DIM_BASE) & (GOMP_DIM_MASK (GOMP_DIM_MAX) - 1)); + bool maybe_auto = !seq_par && !this_mask; + if ((this_mask != 0) + auto_par + seq_par > 1) { if (noisy) @@ -19766,7 +19767,7 @@ oacc_loop_fixed_partitions (oacc_loop *l seq_par ? "% overrides other OpenACC loop specifiers" : "% conflicts with other OpenACC loop specifiers"); - auto_par = false; + maybe_auto = false; loop->flags &= ~OLF_AUTO; if (seq_par) { @@ -19775,8 +19776,11 @@ oacc_loop_fixed_partitions (oacc_loop *l this_mask = 0; } } - if (auto_par && (loop->flags & OLF_INDEPENDENT)) - mask_all |= GOMP_DIM_MASK (GOMP_DIM_MAX); + if (maybe_auto && (loop->flags & OLF_INDEPENDENT)) + { + loop->flags |= OLF_AUTO; + mask_all |= GOMP_DIM_MASK (GOMP_DIM_MAX); + } } if (this_mask & outer_mask)