[nvptx] Use CUDA driver API to select default runtime launch geometry
authorCesar Philippidis <cesar@codesourcery.com>
Mon, 13 Aug 2018 12:04:24 +0000 (05:04 -0700)
committerTom de Vries <vries@gcc.gnu.org>
Mon, 13 Aug 2018 12:04:24 +0000 (12:04 +0000)
commitbd9b3d3d1a8d33e460ae137da0cb0d5a919e8f8f
tree0729abf2a8dd6b64d2d8313c3c16b16b428c15ab
parentcdf899781c7321987a9948e5ca0847e8b38da798
[nvptx] Use CUDA driver API to select default runtime launch geometry

The CUDA driver API starting version 6.5 offers a set of runtime functions to
calculate several occupancy-related measures, as a replacement for the occupancy
calculator spreadsheet.

This patch adds a heuristic for default runtime launch geometry, based on the
new runtime function cuOccupancyMaxPotentialBlockSize.

Build on x86_64 with nvptx accelerator and ran libgomp testsuite.

2018-08-13  Cesar Philippidis  <cesar@codesourcery.com>
    Tom de Vries  <tdevries@suse.de>

PR target/85590
* plugin/cuda/cuda.h (CUoccupancyB2DSize): New typedef.
(cuOccupancyMaxPotentialBlockSize): Declare.
* plugin/cuda-lib.def (cuOccupancyMaxPotentialBlockSize): New
CUDA_ONE_CALL_MAYBE_NULL.
* plugin/plugin-nvptx.c (CUDA_VERSION < 6050): Define
CUoccupancyB2DSize and declare
cuOccupancyMaxPotentialBlockSize.
(nvptx_exec): Use cuOccupancyMaxPotentialBlockSize to set the
default num_gangs and num_workers when the driver supports it.

Co-Authored-By: Tom de Vries <tdevries@suse.de>
From-SVN: r263505
libgomp/ChangeLog
libgomp/plugin/cuda-lib.def
libgomp/plugin/cuda/cuda.h
libgomp/plugin/plugin-nvptx.c