summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Peyton <jonathan.l.peyton@intel.com>2018-03-20 21:18:17 +0000
committerJonathan Peyton <jonathan.l.peyton@intel.com>2018-03-20 21:18:17 +0000
commit78f977fcd16e18908a6e32a5da30256d377fbffb (patch)
treed28eae18be113c6e064f48bcb414590df75c780b
parent572bfa562ab3f3c5b98e02ba52ad887b4270a89e (diff)
downloadbcm5719-llvm-78f977fcd16e18908a6e32a5da30256d377fbffb.tar.gz
bcm5719-llvm-78f977fcd16e18908a6e32a5da30256d377fbffb.zip
Read OMP_TARGET_OFFLOAD and provide API to access ICV
Added settings code to read OMP_TARGET_OFFLOAD environment variable. Added target-offload-var ICV as __kmp_target_offload, set via OMP_TARGET_OFFLOAD, if available, otherwise defaulting to DEFAULT. Valid values for the ICV are specified as enum values {0,1,2} for disabled, default, and mandatory. An internal API access function __kmpc_get_target_offload is provided. Patch by Terry Wilmarth Differential Revision: https://reviews.llvm.org/D44577 llvm-svn: 328046
-rw-r--r--openmp/runtime/src/dllexports1
-rw-r--r--openmp/runtime/src/kmp.h12
-rw-r--r--openmp/runtime/src/kmp_csupport.cpp4
-rw-r--r--openmp/runtime/src/kmp_global.cpp3
-rw-r--r--openmp/runtime/src/kmp_settings.cpp44
5 files changed, 64 insertions, 0 deletions
diff --git a/openmp/runtime/src/dllexports b/openmp/runtime/src/dllexports
index 32dec094bd3..4fc48f40766 100644
--- a/openmp/runtime/src/dllexports
+++ b/openmp/runtime/src/dllexports
@@ -403,6 +403,7 @@ kmpc_set_disp_num_buffers 267
%ifdef OMP_45
__kmpc_task_reduction_init 268
__kmpc_task_reduction_get_th_data 269
+ __kmpc_get_target_offload 271
%endif
%endif
diff --git a/openmp/runtime/src/kmp.h b/openmp/runtime/src/kmp.h
index c7e2965119d..2ca8500165e 100644
--- a/openmp/runtime/src/kmp.h
+++ b/openmp/runtime/src/kmp.h
@@ -3813,6 +3813,18 @@ KMP_EXPORT void KMPC_CONVENTION kmpc_set_library(int);
KMP_EXPORT void KMPC_CONVENTION kmpc_set_defaults(char const *);
KMP_EXPORT void KMPC_CONVENTION kmpc_set_disp_num_buffers(int);
+#if OMP_50_ENABLED
+enum kmp_target_offload_kind {
+ tgt_disabled = 0,
+ tgt_default = 1,
+ tgt_mandatory = 2
+};
+typedef enum kmp_target_offload_kind kmp_target_offload_kind_t;
+// Set via OMP_TARGET_OFFLOAD if specified, defaults to tgt_default otherwise
+extern kmp_target_offload_kind_t __kmp_target_offload;
+extern int __kmpc_get_target_offload();
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/openmp/runtime/src/kmp_csupport.cpp b/openmp/runtime/src/kmp_csupport.cpp
index 702b65076e1..dbf2f995a78 100644
--- a/openmp/runtime/src/kmp_csupport.cpp
+++ b/openmp/runtime/src/kmp_csupport.cpp
@@ -4065,4 +4065,8 @@ void __kmpc_doacross_fini(ident_t *loc, int gtid) {
}
#endif
+#if OMP_50_ENABLED
+int __kmpc_get_target_offload(void) { return __kmp_target_offload; }
+#endif // OMP_50_ENABLED
+
// end of file //
diff --git a/openmp/runtime/src/kmp_global.cpp b/openmp/runtime/src/kmp_global.cpp
index ab14ddb1889..3ba0ec9fafe 100644
--- a/openmp/runtime/src/kmp_global.cpp
+++ b/openmp/runtime/src/kmp_global.cpp
@@ -502,4 +502,7 @@ int _You_must_link_with_Intel_OpenMP_library = 1;
int _You_must_link_with_Microsoft_OpenMP_library = 1;
#endif
+#if OMP_50_ENABLED
+kmp_target_offload_kind_t __kmp_target_offload = tgt_default;
+#endif
// end of file //
diff --git a/openmp/runtime/src/kmp_settings.cpp b/openmp/runtime/src/kmp_settings.cpp
index 0a05e7c6b75..ee3923cad83 100644
--- a/openmp/runtime/src/kmp_settings.cpp
+++ b/openmp/runtime/src/kmp_settings.cpp
@@ -1179,6 +1179,46 @@ static void __kmp_stg_print_default_device(kmp_str_buf_t *buffer,
} // __kmp_stg_print_default_device
#endif
+#if OMP_50_ENABLED
+// -----------------------------------------------------------------------------
+// OpenMP 5.0: OMP_TARGET_OFFLOAD
+static void __kmp_stg_parse_target_offload(char const *name, char const *value,
+ void *data) {
+ const char *next = value;
+ const char *scan = next;
+
+ __kmp_target_offload = tgt_default;
+ SKIP_WS(next);
+ if (*next == '\0')
+ return;
+ scan = next;
+ if (__kmp_match_str("MANDATORY", scan, &next)) {
+ __kmp_target_offload = tgt_mandatory;
+ } else if (__kmp_match_str("DISABLED", scan, &next)) {
+ __kmp_target_offload = tgt_disabled;
+ } else if (__kmp_match_str("DEFAULT", scan, &next)) {
+ __kmp_target_offload = tgt_default;
+ } else {
+ KMP_WARNING(SyntaxErrorUsing, name, "DEFAULT");
+ }
+
+} // __kmp_stg_parse_target_offload
+
+static void __kmp_stg_print_target_offload(kmp_str_buf_t *buffer,
+ char const *name, void *data) {
+ const char *value = NULL;
+ if (__kmp_target_offload == tgt_default)
+ value = "DEFAULT";
+ else if (__kmp_target_offload == tgt_mandatory)
+ value = "MANDATORY";
+ else if (__kmp_target_offload == tgt_disabled)
+ value = "DISABLED";
+ if (value) {
+ __kmp_str_buf_print(buffer, " %s=%s\n", name, value);
+ }
+} // __kmp_stg_print_target_offload
+#endif
+
#if OMP_45_ENABLED
// -----------------------------------------------------------------------------
// OpenMP 4.5: OMP_MAX_TASK_PRIORITY
@@ -4443,6 +4483,10 @@ static kmp_setting_t __kmp_stg_table[] = {
{"OMP_DEFAULT_DEVICE", __kmp_stg_parse_default_device,
__kmp_stg_print_default_device, NULL, 0, 0},
#endif
+#if OMP_50_ENABLED
+ {"OMP_TARGET_OFFLOAD", __kmp_stg_parse_target_offload,
+ __kmp_stg_print_target_offload, NULL, 0, 0},
+#endif
#if OMP_45_ENABLED
{"OMP_MAX_TASK_PRIORITY", __kmp_stg_parse_max_task_priority,
__kmp_stg_print_max_task_priority, NULL, 0, 0},
OpenPOWER on IntegriCloud