I've resumed experimenting on how these 2 methods of copying data to and from MIC differ, using ifort 14.0.1 linux.
!$omp target update appears to work correctly in all my examples, with one exception:
When I have an if() clause which is not satisfied, and a target region includes parallel do reduction(max:...) lastprivate....
it is failing to give correct results, although the same case is correct when the if() is satisfied (same if condition on the target update and target sections) and when no target directives are present. This is the only case of 13 where the if clause appears to cause trouble, but it doesn't have a problem when using target map.
Although target update has no apparent difficulty copying data to and from a common block marked with $!omp target (/cdata/), target map doesn't transfer data correctly in a common block but it is fine otherwise. I have 3 different cases using data from common; all exhibit this behavior.
Are these behaviors according to standard or design, and are they documented? Or do they fall in the category of things which may be considered for implementation next year?
I expected more differences in performance between target update and target map than I have been able to demonstrate. I was also surprised that their failures don't occur on the same cases (as I might expect due to my lack of familiarity with OpenMP 4).
In the area of building a procedure to be called according to !$omp target (subname), I've only succeeded in provoking the compiler to internal error. I didn't find any documented examples. I filed a bug ticket on this, since the internal error report hints that is a suitable action.
The behaviors were identical on different hardware platforms (Westmere and Ivytown host, KNC B0 and C0, mpss 2.1 and 3.1).