Skip to content

[flang][OpenMP] Custom mappers not supported in target update construct #168701

@jfuchs-kmt

Description

@jfuchs-kmt

The OpenMP standard v5.2 p289 and p166-168 resp. defines that custom mappers can be used in target update constructs with to and from:
!$omp target update to(mapper(custom): typ))
!$omp target update from(mapper(custom): typ))

where one could imagine using the feature in a code similar to the snippet:

PROGRAM main
    IMPLICIT NONE

    INTEGER, PARAMETER :: n = 4

    TYPE :: typ
        INTEGER, ALLOCATABLE :: a(:)
        INTEGER, ALLOCATABLE :: b(:)
    END TYPE typ
    !$omp declare mapper(custom: typ :: t) map(t%a)

    TYPE(typ) :: t
    ALLOCATE(t%a(n), source=1)
    ALLOCATE(t%b(n), source=2)
    !$omp target enter data map(alloc: t)

    t%a = 42 ! Modify on host
    !$omp target update to(mapper(custom): t)

    !$omp target
    t%a(:) = t%a(:) / 2 ! Modify on device
    t%b(:) = -1 ! Should not be copied back with custom mapper
    !$omp end target
    !$omp target update from(mapper(custom): t)

    PRINT*, t%a ! Expect: 21 21 21 21
    PRINT*, t%b ! Expect: 2  2  2  2

    !$omp target exit data map(delete: t)
    DEALLOCATE(t%a)
    DEALLOCATE(t%b)
END PROGRAM main

When compiling this with latest flang, the compiler does not recognize the mappers:

> flang -O2 -fopenmp -fopenmp-targets=nvptx64-nvidia-cuda -fopenmp-version=52 main.F90 
warning: OpenMP support for version 52 in flang is still incomplete
error: Semantic errors in main.F90
./main.F90:18:35: error: Internal: no symbol found for 'custom'
      !$omp target update to(mapper(custom): t)
                                    ^^^^^^
./main.F90:24:37: error: Internal: no symbol found for 'custom'
      !$omp target update from(mapper(custom): t)

I am not sure if this is a bug or if the feature is not implemented but since there has been great progress on custom mappers lately, I suspect that the infrastructure to implement it might exist already.

For reference, I am using flang version 22.0.0git (git@github.com:llvm/llvm-project.git ee1abb8d80691e5ef24da3273587dc789c9c6f1b)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions