From patchwork Mon May 22 14:29:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Thomas Schwinge X-Patchwork-Id: 765443 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 3wWgzp5rLqz9rxw for ; Tue, 23 May 2017 00:30:14 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="IGAl+uVx"; 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:from :to:subject:in-reply-to:references:date:message-id:mime-version :content-type:content-transfer-encoding; q=dns; s=default; b=I7N Ib+EJJrSJr4NvzN1cblFloSNo+nxFxfbJhPq6j8GVXdJe3Va0Iy4MeAtBbo9UVGy YlI36QMspan5JwHdBnfq3rpgYmfU6I8z5q51O6uLaSz2mOzJ5f/uX7zoQUxnuR6C c1VS+hzotECefccX+tde1B4v/zjIN2nmxoBFugXw= 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:from :to:subject:in-reply-to:references:date:message-id:mime-version :content-type:content-transfer-encoding; s=default; bh=1RrKq6IMc qKOMhwO13UK9rqcEHc=; b=IGAl+uVxNSerSNU7PktskH51BUvF5/6MCKA5elqRH iDVqJ6PnCftDP60Z6igiOhzUQBsW62Uuf0gLcQHKjrl4n9uS4D+vFct5ueb5cCHf AzZmJJIkAqRjbSBCzwMXnfZ0l1Vc5uI/i3qyx2zqUjFG0p9q3IckmMHwD4ANOjgE UU= Received: (qmail 78122 invoked by alias); 22 May 2017 14:30:02 -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 78078 invoked by uid 89); 22 May 2017 14:30:01 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS, UPPERCASE_50_75, URIBL_RED autolearn=ham version=3.3.2 spammy=PROGRAM, THEN X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 22 May 2017 14:29:59 +0000 Received: from nat-ies.mentorg.com ([192.94.31.2] helo=SVR-IES-MBX-04.mgc.mentorg.com) by relay1.mentorg.com with esmtp id 1dCoLR-0006fH-3y from Thomas_Schwinge@mentor.com ; Mon, 22 May 2017 07:30:01 -0700 Received: from hertz.schwinge.homeip.net (137.202.0.87) by SVR-IES-MBX-04.mgc.mentorg.com (139.181.222.4) with Microsoft SMTP Server (TLS) id 15.0.1210.3; Mon, 22 May 2017 15:29:58 +0100 From: Thomas Schwinge To: , Jakub Jelinek Subject: Translate libgomp.oacc-c-c++-common/lib-32.c into Fortran (was: C/C++ OpenACC: acc_pcopyin, acc_pcreate) In-Reply-To: <87bmqlynkn.fsf@hertz.schwinge.homeip.net> References: <87bmqlynkn.fsf@hertz.schwinge.homeip.net> User-Agent: Notmuch/0.9-101-g81dad07 (http://notmuchmail.org) Emacs/24.5.1 (x86_64-pc-linux-gnu) Date: Mon, 22 May 2017 16:29:51 +0200 Message-ID: <878tlpynfk.fsf@hertz.schwinge.homeip.net> MIME-Version: 1.0 X-ClientProxiedBy: svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) To SVR-IES-MBX-04.mgc.mentorg.com (139.181.222.4) Hi! On Mon, 22 May 2017 16:26:48 +0200, I wrote: > C/C++ OpenACC: acc_pcopyin, acc_pcreate > libgomp/ > [...] > * testsuite/libgomp.oacc-c-c++-common/lib-38.c: Remove, merging > its content into... > * testsuite/libgomp.oacc-c-c++-common/lib-32.c: ... this file. > Extend testing. ... which I then translated into two Fortran variants; OK for trunk? commit 04ee44504e6256ee95ae3c6ba91a5960265b3261 Author: Thomas Schwinge Date: Wed Apr 19 15:38:51 2017 +0200 Translate libgomp.oacc-c-c++-common/lib-32.c into Fortran libgomp/ * testsuite/libgomp.oacc-fortran/lib-32-1.f: New file. * testsuite/libgomp.oacc-fortran/lib-32-2.f: Likewise. --- .../testsuite/libgomp.oacc-c-c++-common/lib-32.c | 1 + libgomp/testsuite/libgomp.oacc-fortran/lib-32-1.f | 179 +++++++++++++++++++++ libgomp/testsuite/libgomp.oacc-fortran/lib-32-2.f | 173 ++++++++++++++++++++ 3 files changed, 353 insertions(+) Grüße Thomas diff --git libgomp/testsuite/libgomp.oacc-c-c++-common/lib-32.c libgomp/testsuite/libgomp.oacc-c-c++-common/lib-32.c index 6a9e995..1696fb6 100644 --- libgomp/testsuite/libgomp.oacc-c-c++-common/lib-32.c +++ libgomp/testsuite/libgomp.oacc-c-c++-common/lib-32.c @@ -1,4 +1,5 @@ /* acc_present_or_create, acc_present_or_copyin, etc. */ +/* See also Fortran variants in "../libgomp.oacc-fortran/lib-32*". */ #include #include diff --git libgomp/testsuite/libgomp.oacc-fortran/lib-32-1.f libgomp/testsuite/libgomp.oacc-fortran/lib-32-1.f new file mode 100644 index 0000000..4606d77 --- /dev/null +++ libgomp/testsuite/libgomp.oacc-fortran/lib-32-1.f @@ -0,0 +1,179 @@ +! ACC_PRESENT_OR_CREATE, ACC_PRESENT_OR_COPYIN, etc. +! Variant of "../libgomp.oacc-c-c++-common/lib-32.c". +! Variant using "openacc_lib.h". + +! { dg-do run } + + PROGRAM MAIN + IMPLICIT NONE + INCLUDE "openacc_lib.h" + + INTEGER, PARAMETER :: N = 10000 + INTEGER, ALLOCATABLE :: H(:) + INTEGER :: I + LOGICAL :: SHARED_MEM + + ALLOCATE (H(N)) + DO I = 1, N + H(I) = I + 0 + END DO + + SHARED_MEM = ACC_IS_PRESENT (H) + + CALL ACC_PRESENT_OR_CREATE (H) + IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + H(I) = I + 1 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (1, 0, SHARED_MEM)) CALL ABORT + H(I) = I + 2 + END DO + + CALL ACC_PRESENT_OR_CREATE (H) + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (2, 1, SHARED_MEM)) CALL ABORT + H(I) = I + 3 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (3, 2, SHARED_MEM)) CALL ABORT + H(I) = I + 4 + END DO + +! CALL ACC_PCREATE (H) + CALL ACC_PRESENT_OR_CREATE (H) + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (4, 3, SHARED_MEM)) CALL ABORT + H(I) = I + 5 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (5, 4, SHARED_MEM)) CALL ABORT + H(I) = I + 6 + END DO + + CALL ACC_PRESENT_OR_COPYIN (H) + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (6, 5, SHARED_MEM)) CALL ABORT + H(I) = I + 7 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (7, 6, SHARED_MEM)) CALL ABORT + H(I) = I + 8 + END DO + +! CALL ACC_PCOPYIN (H) + CALL ACC_PRESENT_OR_COPYIN (H) + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (8, 7, SHARED_MEM)) CALL ABORT + H(I) = I + 9 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (9, 8, SHARED_MEM)) CALL ABORT + H(I) = I + 10 + END DO + + CALL ACC_COPYOUT (H) + IF (.NOT. SHARED_MEM) THEN + IF (ACC_IS_PRESENT (H)) CALL ABORT + ENDIF + + DO I = 1, N + IF (H(I) .NE. I + MERGE (10, 9, SHARED_MEM)) CALL ABORT + END DO + +! CALL ACC_PCOPYIN (H) + CALL ACC_PRESENT_OR_COPYIN (H) + IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (10, 9, SHARED_MEM)) CALL ABORT + H(I) = I + 11 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (11, 9, SHARED_MEM)) CALL ABORT + H(I) = I + 12 + END DO + +! CALL ACC_PCOPYIN (H) + CALL ACC_PRESENT_OR_COPYIN (H) + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (12, 11, SHARED_MEM)) CALL ABORT + H(I) = I + 13 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (13, 12, SHARED_MEM)) CALL ABORT + H(I) = I + 14 + END DO + +! CALL ACC_PCREATE (H) + CALL ACC_PRESENT_OR_CREATE (H) + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (14, 13, SHARED_MEM)) CALL ABORT + H(I) = I + 15 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (15, 14, SHARED_MEM)) CALL ABORT + H(I) = I + 16 + END DO + +! CALL ACC_PCREATE (H) + CALL ACC_PRESENT_OR_CREATE (H) + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (16, 15, SHARED_MEM)) CALL ABORT + H(I) = I + 17 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (17, 16, SHARED_MEM)) CALL ABORT + H(I) = I + 18 + END DO + + CALL ACC_UPDATE_SELF (H) + IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT + + DO I = 1, N + IF (H(I) .NE. I + MERGE (18, 17, SHARED_MEM)) CALL ABORT + END DO + + CALL ACC_DELETE (H) + IF (.NOT. SHARED_MEM) THEN + IF (ACC_IS_PRESENT (H)) CALL ABORT + ENDIF + + DEALLOCATE (H) + + END PROGRAM MAIN diff --git libgomp/testsuite/libgomp.oacc-fortran/lib-32-2.f libgomp/testsuite/libgomp.oacc-fortran/lib-32-2.f new file mode 100644 index 0000000..88f5566 --- /dev/null +++ libgomp/testsuite/libgomp.oacc-fortran/lib-32-2.f @@ -0,0 +1,173 @@ +! ACC_PRESENT_OR_CREATE, ACC_PRESENT_OR_COPYIN, etc. +! Variant of "../libgomp.oacc-c-c++-common/lib-32.c". +! Variant using the "openacc" module. + +! { dg-do run } + + PROGRAM MAIN + USE OPENACC + IMPLICIT NONE + + INTEGER, PARAMETER :: N = 10000 + INTEGER, ALLOCATABLE :: H(:) + INTEGER :: I + LOGICAL :: SHARED_MEM + + ALLOCATE (H(N)) + DO I = 1, N + H(I) = I + 0 + END DO + + SHARED_MEM = ACC_IS_PRESENT (H) + + CALL ACC_PRESENT_OR_CREATE (H) + IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + H(I) = I + 1 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (1, 0, SHARED_MEM)) CALL ABORT + H(I) = I + 2 + END DO + + CALL ACC_PRESENT_OR_CREATE (H) + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (2, 1, SHARED_MEM)) CALL ABORT + H(I) = I + 3 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (3, 2, SHARED_MEM)) CALL ABORT + H(I) = I + 4 + END DO + + CALL ACC_PCREATE (H) + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (4, 3, SHARED_MEM)) CALL ABORT + H(I) = I + 5 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (5, 4, SHARED_MEM)) CALL ABORT + H(I) = I + 6 + END DO + + CALL ACC_PRESENT_OR_COPYIN (H) + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (6, 5, SHARED_MEM)) CALL ABORT + H(I) = I + 7 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (7, 6, SHARED_MEM)) CALL ABORT + H(I) = I + 8 + END DO + + CALL ACC_PCOPYIN (H) + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (8, 7, SHARED_MEM)) CALL ABORT + H(I) = I + 9 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (9, 8, SHARED_MEM)) CALL ABORT + H(I) = I + 10 + END DO + + CALL ACC_COPYOUT (H) + IF (.NOT. SHARED_MEM) THEN + IF (ACC_IS_PRESENT (H)) CALL ABORT + ENDIF + + DO I = 1, N + IF (H(I) .NE. I + MERGE (10, 9, SHARED_MEM)) CALL ABORT + END DO + + CALL ACC_PCOPYIN (H) + IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (10, 9, SHARED_MEM)) CALL ABORT + H(I) = I + 11 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (11, 9, SHARED_MEM)) CALL ABORT + H(I) = I + 12 + END DO + + CALL ACC_PCOPYIN (H) + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (12, 11, SHARED_MEM)) CALL ABORT + H(I) = I + 13 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (13, 12, SHARED_MEM)) CALL ABORT + H(I) = I + 14 + END DO + + CALL ACC_PCREATE (H) + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (14, 13, SHARED_MEM)) CALL ABORT + H(I) = I + 15 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (15, 14, SHARED_MEM)) CALL ABORT + H(I) = I + 16 + END DO + + CALL ACC_PCREATE (H) + +!$ACC PARALLEL LOOP DEFAULT (PRESENT) + DO I = 1, N + IF (H(I) .NE. I + MERGE (16, 15, SHARED_MEM)) CALL ABORT + H(I) = I + 17 + END DO +!$ACC END PARALLEL LOOP + + DO I = 1, N + IF (H(I) .NE. I + MERGE (17, 16, SHARED_MEM)) CALL ABORT + H(I) = I + 18 + END DO + + CALL ACC_UPDATE_SELF (H) + IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT + + DO I = 1, N + IF (H(I) .NE. I + MERGE (18, 17, SHARED_MEM)) CALL ABORT + END DO + + CALL ACC_DELETE (H) + IF (.NOT. SHARED_MEM) THEN + IF (ACC_IS_PRESENT (H)) CALL ABORT + ENDIF + + DEALLOCATE (H) + + END PROGRAM MAIN