From patchwork Fri Dec 9 12:47:45 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andre Vehreschild X-Patchwork-Id: 87468 Delivered-To: patch@linaro.org Received: by 10.140.20.101 with SMTP id 92csp286423qgi; Fri, 9 Dec 2016 04:49:03 -0800 (PST) X-Received: by 10.98.157.148 with SMTP id a20mr83916302pfk.1.1481287743721; Fri, 09 Dec 2016 04:49:03 -0800 (PST) Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id n69si8499707pfa.171.2016.12.09.04.49.03 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 09 Dec 2016 04:49:03 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-return-443902-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org; spf=pass (google.com: domain of gcc-patches-return-443902-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-443902-patch=linaro.org@gcc.gnu.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-type; q=dns; s=default; b=oOSSvoRmUWwA/irV okUuruB7I4eHkUh5CPbGtkFh+KJZuGvPli4CdIEitg8GHseldEW+yftlfkovUgwb ubxzFsEIhsJsJfuW/GEblbSRvYVyBxMQ7ohiFm1QiEsHar+wQSzY6H85o8kZvMKU tdzc2CKIhgR8FkcFOd62sFKEfXY= 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:date :from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-type; s=default; bh=uvcg5KfOrKmjL9NW16O93W GbOhk=; b=T5NunTLfCi2ZD0IOiICMoHpjrQZ0fszKfWgi7a6cwjoIf1OaYs91Ge s9ZvTl4ORt4+RS6tugPYLCx5NfgRkXLCBFU9WefFDsF+UE/2Znz84WQHRPx1RGij eDF1CyhDFBROhxoCT5rL50b73AuTzn2guoOUGp1mX1Cn8K784Mxk8= Received: (qmail 76698 invoked by alias); 9 Dec 2016 12:48:03 -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 72143 invoked by uid 89); 9 Dec 2016 12:48:01 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=1.1 required=5.0 tests=AWL, BAYES_50, FREEMAIL_FROM, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_LOW, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=no version=3.3.2 spammy=nicht, gfc_init_block, stmtblock_t, sk:gfc_add X-Spam-User: qpsmtpd, 2 recipients X-HELO: mout.gmx.net Received: from mout.gmx.net (HELO mout.gmx.net) (212.227.15.18) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 09 Dec 2016 12:47:51 +0000 Received: from vepi2 ([92.76.205.227]) by mail.gmx.com (mrgmx001 [212.227.17.190]) with ESMTPSA (Nemesis) id 0MCLQ1-1cOMzr1cll-0098Yw; Fri, 09 Dec 2016 13:47:46 +0100 Date: Fri, 9 Dec 2016 13:47:45 +0100 From: Andre Vehreschild To: Jerry DeLisle Cc: fortran@gcc.gnu.org, GCC-Patches-ML Subject: Re: Ping [PATCH, Fortran, pr78505, v1] [F08] Coarray source allocation not synchronizing on oversubscribed cores Message-ID: <20161209134745.47aebfce@vepi2> In-Reply-To: <8699c34a-4e61-35eb-6728-658df21ed5ae@charter.net> References: <20161202164629.7822c479@vepi2> <20161208144316.13d15764@vepi2> <8699c34a-4e61-35eb-6728-658df21ed5ae@charter.net> MIME-Version: 1.0 X-UI-Out-Filterresults: notjunk:1; V01:K0:RmJ7oAgOJrg=:LjS/UhSTMwaTpTeENkjsym wS8bQPAafawT4XvC4g5OVMlQqFxGfzQ9Q/xpr3jWdYlQMJ3zcP9YJotakMjpTWcQRanads0sO gtCJFoktL6FXQeO/OsaPrr67FFEaCXGviQM84yZvupYdD5awW+f3EaWfuUIIPA8ZTX6rjq0HZ /FNL596EeOYXuWhxufXLbeWjrNjWzN59rb0v9sxyEBan4WEPFE3FNZQaFhZ2vhcZ3IOxB0/5t 4P/2ntg8d+b12GnPK64pC9cnAySfjLAFpcrwb/gCIM85VRZLCUSv9mNaVsasGYP/8S1DpDz9D qBse8QOYxwk3pswJhaQt1gCh0/ln6aMMqpEMACFRfw/z1a0DBY4uEpBNkKTS6cCdd61Y7x7jB 34ZOxXc06LuXy9cNPCw0J4u3qi5doXh9bPNiwGnQ0tiEFUBzv/KImL3N0RiM2qEK9/mdCxUof of/p/QaZv2GH+cSD7IKpYWf0DC6tQrvIpnXsse+jRCX/RQDB95rfo1vX1iUPMYVjJsF8BpYv5 M0GDRt7V/EXTqJZbcBhLJhlw67giQHYwhMOjzcTEmCdTtx8pewqwPwN1EA03qOwqoxhOMagbP lkEnNj/gn/Tuh/4HOSd93QOv5NjLR7fz0Bvk8a4rJHVhdma9ScHo9UrKl2Pi354quxaDTGYGa hUGf8Jx12697X1d+bUuV+efIJodoDoTmYqQDWKAcXjg+S37TVcSfBRQagInBLL9KmOfEMygQk eL7Xevlzby784Bnw0JtLEbirvqQrEImiNtu5rLoJeHI5zoAph7dlSWHwv3I= Hi Jerry, thanks for the review. Committed as r243482. Regards, Andre On Thu, 8 Dec 2016 12:12:02 -0800 Jerry DeLisle wrote: > On 12/08/2016 05:43 AM, Andre Vehreschild wrote: > > Ping! > > > > On Fri, 2 Dec 2016 16:46:29 +0100 > > Andre Vehreschild wrote: > > > >> Hi all, > >> > >> attached patch adds a call to sync_all after an ALLOCATE allocating a > >> coarray. This is to adhere to standard wanting: > >> > >> ..., execution of the segment (11.6.2) following the statement is delayed > >> until all other active images in the current team have executed the same > >> statement the same number of times in this team. > >> > >> This, esp. the "statement", means that assigning the SOURCE= is to come > >> before the sync all, which means we have to do it explicitly after that > >> assignment. Or the other way around the sync all can be done in library > >> caf_register(). > >> > >> Bootstraps and regtests ok on x86_64-linux/F23. Ok for trunk? > >> > >> Regards, > >> Andre > > > > > > This OK. > > Jerry -- Andre Vehreschild * Email: vehre ad gmx dot de Index: gcc/fortran/ChangeLog =================================================================== --- gcc/fortran/ChangeLog (Revision 243480) +++ gcc/fortran/ChangeLog (Arbeitskopie) @@ -1,5 +1,11 @@ 2016-12-09 Andre Vehreschild + PR fortran/78505 + * trans-stmt.c (gfc_trans_allocate): Add sync all after the execution + of the whole allocate-statement to adhere to the standard. + +2016-12-09 Andre Vehreschild + * trans-array.c (gfc_array_deallocate): Remove wrapper. (gfc_trans_dealloc_allocated): Same. (structure_alloc_comps): Restructure deallocation of (nested) Index: gcc/fortran/trans-stmt.c =================================================================== --- gcc/fortran/trans-stmt.c (Revision 243480) +++ gcc/fortran/trans-stmt.c (Arbeitskopie) @@ -5506,7 +5506,7 @@ stmtblock_t block; stmtblock_t post; tree nelems; - bool upoly_expr, tmp_expr3_len_flag = false, al_len_needs_set; + bool upoly_expr, tmp_expr3_len_flag = false, al_len_needs_set, is_coarray ; gfc_symtree *newsym = NULL; if (!code->ext.alloc.list) @@ -5516,6 +5516,7 @@ expr3 = expr3_vptr = expr3_len = expr3_esize = NULL_TREE; label_errmsg = label_finish = errmsg = errlen = NULL_TREE; e3_is = E3_UNSET; + is_coarray = false; gfc_init_block (&block); gfc_init_block (&post); @@ -5555,9 +5556,10 @@ expression. */ if (code->expr3) { - bool vtab_needed = false, temp_var_needed = false, - is_coarray = gfc_is_coarray (code->expr3); + bool vtab_needed = false, temp_var_needed = false; + is_coarray = gfc_is_coarray (code->expr3); + /* Figure whether we need the vtab from expr3. */ for (al = code->ext.alloc.list; !vtab_needed && al != NULL; al = al->next) @@ -6093,6 +6095,9 @@ tree caf_decl, token; gfc_se caf_se; + /* Set flag, to add synchronize after the allocate. */ + is_coarray = true; + gfc_init_se (&caf_se, NULL); caf_decl = gfc_get_tree_for_caf_expr (expr); @@ -6114,6 +6119,11 @@ } else { + /* Allocating coarrays needs a sync after the allocate executed. + Set the flag to add the sync after all objects are allocated. */ + is_coarray = is_coarray || (gfc_caf_attr (expr).codimension + && flag_coarray == GFC_FCOARRAY_LIB); + if (expr->ts.type == BT_CHARACTER && al_len != NULL_TREE && expr3_len != NULL_TREE) { @@ -6357,6 +6367,15 @@ gfc_add_modify (&block, se.expr, tmp); } + if (is_coarray && flag_coarray == GFC_FCOARRAY_LIB) + { + /* Add a sync all after the allocation has been executed. */ + tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_sync_all, + 3, null_pointer_node, null_pointer_node, + integer_zero_node); + gfc_add_expr_to_block (&post, tmp); + } + gfc_add_block_to_block (&block, &se.post); gfc_add_block_to_block (&block, &post); Index: gcc/testsuite/ChangeLog =================================================================== --- gcc/testsuite/ChangeLog (Revision 243480) +++ gcc/testsuite/ChangeLog (Arbeitskopie) @@ -1,5 +1,10 @@ 2016-12-09 Andre Vehreschild + PR fortran/78505 + * gfortran.dg/coarray_alloc_with_implicit_sync_1.f90: New test. + +2016-12-09 Andre Vehreschild + * gfortran.dg/coarray_alloc_comp_3.f08: New test. * gfortran.dg/coarray_alloc_comp_4.f08: New test. * gfortran.dg/finalize_18.f90: Add count for additional guard against Index: gcc/testsuite/gfortran.dg/coarray_alloc_with_implicit_sync_1.f90 =================================================================== --- gcc/testsuite/gfortran.dg/coarray_alloc_with_implicit_sync_1.f90 (nicht existent) +++ gcc/testsuite/gfortran.dg/coarray_alloc_with_implicit_sync_1.f90 (Arbeitskopie) @@ -0,0 +1,10 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original -fcoarray=lib" } +! Check that allocating a coarray adds an implicit sync all. + + implicit none + integer, allocatable :: f(:)[:] + allocate( f(20)[*], source = 1 ) +end + +! { dg-final { scan-tree-dump-times "_gfortran_caf_sync_all \\(" 1 "original" } }