Hi Jakub,
We've been going over how we should implement the requires directive, in a bit 
more complete
sense than the current state (i.e. only atomic_default_mem_order working).

For the three clauses where the specification requires that "must appear in all 
compilation
units of a program that contain device constructs or device routines or in none of 
them":
   - reverse_offload
   - unified_address
   - unified_shared_memory

The current design we're contemplating is to generate a mask variable of these 
3 clauses for
compilation units built with -fopenmp, have them tagged with an attribute to be 
collected
into a special section (e.g. ".gnu.gomp.requires"). Later at runtime device 
startup, have
them checked by the runtime against the capabilities of the libgomp offload 
target.
Cross-checking each word (assuming it is a word that we generate for each 
compile unit)
against each other can also implement the consistency requirement.

(actually, as a first stage implementation, we were hoping to just have the 
special section
implemented, which allows compilation of OpenMP programs using 
requires-directive, and
implement any runtime checking at a later stage)

We hope to check with you first on any design issues. Have you given any 
thought on this
directive?

Thanks,
Chung-Lin

Reply via email to