[OMPT] Return appropiate values for ompt runtime entry points for non-OpenMP threads

When the current thread is not an (initialized) OpenMP thread, the runtime
entry points return values that correspond to "not available" or similar

Differential Revision: https://reviews.llvm.org/D41167

git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@322620 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Joachim Protze
2018-01-17 10:05:55 +00:00
parent 9ea16f6af0
commit 5c21042a8a
3 changed files with 75 additions and 8 deletions
+9
View File
@@ -553,6 +553,9 @@ OMPT_API_ROUTINE int ompt_get_place_num(void) {
#if !KMP_AFFINITY_SUPPORTED
return -1;
#else
if (__kmp_get_gtid() < 0)
return -1;
int gtid;
kmp_info_t *thread;
if (!KMP_AFFINITY_CAPABLE())
@@ -571,6 +574,9 @@ OMPT_API_ROUTINE int ompt_get_partition_place_nums(int place_nums_size,
#if !KMP_AFFINITY_SUPPORTED
return 0;
#else
if (__kmp_get_gtid() < 0)
return 0;
int i, gtid, place_num, first_place, last_place, start, end;
kmp_info_t *thread;
if (!KMP_AFFINITY_CAPABLE())
@@ -604,6 +610,9 @@ OMPT_API_ROUTINE int ompt_get_partition_place_nums(int place_nums_size,
OMPT_API_ROUTINE int ompt_get_proc_id(void) {
#if KMP_OS_LINUX
if (__kmp_get_gtid() < 0)
return -1;
return sched_getcpu();
#else
return -1;
+15 -8
View File
@@ -219,16 +219,20 @@ omp_state_t __ompt_get_state_internal(ompt_wait_id_t *ompt_wait_id) {
int __ompt_get_parallel_info_internal(int ancestor_level,
ompt_data_t **parallel_data,
int *team_size) {
ompt_team_info_t *info;
if (team_size) {
info = __ompt_get_teaminfo(ancestor_level, team_size);
if (__kmp_get_gtid() >= 0) {
ompt_team_info_t *info;
if (team_size) {
info = __ompt_get_teaminfo(ancestor_level, team_size);
} else {
info = __ompt_get_teaminfo(ancestor_level, NULL);
}
if (parallel_data) {
*parallel_data = info ? &(info->parallel_data) : NULL;
}
return info ? 2 : 0;
} else {
info = __ompt_get_teaminfo(ancestor_level, NULL);
return 0;
}
if (parallel_data) {
*parallel_data = info ? &(info->parallel_data) : NULL;
}
return info ? 2 : 0;
}
//----------------------------------------------------------
@@ -314,6 +318,9 @@ int __ompt_get_task_info_internal(int ancestor_level, int *type,
ompt_frame_t **task_frame,
ompt_data_t **parallel_data,
int *thread_num) {
if (__kmp_get_gtid() < 0)
return 0;
if (ancestor_level < 0)
return 0;
@@ -0,0 +1,51 @@
// RUN: env OMP_PLACES=cores %libomp-cxx-compile-and-run | FileCheck %s
// REQUIRES: ompt, linux
#include <thread>
#include "callback.h"
void f() {
ompt_data_t* tdata = ompt_get_thread_data();
uint64_t tvalue = tdata ? tdata->value : 0;
printf("%" PRIu64 ": ompt_get_num_places()=%d\n", tvalue, ompt_get_num_places());
printf("%" PRIu64 ": ompt_get_place_proc_ids()=%d\n", tvalue, ompt_get_place_proc_ids(0, 0, NULL));
printf("%" PRIu64 ": ompt_get_place_num()=%d\n", tvalue, ompt_get_place_num());
printf("%" PRIu64 ": ompt_get_partition_place_nums()=%d\n", tvalue, ompt_get_partition_place_nums(0, NULL));
printf("%" PRIu64 ": ompt_get_proc_id()=%d\n", tvalue, ompt_get_proc_id());
printf("%" PRIu64 ": ompt_get_num_procs()=%d\n", tvalue, ompt_get_num_procs());
}
int main()
{
#pragma omp parallel num_threads(1)
{}
std::thread t1(f);
t1.join();
// Check if libomp supports the callbacks for this test.
// CHECK: 0: NULL_POINTER=[[NULL:.*$]]
// CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_get_num_places()=0
// CHECK: {{^}}[[MASTER_ID]]: ompt_get_place_proc_ids()=0
// CHECK: {{^}}[[MASTER_ID]]: ompt_get_place_num()=-1
// CHECK: {{^}}[[MASTER_ID]]: ompt_get_partition_place_nums()=0
// CHECK: {{^}}[[MASTER_ID]]: ompt_get_proc_id()=-1
// CHECK: {{^}}[[MASTER_ID]]: ompt_get_num_procs()={{[0-9]+}}
return 0;
}