1! OpenACC Runtime Library Definitions. 2 3! Copyright (C) 2014-2017 Free Software Foundation, Inc. 4 5! Contributed by Tobias Burnus <burnus@net-b.de> 6! and Mentor Embedded. 7 8! This file is part of the GNU Offloading and Multi Processing Library 9! (libgomp). 10 11! Libgomp is free software; you can redistribute it and/or modify it 12! under the terms of the GNU General Public License as published by 13! the Free Software Foundation; either version 3, or (at your option) 14! any later version. 15 16! Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY 17! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 18! FOR A PARTICULAR PURPOSE. See the GNU General Public License for 19! more details. 20 21! Under Section 7 of GPL version 3, you are granted additional 22! permissions described in the GCC Runtime Library Exception, version 23! 3.1, as published by the Free Software Foundation. 24 25! You should have received a copy of the GNU General Public License and 26! a copy of the GCC Runtime Library Exception along with this program; 27! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 28! <http://www.gnu.org/licenses/>. 29 30module openacc_kinds 31 use iso_fortran_env, only: int32 32 implicit none 33 34 private :: int32 35 public :: acc_device_kind 36 37 integer, parameter :: acc_device_kind = int32 38 39 public :: acc_device_none, acc_device_default, acc_device_host 40 public :: acc_device_not_host, acc_device_nvidia 41 42 ! Keep in sync with include/gomp-constants.h. 43 integer (acc_device_kind), parameter :: acc_device_none = 0 44 integer (acc_device_kind), parameter :: acc_device_default = 1 45 integer (acc_device_kind), parameter :: acc_device_host = 2 46 ! integer (acc_device_kind), parameter :: acc_device_host_nonshm = 3 removed. 47 integer (acc_device_kind), parameter :: acc_device_not_host = 4 48 integer (acc_device_kind), parameter :: acc_device_nvidia = 5 49 50 public :: acc_handle_kind 51 52 integer, parameter :: acc_handle_kind = int32 53 54 public :: acc_async_noval, acc_async_sync 55 56 ! Keep in sync with include/gomp-constants.h. 57 integer (acc_handle_kind), parameter :: acc_async_noval = -1 58 integer (acc_handle_kind), parameter :: acc_async_sync = -2 59 60end module 61 62module openacc_internal 63 use openacc_kinds 64 implicit none 65 66 interface 67 function acc_get_num_devices_h (d) 68 import 69 integer acc_get_num_devices_h 70 integer (acc_device_kind) d 71 end function 72 73 subroutine acc_set_device_type_h (d) 74 import 75 integer (acc_device_kind) d 76 end subroutine 77 78 function acc_get_device_type_h () 79 import 80 integer (acc_device_kind) acc_get_device_type_h 81 end function 82 83 subroutine acc_set_device_num_h (n, d) 84 import 85 integer n 86 integer (acc_device_kind) d 87 end subroutine 88 89 function acc_get_device_num_h (d) 90 import 91 integer acc_get_device_num_h 92 integer (acc_device_kind) d 93 end function 94 95 function acc_async_test_h (a) 96 logical acc_async_test_h 97 integer a 98 end function 99 100 function acc_async_test_all_h () 101 logical acc_async_test_all_h 102 end function 103 104 subroutine acc_wait_h (a) 105 integer a 106 end subroutine 107 108 subroutine acc_wait_async_h (a1, a2) 109 integer a1, a2 110 end subroutine 111 112 subroutine acc_wait_all_h () 113 end subroutine 114 115 subroutine acc_wait_all_async_h (a) 116 integer a 117 end subroutine 118 119 subroutine acc_init_h (d) 120 import 121 integer (acc_device_kind) d 122 end subroutine 123 124 subroutine acc_shutdown_h (d) 125 import 126 integer (acc_device_kind) d 127 end subroutine 128 129 function acc_on_device_h (d) 130 import 131 integer (acc_device_kind) d 132 logical acc_on_device_h 133 end function 134 135 subroutine acc_copyin_32_h (a, len) 136 use iso_c_binding, only: c_int32_t 137 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 138 type (*), dimension (*) :: a 139 integer (c_int32_t) len 140 end subroutine 141 142 subroutine acc_copyin_64_h (a, len) 143 use iso_c_binding, only: c_int64_t 144 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 145 type (*), dimension (*) :: a 146 integer (c_int64_t) len 147 end subroutine 148 149 subroutine acc_copyin_array_h (a) 150 type (*), dimension (..), contiguous :: a 151 end subroutine 152 153 subroutine acc_present_or_copyin_32_h (a, len) 154 use iso_c_binding, only: c_int32_t 155 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 156 type (*), dimension (*) :: a 157 integer (c_int32_t) len 158 end subroutine 159 160 subroutine acc_present_or_copyin_64_h (a, len) 161 use iso_c_binding, only: c_int64_t 162 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 163 type (*), dimension (*) :: a 164 integer (c_int64_t) len 165 end subroutine 166 167 subroutine acc_present_or_copyin_array_h (a) 168 type (*), dimension (..), contiguous :: a 169 end subroutine 170 171 subroutine acc_create_32_h (a, len) 172 use iso_c_binding, only: c_int32_t 173 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 174 type (*), dimension (*) :: a 175 integer (c_int32_t) len 176 end subroutine 177 178 subroutine acc_create_64_h (a, len) 179 use iso_c_binding, only: c_int64_t 180 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 181 type (*), dimension (*) :: a 182 integer (c_int64_t) len 183 end subroutine 184 185 subroutine acc_create_array_h (a) 186 type (*), dimension (..), contiguous :: a 187 end subroutine 188 189 subroutine acc_present_or_create_32_h (a, len) 190 use iso_c_binding, only: c_int32_t 191 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 192 type (*), dimension (*) :: a 193 integer (c_int32_t) len 194 end subroutine 195 196 subroutine acc_present_or_create_64_h (a, len) 197 use iso_c_binding, only: c_int64_t 198 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 199 type (*), dimension (*) :: a 200 integer (c_int64_t) len 201 end subroutine 202 203 subroutine acc_present_or_create_array_h (a) 204 type (*), dimension (..), contiguous :: a 205 end subroutine 206 207 subroutine acc_copyout_32_h (a, len) 208 use iso_c_binding, only: c_int32_t 209 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 210 type (*), dimension (*) :: a 211 integer (c_int32_t) len 212 end subroutine 213 214 subroutine acc_copyout_64_h (a, len) 215 use iso_c_binding, only: c_int64_t 216 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 217 type (*), dimension (*) :: a 218 integer (c_int64_t) len 219 end subroutine 220 221 subroutine acc_copyout_array_h (a) 222 type (*), dimension (..), contiguous :: a 223 end subroutine 224 225 subroutine acc_delete_32_h (a, len) 226 use iso_c_binding, only: c_int32_t 227 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 228 type (*), dimension (*) :: a 229 integer (c_int32_t) len 230 end subroutine 231 232 subroutine acc_delete_64_h (a, len) 233 use iso_c_binding, only: c_int64_t 234 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 235 type (*), dimension (*) :: a 236 integer (c_int64_t) len 237 end subroutine 238 239 subroutine acc_delete_array_h (a) 240 type (*), dimension (..), contiguous :: a 241 end subroutine 242 243 subroutine acc_update_device_32_h (a, len) 244 use iso_c_binding, only: c_int32_t 245 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 246 type (*), dimension (*) :: a 247 integer (c_int32_t) len 248 end subroutine 249 250 subroutine acc_update_device_64_h (a, len) 251 use iso_c_binding, only: c_int64_t 252 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 253 type (*), dimension (*) :: a 254 integer (c_int64_t) len 255 end subroutine 256 257 subroutine acc_update_device_array_h (a) 258 type (*), dimension (..), contiguous :: a 259 end subroutine 260 261 subroutine acc_update_self_32_h (a, len) 262 use iso_c_binding, only: c_int32_t 263 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 264 type (*), dimension (*) :: a 265 integer (c_int32_t) len 266 end subroutine 267 268 subroutine acc_update_self_64_h (a, len) 269 use iso_c_binding, only: c_int64_t 270 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 271 type (*), dimension (*) :: a 272 integer (c_int64_t) len 273 end subroutine 274 275 subroutine acc_update_self_array_h (a) 276 type (*), dimension (..), contiguous :: a 277 end subroutine 278 279 function acc_is_present_32_h (a, len) 280 use iso_c_binding, only: c_int32_t 281 logical acc_is_present_32_h 282 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 283 type (*), dimension (*) :: a 284 integer (c_int32_t) len 285 end function 286 287 function acc_is_present_64_h (a, len) 288 use iso_c_binding, only: c_int64_t 289 logical acc_is_present_64_h 290 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 291 type (*), dimension (*) :: a 292 integer (c_int64_t) len 293 end function 294 295 function acc_is_present_array_h (a) 296 logical acc_is_present_array_h 297 type (*), dimension (..), contiguous :: a 298 end function 299 end interface 300 301 interface 302 function acc_get_num_devices_l (d) & 303 bind (C, name = "acc_get_num_devices") 304 use iso_c_binding, only: c_int 305 integer (c_int) :: acc_get_num_devices_l 306 integer (c_int), value :: d 307 end function 308 309 subroutine acc_set_device_type_l (d) & 310 bind (C, name = "acc_set_device_type") 311 use iso_c_binding, only: c_int 312 integer (c_int), value :: d 313 end subroutine 314 315 function acc_get_device_type_l () & 316 bind (C, name = "acc_get_device_type") 317 use iso_c_binding, only: c_int 318 integer (c_int) :: acc_get_device_type_l 319 end function 320 321 subroutine acc_set_device_num_l (n, d) & 322 bind (C, name = "acc_set_device_num") 323 use iso_c_binding, only: c_int 324 integer (c_int), value :: n, d 325 end subroutine 326 327 function acc_get_device_num_l (d) & 328 bind (C, name = "acc_get_device_num") 329 use iso_c_binding, only: c_int 330 integer (c_int) :: acc_get_device_num_l 331 integer (c_int), value :: d 332 end function 333 334 function acc_async_test_l (a) & 335 bind (C, name = "acc_async_test") 336 use iso_c_binding, only: c_int 337 integer (c_int) :: acc_async_test_l 338 integer (c_int), value :: a 339 end function 340 341 function acc_async_test_all_l () & 342 bind (C, name = "acc_async_test_all") 343 use iso_c_binding, only: c_int 344 integer (c_int) :: acc_async_test_all_l 345 end function 346 347 subroutine acc_wait_l (a) & 348 bind (C, name = "acc_wait") 349 use iso_c_binding, only: c_int 350 integer (c_int), value :: a 351 end subroutine 352 353 subroutine acc_wait_async_l (a1, a2) & 354 bind (C, name = "acc_wait_async") 355 use iso_c_binding, only: c_int 356 integer (c_int), value :: a1, a2 357 end subroutine 358 359 subroutine acc_wait_all_l () & 360 bind (C, name = "acc_wait_all") 361 use iso_c_binding, only: c_int 362 end subroutine 363 364 subroutine acc_wait_all_async_l (a) & 365 bind (C, name = "acc_wait_all_async") 366 use iso_c_binding, only: c_int 367 integer (c_int), value :: a 368 end subroutine 369 370 subroutine acc_init_l (d) & 371 bind (C, name = "acc_init") 372 use iso_c_binding, only: c_int 373 integer (c_int), value :: d 374 end subroutine 375 376 subroutine acc_shutdown_l (d) & 377 bind (C, name = "acc_shutdown") 378 use iso_c_binding, only: c_int 379 integer (c_int), value :: d 380 end subroutine 381 382 function acc_on_device_l (d) & 383 bind (C, name = "acc_on_device") 384 use iso_c_binding, only: c_int 385 integer (c_int) :: acc_on_device_l 386 integer (c_int), value :: d 387 end function 388 389 subroutine acc_copyin_l (a, len) & 390 bind (C, name = "acc_copyin") 391 use iso_c_binding, only: c_size_t 392 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 393 type (*), dimension (*) :: a 394 integer (c_size_t), value :: len 395 end subroutine 396 397 subroutine acc_present_or_copyin_l (a, len) & 398 bind (C, name = "acc_present_or_copyin") 399 use iso_c_binding, only: c_size_t 400 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 401 type (*), dimension (*) :: a 402 integer (c_size_t), value :: len 403 end subroutine 404 405 subroutine acc_create_l (a, len) & 406 bind (C, name = "acc_create") 407 use iso_c_binding, only: c_size_t 408 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 409 type (*), dimension (*) :: a 410 integer (c_size_t), value :: len 411 end subroutine 412 413 subroutine acc_present_or_create_l (a, len) & 414 bind (C, name = "acc_present_or_create") 415 use iso_c_binding, only: c_size_t 416 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 417 type (*), dimension (*) :: a 418 integer (c_size_t), value :: len 419 end subroutine 420 421 subroutine acc_copyout_l (a, len) & 422 bind (C, name = "acc_copyout") 423 use iso_c_binding, only: c_size_t 424 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 425 type (*), dimension (*) :: a 426 integer (c_size_t), value :: len 427 end subroutine 428 429 subroutine acc_delete_l (a, len) & 430 bind (C, name = "acc_delete") 431 use iso_c_binding, only: c_size_t 432 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 433 type (*), dimension (*) :: a 434 integer (c_size_t), value :: len 435 end subroutine 436 437 subroutine acc_update_device_l (a, len) & 438 bind (C, name = "acc_update_device") 439 use iso_c_binding, only: c_size_t 440 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 441 type (*), dimension (*) :: a 442 integer (c_size_t), value :: len 443 end subroutine 444 445 subroutine acc_update_self_l (a, len) & 446 bind (C, name = "acc_update_self") 447 use iso_c_binding, only: c_size_t 448 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 449 type (*), dimension (*) :: a 450 integer (c_size_t), value :: len 451 end subroutine 452 453 function acc_is_present_l (a, len) & 454 bind (C, name = "acc_is_present") 455 use iso_c_binding, only: c_int32_t, c_size_t 456 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 457 integer (c_int32_t) :: acc_is_present_l 458 type (*), dimension (*) :: a 459 integer (c_size_t), value :: len 460 end function 461 end interface 462end module 463 464module openacc 465 use openacc_kinds 466 use openacc_internal 467 implicit none 468 469 public :: openacc_version 470 471 public :: acc_get_num_devices, acc_set_device_type, acc_get_device_type 472 public :: acc_set_device_num, acc_get_device_num, acc_async_test 473 public :: acc_async_test_all, acc_wait, acc_wait_async, acc_wait_all 474 public :: acc_wait_all_async, acc_init, acc_shutdown, acc_on_device 475 public :: acc_copyin, acc_present_or_copyin, acc_pcopyin, acc_create 476 public :: acc_present_or_create, acc_pcreate, acc_copyout, acc_delete 477 public :: acc_update_device, acc_update_self, acc_is_present 478 479 integer, parameter :: openacc_version = 201306 480 481 interface acc_get_num_devices 482 procedure :: acc_get_num_devices_h 483 end interface 484 485 interface acc_set_device_type 486 procedure :: acc_set_device_type_h 487 end interface 488 489 interface acc_get_device_type 490 procedure :: acc_get_device_type_h 491 end interface 492 493 interface acc_set_device_num 494 procedure :: acc_set_device_num_h 495 end interface 496 497 interface acc_get_device_num 498 procedure :: acc_get_device_num_h 499 end interface 500 501 interface acc_async_test 502 procedure :: acc_async_test_h 503 end interface 504 505 interface acc_async_test_all 506 procedure :: acc_async_test_all_h 507 end interface 508 509 interface acc_wait 510 procedure :: acc_wait_h 511 end interface 512 513 interface acc_wait_async 514 procedure :: acc_wait_async_h 515 end interface 516 517 interface acc_wait_all 518 procedure :: acc_wait_all_h 519 end interface 520 521 interface acc_wait_all_async 522 procedure :: acc_wait_all_async_h 523 end interface 524 525 interface acc_init 526 procedure :: acc_init_h 527 end interface 528 529 interface acc_shutdown 530 procedure :: acc_shutdown_h 531 end interface 532 533 interface acc_on_device 534 procedure :: acc_on_device_h 535 end interface 536 537 ! acc_malloc: Only available in C/C++ 538 ! acc_free: Only available in C/C++ 539 540 ! As vendor extension, the following code supports both 32bit and 64bit 541 ! arguments for "size"; the OpenACC standard only permits default-kind 542 ! integers, which are of kind 4 (i.e. 32 bits). 543 ! Additionally, the two-argument version also takes arrays as argument. 544 ! and the one argument version also scalars. Note that the code assumes 545 ! that the arrays are contiguous. 546 547 interface acc_copyin 548 procedure :: acc_copyin_32_h 549 procedure :: acc_copyin_64_h 550 procedure :: acc_copyin_array_h 551 end interface 552 553 interface acc_present_or_copyin 554 procedure :: acc_present_or_copyin_32_h 555 procedure :: acc_present_or_copyin_64_h 556 procedure :: acc_present_or_copyin_array_h 557 end interface 558 559 interface acc_pcopyin 560 procedure :: acc_present_or_copyin_32_h 561 procedure :: acc_present_or_copyin_64_h 562 procedure :: acc_present_or_copyin_array_h 563 end interface 564 565 interface acc_create 566 procedure :: acc_create_32_h 567 procedure :: acc_create_64_h 568 procedure :: acc_create_array_h 569 end interface 570 571 interface acc_present_or_create 572 procedure :: acc_present_or_create_32_h 573 procedure :: acc_present_or_create_64_h 574 procedure :: acc_present_or_create_array_h 575 end interface 576 577 interface acc_pcreate 578 procedure :: acc_present_or_create_32_h 579 procedure :: acc_present_or_create_64_h 580 procedure :: acc_present_or_create_array_h 581 end interface 582 583 interface acc_copyout 584 procedure :: acc_copyout_32_h 585 procedure :: acc_copyout_64_h 586 procedure :: acc_copyout_array_h 587 end interface 588 589 interface acc_delete 590 procedure :: acc_delete_32_h 591 procedure :: acc_delete_64_h 592 procedure :: acc_delete_array_h 593 end interface 594 595 interface acc_update_device 596 procedure :: acc_update_device_32_h 597 procedure :: acc_update_device_64_h 598 procedure :: acc_update_device_array_h 599 end interface 600 601 interface acc_update_self 602 procedure :: acc_update_self_32_h 603 procedure :: acc_update_self_64_h 604 procedure :: acc_update_self_array_h 605 end interface 606 607 ! acc_map_data: Only available in C/C++ 608 ! acc_unmap_data: Only available in C/C++ 609 ! acc_deviceptr: Only available in C/C++ 610 ! acc_hostptr: Only available in C/C++ 611 612 interface acc_is_present 613 procedure :: acc_is_present_32_h 614 procedure :: acc_is_present_64_h 615 procedure :: acc_is_present_array_h 616 end interface 617 618 ! acc_memcpy_to_device: Only available in C/C++ 619 ! acc_memcpy_from_device: Only available in C/C++ 620 621end module 622 623function acc_get_num_devices_h (d) 624 use openacc_internal, only: acc_get_num_devices_l 625 use openacc_kinds 626 integer acc_get_num_devices_h 627 integer (acc_device_kind) d 628 acc_get_num_devices_h = acc_get_num_devices_l (d) 629end function 630 631subroutine acc_set_device_type_h (d) 632 use openacc_internal, only: acc_set_device_type_l 633 use openacc_kinds 634 integer (acc_device_kind) d 635 call acc_set_device_type_l (d) 636end subroutine 637 638function acc_get_device_type_h () 639 use openacc_internal, only: acc_get_device_type_l 640 use openacc_kinds 641 integer (acc_device_kind) acc_get_device_type_h 642 acc_get_device_type_h = acc_get_device_type_l () 643end function 644 645subroutine acc_set_device_num_h (n, d) 646 use openacc_internal, only: acc_set_device_num_l 647 use openacc_kinds 648 integer n 649 integer (acc_device_kind) d 650 call acc_set_device_num_l (n, d) 651end subroutine 652 653function acc_get_device_num_h (d) 654 use openacc_internal, only: acc_get_device_num_l 655 use openacc_kinds 656 integer acc_get_device_num_h 657 integer (acc_device_kind) d 658 acc_get_device_num_h = acc_get_device_num_l (d) 659end function 660 661function acc_async_test_h (a) 662 use openacc_internal, only: acc_async_test_l 663 logical acc_async_test_h 664 integer a 665 if (acc_async_test_l (a) .eq. 1) then 666 acc_async_test_h = .TRUE. 667 else 668 acc_async_test_h = .FALSE. 669 end if 670end function 671 672function acc_async_test_all_h () 673 use openacc_internal, only: acc_async_test_all_l 674 logical acc_async_test_all_h 675 if (acc_async_test_all_l () .eq. 1) then 676 acc_async_test_all_h = .TRUE. 677 else 678 acc_async_test_all_h = .FALSE. 679 end if 680end function 681 682subroutine acc_wait_h (a) 683 use openacc_internal, only: acc_wait_l 684 integer a 685 call acc_wait_l (a) 686end subroutine 687 688subroutine acc_wait_async_h (a1, a2) 689 use openacc_internal, only: acc_wait_async_l 690 integer a1, a2 691 call acc_wait_async_l (a1, a2) 692end subroutine 693 694subroutine acc_wait_all_h () 695 use openacc_internal, only: acc_wait_all_l 696 call acc_wait_all_l () 697end subroutine 698 699subroutine acc_wait_all_async_h (a) 700 use openacc_internal, only: acc_wait_all_async_l 701 integer a 702 call acc_wait_all_async_l (a) 703end subroutine 704 705subroutine acc_init_h (d) 706 use openacc_internal, only: acc_init_l 707 use openacc_kinds 708 integer (acc_device_kind) d 709 call acc_init_l (d) 710end subroutine 711 712subroutine acc_shutdown_h (d) 713 use openacc_internal, only: acc_shutdown_l 714 use openacc_kinds 715 integer (acc_device_kind) d 716 call acc_shutdown_l (d) 717end subroutine 718 719function acc_on_device_h (d) 720 use openacc_internal, only: acc_on_device_l 721 use openacc_kinds 722 integer (acc_device_kind) d 723 logical acc_on_device_h 724 if (acc_on_device_l (d) .eq. 1) then 725 acc_on_device_h = .TRUE. 726 else 727 acc_on_device_h = .FALSE. 728 end if 729end function 730 731subroutine acc_copyin_32_h (a, len) 732 use iso_c_binding, only: c_int32_t, c_size_t 733 use openacc_internal, only: acc_copyin_l 734 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 735 type (*), dimension (*) :: a 736 integer (c_int32_t) len 737 call acc_copyin_l (a, int (len, kind = c_size_t)) 738end subroutine 739 740subroutine acc_copyin_64_h (a, len) 741 use iso_c_binding, only: c_int64_t, c_size_t 742 use openacc_internal, only: acc_copyin_l 743 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 744 type (*), dimension (*) :: a 745 integer (c_int64_t) len 746 call acc_copyin_l (a, int (len, kind = c_size_t)) 747end subroutine 748 749subroutine acc_copyin_array_h (a) 750 use openacc_internal, only: acc_copyin_l 751 type (*), dimension (..), contiguous :: a 752 call acc_copyin_l (a, sizeof (a)) 753end subroutine 754 755subroutine acc_present_or_copyin_32_h (a, len) 756 use iso_c_binding, only: c_int32_t, c_size_t 757 use openacc_internal, only: acc_present_or_copyin_l 758 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 759 type (*), dimension (*) :: a 760 integer (c_int32_t) len 761 call acc_present_or_copyin_l (a, int (len, kind = c_size_t)) 762end subroutine 763 764subroutine acc_present_or_copyin_64_h (a, len) 765 use iso_c_binding, only: c_int64_t, c_size_t 766 use openacc_internal, only: acc_present_or_copyin_l 767 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 768 type (*), dimension (*) :: a 769 integer (c_int64_t) len 770 call acc_present_or_copyin_l (a, int (len, kind = c_size_t)) 771end subroutine 772 773subroutine acc_present_or_copyin_array_h (a) 774 use openacc_internal, only: acc_present_or_copyin_l 775 type (*), dimension (..), contiguous :: a 776 call acc_present_or_copyin_l (a, sizeof (a)) 777end subroutine 778 779subroutine acc_create_32_h (a, len) 780 use iso_c_binding, only: c_int32_t, c_size_t 781 use openacc_internal, only: acc_create_l 782 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 783 type (*), dimension (*) :: a 784 integer (c_int32_t) len 785 call acc_create_l (a, int (len, kind = c_size_t)) 786end subroutine 787 788subroutine acc_create_64_h (a, len) 789 use iso_c_binding, only: c_int64_t, c_size_t 790 use openacc_internal, only: acc_create_l 791 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 792 type (*), dimension (*) :: a 793 integer (c_int64_t) len 794 call acc_create_l (a, int (len, kind = c_size_t)) 795end subroutine 796 797subroutine acc_create_array_h (a) 798 use openacc_internal, only: acc_create_l 799 type (*), dimension (..), contiguous :: a 800 call acc_create_l (a, sizeof (a)) 801end subroutine 802 803subroutine acc_present_or_create_32_h (a, len) 804 use iso_c_binding, only: c_int32_t, c_size_t 805 use openacc_internal, only: acc_present_or_create_l 806 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 807 type (*), dimension (*) :: a 808 integer (c_int32_t) len 809 call acc_present_or_create_l (a, int (len, kind = c_size_t)) 810end subroutine 811 812subroutine acc_present_or_create_64_h (a, len) 813 use iso_c_binding, only: c_int64_t, c_size_t 814 use openacc_internal, only: acc_present_or_create_l 815 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 816 type (*), dimension (*) :: a 817 integer (c_int64_t) len 818 call acc_present_or_create_l (a, int (len, kind = c_size_t)) 819end subroutine 820 821subroutine acc_present_or_create_array_h (a) 822 use openacc_internal, only: acc_present_or_create_l 823 type (*), dimension (..), contiguous :: a 824 call acc_present_or_create_l (a, sizeof (a)) 825end subroutine 826 827subroutine acc_copyout_32_h (a, len) 828 use iso_c_binding, only: c_int32_t, c_size_t 829 use openacc_internal, only: acc_copyout_l 830 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 831 type (*), dimension (*) :: a 832 integer (c_int32_t) len 833 call acc_copyout_l (a, int (len, kind = c_size_t)) 834end subroutine 835 836subroutine acc_copyout_64_h (a, len) 837 use iso_c_binding, only: c_int64_t, c_size_t 838 use openacc_internal, only: acc_copyout_l 839 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 840 type (*), dimension (*) :: a 841 integer (c_int64_t) len 842 call acc_copyout_l (a, int (len, kind = c_size_t)) 843end subroutine 844 845subroutine acc_copyout_array_h (a) 846 use openacc_internal, only: acc_copyout_l 847 type (*), dimension (..), contiguous :: a 848 call acc_copyout_l (a, sizeof (a)) 849end subroutine 850 851subroutine acc_delete_32_h (a, len) 852 use iso_c_binding, only: c_int32_t, c_size_t 853 use openacc_internal, only: acc_delete_l 854 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 855 type (*), dimension (*) :: a 856 integer (c_int32_t) len 857 call acc_delete_l (a, int (len, kind = c_size_t)) 858end subroutine 859 860subroutine acc_delete_64_h (a, len) 861 use iso_c_binding, only: c_int64_t, c_size_t 862 use openacc_internal, only: acc_delete_l 863 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 864 type (*), dimension (*) :: a 865 integer (c_int64_t) len 866 call acc_delete_l (a, int (len, kind = c_size_t)) 867end subroutine 868 869subroutine acc_delete_array_h (a) 870 use openacc_internal, only: acc_delete_l 871 type (*), dimension (..), contiguous :: a 872 call acc_delete_l (a, sizeof (a)) 873end subroutine 874 875subroutine acc_update_device_32_h (a, len) 876 use iso_c_binding, only: c_int32_t, c_size_t 877 use openacc_internal, only: acc_update_device_l 878 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 879 type (*), dimension (*) :: a 880 integer (c_int32_t) len 881 call acc_update_device_l (a, int (len, kind = c_size_t)) 882end subroutine 883 884subroutine acc_update_device_64_h (a, len) 885 use iso_c_binding, only: c_int64_t, c_size_t 886 use openacc_internal, only: acc_update_device_l 887 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 888 type (*), dimension (*) :: a 889 integer (c_int64_t) len 890 call acc_update_device_l (a, int (len, kind = c_size_t)) 891end subroutine 892 893subroutine acc_update_device_array_h (a) 894 use openacc_internal, only: acc_update_device_l 895 type (*), dimension (..), contiguous :: a 896 call acc_update_device_l (a, sizeof (a)) 897end subroutine 898 899subroutine acc_update_self_32_h (a, len) 900 use iso_c_binding, only: c_int32_t, c_size_t 901 use openacc_internal, only: acc_update_self_l 902 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 903 type (*), dimension (*) :: a 904 integer (c_int32_t) len 905 call acc_update_self_l (a, int (len, kind = c_size_t)) 906end subroutine 907 908subroutine acc_update_self_64_h (a, len) 909 use iso_c_binding, only: c_int64_t, c_size_t 910 use openacc_internal, only: acc_update_self_l 911 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 912 type (*), dimension (*) :: a 913 integer (c_int64_t) len 914 call acc_update_self_l (a, int (len, kind = c_size_t)) 915end subroutine 916 917subroutine acc_update_self_array_h (a) 918 use openacc_internal, only: acc_update_self_l 919 type (*), dimension (..), contiguous :: a 920 call acc_update_self_l (a, sizeof (a)) 921end subroutine 922 923function acc_is_present_32_h (a, len) 924 use iso_c_binding, only: c_int32_t, c_size_t 925 use openacc_internal, only: acc_is_present_l 926 logical acc_is_present_32_h 927 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 928 type (*), dimension (*) :: a 929 integer (c_int32_t) len 930 if (acc_is_present_l (a, int (len, kind = c_size_t)) .eq. 1) then 931 acc_is_present_32_h = .TRUE. 932 else 933 acc_is_present_32_h = .FALSE. 934 end if 935end function 936 937function acc_is_present_64_h (a, len) 938 use iso_c_binding, only: c_int64_t, c_size_t 939 use openacc_internal, only: acc_is_present_l 940 logical acc_is_present_64_h 941 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a 942 type (*), dimension (*) :: a 943 integer (c_int64_t) len 944 if (acc_is_present_l (a, int (len, kind = c_size_t)) .eq. 1) then 945 acc_is_present_64_h = .TRUE. 946 else 947 acc_is_present_64_h = .FALSE. 948 end if 949end function 950 951function acc_is_present_array_h (a) 952 use openacc_internal, only: acc_is_present_l 953 logical acc_is_present_array_h 954 type (*), dimension (..), contiguous :: a 955 acc_is_present_array_h = acc_is_present_l (a, sizeof (a)) == 1 956end function 957