From c6aeb5f0c94f36cc212f63e1fef9657fa676e72d Mon Sep 17 00:00:00 2001 From: thierry <thierry@home> Date: Mon, 4 Dec 2023 13:46:42 +0100 Subject: [PATCH] Test weak symbol --- test/hello-task.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++ test/hello.c | 15 +++++++++++++++ tool/tool.cpp | 6 +++++- 3 files changed, 68 insertions(+), 1 deletion(-) diff --git a/test/hello-task.c b/test/hello-task.c index b18738e..6b9c8e2 100644 --- a/test/hello-task.c +++ b/test/hello-task.c @@ -2,27 +2,75 @@ #include <unistd.h> #include <omp.h> #include <math.h> +#include "AvailabilityMacros.h" + int array[] = { 1, 2, 3, 4}; +/* +*/ +//extern void ompt_set_task_name(const char* name ) __attribute__((weak_import)); //__attribute__((weak)); +extern void ompt_set_task_name(const char* name ); + + int main() { #pragma omp parallel #pragma omp master { printf("Hello from %i\n", omp_get_thread_num()); + if (ompt_set_task_name != NULL) + { + printf("Defined symbol\n"); + ompt_set_task_name("hello"); + } + else + printf("Undefined symbol\n"); + #pragma omp task { sleep(2); printf("Hey there\n"); + + ompt_set_task_name("sub hello"); + #pragma omp task + { + sleep(2); + printf("Hey there\n"); + } + + ompt_set_task_name("sub hello"); + #pragma omp task + { + sleep(2); + printf("Hey there\n"); + + ompt_set_task_name("sub sub hello"); + #pragma omp task + { + sleep(2); + printf("Hey there\n"); + } + ompt_set_task_name("sub sub hello"); + #pragma omp task + { + sleep(2); + printf("Hey there\n"); + } + } } + + ompt_set_task_name("Parent of other tasks"); + #pragma omp task for (int i = 0; i < 4; i++) { + ompt_set_task_name("other tasks"); #pragma omp task depend(in: array[i]) depend(inout: array[(i+1)%4]) { double d; array[(i+1)%4] = array[i]; for (int j=0; j<100000; ++j) d += sin(M_PI/j)*cos(M_PI/i); + sleep(2); printf("Hey %i\n", i); } } diff --git a/test/hello.c b/test/hello.c index 52494a0..f8535f0 100644 --- a/test/hello.c +++ b/test/hello.c @@ -1,15 +1,30 @@ #include <stdio.h> #include <omp.h> +#include <unistd.h> + int main() { +printf("Before parallel region 1, %i\n", omp_get_thread_num()); #pragma omp parallel { printf("Hello from %i\n", omp_get_thread_num()); + #pragma omp barrier + #pragma omp master + { + #pragma omp task + printf("%i:: Master thread\n", omp_get_thread_num()); + + #pragma omp taskwait + } } +printf("After parallel region 1, %i\n\n\n\n", omp_get_thread_num()); +sleep(10); +printf("Before parallel region 2, %i\n", omp_get_thread_num()); #pragma omp parallel { printf("Parallel 2, hello from %i\n", omp_get_thread_num()); } +printf("After parallel region 2, %i\n\n\n\n", omp_get_thread_num()); return 0; } diff --git a/tool/tool.cpp b/tool/tool.cpp index 41e2c57..f4d1386 100644 --- a/tool/tool.cpp +++ b/tool/tool.cpp @@ -6,6 +6,8 @@ #include <omp-tools.h> #include "kaapi_trace_lib.h" +#include "AvailabilityMacros.h" + #define CALLBACK(name, ...)\ void name##_action(__VA_ARGS__); #include "ompt_callbacks.def" @@ -27,6 +29,8 @@ extern "C" { extern void tikki_ompt_set_task_name(const char* name ); extern void tikki_ompt_set_task_data(int count, void** data, size_t* size, int* mode ); +extern void ompt_set_task_name(const char* name ) __attribute__((weak_import)); + void __tikki_ompt_set_task_name(const char* name ) { tikki_ompt_set_task_name(name); } void __tikki_ompt_set_task_data(int count, void** data, size_t* size, int* mode ) @@ -34,7 +38,7 @@ void __tikki_ompt_set_task_data(int count, void** data, size_t* size, int* mode /* Exported function as extension to be called by application */ -extern void ompt_set_task_name(const char* name ) +void ompt_set_task_name(const char* name ) __attribute__((weak_import)) { tikki_ompt_set_task_name(name); } -- GitLab