From a51d7b31eb3402cceed85a3ff9044218b01d0dce Mon Sep 17 00:00:00 2001 From: thierry <thierry@home> Date: Tue, 26 Sep 2023 14:53:54 +0200 Subject: [PATCH] Port to Apple Silicon + uptodate LLVM. Add capture of OpenMP schedule event --- includes/kaapi_atomic.h | 44 +++++------ tool/CMakeLists.txt | 6 ++ tool/ompt_callbacks.cpp | 130 ++++++++++++++++++++++++------- tool/ompt_callbacks.def | 4 +- tool/tool.cpp | 36 --------- ukilli/kaapi_trace_reader.cpp | 7 +- ukilli/kaapi_trace_reader.h | 2 +- ukilli/kaapi_trace_simulator.cpp | 14 ++-- ukilli/ukilli.cpp | 65 ++++++++-------- 9 files changed, 178 insertions(+), 130 deletions(-) diff --git a/includes/kaapi_atomic.h b/includes/kaapi_atomic.h index 2fdd0e6..a283f0c 100644 --- a/includes/kaapi_atomic.h +++ b/includes/kaapi_atomic.h @@ -62,7 +62,11 @@ #include "kaapi_error.h" #include <stddef.h> #include <stdint.h> - +#if __cplusplus +# include <atomic> +#else +# include <stdatomic.h> +#endif /* ========================= Atomic type ============================= */ /** Atomic type @@ -246,40 +250,32 @@ static inline void kaapi_slowdown_cpu() #if defined(__APPLE__) -# include <libkern/OSAtomic.h> -static inline void kaapi_writemem_barrier() +static inline void kaapi_writemem_barrier() { -# if defined(__x86_64) || defined(__i386__) - /* not need sfence on X86 archi: write are ordered __asm__ __volatile__ ("sfence":::"memory"); */ - __asm__ __volatile__ ("":::"memory"); -# else - OSMemoryBarrier(); -# endif +#if __cplusplus + atomic_thread_fence(std::memory_order_release); +#else + atomic_thread_fence(memory_order_release); +#endif } static inline void kaapi_readmem_barrier() { -# if defined(__x86_64) || defined(__i386__) - __asm__ __volatile__ ("":::"memory"); -// __asm__ __volatile__ ("lfence":::"memory"); -# else - OSMemoryBarrier(); -# endif +#if __cplusplus + atomic_thread_fence(std::memory_order_acquire); +#else + atomic_thread_fence(memory_order_acquire); +#endif } /* should be both read & write barrier */ static inline void kaapi_mem_barrier() { -# if defined(__x86_64) || defined(__i386__) - /** Mac OS 10.6.8 with gcc 4.2.1 has a buggy __sync_synchronize(); - gcc-4.4.4 pass the test with sync_synchronize - */ -#if !defined(__MIC__) - __asm__ __volatile__ ("mfence":::"memory"); +#if __cplusplus + atomic_thread_fence(std::memory_order_seq_cst); +#else + atomic_thread_fence(memory_order_seq_cst); #endif -# else - OSMemoryBarrier(); -# endif } #elif defined(__linux__) diff --git a/tool/CMakeLists.txt b/tool/CMakeLists.txt index 2db4edd..b19e46a 100644 --- a/tool/CMakeLists.txt +++ b/tool/CMakeLists.txt @@ -1,3 +1,9 @@ +find_package(OpenMP REQUIRED) + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + + unset(OMPT_HEADER CACHE) find_file(OMPT_HEADER NAMES omp-tools.h HINTS ENV CPLUS_INCLUDE_PATH ENV C_INCLUDE_PATH) if (${OMPT_HEADER} STREQUAL "OMPT_HEADER-NOTFOUND") diff --git a/tool/ompt_callbacks.cpp b/tool/ompt_callbacks.cpp index 82c7018..1caec3a 100644 --- a/tool/ompt_callbacks.cpp +++ b/tool/ompt_callbacks.cpp @@ -70,7 +70,7 @@ #include "kaapi_trace_lib.h" #include "kaapi_error.h" -#define LOG 0 +#define LOG 1 std::atomic<uint64_t> unique_thread_id(1); @@ -473,7 +473,7 @@ ompt_callback_task_create_action( printf("%" PRIu64 ": ompt_task_create: parent_id=<null>, task_id=%" PRIu64\ ", type=%i, has_dep=%i, ptr=%" PRIu64 "\n", thread_id, task->id, type, - has_dependences, task->task_ptr); + has_dependences, (uint64_t)task->task_ptr); } #endif } @@ -486,11 +486,17 @@ ompt_callback_task_schedule_action( ompt_data_t *next_task_data) { uint64_t thread_id = ompt_get_thread_data()->value; + tikki_task_id_t *prior_task =0; + if (prior_task_data->ptr) prior_task = (tikki_task_id_t *)prior_task_data->ptr; + tikki_task_id_t *next_task = 0; + if (next_task_data->ptr) next_task = (tikki_task_id_t *)next_task_data->ptr; +#if LOG + printf("%" PRIu64 ": ompt_callback_task_schedule: prior_task=%" PRIu64 ", status=%i, next_task: %" PRIu64 "\n", thread_id, prior_task->id, prior_task_status, next_task->id); +#endif if (prior_task_data->ptr) { - tikki_task_id_t *prior_task = (tikki_task_id_t *)prior_task_data->ptr; // We are ending a task #if LOG - printf("%" PRIu64 ": ompt_event_task_end: task_id=%" PRIu64 "\n", thread_id, prior_task->id ); + printf("%" PRIu64 ": ompt_callback_task_schedule-> task_end: task_id=%" PRIu64 "\n", thread_id, prior_task->id ); #endif /* thread 0 ends the parallel region But because the end of implicit task is not related to @@ -514,11 +520,10 @@ ompt_callback_task_schedule_action( //free(prior_task); } if (next_task_data->ptr) -{ - tikki_task_id_t *new_task = (tikki_task_id_t *)next_task_data->ptr; + { // We are starting a task #if LOG - printf("%" PRIu64 ": ompt_event_task_begin: task_id=%" PRIu64 ", status=%i, deps: %p\n", thread_id, new_task->id, prior_task_status, new_task->deps); + printf("%" PRIu64 ": ompt_callback_task_schedule-> task_begin: task_id=%" PRIu64 ", status=%i, deps: %p\n", thread_id, next_task->id, prior_task_status, next_task->deps); #endif /* This is code for explicit task begin. */ @@ -526,28 +531,28 @@ ompt_callback_task_schedule_action( kaapi_tracelib_thread_switchstate(koti->kproc); char buff[30]; const char* taskname = 0; - if (new_task->name == 0) + if (next_task->name == 0) { - sprintf(buff, "<undef-%p-%i>\0", new_task->task_ptr, new_task->id); + snprintf(buff, 30, "<undef-%p-%" PRIu64 ">", next_task->task_ptr, next_task->id); taskname = buff; } else - taskname = new_task->name; + taskname = next_task->name; kaapi_descrformat_t* fdescr = kaapi_tracelib_register_fmtdescr( 0, // TODO: get codeptr_ra there - (void *)new_task->task_ptr, + (void *)next_task->task_ptr, 0, //loc taskname, libomp_filter_func ); int idxtop = koti->pstack.top; koti->pstack.stack[idxtop].fdescr = fdescr; - koti->pstack.stack[idxtop].task = (void*)new_task->id; + koti->pstack.stack[idxtop].task = (void*)next_task->id; kaapi_tracelib_task_begin( koti->kproc, - (kaapi_task_id_t)new_task->id, + (kaapi_task_id_t)next_task->id, fdescr->fmtid, 1, 0, 0, 0, @@ -556,29 +561,29 @@ ompt_callback_task_schedule_action( koti->pstack.top ==0 ? 0 : koti->pstack.stack[idxtop-1].accum ); ++koti->pstack.top; - if (new_task->ndeps > 0) { + if (next_task->ndeps > 0) { kaapi_tracelib_task_access( koti->kproc, - (kaapi_task_id_t)new_task->id, - new_task->ndeps, - (void*)new_task->deps, + (kaapi_task_id_t)next_task->id, + next_task->ndeps, + (void*)next_task->deps, 0, (void*)0, (void (*)(void*, int, void**, size_t*, int*))ompt_decoder ); } - if (new_task->datainfo.count) + if (next_task->datainfo.count) { kaapi_tracelib_task_data( koti->kproc, - (kaapi_task_id_t)new_task->id, - new_task->datainfo.count, - new_task->datainfo.data, - new_task->datainfo.size, - new_task->datainfo.mode, + (kaapi_task_id_t)next_task->id, + next_task->datainfo.count, + next_task->datainfo.data, + next_task->datainfo.size, + next_task->datainfo.mode, (void (*)(int, int*))ompt_mode_decoder ); - new_task->datainfo.count = 0; + next_task->datainfo.count = 0; } } } @@ -594,7 +599,8 @@ ompt_callback_implicit_task_action ( ) { uint64_t thread_id = ompt_get_thread_data()->value; - if (endpoint == ompt_scope_begin) { + if (endpoint == ompt_scope_begin) + { tikki_task_id_t *task = (tikki_task_id_t *)malloc(sizeof(tikki_task_id_t)); task->id = ompt_get_unique_id(); task->task_ptr = 0; @@ -604,7 +610,7 @@ ompt_callback_implicit_task_action ( printf("%" PRIu64 ": ompt_event_implicit_task_action: begin. parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", thread_id, parallel_data->value, task->id); #endif char buff[30]; - sprintf(buff, "<implicit>") ; + snprintf(buff, 30, "<implicit>") ; kaapi_ompt_thread_info_t* koti = &__kaapi_oth_info[thread_id]; kaapi_descrformat_t* fdescr = kaapi_tracelib_register_fmtdescr( 1, @@ -651,7 +657,7 @@ ompt_callback_implicit_task_action ( ); //free(task); } else { - fprintf(stderr, "%" PRIu64 ": ompt_event_implicit_task_action: unknown endpoint. task_id=%" PRIu64 "\n", thread_id, task_data->ptr); + fprintf(stderr, "%" PRIu64 ": ompt_event_implicit_task_action: unknown endpoint. task_id=%" PRIu64 "\n", thread_id, (uint64_t)task_data->ptr); } /* This is code for implicit task begin. */ @@ -727,3 +733,73 @@ ompt_callback_task_dependence_action ( #endif } +void ompt_callback_sync_region_action ( + ompt_sync_region_t kind, + ompt_scope_endpoint_t endpoint, + ompt_data_t *parallel_data, + ompt_data_t *task_data, + const void *codeptr_ra +) +{ +#if LOG + uint64_t thread_id = ompt_get_thread_data()->value; + tikki_task_id_t *task = (tikki_task_id_t *)task_data->ptr; + printf("%" PRIu64 ": ompt_callback_sync_region: ", thread_id ); + switch (endpoint) { + case ompt_scope_begin: + printf("BEGIN of kind <"); + break; + + case ompt_scope_end: + printf("END of kind <"); + break; + + case ompt_scope_beginend: + printf("BEGINEND of kind <"); + break; + } + + switch (kind) { + case ompt_sync_region_barrier: + printf("barrier"); + break; + + case ompt_sync_region_barrier_implicit: + printf("barrier implicit"); + break; + + case ompt_sync_region_barrier_explicit: + printf("barrier explicit"); + break; + + case ompt_sync_region_barrier_implicit_workshare: + printf("barrier implicit workshare"); + break; + + case ompt_sync_region_barrier_implicit_parallel: + printf("barrier implicit parallel"); + break; + + case ompt_sync_region_barrier_teams: + printf("barrier teams"); + break; + + case ompt_sync_region_barrier_implementation: + printf("barrier implementation"); + break; + + case ompt_sync_region_taskwait: + printf("taskwait"); + break; + + case ompt_sync_region_taskgroup: + printf("taskgroup"); + break; + + case ompt_sync_region_reduction: + printf("reduction"); + break; + }; + printf(">, parallel_data:%p, task_data: %p, task_id:%" PRIu64 ", codeptr_ra: %p\n", parallel_data, task_data, task->id, codeptr_ra); +#endif +} diff --git a/tool/ompt_callbacks.def b/tool/ompt_callbacks.def index e4b2b71..afc18ea 100644 --- a/tool/ompt_callbacks.def +++ b/tool/ompt_callbacks.def @@ -14,6 +14,9 @@ CALLBACK(ompt_callback_task_schedule, ompt_data_t *, ompt_task_status_t, ompt_da CALLBACK(ompt_callback_implicit_task, ompt_scope_endpoint_t, ompt_data_t *, ompt_data_t*, unsigned int, unsigned int, int) CALLBACK(ompt_callback_dependences, ompt_data_t *, const ompt_dependence_t *, int) CALLBACK(ompt_callback_task_dependence, ompt_data_t *, ompt_data_t * ) +CALLBACK(ompt_callback_sync_region, ompt_sync_region_t kind, ompt_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, const void *codeptr_ra ) +CALLBACK(ompt_callback_sync_region, ompt_sync_region_t, ompt_scope_endpoint_t, ompt_data_t *, ompt_data_t *, const void * ) + UNUSED(ompt_callback_target) UNUSED(ompt_callback_target_data_op) UNUSED(ompt_callback_target_submit) @@ -27,7 +30,6 @@ UNUSED(ompt_callback_mutex_released) UNUSED(ompt_callback_work) UNUSED(ompt_callback_master) UNUSED(ompt_callback_target_map) -UNUSED(ompt_callback_sync_region) UNUSED(ompt_callback_lock_init) UNUSED(ompt_callback_lock_destroy) UNUSED(ompt_callback_mutex_acquire) diff --git a/tool/tool.cpp b/tool/tool.cpp index 1f68149..41e2c57 100644 --- a/tool/tool.cpp +++ b/tool/tool.cpp @@ -107,39 +107,3 @@ extern "C" { } } - - -#if 0 -struct F { - void operator() ( ... ) - { - Inst0; - Fork<F1>() ( e1 ); - Inst1; - Fork<F2>() ( e2 ); - Inst2; - ... - Fork<Fn>() ( en ); - Instn; - } -}; - -struct F { - void operator() ( ... ) - { - Inst0; - e1 = eval(e1); - Inst1; - e2 = eval(e2); - Inst2; - ... - en= eval(en); - Instn; - - Fork<F1>() ( e1 ); - Fork<F2>() ( e2 ); - ... - Fork<Fn>() ( en ); - } -}; -#endif diff --git a/ukilli/kaapi_trace_reader.cpp b/ukilli/kaapi_trace_reader.cpp index 77c8cb1..f30bc67 100644 --- a/ukilli/kaapi_trace_reader.cpp +++ b/ukilli/kaapi_trace_reader.cpp @@ -62,9 +62,10 @@ #include "kaapi_trace_reader.h" /* Reader for one file */ +#define FILE_EVENT_NAME_SIZE 128 struct file_event { int fd; - char name[128]; /* container name */ + char name[FILE_EVENT_NAME_SIZE]; /* container name */ kaapi_eventfile_header_t* header; /* pointer to the header of the file, at least format v1, may be new format */ kaapi_event_t* base; /* base for event */ size_t rpos; /* next position to read event */ @@ -267,7 +268,7 @@ std::cout << "In vector = " << fdset->perfcounter_name[kk] << std::endl; int ReadFiles( FileSet* fdset, void* arg, - void (*callback)( void* arg, char* name, const kaapi_event_t* event) + void (*callback)( void* arg, char* name, int size, const kaapi_event_t* event) ) { if (callback ==0) return EINVAL; @@ -281,7 +282,7 @@ int ReadFiles( /* The container name is passed in/out: first event can initialize them */ - callback( arg, fe->name, &fe->base[fe->rpos++] ); + callback( arg, fe->name, FILE_EVENT_NAME_SIZE, &fe->base[fe->rpos++] ); if (fe->rpos < fe->end) fdset->eventqueue.push( next_event_t(fe->base[fe->rpos].date, ne.fds) ); diff --git a/ukilli/kaapi_trace_reader.h b/ukilli/kaapi_trace_reader.h index 218b7e1..59dadcb 100644 --- a/ukilli/kaapi_trace_reader.h +++ b/ukilli/kaapi_trace_reader.h @@ -93,7 +93,7 @@ extern const char** GetPerfCounterName(struct FileSet* fdset, int* size ); event. Return 0 in case of success. */ -extern int ReadFiles(struct FileSet* fdset, void* arg, void (*callback)( void* arg, char* name, const kaapi_event_t* event) ); +extern int ReadFiles(struct FileSet* fdset, void* arg, void (*callback)( void* arg, char* name, int sz, const kaapi_event_t* event) ); /* Return true iff no more event */ diff --git a/ukilli/kaapi_trace_simulator.cpp b/ukilli/kaapi_trace_simulator.cpp index 8773a58..828d2c1 100644 --- a/ukilli/kaapi_trace_simulator.cpp +++ b/ukilli/kaapi_trace_simulator.cpp @@ -251,8 +251,8 @@ Simulator* OpenSimulator( FileSet* fds, char* buffer = comment; /* write format for the file */ char unitdate[15]; - sprintf(unitdate,"date(%s)",header.event_date_unit); - int c = sprintf(buffer, "%5s %12s %12s %8s", "kid", unitdate, "duration", "task_id"); + snprintf(unitdate, 15, "date(%s)",header.event_date_unit); + int c = snprintf(buffer, size, "%5s %12s %12s %8s", "kid", unitdate, "duration", "task_id"); buffer += c; int i, count_perfcounter = header.perfcounter_count & 0xFF; @@ -265,7 +265,7 @@ Simulator* OpenSimulator( FileSet* fds, kaapi_assert( comment - buffer < size ); } } - c = sprintf(buffer, "\n"); + c = snprintf(buffer, comment+size-buffer, "\n"); buffer += c; kaapi_assert( comment - buffer < size ); write(sim->fd_taskdump, comment, strlen(comment)); @@ -670,7 +670,7 @@ static void processor_simulate_event( { static char tmp[2048]; char* buffer = tmp; - int c = sprintf(buffer, "%5lu %12llu %12lld %8u", + int c = snprintf(buffer, 2048, "%5lu %12llu %12lld %8u", (unsigned long)event->kid, /* kid */ (unsigned long long) proc->stacktask[proc->sp].date, /* start date */ (long long) (event->date - proc->stacktask[proc->sp].date), /* duration */ @@ -687,14 +687,14 @@ static void processor_simulate_event( kaapi_perf_idset_clear(&proc->lasttask_perfctr_mask, idx ); //printf("PerfIdx: %i ->%s\n", idx, kaapi_perfctr_info[idx].name ); if (kaapi_perfctr_info[idx].ns2s) - c = sprintf(buffer, " %16e", 1e-9*(double)proc->lasttask_perfctr[idx] ); + c = snprintf(buffer, tmp+2048-buffer, " %16e", 1e-9*(double)proc->lasttask_perfctr[idx] ); else - c = sprintf(buffer, " %16" PRIi64, proc->lasttask_perfctr[idx]); + c = snprintf(buffer, tmp+2048-buffer, " %16" PRIi64, proc->lasttask_perfctr[idx]); buffer += c; kaapi_assert( buffer <= tmp + 256); } } - c = sprintf(buffer, "\n"); + c = snprintf(buffer, tmp+2048-buffer, "\n"); write(proc->sim->fd_taskdump,tmp, strlen(tmp)); } kaapi_perf_idset_zero(&proc->lasttask_perfctr_mask); diff --git a/ukilli/ukilli.cpp b/ukilli/ukilli.cpp index b57d3cc..6909646 100644 --- a/ukilli/ukilli.cpp +++ b/ukilli/ukilli.cpp @@ -238,6 +238,7 @@ static inline const char* int2affinitykind(uint8_t v) static void callback_print_event( void* context, char* container_name, + int sz_name, const kaapi_event_t* event ) { @@ -727,7 +728,7 @@ static void callback_display_paje_event_gpuevent( case KAAPI_EVT_OFFLOAD_DTOH_BEG: if(katracereader_options.gputransfer){ kid = event->kid; - sprintf(tmp,"d2h-%i",kid); + snprintf(tmp,128,"d2h-%i",kid); kaapi_trace_poti_PushState (d0, tmp, "STATE", "kd2h"); } break; @@ -735,7 +736,7 @@ static void callback_display_paje_event_gpuevent( case KAAPI_EVT_OFFLOAD_DTOH_END: if(katracereader_options.gputransfer){ kid = event->kid; - sprintf(tmp,"d2h-%i",kid); + snprintf(tmp,128,"d2h-%i",kid); kaapi_trace_poti_PopState (d0, tmp, "STATE"); } break; @@ -743,7 +744,7 @@ static void callback_display_paje_event_gpuevent( case KAAPI_EVT_OFFLOAD_HTOD_BEG: if(katracereader_options.gputransfer){ kid = event->kid; - sprintf(tmp,"h2d-%i",kid); + snprintf(tmp,128,"h2d-%i",kid); kaapi_trace_poti_PushState (d0, tmp, "STATE", "kh2d"); } break; @@ -751,20 +752,20 @@ static void callback_display_paje_event_gpuevent( case KAAPI_EVT_OFFLOAD_HTOD_END: if(katracereader_options.gputransfer){ kid = event->kid; - sprintf(tmp,"h2d-%i",kid); + snprintf(tmp,128,"h2d-%i",kid); kaapi_trace_poti_PopState (d0, tmp, "STATE"); } break; case KAAPI_EVT_OFFLOAD_KERNEL_BEG: kid = event->kid; - sprintf(tmp,"gpu-%i",kid); + snprintf(tmp,128,"gpu-%i",kid); kaapi_trace_poti_PushState (d0, tmp, "STATE", "kgpu"); break; case KAAPI_EVT_OFFLOAD_KERNEL_END: kid = event->kid; - sprintf(tmp,"gpu-%i",kid); + snprintf(tmp,128,"gpu-%i",kid); kaapi_trace_poti_PopState (d0, tmp, "STATE"); break; @@ -801,14 +802,14 @@ static void callback_display_paje_event_stealevent( case KAAPI_EVT_REQUEST_BEG: kid = (unsigned int)KAAPI_EVENT_DATA(event,0,i); serial = (int)KAAPI_EVENT_DATA(event,1,i); - sprintf(tmp,"thief-%i",kid); + snprintf(tmp,128,"thief-%i",kid); kaapi_trace_poti_PushState (d0, tmp, "STEAL", "r"); break; case KAAPI_EVT_REQUEST_END: kid = (unsigned int)KAAPI_EVENT_DATA(event,0,i); serial = (int)KAAPI_EVENT_DATA(event,1,i); - sprintf(tmp,"thief-%i",kid); + snprintf(tmp,128,"thief-%i",kid); kaapi_trace_poti_PopState (d0, tmp, "STEAL"); break; @@ -882,6 +883,7 @@ static void callback_display_paje_event_stealevent( static void callback_display_paje_event( void* context, char* name, + int sz_name, const kaapi_event_t* event ) { @@ -898,9 +900,9 @@ static void callback_display_paje_event( case KAAPI_EVT_KPROC_START: if (gantt_container_created.find( kid ) == gantt_container_created.end()) { - sprintf(name,"thread-%i",kid); + snprintf(name,sz_name,"thread-%i",kid); char rootname[64]; - sprintf(rootname,"NUMA-%i", (int)KAAPI_EVENT_DATA(event,1,i)); + snprintf(rootname,64,"NUMA-%i", (int)KAAPI_EVENT_DATA(event,1,i)); //printf("NUMA %i %i %lu\n", kid,(int)KAAPI_EVENT_DATA(event,1,i), (unsigned long)KAAPI_EVENT_DATA(event,1,u)); kaapi_trace_poti_CreateContainer (d0, name, "THREAD", rootname, name); gantt_container_created.insert( std::make_pair( kid, event->date ) ); @@ -937,7 +939,7 @@ static void callback_display_paje_event( if (KAAPI_EVENT_DATA(event,1,u) !=0) { char stateid[64]; - sprintf(stateid, "t%lu", (unsigned long)KAAPI_EVENT_DATA(event,1,u)); + snprintf(stateid, 64, "t%lu", (unsigned long)KAAPI_EVENT_DATA(event,1,u)); kaapi_trace_poti_PushState (d0, name, "STATE", stateid); } else @@ -1195,7 +1197,7 @@ static int fnc_paje_gantt_header(kaapi_eventfile_header_t* header) for (i=0; i<header->taskfmt_count;++i) { char tmpident[64]; - sprintf(tmpident, "t%" PRIu64, header->fmtdefs[i].fmtid ); + snprintf(tmpident, 64, "t%" PRIu64, header->fmtdefs[i].fmtid ); kaapi_trace_poti_DefineEntityValue(tmpident, "STATE", convert2paje(header->fmtdefs[i].name), goodcolor[i%MAX_COLOR]/*header->fmtdefs[i].color*/); @@ -1259,7 +1261,7 @@ static int fnc_paje_gantt_header(kaapi_eventfile_header_t* header) for (int i=0; i<header->numacount; ++i) { char tmpident[64]; - sprintf(tmpident, "NUMA-%i", i ); + snprintf(tmpident, 64, "NUMA-%i", i ); kaapi_trace_poti_CreateContainer (0.00, tmpident, "ROOT", "0", tmpident); } @@ -1274,7 +1276,7 @@ static int fnc_paje_gantt_close(kaapi_eventfile_header_t* header, uint64_t gantt while (ibeg != iend) { char name[64]; - sprintf(name, "thread-%i", (int)ibeg->first ); + snprintf(name, 64, "thread-%i", (int)ibeg->first ); kaapi_trace_poti_DestroyContainer (1e-9*(double)(ibeg->second-gantt_tmin), "THREAD", name); ++ibeg; } @@ -1648,6 +1650,7 @@ rastello_parallel_region_t* rastello_parallel_region_factory_t::create(uintptr_t static void callback_display_rastello( void* context, char* name, + int sz_name, const kaapi_event_t* event ) { @@ -2144,7 +2147,7 @@ printf("pred[id:%i/%p] = {id:%i}/%p\n", succ->id, (void*)succ->addr, task->id, ( */ int rastello_parallel_region_t::openfile(kaapi_eventfile_header_t* header) { - sprintf(filename, "rastello_%i.c", (int)parallel_id); + snprintf(filename, 128, "rastello_%i.c", (int)parallel_id); fout = fopen(filename,"w"); if (fout ==0) { @@ -2287,7 +2290,7 @@ parallel_region_t* dot_parallel_region_factory_t::create(uintptr_t prid) int dot_parallel_region_t::openfile(kaapi_eventfile_header_t* header) { FILE* file = 0; - sprintf(filename, "graph_%i.dot", (int)parallel_id); + snprintf(filename, 128, "graph_%i.dot", (int)parallel_id); fout = file = fopen(filename,"w"); if (file ==0) { @@ -2538,7 +2541,7 @@ int csv_parallel_region_t::openfile(kaapi_eventfile_header_t* header) if (csv_parallel_region_t::fout_pr ==0) { char filename[128]; - sprintf(filename, "parallels.csv"); + snprintf(filename, 128, "parallels.csv"); csv_parallel_region_t::fout_pr = fopen(filename,"w"); if (csv_parallel_region_t::fout_pr ==0) { @@ -2572,7 +2575,7 @@ int csv_parallel_region_t::closefile(int cpucount) if (csv_parallel_region_t::fout ==0) { char filename[128]; - sprintf(filename, "tasks.csv"); + snprintf(filename, 128, "tasks.csv"); csv_parallel_region_t::fout = fopen(filename,"w"); if (csv_parallel_region_t::fout ==0) { @@ -2613,7 +2616,7 @@ int csv_parallel_region_t::closefile(int cpucount) if (csv_parallel_region_t::fout_complexity ==0) { char filename[128]; - sprintf(filename, "complexity.csv"); + snprintf(filename, 128, "complexity.csv"); csv_parallel_region_t::fout_complexity = fopen(filename,"w"); if (csv_parallel_region_t::fout_complexity ==0) { @@ -2672,7 +2675,7 @@ int csv_parallel_region_t::closefile(int cpucount) if (csv_parallel_region_t::fout_threads ==0) { char filename[128]; - sprintf(filename, "threads.csv"); + snprintf(filename, 128, "threads.csv"); csv_parallel_region_t::fout_threads = fopen(filename,"w"); if (csv_parallel_region_t::fout_threads ==0) { @@ -2717,7 +2720,7 @@ int csv_parallel_region_t::closefile(int cpucount) if (csv_parallel_region_t::fout_loops ==0) { char filename[128]; - sprintf(filename, "loops.csv"); + snprintf(filename, 128, "loops.csv"); csv_parallel_region_t::fout_loops = fopen(filename,"w"); if (csv_parallel_region_t::fout_loops ==0) { @@ -2746,7 +2749,7 @@ int csv_parallel_region_t::closefile(int cpucount) if (csv_parallel_region_t::fout_memory ==0) { char filename[128]; - sprintf(filename, "memory.csv"); + snprintf(filename, 128, "memory.csv"); csv_parallel_region_t::fout_memory = fopen(filename,"w"); if (csv_parallel_region_t::fout_memory ==0) { @@ -2772,7 +2775,7 @@ int csv_parallel_region_t::closefile(int cpucount) if (csv_parallel_region_t::fout_counter ==0) { char filename[128]; - sprintf(filename, "counters.csv"); + snprintf(filename, 128, "counters.csv"); csv_parallel_region_t::fout_counter = fopen(filename,"w"); if (csv_parallel_region_t::fout_counter ==0) { @@ -2798,7 +2801,7 @@ int csv_parallel_region_t::closefile(int cpucount) fclose(csv_parallel_region_t::fout_counter); csv_parallel_region_t::fout_counter = 0; - sprintf(filename, "uncoreperfctr.csv"); + snprintf(filename, 128, "uncoreperfctr.csv"); csv_parallel_region_t::fout_counter = fopen(filename,"w"); if (csv_parallel_region_t::fout_counter ==0) { @@ -2988,7 +2991,7 @@ parallel_region_t* somp_parallel_region_factory_t::create(uintptr_t prid) int somp_parallel_region_t::openfile(kaapi_eventfile_header_t* header) { FILE* file = 0; - sprintf(filename, "trace_%i.rec", (int)parallel_id); + snprintf(filename, 128, "trace_%i.rec", (int)parallel_id); fout = file = fopen(filename,"w"); if (file ==0) { @@ -3055,10 +3058,10 @@ void somp_parallel_region_t::dump_task_info( task_info* ti ) fprintf(stdout, "cannot find fmtid: %" PRIu64 "\n", ti->fmtid); fprintf(fout,"Name: %s\n" - "JobId: %li\n" + "JobId: %" PRIu64 "\n" "StartTime: %f\n" "EndTime: %f\n" - "MemoryNode: %li\n", + "MemoryNode: %i\n", (fmt == rastello_fmtname.end() ? "<unknown>" : fmt->second ), ti->id, (double)ti->start*1e-6 /* ns -> millis */, @@ -3071,7 +3074,7 @@ void somp_parallel_region_t::dump_task_info( task_info* ti ) for (int i=0; i<ti->param.size(); ++i) { uint64_t ptr = ti->param[i].ptr; - fprintf(fout," %p", ptr); + fprintf(fout," %p", (void*)ptr); } fprintf(fout,"\n"); @@ -3104,7 +3107,7 @@ void somp_parallel_region_t::dump_task_info( task_info* ti ) for (int i=0; i<ti->data.size(); ++i) { uint64_t ptr = ti->data[i].ptr; - fprintf(fout," %p", ptr); + fprintf(fout," %p", (void*)ptr); } fprintf(fout,"\n"); @@ -3113,7 +3116,7 @@ void somp_parallel_region_t::dump_task_info( task_info* ti ) for (int i=0; i<ti->data.size(); ++i) { uint64_t ptr = ti->data[i].size; - fprintf(fout," %li", ptr); + fprintf(fout," %" PRIu64, ptr); } fprintf(fout,"\n"); @@ -3140,7 +3143,7 @@ void somp_parallel_region_t::dump_task_info( task_info* ti ) fprintf(fout,"DependsOn:"); for (int i=0; i<ti->pred.size(); ++i) { - fprintf(fout," %li", ti->pred[i]->id); + fprintf(fout," %" PRIu64, ti->pred[i]->id); } fprintf(fout,"\n\n"); } -- GitLab