gcc/libgomp/openacc_lib.h
Tobias Burnus e464fc9035 [OpenACC] bump version for 2.6 plus libgomp.texi update
2020-02-03  Julian Brown  <julian@codesourcery.com>
            Tobias Burnus  <tobias@codesourcery.com>

	gcc/c-family/
	* c-cppbuiltin.c (c_cpp_builtins): Update _OPENACC define to 201711.

	gcc/
	* doc/invoke.texi: Update mention of OpenACC version to 2.6.

	gcc/fortran/
	* cpp.c (cpp_define_builtins): Update _OPENACC define to 201711.
	* intrinsic.texi: Update mentions of OpenACC version to 2.6.
	* gfortran.texi: Likewise. Remove experimental disclamer for OpenACC.
	* invoke.texi: Remove experimental disclamer for OpenACC.

	gcc/testsuite/
	* c-c++-common/cpp/openacc-define-3.c: Update expected value for
	_OPENACC define.
	* gfortran.dg/openacc-define-3.f90: Likewise.

	libgomp/
	* libgomp.texi (OpenACC Runtime Library Routines): Document *_async
	and *_finalize variants; document acc_attach and acc_detach; update
	references from OpenACC 2.0 to 2.6.
	* openacc.f90 (openacc_version): Update to 201711.
	* openacc_lib.h (openacc_version): Update to 201711.
	* testsuite/libgomp.oacc-fortran/openacc_version-1.f: Update expected
	openacc_version to 201711.
	* testsuite/libgomp.oacc-fortran/openacc_version-2.f90: Likewise.
2020-02-03 10:10:37 +01:00

565 lines
18 KiB
Fortran

! OpenACC Runtime Library Definitions. -*- mode: fortran -*-
! Copyright (C) 2014-2020 Free Software Foundation, Inc.
! Contributed by Tobias Burnus <burnus@net-b.de>
! and Mentor Embedded.
! This file is part of the GNU Offloading and Multi Processing Library
! (libgomp).
! Libgomp is free software; you can redistribute it and/or modify it
! under the terms of the GNU General Public License as published by
! the Free Software Foundation; either version 3, or (at your option)
! any later version.
! Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
! FOR A PARTICULAR PURPOSE. See the GNU General Public License for
! more details.
! Under Section 7 of GPL version 3, you are granted additional
! permissions described in the GCC Runtime Library Exception, version
! 3.1, as published by the Free Software Foundation.
! You should have received a copy of the GNU General Public License and
! a copy of the GCC Runtime Library Exception along with this program;
! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
! <http://www.gnu.org/licenses/>.
! NOTE: Due to the use of dimension (..), the code only works when compiled
! with -std=f2008ts/gnu/legacy but not with other standard settings.
! Alternatively, the user can use the module version, which permits
! compilation with -std=f95.
! Keep in sync with openacc.f90 and config/accel/openacc.f90.
integer, parameter :: acc_device_kind = 4
! Keep in sync with include/gomp-constants.h.
integer (acc_device_kind), parameter :: acc_device_none = 0
integer (acc_device_kind), parameter :: acc_device_default = 1
integer (acc_device_kind), parameter :: acc_device_host = 2
! integer (acc_device_kind), parameter :: acc_device_host_nonshm = 3
! removed.
integer (acc_device_kind), parameter :: acc_device_not_host = 4
integer (acc_device_kind), parameter :: acc_device_nvidia = 5
integer (acc_device_kind), parameter :: acc_device_radeon = 8
integer, parameter :: acc_handle_kind = 4
! Keep in sync with include/gomp-constants.h.
integer (acc_handle_kind), parameter :: acc_async_noval = -1
integer (acc_handle_kind), parameter :: acc_async_sync = -2
integer, parameter :: openacc_version = 201711
interface acc_get_num_devices
function acc_get_num_devices_h (d)
import acc_device_kind
integer acc_get_num_devices_h
integer (acc_device_kind) d
end function
end interface
interface acc_set_device_type
subroutine acc_set_device_type_h (d)
import acc_device_kind
integer (acc_device_kind) d
end subroutine
end interface
interface acc_get_device_type
function acc_get_device_type_h ()
import acc_device_kind
integer (acc_device_kind) acc_get_device_type_h
end function
end interface
interface acc_set_device_num
subroutine acc_set_device_num_h (n, d)
import acc_device_kind
integer n
integer (acc_device_kind) d
end subroutine
end interface
interface acc_get_device_num
function acc_get_device_num_h (d)
import acc_device_kind
integer acc_get_device_num_h
integer (acc_device_kind) d
end function
end interface
interface acc_async_test
function acc_async_test_h (a)
logical acc_async_test_h
integer a
end function
end interface
interface acc_async_test_all
function acc_async_test_all_h ()
logical acc_async_test_all_h
end function
end interface
interface acc_wait
subroutine acc_wait_h (a)
integer a
end subroutine
end interface
! acc_async_wait is an OpenACC 1.0 compatibility name for acc_wait.
interface acc_async_wait
procedure :: acc_wait_h
end interface
interface acc_wait_async
subroutine acc_wait_async_h (a1, a2)
integer a1, a2
end subroutine
end interface
interface acc_wait_all
subroutine acc_wait_all_h ()
end subroutine
end interface
! acc_async_wait_all is an OpenACC 1.0 compatibility name for
! acc_wait_all.
interface acc_async_wait_all
procedure :: acc_wait_all_h
end interface
interface acc_wait_all_async
subroutine acc_wait_all_async_h (a)
integer a
end subroutine
end interface
interface acc_init
subroutine acc_init_h (devicetype)
import acc_device_kind
integer (acc_device_kind) devicetype
end subroutine
end interface
interface acc_shutdown
subroutine acc_shutdown_h (devicetype)
import acc_device_kind
integer (acc_device_kind) devicetype
end subroutine
end interface
interface acc_on_device
function acc_on_device_h (devicetype)
import acc_device_kind
logical acc_on_device_h
integer (acc_device_kind) devicetype
end function
end interface
! acc_malloc: Only available in C/C++
! acc_free: Only available in C/C++
interface acc_copyin
subroutine acc_copyin_32_h (a, len)
use iso_c_binding, only: c_int32_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
end subroutine
subroutine acc_copyin_64_h (a, len)
use iso_c_binding, only: c_int64_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
end subroutine
subroutine acc_copyin_array_h (a)
type (*), dimension (..), contiguous :: a
end subroutine
end interface
interface acc_present_or_copyin
subroutine acc_present_or_copyin_32_h (a, len)
use iso_c_binding, only: c_int32_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
end subroutine
subroutine acc_present_or_copyin_64_h (a, len)
use iso_c_binding, only: c_int64_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
end subroutine
subroutine acc_present_or_copyin_array_h (a)
type (*), dimension (..), contiguous :: a
end subroutine
end interface
interface acc_pcopyin
procedure :: acc_present_or_copyin_32_h
procedure :: acc_present_or_copyin_64_h
procedure :: acc_present_or_copyin_array_h
end interface
interface acc_create
subroutine acc_create_32_h (a, len)
use iso_c_binding, only: c_int32_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
end subroutine
subroutine acc_create_64_h (a, len)
use iso_c_binding, only: c_int64_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
end subroutine
subroutine acc_create_array_h (a)
type (*), dimension (..), contiguous :: a
end subroutine
end interface
interface acc_present_or_create
subroutine acc_present_or_create_32_h (a, len)
use iso_c_binding, only: c_int32_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
end subroutine
subroutine acc_present_or_create_64_h (a, len)
use iso_c_binding, only: c_int64_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
end subroutine
subroutine acc_present_or_create_array_h (a)
type (*), dimension (..), contiguous :: a
end subroutine
end interface
interface acc_pcreate
procedure :: acc_present_or_create_32_h
procedure :: acc_present_or_create_64_h
procedure :: acc_present_or_create_array_h
end interface
interface acc_copyout
subroutine acc_copyout_32_h (a, len)
use iso_c_binding, only: c_int32_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
end subroutine
subroutine acc_copyout_64_h (a, len)
use iso_c_binding, only: c_int64_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
end subroutine
subroutine acc_copyout_array_h (a)
type (*), dimension (..), contiguous :: a
end subroutine
end interface
interface acc_copyout_finalize
subroutine acc_copyout_finalize_32_h (a, len)
use iso_c_binding, only: c_int32_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
end subroutine
subroutine acc_copyout_finalize_64_h (a, len)
use iso_c_binding, only: c_int64_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
end subroutine
subroutine acc_copyout_finalize_array_h (a)
type (*), dimension (..), contiguous :: a
end subroutine
end interface
interface acc_delete
subroutine acc_delete_32_h (a, len)
use iso_c_binding, only: c_int32_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
end subroutine
subroutine acc_delete_64_h (a, len)
use iso_c_binding, only: c_int64_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
end subroutine
subroutine acc_delete_array_h (a)
type (*), dimension (..), contiguous :: a
end subroutine
end interface
interface acc_delete_finalize
subroutine acc_delete_finalize_32_h (a, len)
use iso_c_binding, only: c_int32_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
end subroutine
subroutine acc_delete_finalize_64_h (a, len)
use iso_c_binding, only: c_int64_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
end subroutine
subroutine acc_delete_finalize_array_h (a)
type (*), dimension (..), contiguous :: a
end subroutine
end interface
interface acc_update_device
subroutine acc_update_device_32_h (a, len)
use iso_c_binding, only: c_int32_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
end subroutine
subroutine acc_update_device_64_h (a, len)
use iso_c_binding, only: c_int64_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
end subroutine
subroutine acc_update_device_array_h (a)
type (*), dimension (..), contiguous :: a
end subroutine
end interface
interface acc_update_self
subroutine acc_update_self_32_h (a, len)
use iso_c_binding, only: c_int32_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
end subroutine
subroutine acc_update_self_64_h (a, len)
use iso_c_binding, only: c_int64_t
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
end subroutine
subroutine acc_update_self_array_h (a)
type (*), dimension (..), contiguous :: a
end subroutine
end interface
! acc_map_data: Only available in C/C++
! acc_unmap_data: Only available in C/C++
! acc_deviceptr: Only available in C/C++
! acc_hostptr: Only available in C/C++
interface acc_is_present
function acc_is_present_32_h (a, len)
use iso_c_binding, only: c_int32_t
logical acc_is_present_32_h
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
end function
function acc_is_present_64_h (a, len)
use iso_c_binding, only: c_int64_t
logical acc_is_present_64_h
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
end function
function acc_is_present_array_h (a)
logical acc_is_present_array_h
type (*), dimension (..), contiguous :: a
end function
end interface
! acc_memcpy_to_device: Only available in C/C++
! acc_memcpy_from_device: Only available in C/C++
interface acc_copyin_async
subroutine acc_copyin_async_32_h (a, len, async)
use iso_c_binding, only: c_int32_t
import acc_handle_kind
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
integer (acc_handle_kind) async
end subroutine
subroutine acc_copyin_async_64_h (a, len, async)
use iso_c_binding, only: c_int64_t
import acc_handle_kind
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
integer (acc_handle_kind) async
end subroutine
subroutine acc_copyin_async_array_h (a, async_)
import acc_handle_kind
type (*), dimension (..), contiguous :: a
integer (acc_handle_kind) async_
end subroutine
end interface
interface acc_create_async
subroutine acc_create_async_32_h (a, len, async)
use iso_c_binding, only: c_int32_t
import acc_handle_kind
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
integer (acc_handle_kind) async
end subroutine
subroutine acc_create_async_64_h (a, len, async)
use iso_c_binding, only: c_int64_t
import acc_handle_kind
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
integer (acc_handle_kind) async
end subroutine
subroutine acc_create_async_array_h (a, async_)
import acc_handle_kind
type (*), dimension (..), contiguous :: a
integer (acc_handle_kind) async_
end subroutine
end interface
interface acc_copyout_async
subroutine acc_copyout_async_32_h (a, len, async)
use iso_c_binding, only: c_int32_t
import acc_handle_kind
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
integer (acc_handle_kind) async
end subroutine
subroutine acc_copyout_async_64_h (a, len, async)
use iso_c_binding, only: c_int64_t
import acc_handle_kind
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
integer (acc_handle_kind) async
end subroutine
subroutine acc_copyout_async_array_h (a, async_)
import acc_handle_kind
type (*), dimension (..), contiguous :: a
integer (acc_handle_kind) async_
end subroutine
end interface
interface acc_delete_async
subroutine acc_delete_async_32_h (a, len, async)
use iso_c_binding, only: c_int32_t
import acc_handle_kind
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
integer (acc_handle_kind) async
end subroutine
subroutine acc_delete_async_64_h (a, len, async)
use iso_c_binding, only: c_int64_t
import acc_handle_kind
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
integer (acc_handle_kind) async
end subroutine
subroutine acc_delete_async_array_h (a, async_)
import acc_handle_kind
type (*), dimension (..), contiguous :: a
integer (acc_handle_kind) async_
end subroutine
end interface
interface acc_update_device_async
subroutine acc_update_device_async_32_h (a, len, async)
use iso_c_binding, only: c_int32_t
import acc_handle_kind
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
integer (acc_handle_kind) async
end subroutine
subroutine acc_update_device_async_64_h (a, len, async)
use iso_c_binding, only: c_int64_t
import acc_handle_kind
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
integer (acc_handle_kind) async
end subroutine
subroutine acc_update_device_async_array_h (a, async_)
import acc_handle_kind
type (*), dimension (..), contiguous :: a
integer (acc_handle_kind) async_
end subroutine
end interface
interface acc_update_self_async
subroutine acc_update_self_async_32_h (a, len, async)
use iso_c_binding, only: c_int32_t
import acc_handle_kind
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int32_t) len
integer (acc_handle_kind) async
end subroutine
subroutine acc_update_self_async_64_h (a, len, async)
use iso_c_binding, only: c_int64_t
import acc_handle_kind
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
type (*), dimension (*) :: a
integer (c_int64_t) len
integer (acc_handle_kind) async
end subroutine
subroutine acc_update_self_async_array_h (a, async_)
import acc_handle_kind
type (*), dimension (..), contiguous :: a
integer (acc_handle_kind) async_
end subroutine
end interface