Skip to content
Snippets Groups Projects
  • Tobias Burnus's avatar
    18c8b56c
    OpenMP: Set default-device-var with OMP_TARGET_OFFLOAD=mandatory · 18c8b56c
    Tobias Burnus authored
    OMP_TARGET_OFFLOAD=mandatory handling was before inconsistent. Hence, in
    OpenMP 5.2 it was clarified/extended by having implications on the
    default-device-var; additionally, omp_initial_device and omp_invalid_device
    enum values/PARAMETERs were added; support for it was added
    in r13-1066-g1158fe43407568 including aborting for omp_invalid_device and
    non-conforming device numbers. Only the mandatory handling was missing.
    
    Namely, while the default-device-var is usually initialized to value 0,
    with 'mandatory' it must have the value 'omp_invalid_device' if and only if
    zero non-host devices are available. (The OMP_DEFAULT_DEVICE env var
    overrides this as it comes semantically after the initialization.)
    
    To achieve this, default-device-var is now initialized to MIN_INT. If
    there is no 'mandatory', it is set to 0 directly after env var parsing.
    Otherwise, it is updated in gomp_target_init to either 0 or
    omp_invalid_device. To ensure INT_MIN is never seen by the user, both
    the omp_get_default_device API routine and omp_display_env (user call
    and OMP_DISPLAY_ENV env var) call gomp_init_targets_once() in that case.
    
    libgomp/ChangeLog:
    
    	* env.c (gomp_default_icv_values): Init default_device_var to
    	an nonconforming value - INT_MIN.
    	(initialize_env): After env-var parsing, set default_device_var to
    	device 0 unless OMP_TARGET_OFFLOAD=mandatory.
    	(omp_display_env): If default_device_var is INT_MIN, call
    	gomp_init_targets_once.
    	* icv-device.c (omp_get_default_device): Likewise.
    	* libgomp.texi (OMP_DEFAULT_DEVICE): Update init description.
    	(OpenMP 5.2 Impl. Status): Mark OMP_TARGET_OFFLOAD=mandatory as 'Y'.
    	* target.c (resolve_device): Improve error message device-num < 0
    	with 'mandatory' and no no-host devices available.
    	(gomp_target_init): Set default-device-var if INT_MIN.
    	* testsuite/libgomp.c/target-48.c: New test.
    	* testsuite/libgomp.c/target-49.c: New test.
    	* testsuite/libgomp.c/target-50.c: New test.
    	* testsuite/libgomp.c/target-50a.c: New test.
    	* testsuite/libgomp.c/target-51.c: New test.
    	* testsuite/libgomp.c/target-52.c: New test.
    	* testsuite/libgomp.c/target-53.c: New test.
    	* testsuite/libgomp.c/target-54.c: New test.
    18c8b56c
    History
    OpenMP: Set default-device-var with OMP_TARGET_OFFLOAD=mandatory
    Tobias Burnus authored
    OMP_TARGET_OFFLOAD=mandatory handling was before inconsistent. Hence, in
    OpenMP 5.2 it was clarified/extended by having implications on the
    default-device-var; additionally, omp_initial_device and omp_invalid_device
    enum values/PARAMETERs were added; support for it was added
    in r13-1066-g1158fe43407568 including aborting for omp_invalid_device and
    non-conforming device numbers. Only the mandatory handling was missing.
    
    Namely, while the default-device-var is usually initialized to value 0,
    with 'mandatory' it must have the value 'omp_invalid_device' if and only if
    zero non-host devices are available. (The OMP_DEFAULT_DEVICE env var
    overrides this as it comes semantically after the initialization.)
    
    To achieve this, default-device-var is now initialized to MIN_INT. If
    there is no 'mandatory', it is set to 0 directly after env var parsing.
    Otherwise, it is updated in gomp_target_init to either 0 or
    omp_invalid_device. To ensure INT_MIN is never seen by the user, both
    the omp_get_default_device API routine and omp_display_env (user call
    and OMP_DISPLAY_ENV env var) call gomp_init_targets_once() in that case.
    
    libgomp/ChangeLog:
    
    	* env.c (gomp_default_icv_values): Init default_device_var to
    	an nonconforming value - INT_MIN.
    	(initialize_env): After env-var parsing, set default_device_var to
    	device 0 unless OMP_TARGET_OFFLOAD=mandatory.
    	(omp_display_env): If default_device_var is INT_MIN, call
    	gomp_init_targets_once.
    	* icv-device.c (omp_get_default_device): Likewise.
    	* libgomp.texi (OMP_DEFAULT_DEVICE): Update init description.
    	(OpenMP 5.2 Impl. Status): Mark OMP_TARGET_OFFLOAD=mandatory as 'Y'.
    	* target.c (resolve_device): Improve error message device-num < 0
    	with 'mandatory' and no no-host devices available.
    	(gomp_target_init): Set default-device-var if INT_MIN.
    	* testsuite/libgomp.c/target-48.c: New test.
    	* testsuite/libgomp.c/target-49.c: New test.
    	* testsuite/libgomp.c/target-50.c: New test.
    	* testsuite/libgomp.c/target-50a.c: New test.
    	* testsuite/libgomp.c/target-51.c: New test.
    	* testsuite/libgomp.c/target-52.c: New test.
    	* testsuite/libgomp.c/target-53.c: New test.
    	* testsuite/libgomp.c/target-54.c: New test.