From patchwork Mon Nov 7 20:36:26 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cesar Philippidis X-Patchwork-Id: 81180 Delivered-To: patch@linaro.org Received: by 10.140.97.165 with SMTP id m34csp1207014qge; Mon, 7 Nov 2016 12:37:00 -0800 (PST) X-Received: by 10.98.79.25 with SMTP id d25mr16522534pfb.42.1478551020934; Mon, 07 Nov 2016 12:37:00 -0800 (PST) Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id m5si32937197pgh.272.2016.11.07.12.37.00 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 07 Nov 2016 12:37:00 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-return-440668-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-440668-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-440668-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:to :from:subject:message-id:date:mime-version:content-type; q=dns; s=default; b=J0WDkcFYfNWKgJ8FA54PCuzj8BO26RMtYi4OhFVH/xVH0ppt5W AJ8i1kosV8ZItJ89799aNy0ybz9602V17L3MeX3sSYLcYcI2gmsXHB5GbhX/RPex 2Ogj9li4a9W24mZilAGWn8MpSZACBJrjQViZXWG75QM1xrCb3zTOc3CTQ= 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=3NTHSBX+zMWZWq6dFUZAkmrbssE=; b=w/X2yPv9+ai0CDjBG6rs gCbfcDCrQcDvIx5OyV4MJ4975lvZsG0knoXefXJEvZGl8G+iwM5jp9wBXUzjFINW GDj4PavYgY+p86Mnzth52ac7AZ2W58xGzNlg2sO//Djtqv4KesH7qvQsX1iXy/jS QdaVGEwn34kdwy22i1ta2Lo= Received: (qmail 83727 invoked by alias); 7 Nov 2016 20:36:43 -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 83173 invoked by uid 89); 7 Nov 2016 20:36:42 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, SPF_PASS, URIBL_RED autolearn=ham version=3.3.2 spammy=worker, locking, D*acm.org, H*r:0800 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, 07 Nov 2016 20:36:32 +0000 Received: from svr-orw-mbx-04.mgc.mentorg.com ([147.34.90.204]) by relay1.mentorg.com with esmtp id 1c3qeb-0002zs-Qs from Cesar_Philippidis@mentor.com for gcc-patches@gcc.gnu.org; Mon, 07 Nov 2016 12:36:29 -0800 Received: from [127.0.0.1] (147.34.91.1) by SVR-ORW-MBX-04.mgc.mentorg.com (147.34.90.204) with Microsoft SMTP Server (TLS) id 15.0.1210.3; Mon, 7 Nov 2016 12:36:27 -0800 To: "gcc-patches@gcc.gnu.org" From: Cesar Philippidis Subject: [gomp4] backport nvptx_exec cleanups Message-ID: Date: Mon, 7 Nov 2016 12:36:26 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0 MIME-Version: 1.0 X-ClientProxiedBy: svr-orw-mbx-01.mgc.mentorg.com (147.34.90.201) To SVR-ORW-MBX-04.mgc.mentorg.com (147.34.90.204) gomp-4_0-branch already contains the default nvptx runtime enhancements that was recently applied to trunk . However, I made some tweaks in trunk involving both pthread locking and formatting changes, which this patch backports. I've applied this patch to gomp-4_0-branch. Cesar 2016-11-07 Cesar Philippidis libgomp/ Backport from trunk 2016-11-02 Cesar Philippidis Nathan Sidwell * plugin/plugin-nvptx.c (nvptx_exec): Interrogate board attributes to determine default geometry. diff --git a/libgomp/plugin/plugin-nvptx.c b/libgomp/plugin/plugin-nvptx.c index bd18418..2e7b020 100644 --- a/libgomp/plugin/plugin-nvptx.c +++ b/libgomp/plugin/plugin-nvptx.c @@ -910,10 +910,11 @@ nvptx_exec (void (*fn), size_t mapnum, void **hostaddrs, void **devaddrs, variable to specify runtime defaults. */ static int default_dims[GOMP_DIM_MAX]; + pthread_mutex_lock (&ptx_dev_lock); if (!default_dims[0]) { /* We only read the environment variable once. You can't - change it in the middle of execution. The sytntax is + change it in the middle of execution. The syntax is the same as for the -fopenacc-dim compilation option. */ const char *env_var = getenv ("GOMP_OPENACC_DIM"); if (env_var) @@ -942,15 +943,17 @@ nvptx_exec (void (*fn), size_t mapnum, void **hostaddrs, void **devaddrs, CUdevice dev = nvptx_thread()->ptx_dev->dev; /* 32 is the default for known hardware. */ int gang = 0, worker = 32, vector = 32; + CUdevice_attribute cu_tpb, cu_ws, cu_mpc, cu_tpm; - if (CUDA_SUCCESS == cuDeviceGetAttribute - (&block_size, CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK, dev) - && CUDA_SUCCESS == cuDeviceGetAttribute - (&warp_size, CU_DEVICE_ATTRIBUTE_WARP_SIZE, dev) - && CUDA_SUCCESS == cuDeviceGetAttribute - (&dev_size, CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT, dev) - && CUDA_SUCCESS == cuDeviceGetAttribute - (&cpu_size, CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR, dev)) + cu_tpb = CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK; + cu_ws = CU_DEVICE_ATTRIBUTE_WARP_SIZE; + cu_mpc = CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT; + cu_tpm = CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR; + + if (cuDeviceGetAttribute (&block_size, cu_tpb, dev) == CUDA_SUCCESS + && cuDeviceGetAttribute (&warp_size, cu_ws, dev) == CUDA_SUCCESS + && cuDeviceGetAttribute (&dev_size, cu_mpc, dev) == CUDA_SUCCESS + && cuDeviceGetAttribute (&cpu_size, cu_tpm, dev) == CUDA_SUCCESS) { GOMP_PLUGIN_debug (0, " warp_size=%d, block_size=%d," " dev_size=%d, cpu_size=%d\n", @@ -980,6 +983,7 @@ nvptx_exec (void (*fn), size_t mapnum, void **hostaddrs, void **devaddrs, default_dims[GOMP_DIM_WORKER], default_dims[GOMP_DIM_VECTOR]); } + pthread_mutex_unlock (&ptx_dev_lock); for (i = 0; i != GOMP_DIM_MAX; i++) if (!dims[i])