<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/136277>136277</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[OpenMP][Flang] ‘Target update’ not working
</td>
</tr>
<tr>
<th>Labels</th>
<td>
flang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Yan-44
</td>
</tr>
</table>
<pre>
Hi,
The simple program below reproduces one of the ‘target update’ issues occurring in a large Fortran code compiled with rocm-6.4.0/flang. It shows that ‘target update’ fails to update variable ‘val’. Why?
```
$ cat test39_target_update.f90
PROGRAM TARGET_UPDATE
use omp_lib
implicit none
integer, parameter :: Nmax=2500000
integer :: i, nteams, nthreads
logical :: initial_device, is_val_assigned_on_device
double precision :: val
double precision, dimension(:),allocatable :: X
double precision,dimension(Nmax) :: expected
!allocating and initialising
allocate(X(Nmax))
initial_device=.true.
is_val_assigned_on_device=.false.
do i = 1, Nmax
expected(i) = -2._8
X(i)=-2._8
end do
!$omp target data map(alloc:val) map(to:X)
!checking correct assignment of 'X' on host for j=1058000 !randomly selected j value
write(*,'(A,F6.1,A,F6.1)')"On host : X(1058000) = ",X(1058000),", expected X(1058000) = ",expected(1058000)
!
!$omp target map(tofrom:initial_device,is_val_assigned_on_device) map(from:nteams,nthreads)
!Assigning 'val' on the device
val=X(1058000)
if (val==-2._8) is_val_assigned_on_device=.true.
!$OMP teams distribute parallel do
do i = 1, Nmax
initial_device = omp_is_initial_device()
X(i)=X(i)-val !hence, X(i) should be '0' if 'val' was correctly assigned
!$ if (i==1) then
!$ nteams= omp_get_num_teams()
!$ nthreads= omp_get_num_threads()
!$ end if
end do
!$omp end teams distribute parallel do
!$OMP END TARGET
if (initial_device) then
write(*,*)"running on host"
write(*,'(A,F6.1)')"val = ",val
else
write(*,'(A,I3,A,I3,A)')"running on device with ",nteams," teams and ",nthreads," threads"
write(*,'(A,L1)')"is_val_assigned_on_device = ",is_val_assigned_on_device
write(*,*)"-----------------"
write(*,'(A)')"before update:"
write(*,'(A,E13.2,A)')" val = ",val,", expected val = undetermined"
write(*,'(A,F6.1,A,F6.1)')"X(1058000) =",X(1058000),",expected X(1058000) = ",expected(1058000)
write(*,*)"---------------"
!$OMP target update from(val)
write(*,'(A,F6.1,A,F6.1)')"after update, val = ",val,", expected val = ",-2._8
!$OMP target update from(X)
write(*,'(A,F6.1,A,F6.1)')"X(1058000) =",X(1058000),", expected X(1058000) = ",0._8
end if
!$omp end target data
deallocate(X)
END PROGRAM
```
```
$ ./test39_target_update
On host : X(1058000) = -2.0, expected X(1058000) = -2.0
running on device with 360 teams and 256 threads
is_val_assigned_on_device = T
-----------------
before update:
val = 0.00E+00, expected val = undetermined
X(1058000) = -2.0,expected X(1058000) = -2.0
---------------
after update, val = 0.0, expected val = -2.0 <- 'TARGET UPDATE' failed
X(1058000) = 0.0, expected X(1058000) = 0.0
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJykV11v46wS_jXkZhQL43z5Ihfeptmz0tltterR6bmKsE0S9mATYdxu__2rARy7-Wi62ihVCQzDzDMzDwNvGrmrhViS6RcyXY14a_faLP_H6_FkMsp1-bb8lyTsjtDsaS-gkdVBCTgYvTO8glwo_QpGHIwu20I0oGsBegt2L4DcM7KgJF1YbnbCQnsouRXdbAqyaVrcURStMbLegayBg0JhWGtjDa-h0KWAQlcHqUQJr9LuweiiGs-iSUQJW28Vr3cRfLPQ7PVrA3bP7c2Dt1yqBqwOC_DCjeS5Glj8wtVRPIL_7t9IsiY0IzMavjQjbAIFt2BFY5N044_aeI3RNnUiNHv8-fD1Z_YdnrKfX--fNv95XGVP90BoBm0jQFeHjZI5_kRYZSEt1LoWbqK2YicMYXdw4IZXwgoDJMlIksGPiv8myYpNKX4G0p0ABgxqK3jV-NHeCF42KKn0ThZcHSVraSVXm1K8yEKgsGw2L1xtQl6UG113izSDUre5C78oZCN13alBwC4so75SVqL2PxYozVLC7rhSuuDWo-5VPF9RMNzvHGdpt0X8PojCihJ3uj8WB8WYTrwuO_dkI-sdSoRlQdjiudeHX3qGRbKKrGlF5JaugpKsoi1XjRcrNUggyQpi9Nxppxn0drKF9OavYMyizcKtPodpkqyOk6IuodQDvwib6OoAIaNLbjlU_EDYwnlEkgwjwNIwaTVJsufgFmFxsRfF_xGTQhsjCgvekUrUFquVsPkzYXPQNex1Y2GrDfwiySqm0wWlFDUYXpe6Um_QCOV8gV8Y9NZlxauRDlLCMmQKNidsgaP1LEIg-mHq1lLC2EM4ykeeLcJRHTqEMcLu3i841Th9xPP6zgHiAwUBykuIdrhtja5Ikp2VxfUEOIIeth7L7lh1x5MztxvjQNjcBcxhjmTZlxjOJ6vnM8slxmnhV4-pwtKPU_OYwN7hh--P4MyDUjbWyLy1wtGLUkKFhLuSwyfV4SSQv2SzOQVrESx-l9rdcPyC5MPivag933QLyOCtKiEXiA5FbJzLHVCvvOnSV71B564_x3sXIJIeIEw3hLZ-J9KxYrAeObtuq02IWW95Lx6CeLqhi-3ZFixduT0p4mO64dytCPSxuv-xCleHv046D08AH_p5VoyecZlpa5d5ocaxTC7Lvy_evmJd3I4FFghfqEbc0PMtCRTQDXqVA5tCVrkb3p9wrCPCWIAMGb1b7PD3y92vW079-51LV0tn4OiH1-F1uMenn5u29WblYquN6NoWvDJvuXUfJxE7RRfOI3bOoJ1MW5fYYVQSa-qTuXGR2M8p-UMu_wsq_zT4vT8DFhy2huCo25PrVd2f8J1vsUkLcWN3fxQAP993BTeNff4rU_8wTJ-4cumgdfH8d8J6fetCaFaK960YuoJsFxrm02b7pPGOCFtfaryxW7rRWQB2XvSWS0GKZlcoKpnRASex6Qz6FvtjVkEmh3N2oNlZ1fteIJgDADSi9J6wL5TermCaXXIqeP4px09tJDS7lt7etotGeXXOfJLcjfE69_cZ-KcQXuz4HLtq8pnmi0JOapAmo3KZlGmS8pFYxvPJJJ0ls0k82i-3s1yw-ZzOYj6J05SlccwmOZ_n25zmcbEdySWjbEon8YIu6JzFES3yXMRlWiR8RnMekwkVFZcqUuqlirTZjdw7dhknMzafjxTPhWrcY5ox9zrF6piuRmaJG8Z5u2vIhCrZ2KZXYaVV7gX-cBD190cyXZHpl7XbPV31z9Kny-_ZWlt41QYb_FFr1HJv7aFx98aasPVO2n2bRwWSxhpPDP_GB6N_icIStvYvccLWwYmXJfsnAAD__z6ZjWk">