1 /* 2 * include/omp-tools.h.var 3 */ 4 5 //===----------------------------------------------------------------------===// 6 // 7 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 8 // See https://llvm.org/LICENSE.txt for license information. 9 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef __OMPT__ 14 #define __OMPT__ 15 16 /***************************************************************************** 17 * system include files 18 *****************************************************************************/ 19 20 #include <stdint.h> 21 #include <stddef.h> 22 23 #ifdef DEPRECATION_WARNINGS 24 # ifdef __cplusplus 25 # define DEPRECATED_51 [[deprecated("as of 5.1")]] 26 # else 27 # define DEPRECATED_51 __attribute__((deprecated("as of 5.1"))) 28 #endif 29 #else 30 #define DEPRECATED_51 31 #endif 32 33 /***************************************************************************** 34 * iteration macros 35 *****************************************************************************/ 36 37 #define FOREACH_OMPT_INQUIRY_FN(macro) \ 38 macro (ompt_enumerate_states) \ 39 macro (ompt_enumerate_mutex_impls) \ 40 \ 41 macro (ompt_set_callback) \ 42 macro (ompt_get_callback) \ 43 \ 44 macro (ompt_get_state) \ 45 \ 46 macro (ompt_get_parallel_info) \ 47 macro (ompt_get_task_info) \ 48 macro (ompt_get_task_memory) \ 49 macro (ompt_get_thread_data) \ 50 macro (ompt_get_unique_id) \ 51 macro (ompt_finalize_tool) \ 52 \ 53 macro(ompt_get_num_procs) \ 54 macro(ompt_get_num_places) \ 55 macro(ompt_get_place_proc_ids) \ 56 macro(ompt_get_place_num) \ 57 macro(ompt_get_partition_place_nums) \ 58 macro(ompt_get_proc_id) \ 59 \ 60 macro(ompt_get_target_info) \ 61 macro(ompt_get_num_devices) 62 63 #define FOREACH_OMPT_STATE(macro) \ 64 \ 65 /* first available state */ \ 66 macro (ompt_state_undefined, 0x102) /* undefined thread state */ \ 67 \ 68 /* work states (0..15) */ \ 69 macro (ompt_state_work_serial, 0x000) /* working outside parallel */ \ 70 macro (ompt_state_work_parallel, 0x001) /* working within parallel */ \ 71 macro (ompt_state_work_reduction, 0x002) /* performing a reduction */ \ 72 \ 73 /* barrier wait states (16..31) */ \ 74 macro (ompt_state_wait_barrier, 0x010) /* waiting at a barrier */ \ 75 macro (ompt_state_wait_barrier_implicit_parallel, 0x011) \ 76 /* implicit barrier at the end of parallel region */\ 77 macro (ompt_state_wait_barrier_implicit_workshare, 0x012) \ 78 /* implicit barrier at the end of worksharing */ \ 79 macro (ompt_state_wait_barrier_implicit, 0x013) /* implicit barrier */ \ 80 macro (ompt_state_wait_barrier_explicit, 0x014) /* explicit barrier */ \ 81 \ 82 /* task wait states (32..63) */ \ 83 macro (ompt_state_wait_taskwait, 0x020) /* waiting at a taskwait */ \ 84 macro (ompt_state_wait_taskgroup, 0x021) /* waiting at a taskgroup */ \ 85 \ 86 /* mutex wait states (64..127) */ \ 87 macro (ompt_state_wait_mutex, 0x040) \ 88 macro (ompt_state_wait_lock, 0x041) /* waiting for lock */ \ 89 macro (ompt_state_wait_critical, 0x042) /* waiting for critical */ \ 90 macro (ompt_state_wait_atomic, 0x043) /* waiting for atomic */ \ 91 macro (ompt_state_wait_ordered, 0x044) /* waiting for ordered */ \ 92 \ 93 /* target wait states (128..255) */ \ 94 macro (ompt_state_wait_target, 0x080) /* waiting for target region */ \ 95 macro (ompt_state_wait_target_map, 0x081) /* waiting for target data mapping operation */ \ 96 macro (ompt_state_wait_target_update, 0x082) /* waiting for target update operation */ \ 97 \ 98 /* misc (256..511) */ \ 99 macro (ompt_state_idle, 0x100) /* waiting for work */ \ 100 macro (ompt_state_overhead, 0x101) /* overhead excluding wait states */ \ 101 \ 102 /* implementation-specific states (512..) */ 103 104 105 #define FOREACH_KMP_MUTEX_IMPL(macro) \ 106 macro (kmp_mutex_impl_none, 0) /* unknown implementation */ \ 107 macro (kmp_mutex_impl_spin, 1) /* based on spin */ \ 108 macro (kmp_mutex_impl_queuing, 2) /* based on some fair policy */ \ 109 macro (kmp_mutex_impl_speculative, 3) /* based on HW-supported speculation */ 110 111 #define FOREACH_OMPT_HOST_EVENT(macro) \ 112 \ 113 /*--- Mandatory Events ---*/ \ 114 macro (ompt_callback_thread_begin, ompt_callback_thread_begin_t, 1) /* thread begin */ \ 115 macro (ompt_callback_thread_end, ompt_callback_thread_end_t, 2) /* thread end */ \ 116 \ 117 macro (ompt_callback_parallel_begin, ompt_callback_parallel_begin_t, 3) /* parallel begin */ \ 118 macro (ompt_callback_parallel_end, ompt_callback_parallel_end_t, 4) /* parallel end */ \ 119 \ 120 macro (ompt_callback_task_create, ompt_callback_task_create_t, 5) /* task begin */ \ 121 macro (ompt_callback_task_schedule, ompt_callback_task_schedule_t, 6) /* task schedule */ \ 122 macro (ompt_callback_implicit_task, ompt_callback_implicit_task_t, 7) /* implicit task */ \ 123 \ 124 macro (ompt_callback_control_tool, ompt_callback_control_tool_t, 11) /* control tool */ \ 125 \ 126 /* Optional Events */ \ 127 macro (ompt_callback_sync_region_wait, ompt_callback_sync_region_t, 16) /* sync region wait begin or end */ \ 128 \ 129 macro (ompt_callback_mutex_released, ompt_callback_mutex_t, 17) /* mutex released */ \ 130 \ 131 macro (ompt_callback_dependences, ompt_callback_dependences_t, 18) /* report task dependences */ \ 132 macro (ompt_callback_task_dependence, ompt_callback_task_dependence_t, 19) /* report task dependence */ \ 133 \ 134 macro (ompt_callback_work, ompt_callback_work_t, 20) /* task at work begin or end */ \ 135 \ 136 macro (ompt_callback_masked, ompt_callback_masked_t, 21) /* task at masked begin or end */ \ 137 \ 138 macro (ompt_callback_sync_region, ompt_callback_sync_region_t, 23) /* sync region begin or end */ \ 139 \ 140 macro (ompt_callback_lock_init, ompt_callback_mutex_acquire_t, 24) /* lock init */ \ 141 macro (ompt_callback_lock_destroy, ompt_callback_mutex_t, 25) /* lock destroy */ \ 142 \ 143 macro (ompt_callback_mutex_acquire, ompt_callback_mutex_acquire_t, 26) /* mutex acquire */ \ 144 macro (ompt_callback_mutex_acquired, ompt_callback_mutex_t, 27) /* mutex acquired */ \ 145 \ 146 macro (ompt_callback_nest_lock, ompt_callback_nest_lock_t, 28) /* nest lock */ \ 147 \ 148 macro (ompt_callback_flush, ompt_callback_flush_t, 29) /* after executing flush */ \ 149 \ 150 macro (ompt_callback_cancel, ompt_callback_cancel_t, 30) /* cancel innermost binding region */ \ 151 \ 152 macro (ompt_callback_reduction, ompt_callback_sync_region_t, 31) /* reduction */ \ 153 \ 154 macro (ompt_callback_dispatch, ompt_callback_dispatch_t, 32) /* dispatch of work */ \ 155 macro (ompt_callback_error, ompt_callback_error_t, 37) /* error */ 156 157 #define FOREACH_OMPT_DEVICE_EVENT(macro) \ 158 /*--- Mandatory Events ---*/ \ 159 macro (ompt_callback_device_initialize, ompt_callback_device_initialize_t, 12) /* device initialize */ \ 160 macro (ompt_callback_device_finalize, ompt_callback_device_finalize_t, 13) /* device finalize */ \ 161 \ 162 macro (ompt_callback_device_load, ompt_callback_device_load_t, 14) /* device load */ \ 163 macro (ompt_callback_device_unload, ompt_callback_device_unload_t, 15) /* device unload */ 164 165 #define FOREACH_OMPT_NOEMI_EVENT(macro) \ 166 /*--- Mandatory Events ---*/ \ 167 macro (ompt_callback_target, ompt_callback_target_t, 8) /* target */ \ 168 macro (ompt_callback_target_data_op, ompt_callback_target_data_op_t, 9) /* target data op */ \ 169 macro (ompt_callback_target_submit, ompt_callback_target_submit_t, 10) /* target submit */ \ 170 /* Optional Events */ \ 171 macro (ompt_callback_target_map, ompt_callback_target_map_t, 22) /* target map */ 172 173 #define FOREACH_OMPT_EMI_EVENT(macro) \ 174 /*--- Mandatory Events ---*/ \ 175 macro (ompt_callback_target_emi, ompt_callback_target_emi_t, 33) /* target */ \ 176 macro (ompt_callback_target_data_op_emi,ompt_callback_target_data_op_emi_t,34) /* target data op */ \ 177 macro (ompt_callback_target_submit_emi, ompt_callback_target_submit_emi_t, 35) /* target submit */ \ 178 /* Optional Events */ \ 179 macro (ompt_callback_target_map_emi, ompt_callback_target_map_emi_t, 36) /* target map */ 180 181 #define FOREACH_OMPT_50_TARGET_EVENT(macro) \ 182 FOREACH_OMPT_DEVICE_EVENT(macro) \ 183 FOREACH_OMPT_NOEMI_EVENT(macro) 184 185 #define FOREACH_OMPT_51_TARGET_EVENT(macro) \ 186 FOREACH_OMPT_DEVICE_EVENT(macro) \ 187 FOREACH_OMPT_EMI_EVENT(macro) 188 189 #define FOREACH_OMPT_EVENT(macro) \ 190 FOREACH_OMPT_HOST_EVENT(macro) \ 191 FOREACH_OMPT_DEVICE_EVENT(macro) \ 192 FOREACH_OMPT_NOEMI_EVENT(macro) \ 193 FOREACH_OMPT_EMI_EVENT(macro) 194 195 #define FOREACH_OMPT_51_EVENT(macro) \ 196 FOREACH_OMPT_HOST_EVENT(macro) \ 197 FOREACH_OMPT_DEVICE_EVENT(macro) \ 198 FOREACH_OMPT_EMI_EVENT(macro) 199 200 /***************************************************************************** 201 * implementation specific types 202 *****************************************************************************/ 203 204 typedef enum kmp_mutex_impl_t { 205 #define kmp_mutex_impl_macro(impl, code) impl = code, 206 FOREACH_KMP_MUTEX_IMPL(kmp_mutex_impl_macro) 207 #undef kmp_mutex_impl_macro 208 } kmp_mutex_impl_t; 209 210 /***************************************************************************** 211 * definitions generated from spec 212 *****************************************************************************/ 213 214 typedef enum ompt_callbacks_t { 215 ompt_callback_thread_begin = 1, 216 ompt_callback_thread_end = 2, 217 ompt_callback_parallel_begin = 3, 218 ompt_callback_parallel_end = 4, 219 ompt_callback_task_create = 5, 220 ompt_callback_task_schedule = 6, 221 ompt_callback_implicit_task = 7, 222 ompt_callback_target = 8, 223 ompt_callback_target_data_op = 9, 224 ompt_callback_target_submit = 10, 225 ompt_callback_control_tool = 11, 226 ompt_callback_device_initialize = 12, 227 ompt_callback_device_finalize = 13, 228 ompt_callback_device_load = 14, 229 ompt_callback_device_unload = 15, 230 ompt_callback_sync_region_wait = 16, 231 ompt_callback_mutex_released = 17, 232 ompt_callback_dependences = 18, 233 ompt_callback_task_dependence = 19, 234 ompt_callback_work = 20, 235 ompt_callback_master DEPRECATED_51 = 21, 236 ompt_callback_masked = 21, 237 ompt_callback_target_map = 22, 238 ompt_callback_sync_region = 23, 239 ompt_callback_lock_init = 24, 240 ompt_callback_lock_destroy = 25, 241 ompt_callback_mutex_acquire = 26, 242 ompt_callback_mutex_acquired = 27, 243 ompt_callback_nest_lock = 28, 244 ompt_callback_flush = 29, 245 ompt_callback_cancel = 30, 246 ompt_callback_reduction = 31, 247 ompt_callback_dispatch = 32, 248 ompt_callback_target_emi = 33, 249 ompt_callback_target_data_op_emi = 34, 250 ompt_callback_target_submit_emi = 35, 251 ompt_callback_target_map_emi = 36, 252 ompt_callback_error = 37 253 } ompt_callbacks_t; 254 255 typedef enum ompt_record_t { 256 ompt_record_ompt = 1, 257 ompt_record_native = 2, 258 ompt_record_invalid = 3 259 } ompt_record_t; 260 261 typedef enum ompt_record_native_t { 262 ompt_record_native_info = 1, 263 ompt_record_native_event = 2 264 } ompt_record_native_t; 265 266 typedef enum ompt_set_result_t { 267 ompt_set_error = 0, 268 ompt_set_never = 1, 269 ompt_set_impossible = 2, 270 ompt_set_sometimes = 3, 271 ompt_set_sometimes_paired = 4, 272 ompt_set_always = 5 273 } ompt_set_result_t; 274 275 typedef uint64_t ompt_id_t; 276 277 typedef uint64_t ompt_device_time_t; 278 279 typedef uint64_t ompt_buffer_cursor_t; 280 281 typedef enum ompt_thread_t { 282 ompt_thread_initial = 1, 283 ompt_thread_worker = 2, 284 ompt_thread_other = 3, 285 ompt_thread_unknown = 4 286 } ompt_thread_t; 287 288 typedef enum ompt_scope_endpoint_t { 289 ompt_scope_begin = 1, 290 ompt_scope_end = 2, 291 ompt_scope_beginend = 3 292 } ompt_scope_endpoint_t; 293 294 typedef enum ompt_dispatch_t { 295 ompt_dispatch_iteration = 1, 296 ompt_dispatch_section = 2, 297 ompt_dispatch_ws_loop_chunk = 3, 298 ompt_dispatch_taskloop_chunk = 4, 299 ompt_dispatch_distribute_chunk = 5 300 } ompt_dispatch_t; 301 302 typedef enum ompt_sync_region_t { 303 ompt_sync_region_barrier DEPRECATED_51 = 1, 304 ompt_sync_region_barrier_implicit DEPRECATED_51 = 2, 305 ompt_sync_region_barrier_explicit = 3, 306 ompt_sync_region_barrier_implementation = 4, 307 ompt_sync_region_taskwait = 5, 308 ompt_sync_region_taskgroup = 6, 309 ompt_sync_region_reduction = 7, 310 ompt_sync_region_barrier_implicit_workshare = 8, 311 ompt_sync_region_barrier_implicit_parallel = 9, 312 ompt_sync_region_barrier_teams = 10 313 } ompt_sync_region_t; 314 315 typedef enum ompt_target_data_op_t { 316 ompt_target_data_alloc = 1, 317 ompt_target_data_transfer_to_device = 2, 318 ompt_target_data_transfer_from_device = 3, 319 ompt_target_data_delete = 4, 320 ompt_target_data_associate = 5, 321 ompt_target_data_disassociate = 6, 322 ompt_target_data_alloc_async = 17, 323 ompt_target_data_transfer_to_device_async = 18, 324 ompt_target_data_transfer_from_device_async = 19, 325 ompt_target_data_delete_async = 20 326 } ompt_target_data_op_t; 327 328 typedef enum ompt_work_t { 329 ompt_work_loop = 1, 330 ompt_work_sections = 2, 331 ompt_work_single_executor = 3, 332 ompt_work_single_other = 4, 333 ompt_work_workshare = 5, 334 ompt_work_distribute = 6, 335 ompt_work_taskloop = 7, 336 ompt_work_scope = 8, 337 ompt_work_loop_static = 10, 338 ompt_work_loop_dynamic = 11, 339 ompt_work_loop_guided = 12, 340 ompt_work_loop_other = 13 341 } ompt_work_t; 342 343 typedef enum ompt_mutex_t { 344 ompt_mutex_lock = 1, 345 ompt_mutex_test_lock = 2, 346 ompt_mutex_nest_lock = 3, 347 ompt_mutex_test_nest_lock = 4, 348 ompt_mutex_critical = 5, 349 ompt_mutex_atomic = 6, 350 ompt_mutex_ordered = 7 351 } ompt_mutex_t; 352 353 typedef enum ompt_native_mon_flag_t { 354 ompt_native_data_motion_explicit = 0x01, 355 ompt_native_data_motion_implicit = 0x02, 356 ompt_native_kernel_invocation = 0x04, 357 ompt_native_kernel_execution = 0x08, 358 ompt_native_driver = 0x10, 359 ompt_native_runtime = 0x20, 360 ompt_native_overhead = 0x40, 361 ompt_native_idleness = 0x80 362 } ompt_native_mon_flag_t; 363 364 typedef enum ompt_task_flag_t { 365 ompt_task_initial = 0x00000001, 366 ompt_task_implicit = 0x00000002, 367 ompt_task_explicit = 0x00000004, 368 ompt_task_target = 0x00000008, 369 ompt_task_taskwait = 0x00000010, 370 ompt_task_undeferred = 0x08000000, 371 ompt_task_untied = 0x10000000, 372 ompt_task_final = 0x20000000, 373 ompt_task_mergeable = 0x40000000, 374 ompt_task_merged = 0x80000000 375 } ompt_task_flag_t; 376 377 typedef enum ompt_task_status_t { 378 ompt_task_complete = 1, 379 ompt_task_yield = 2, 380 ompt_task_cancel = 3, 381 ompt_task_detach = 4, 382 ompt_task_early_fulfill = 5, 383 ompt_task_late_fulfill = 6, 384 ompt_task_switch = 7, 385 ompt_taskwait_complete = 8 386 } ompt_task_status_t; 387 388 typedef enum ompt_target_t { 389 ompt_target = 1, 390 ompt_target_enter_data = 2, 391 ompt_target_exit_data = 3, 392 ompt_target_update = 4, 393 ompt_target_nowait = 9, 394 ompt_target_enter_data_nowait = 10, 395 ompt_target_exit_data_nowait = 11, 396 ompt_target_update_nowait = 12 397 } ompt_target_t; 398 399 typedef enum ompt_parallel_flag_t { 400 ompt_parallel_invoker_program = 0x00000001, 401 ompt_parallel_invoker_runtime = 0x00000002, 402 ompt_parallel_league = 0x40000000, 403 ompt_parallel_team = 0x80000000 404 } ompt_parallel_flag_t; 405 406 typedef enum ompt_target_map_flag_t { 407 ompt_target_map_flag_to = 0x01, 408 ompt_target_map_flag_from = 0x02, 409 ompt_target_map_flag_alloc = 0x04, 410 ompt_target_map_flag_release = 0x08, 411 ompt_target_map_flag_delete = 0x10, 412 ompt_target_map_flag_implicit = 0x20 413 } ompt_target_map_flag_t; 414 415 typedef enum ompt_dependence_type_t { 416 ompt_dependence_type_in = 1, 417 ompt_dependence_type_out = 2, 418 ompt_dependence_type_inout = 3, 419 ompt_dependence_type_mutexinoutset = 4, 420 ompt_dependence_type_source = 5, 421 ompt_dependence_type_sink = 6, 422 ompt_dependence_type_inoutset = 7 423 } ompt_dependence_type_t; 424 425 typedef enum ompt_severity_t { 426 ompt_warning = 1, 427 ompt_fatal = 2 428 } ompt_severity_t; 429 430 typedef enum ompt_cancel_flag_t { 431 ompt_cancel_parallel = 0x01, 432 ompt_cancel_sections = 0x02, 433 ompt_cancel_loop = 0x04, 434 ompt_cancel_taskgroup = 0x08, 435 ompt_cancel_activated = 0x10, 436 ompt_cancel_detected = 0x20, 437 ompt_cancel_discarded_task = 0x40 438 } ompt_cancel_flag_t; 439 440 typedef uint64_t ompt_hwid_t; 441 442 typedef uint64_t ompt_wait_id_t; 443 444 typedef enum ompt_frame_flag_t { 445 ompt_frame_runtime = 0x00, 446 ompt_frame_application = 0x01, 447 ompt_frame_cfa = 0x10, 448 ompt_frame_framepointer = 0x20, 449 ompt_frame_stackaddress = 0x30 450 } ompt_frame_flag_t; 451 452 typedef enum ompt_state_t { 453 ompt_state_work_serial = 0x000, 454 ompt_state_work_parallel = 0x001, 455 ompt_state_work_reduction = 0x002, 456 457 ompt_state_wait_barrier DEPRECATED_51 = 0x010, 458 ompt_state_wait_barrier_implicit_parallel = 0x011, 459 ompt_state_wait_barrier_implicit_workshare = 0x012, 460 ompt_state_wait_barrier_implicit DEPRECATED_51 = 0x013, 461 ompt_state_wait_barrier_explicit = 0x014, 462 ompt_state_wait_barrier_implementation = 0x015, 463 ompt_state_wait_barrier_teams = 0x016, 464 465 ompt_state_wait_taskwait = 0x020, 466 ompt_state_wait_taskgroup = 0x021, 467 468 ompt_state_wait_mutex = 0x040, 469 ompt_state_wait_lock = 0x041, 470 ompt_state_wait_critical = 0x042, 471 ompt_state_wait_atomic = 0x043, 472 ompt_state_wait_ordered = 0x044, 473 474 ompt_state_wait_target = 0x080, 475 ompt_state_wait_target_map = 0x081, 476 ompt_state_wait_target_update = 0x082, 477 478 ompt_state_idle = 0x100, 479 ompt_state_overhead = 0x101, 480 ompt_state_undefined = 0x102 481 } ompt_state_t; 482 483 typedef uint64_t (*ompt_get_unique_id_t) (void); 484 485 typedef uint64_t ompd_size_t; 486 487 typedef uint64_t ompd_wait_id_t; 488 489 typedef uint64_t ompd_addr_t; 490 typedef int64_t ompd_word_t; 491 typedef uint64_t ompd_seg_t; 492 493 typedef uint64_t ompd_device_t; 494 495 typedef uint64_t ompd_thread_id_t; 496 497 typedef enum ompd_scope_t { 498 ompd_scope_global = 1, 499 ompd_scope_address_space = 2, 500 ompd_scope_thread = 3, 501 ompd_scope_parallel = 4, 502 ompd_scope_implicit_task = 5, 503 ompd_scope_task = 6 504 } ompd_scope_t; 505 506 typedef uint64_t ompd_icv_id_t; 507 508 typedef enum ompd_rc_t { 509 ompd_rc_ok = 0, 510 ompd_rc_unavailable = 1, 511 ompd_rc_stale_handle = 2, 512 ompd_rc_bad_input = 3, 513 ompd_rc_error = 4, 514 ompd_rc_unsupported = 5, 515 ompd_rc_needs_state_tracking = 6, 516 ompd_rc_incompatible = 7, 517 ompd_rc_device_read_error = 8, 518 ompd_rc_device_write_error = 9, 519 ompd_rc_nomem = 10, 520 ompd_rc_incomplete = 11, 521 ompd_rc_callback_error = 12 522 } ompd_rc_t; 523 524 typedef void (*ompt_interface_fn_t) (void); 525 526 typedef ompt_interface_fn_t (*ompt_function_lookup_t) ( 527 const char *interface_function_name 528 ); 529 530 typedef union ompt_data_t { 531 uint64_t value; 532 void *ptr; 533 } ompt_data_t; 534 535 typedef struct ompt_frame_t { 536 ompt_data_t exit_frame; 537 ompt_data_t enter_frame; 538 int exit_frame_flags; 539 int enter_frame_flags; 540 } ompt_frame_t; 541 542 typedef void (*ompt_callback_t) (void); 543 544 typedef void ompt_device_t; 545 546 typedef void ompt_buffer_t; 547 548 typedef void (*ompt_callback_buffer_request_t) ( 549 int device_num, 550 ompt_buffer_t **buffer, 551 size_t *bytes 552 ); 553 554 typedef void (*ompt_callback_buffer_complete_t) ( 555 int device_num, 556 ompt_buffer_t *buffer, 557 size_t bytes, 558 ompt_buffer_cursor_t begin, 559 int buffer_owned 560 ); 561 562 typedef void (*ompt_finalize_t) ( 563 ompt_data_t *tool_data 564 ); 565 566 typedef int (*ompt_initialize_t) ( 567 ompt_function_lookup_t lookup, 568 int initial_device_num, 569 ompt_data_t *tool_data 570 ); 571 572 typedef struct ompt_start_tool_result_t { 573 ompt_initialize_t initialize; 574 ompt_finalize_t finalize; 575 ompt_data_t tool_data; 576 } ompt_start_tool_result_t; 577 578 typedef struct ompt_record_abstract_t { 579 ompt_record_native_t rclass; 580 const char *type; 581 ompt_device_time_t start_time; 582 ompt_device_time_t end_time; 583 ompt_hwid_t hwid; 584 } ompt_record_abstract_t; 585 586 typedef struct ompt_dependence_t { 587 ompt_data_t variable; 588 ompt_dependence_type_t dependence_type; 589 } ompt_dependence_t; 590 591 typedef struct ompt_dispatch_chunk_t { 592 uint64_t start; 593 uint64_t iterations; 594 } ompt_dispatch_chunk_t; 595 596 typedef int (*ompt_enumerate_states_t) ( 597 int current_state, 598 int *next_state, 599 const char **next_state_name 600 ); 601 602 typedef int (*ompt_enumerate_mutex_impls_t) ( 603 int current_impl, 604 int *next_impl, 605 const char **next_impl_name 606 ); 607 608 typedef ompt_set_result_t (*ompt_set_callback_t) ( 609 ompt_callbacks_t event, 610 ompt_callback_t callback 611 ); 612 613 typedef int (*ompt_get_callback_t) ( 614 ompt_callbacks_t event, 615 ompt_callback_t *callback 616 ); 617 618 typedef ompt_data_t *(*ompt_get_thread_data_t) (void); 619 620 typedef int (*ompt_get_num_procs_t) (void); 621 622 typedef int (*ompt_get_num_places_t) (void); 623 624 typedef int (*ompt_get_place_proc_ids_t) ( 625 int place_num, 626 int ids_size, 627 int *ids 628 ); 629 630 typedef int (*ompt_get_place_num_t) (void); 631 632 typedef int (*ompt_get_partition_place_nums_t) ( 633 int place_nums_size, 634 int *place_nums 635 ); 636 637 typedef int (*ompt_get_proc_id_t) (void); 638 639 typedef int (*ompt_get_state_t) ( 640 ompt_wait_id_t *wait_id 641 ); 642 643 typedef int (*ompt_get_parallel_info_t) ( 644 int ancestor_level, 645 ompt_data_t **parallel_data, 646 int *team_size 647 ); 648 649 typedef int (*ompt_get_task_info_t) ( 650 int ancestor_level, 651 int *flags, 652 ompt_data_t **task_data, 653 ompt_frame_t **task_frame, 654 ompt_data_t **parallel_data, 655 int *thread_num 656 ); 657 658 typedef int (*ompt_get_task_memory_t)( 659 void **addr, 660 size_t *size, 661 int block 662 ); 663 664 typedef int (*ompt_get_target_info_t) ( 665 uint64_t *device_num, 666 ompt_id_t *target_id, 667 ompt_id_t *host_op_id 668 ); 669 670 typedef int (*ompt_get_num_devices_t) (void); 671 672 typedef void (*ompt_finalize_tool_t) (void); 673 674 typedef int (*ompt_get_device_num_procs_t) ( 675 ompt_device_t *device 676 ); 677 678 typedef ompt_device_time_t (*ompt_get_device_time_t) ( 679 ompt_device_t *device 680 ); 681 682 typedef double (*ompt_translate_time_t) ( 683 ompt_device_t *device, 684 ompt_device_time_t time 685 ); 686 687 typedef ompt_set_result_t (*ompt_set_trace_ompt_t) ( 688 ompt_device_t *device, 689 unsigned int enable, 690 unsigned int etype 691 ); 692 693 typedef ompt_set_result_t (*ompt_set_trace_native_t) ( 694 ompt_device_t *device, 695 int enable, 696 int flags 697 ); 698 699 typedef int (*ompt_start_trace_t) ( 700 ompt_device_t *device, 701 ompt_callback_buffer_request_t request, 702 ompt_callback_buffer_complete_t complete 703 ); 704 705 typedef int (*ompt_pause_trace_t) ( 706 ompt_device_t *device, 707 int begin_pause 708 ); 709 710 typedef int (*ompt_flush_trace_t) ( 711 ompt_device_t *device 712 ); 713 714 typedef int (*ompt_stop_trace_t) ( 715 ompt_device_t *device 716 ); 717 718 typedef int (*ompt_advance_buffer_cursor_t) ( 719 ompt_device_t *device, 720 ompt_buffer_t *buffer, 721 size_t size, 722 ompt_buffer_cursor_t current, 723 ompt_buffer_cursor_t *next 724 ); 725 726 typedef ompt_record_t (*ompt_get_record_type_t) ( 727 ompt_buffer_t *buffer, 728 ompt_buffer_cursor_t current 729 ); 730 731 typedef void *(*ompt_get_record_native_t) ( 732 ompt_buffer_t *buffer, 733 ompt_buffer_cursor_t current, 734 ompt_id_t *host_op_id 735 ); 736 737 typedef ompt_record_abstract_t * 738 (*ompt_get_record_abstract_t) ( 739 void *native_record 740 ); 741 742 typedef void (*ompt_callback_thread_begin_t) ( 743 ompt_thread_t thread_type, 744 ompt_data_t *thread_data 745 ); 746 747 typedef struct ompt_record_thread_begin_t { 748 ompt_thread_t thread_type; 749 } ompt_record_thread_begin_t; 750 751 typedef void (*ompt_callback_thread_end_t) ( 752 ompt_data_t *thread_data 753 ); 754 755 typedef void (*ompt_callback_parallel_begin_t) ( 756 ompt_data_t *encountering_task_data, 757 const ompt_frame_t *encountering_task_frame, 758 ompt_data_t *parallel_data, 759 unsigned int requested_parallelism, 760 int flags, 761 const void *codeptr_ra 762 ); 763 764 typedef struct ompt_record_parallel_begin_t { 765 ompt_id_t encountering_task_id; 766 ompt_id_t parallel_id; 767 unsigned int requested_parallelism; 768 int flags; 769 const void *codeptr_ra; 770 } ompt_record_parallel_begin_t; 771 772 typedef void (*ompt_callback_parallel_end_t) ( 773 ompt_data_t *parallel_data, 774 ompt_data_t *encountering_task_data, 775 int flags, 776 const void *codeptr_ra 777 ); 778 779 typedef struct ompt_record_parallel_end_t { 780 ompt_id_t parallel_id; 781 ompt_id_t encountering_task_id; 782 int flags; 783 const void *codeptr_ra; 784 } ompt_record_parallel_end_t; 785 786 typedef void (*ompt_callback_work_t) ( 787 ompt_work_t work_type, 788 ompt_scope_endpoint_t endpoint, 789 ompt_data_t *parallel_data, 790 ompt_data_t *task_data, 791 uint64_t count, 792 const void *codeptr_ra 793 ); 794 795 typedef struct ompt_record_work_t { 796 ompt_work_t work_type; 797 ompt_scope_endpoint_t endpoint; 798 ompt_id_t parallel_id; 799 ompt_id_t task_id; 800 uint64_t count; 801 const void *codeptr_ra; 802 } ompt_record_work_t; 803 804 typedef void (*ompt_callback_dispatch_t) ( 805 ompt_data_t *parallel_data, 806 ompt_data_t *task_data, 807 ompt_dispatch_t kind, 808 ompt_data_t instance 809 ); 810 811 typedef struct ompt_record_dispatch_t { 812 ompt_id_t parallel_id; 813 ompt_id_t task_id; 814 ompt_dispatch_t kind; 815 ompt_data_t instance; 816 } ompt_record_dispatch_t; 817 818 typedef void (*ompt_callback_task_create_t) ( 819 ompt_data_t *encountering_task_data, 820 const ompt_frame_t *encountering_task_frame, 821 ompt_data_t *new_task_data, 822 int flags, 823 int has_dependences, 824 const void *codeptr_ra 825 ); 826 827 typedef struct ompt_record_task_create_t { 828 ompt_id_t encountering_task_id; 829 ompt_id_t new_task_id; 830 int flags; 831 int has_dependences; 832 const void *codeptr_ra; 833 } ompt_record_task_create_t; 834 835 typedef void (*ompt_callback_dependences_t) ( 836 ompt_data_t *task_data, 837 const ompt_dependence_t *deps, 838 int ndeps 839 ); 840 841 typedef struct ompt_record_dependences_t { 842 ompt_id_t task_id; 843 ompt_dependence_t dep; 844 int ndeps; 845 } ompt_record_dependences_t; 846 847 typedef void (*ompt_callback_task_dependence_t) ( 848 ompt_data_t *src_task_data, 849 ompt_data_t *sink_task_data 850 ); 851 852 typedef struct ompt_record_task_dependence_t { 853 ompt_id_t src_task_id; 854 ompt_id_t sink_task_id; 855 } ompt_record_task_dependence_t; 856 857 typedef void (*ompt_callback_task_schedule_t) ( 858 ompt_data_t *prior_task_data, 859 ompt_task_status_t prior_task_status, 860 ompt_data_t *next_task_data 861 ); 862 863 typedef struct ompt_record_task_schedule_t { 864 ompt_id_t prior_task_id; 865 ompt_task_status_t prior_task_status; 866 ompt_id_t next_task_id; 867 } ompt_record_task_schedule_t; 868 869 typedef void (*ompt_callback_implicit_task_t) ( 870 ompt_scope_endpoint_t endpoint, 871 ompt_data_t *parallel_data, 872 ompt_data_t *task_data, 873 unsigned int actual_parallelism, 874 unsigned int index, 875 int flags 876 ); 877 878 typedef struct ompt_record_implicit_task_t { 879 ompt_scope_endpoint_t endpoint; 880 ompt_id_t parallel_id; 881 ompt_id_t task_id; 882 unsigned int actual_parallelism; 883 unsigned int index; 884 int flags; 885 } ompt_record_implicit_task_t; 886 887 typedef void (*ompt_callback_masked_t) ( 888 ompt_scope_endpoint_t endpoint, 889 ompt_data_t *parallel_data, 890 ompt_data_t *task_data, 891 const void *codeptr_ra 892 ); 893 894 typedef ompt_callback_masked_t ompt_callback_master_t DEPRECATED_51; 895 896 typedef struct ompt_record_masked_t { 897 ompt_scope_endpoint_t endpoint; 898 ompt_id_t parallel_id; 899 ompt_id_t task_id; 900 const void *codeptr_ra; 901 } ompt_record_masked_t; 902 903 typedef void (*ompt_callback_sync_region_t) ( 904 ompt_sync_region_t kind, 905 ompt_scope_endpoint_t endpoint, 906 ompt_data_t *parallel_data, 907 ompt_data_t *task_data, 908 const void *codeptr_ra 909 ); 910 911 typedef struct ompt_record_sync_region_t { 912 ompt_sync_region_t kind; 913 ompt_scope_endpoint_t endpoint; 914 ompt_id_t parallel_id; 915 ompt_id_t task_id; 916 const void *codeptr_ra; 917 } ompt_record_sync_region_t; 918 919 typedef void (*ompt_callback_mutex_acquire_t) ( 920 ompt_mutex_t kind, 921 unsigned int hint, 922 unsigned int impl, 923 ompt_wait_id_t wait_id, 924 const void *codeptr_ra 925 ); 926 927 typedef struct ompt_record_mutex_acquire_t { 928 ompt_mutex_t kind; 929 unsigned int hint; 930 unsigned int impl; 931 ompt_wait_id_t wait_id; 932 const void *codeptr_ra; 933 } ompt_record_mutex_acquire_t; 934 935 typedef void (*ompt_callback_mutex_t) ( 936 ompt_mutex_t kind, 937 ompt_wait_id_t wait_id, 938 const void *codeptr_ra 939 ); 940 941 typedef struct ompt_record_mutex_t { 942 ompt_mutex_t kind; 943 ompt_wait_id_t wait_id; 944 const void *codeptr_ra; 945 } ompt_record_mutex_t; 946 947 typedef void (*ompt_callback_nest_lock_t) ( 948 ompt_scope_endpoint_t endpoint, 949 ompt_wait_id_t wait_id, 950 const void *codeptr_ra 951 ); 952 953 typedef struct ompt_record_nest_lock_t { 954 ompt_scope_endpoint_t endpoint; 955 ompt_wait_id_t wait_id; 956 const void *codeptr_ra; 957 } ompt_record_nest_lock_t; 958 959 typedef void (*ompt_callback_flush_t) ( 960 ompt_data_t *thread_data, 961 const void *codeptr_ra 962 ); 963 964 typedef struct ompt_record_flush_t { 965 const void *codeptr_ra; 966 } ompt_record_flush_t; 967 968 typedef void (*ompt_callback_cancel_t) ( 969 ompt_data_t *task_data, 970 int flags, 971 const void *codeptr_ra 972 ); 973 974 typedef struct ompt_record_cancel_t { 975 ompt_id_t task_id; 976 int flags; 977 const void *codeptr_ra; 978 } ompt_record_cancel_t; 979 980 typedef void (*ompt_callback_device_initialize_t) ( 981 int device_num, 982 const char *type, 983 ompt_device_t *device, 984 ompt_function_lookup_t lookup, 985 const char *documentation 986 ); 987 988 typedef void (*ompt_callback_device_finalize_t) ( 989 int device_num 990 ); 991 992 typedef void (*ompt_callback_device_load_t) ( 993 int device_num, 994 const char *filename, 995 int64_t offset_in_file, 996 void *vma_in_file, 997 size_t bytes, 998 void *host_addr, 999 void *device_addr, 1000 uint64_t module_id 1001 ); 1002 1003 typedef void (*ompt_callback_device_unload_t) ( 1004 int device_num, 1005 uint64_t module_id 1006 ); 1007 1008 typedef void (*ompt_callback_target_data_op_emi_t) ( 1009 ompt_scope_endpoint_t endpoint, 1010 ompt_data_t *target_task_data, 1011 ompt_data_t *target_data, 1012 ompt_id_t *host_op_id, 1013 ompt_target_data_op_t optype, 1014 void *src_addr, 1015 int src_device_num, 1016 void *dest_addr, 1017 int dest_device_num, 1018 size_t bytes, 1019 const void *codeptr_ra 1020 ); 1021 1022 typedef void (*ompt_callback_target_data_op_t) ( 1023 ompt_id_t target_id, 1024 ompt_id_t host_op_id, 1025 ompt_target_data_op_t optype, 1026 void *src_addr, 1027 int src_device_num, 1028 void *dest_addr, 1029 int dest_device_num, 1030 size_t bytes, 1031 const void *codeptr_ra 1032 ); 1033 1034 typedef struct ompt_record_target_data_op_t { 1035 ompt_id_t host_op_id; 1036 ompt_target_data_op_t optype; 1037 void *src_addr; 1038 int src_device_num; 1039 void *dest_addr; 1040 int dest_device_num; 1041 size_t bytes; 1042 ompt_device_time_t end_time; 1043 const void *codeptr_ra; 1044 } ompt_record_target_data_op_t; 1045 1046 typedef void (*ompt_callback_target_emi_t) ( 1047 ompt_target_t kind, 1048 ompt_scope_endpoint_t endpoint, 1049 int device_num, 1050 ompt_data_t *task_data, 1051 ompt_data_t *target_task_data, 1052 ompt_data_t *target_data, 1053 const void *codeptr_ra 1054 ); 1055 1056 typedef void (*ompt_callback_target_t) ( 1057 ompt_target_t kind, 1058 ompt_scope_endpoint_t endpoint, 1059 int device_num, 1060 ompt_data_t *task_data, 1061 ompt_id_t target_id, 1062 const void *codeptr_ra 1063 ); 1064 1065 typedef struct ompt_record_target_t { 1066 ompt_target_t kind; 1067 ompt_scope_endpoint_t endpoint; 1068 int device_num; 1069 ompt_id_t task_id; 1070 ompt_id_t target_id; 1071 const void *codeptr_ra; 1072 } ompt_record_target_t; 1073 1074 typedef void (*ompt_callback_target_map_emi_t) ( 1075 ompt_data_t *target_data, 1076 unsigned int nitems, 1077 void **host_addr, 1078 void **device_addr, 1079 size_t *bytes, 1080 unsigned int *mapping_flags, 1081 const void *codeptr_ra 1082 ); 1083 1084 typedef void (*ompt_callback_target_map_t) ( 1085 ompt_id_t target_id, 1086 unsigned int nitems, 1087 void **host_addr, 1088 void **device_addr, 1089 size_t *bytes, 1090 unsigned int *mapping_flags, 1091 const void *codeptr_ra 1092 ); 1093 1094 typedef struct ompt_record_target_map_t { 1095 ompt_id_t target_id; 1096 unsigned int nitems; 1097 void **host_addr; 1098 void **device_addr; 1099 size_t *bytes; 1100 unsigned int *mapping_flags; 1101 const void *codeptr_ra; 1102 } ompt_record_target_map_t; 1103 1104 typedef void (*ompt_callback_target_submit_emi_t) ( 1105 ompt_scope_endpoint_t endpoint, 1106 ompt_data_t *target_data, 1107 ompt_id_t *host_op_id, 1108 unsigned int requested_num_teams 1109 ); 1110 1111 typedef void (*ompt_callback_target_submit_t) ( 1112 ompt_id_t target_id, 1113 ompt_id_t host_op_id, 1114 unsigned int requested_num_teams 1115 ); 1116 1117 typedef struct ompt_record_target_kernel_t { 1118 ompt_id_t host_op_id; 1119 unsigned int requested_num_teams; 1120 unsigned int granted_num_teams; 1121 ompt_device_time_t end_time; 1122 } ompt_record_target_kernel_t; 1123 1124 typedef int (*ompt_callback_control_tool_t) ( 1125 uint64_t command, 1126 uint64_t modifier, 1127 void *arg, 1128 const void *codeptr_ra 1129 ); 1130 1131 typedef struct ompt_record_control_tool_t { 1132 uint64_t command; 1133 uint64_t modifier; 1134 const void *codeptr_ra; 1135 } ompt_record_control_tool_t; 1136 1137 typedef void (*ompt_callback_error_t) ( 1138 ompt_severity_t severity, 1139 const char *message, size_t length, 1140 const void *codeptr_ra 1141 ); 1142 1143 typedef struct ompt_record_error_t { 1144 ompt_severity_t severity; 1145 const char *message; 1146 size_t length; 1147 const void *codeptr_ra; 1148 } ompt_record_error_t; 1149 1150 typedef struct ompd_address_t { 1151 ompd_seg_t segment; 1152 ompd_addr_t address; 1153 } ompd_address_t; 1154 1155 typedef struct ompd_frame_info_t { 1156 ompd_address_t frame_address; 1157 ompd_word_t frame_flag; 1158 } ompd_frame_info_t; 1159 1160 typedef struct _ompd_aspace_handle ompd_address_space_handle_t; 1161 typedef struct _ompd_thread_handle ompd_thread_handle_t; 1162 typedef struct _ompd_parallel_handle ompd_parallel_handle_t; 1163 typedef struct _ompd_task_handle ompd_task_handle_t; 1164 1165 typedef struct _ompd_aspace_cont ompd_address_space_context_t; 1166 typedef struct _ompd_thread_cont ompd_thread_context_t; 1167 1168 typedef struct ompd_device_type_sizes_t { 1169 uint8_t sizeof_char; 1170 uint8_t sizeof_short; 1171 uint8_t sizeof_int; 1172 uint8_t sizeof_long; 1173 uint8_t sizeof_long_long; 1174 uint8_t sizeof_pointer; 1175 } ompd_device_type_sizes_t; 1176 1177 void ompd_dll_locations_valid(void); 1178 1179 typedef ompd_rc_t (*ompd_callback_memory_alloc_fn_t)(ompd_size_t nbytes, 1180 void **ptr); 1181 1182 typedef ompd_rc_t (*ompd_callback_memory_free_fn_t)(void *ptr); 1183 1184 typedef ompd_rc_t (*ompd_callback_get_thread_context_for_thread_id_fn_t)( 1185 ompd_address_space_context_t *address_space_context, ompd_thread_id_t kind, 1186 ompd_size_t sizeof_thread_id, const void *thread_id, 1187 ompd_thread_context_t **thread_context); 1188 1189 typedef ompd_rc_t (*ompd_callback_sizeof_fn_t)( 1190 ompd_address_space_context_t *address_space_context, 1191 ompd_device_type_sizes_t *sizes); 1192 1193 typedef ompd_rc_t (*ompd_callback_symbol_addr_fn_t)( 1194 ompd_address_space_context_t *address_space_context, 1195 ompd_thread_context_t *thread_context, const char *symbol_name, 1196 ompd_address_t *symbol_addr, const char *file_name); 1197 1198 typedef ompd_rc_t (*ompd_callback_memory_read_fn_t)( 1199 ompd_address_space_context_t *address_space_context, 1200 ompd_thread_context_t *thread_context, const ompd_address_t *addr, 1201 ompd_size_t nbytes, void *buffer); 1202 1203 typedef ompd_rc_t (*ompd_callback_memory_write_fn_t)( 1204 ompd_address_space_context_t *address_space_context, 1205 ompd_thread_context_t *thread_context, const ompd_address_t *addr, 1206 ompd_size_t nbytes, const void *buffer); 1207 1208 typedef ompd_rc_t (*ompd_callback_device_host_fn_t)( 1209 ompd_address_space_context_t *address_space_context, const void *input, 1210 ompd_size_t unit_size, ompd_size_t count, void *output); 1211 1212 typedef ompd_rc_t (*ompd_callback_print_string_fn_t)(const char *string, 1213 int category); 1214 1215 typedef struct ompd_callbacks_t { 1216 ompd_callback_memory_alloc_fn_t alloc_memory; 1217 ompd_callback_memory_free_fn_t free_memory; 1218 ompd_callback_print_string_fn_t print_string; 1219 ompd_callback_sizeof_fn_t sizeof_type; 1220 ompd_callback_symbol_addr_fn_t symbol_addr_lookup; 1221 ompd_callback_memory_read_fn_t read_memory; 1222 ompd_callback_memory_write_fn_t write_memory; 1223 ompd_callback_memory_read_fn_t read_string; 1224 ompd_callback_device_host_fn_t device_to_host; 1225 ompd_callback_device_host_fn_t host_to_device; 1226 ompd_callback_get_thread_context_for_thread_id_fn_t 1227 get_thread_context_for_thread_id; 1228 } ompd_callbacks_t; 1229 1230 void ompd_bp_parallel_begin(void); 1231 1232 void ompd_bp_parallel_end(void); 1233 1234 void ompd_bp_task_begin(void); 1235 1236 void ompd_bp_task_end(void); 1237 1238 void ompd_bp_thread_begin(void); 1239 1240 void ompd_bp_thread_end(void); 1241 1242 void ompd_bp_device_begin(void); 1243 1244 void ompd_bp_device_end(void); 1245 1246 ompd_rc_t ompd_initialize(ompd_word_t api_version, 1247 const ompd_callbacks_t *callbacks); 1248 1249 ompd_rc_t ompd_get_api_version(ompd_word_t *version); 1250 1251 ompd_rc_t ompd_get_version_string(const char **string); 1252 1253 ompd_rc_t ompd_finalize(void); 1254 1255 ompd_rc_t ompd_process_initialize(ompd_address_space_context_t *context, 1256 ompd_address_space_handle_t **handle); 1257 1258 ompd_rc_t ompd_device_initialize(ompd_address_space_handle_t *process_handle, 1259 ompd_address_space_context_t *device_context, 1260 ompd_device_t kind, ompd_size_t sizeof_id, 1261 void *id, 1262 ompd_address_space_handle_t **device_handle); 1263 1264 ompd_rc_t ompd_rel_address_space_handle(ompd_address_space_handle_t *handle); 1265 1266 ompd_rc_t ompd_get_omp_version(ompd_address_space_handle_t *address_space, 1267 ompd_word_t *omp_version); 1268 1269 ompd_rc_t 1270 ompd_get_omp_version_string(ompd_address_space_handle_t *address_space, 1271 const char **string); 1272 1273 ompd_rc_t ompd_get_thread_in_parallel(ompd_parallel_handle_t *parallel_handle, 1274 int thread_num, 1275 ompd_thread_handle_t **thread_handle); 1276 1277 ompd_rc_t ompd_get_thread_handle(ompd_address_space_handle_t *handle, 1278 ompd_thread_id_t kind, 1279 ompd_size_t sizeof_thread_id, 1280 const void *thread_id, 1281 ompd_thread_handle_t **thread_handle); 1282 1283 ompd_rc_t ompd_rel_thread_handle(ompd_thread_handle_t *thread_handle); 1284 1285 ompd_rc_t ompd_thread_handle_compare(ompd_thread_handle_t *thread_handle_1, 1286 ompd_thread_handle_t *thread_handle_2, 1287 int *cmp_value); 1288 1289 ompd_rc_t ompd_get_thread_id(ompd_thread_handle_t *thread_handle, 1290 ompd_thread_id_t kind, 1291 ompd_size_t sizeof_thread_id, void *thread_id); 1292 1293 ompd_rc_t 1294 ompd_get_curr_parallel_handle(ompd_thread_handle_t *thread_handle, 1295 ompd_parallel_handle_t **parallel_handle); 1296 1297 ompd_rc_t ompd_get_enclosing_parallel_handle( 1298 ompd_parallel_handle_t *parallel_handle, 1299 ompd_parallel_handle_t **enclosing_parallel_handle); 1300 1301 ompd_rc_t 1302 ompd_get_task_parallel_handle(ompd_task_handle_t *task_handle, 1303 ompd_parallel_handle_t **task_parallel_handle); 1304 1305 ompd_rc_t ompd_rel_parallel_handle(ompd_parallel_handle_t *parallel_handle); 1306 1307 ompd_rc_t 1308 ompd_parallel_handle_compare(ompd_parallel_handle_t *parallel_handle_1, 1309 ompd_parallel_handle_t *parallel_handle_2, 1310 int *cmp_value); 1311 1312 ompd_rc_t ompd_get_curr_task_handle(ompd_thread_handle_t *thread_handle, 1313 ompd_task_handle_t **task_handle); 1314 1315 ompd_rc_t 1316 ompd_get_generating_task_handle(ompd_task_handle_t *task_handle, 1317 ompd_task_handle_t **generating_task_handle); 1318 1319 ompd_rc_t 1320 ompd_get_scheduling_task_handle(ompd_task_handle_t *task_handle, 1321 ompd_task_handle_t **scheduling_task_handle); 1322 1323 ompd_rc_t ompd_get_task_in_parallel(ompd_parallel_handle_t *parallel_handle, 1324 int thread_num, 1325 ompd_task_handle_t **task_handle); 1326 1327 ompd_rc_t ompd_rel_task_handle(ompd_task_handle_t *task_handle); 1328 1329 ompd_rc_t ompd_task_handle_compare(ompd_task_handle_t *task_handle_1, 1330 ompd_task_handle_t *task_handle_2, 1331 int *cmp_value); 1332 1333 ompd_rc_t ompd_get_task_function(ompd_task_handle_t *task_handle, 1334 ompd_address_t *entry_point); 1335 1336 ompd_rc_t ompd_get_task_frame(ompd_task_handle_t *task_handle, 1337 ompd_frame_info_t *exit_frame, 1338 ompd_frame_info_t *enter_frame); 1339 1340 ompd_rc_t 1341 ompd_enumerate_states(ompd_address_space_handle_t *address_space_handle, 1342 ompd_word_t current_state, ompd_word_t *next_state, 1343 const char **next_state_name, ompd_word_t *more_enums); 1344 1345 ompd_rc_t ompd_get_state(ompd_thread_handle_t *thread_handle, 1346 ompd_word_t *state, ompd_wait_id_t *wait_id); 1347 1348 ompd_rc_t 1349 ompd_get_display_control_vars(ompd_address_space_handle_t *address_space_handle, 1350 const char *const **control_vars); 1351 1352 ompd_rc_t ompd_rel_display_control_vars(const char *const **control_vars); 1353 1354 ompd_rc_t ompd_enumerate_icvs(ompd_address_space_handle_t *handle, 1355 ompd_icv_id_t current, ompd_icv_id_t *next_id, 1356 const char **next_icv_name, 1357 ompd_scope_t *next_scope, int *more); 1358 1359 ompd_rc_t ompd_get_icv_from_scope(void *handle, ompd_scope_t scope, 1360 ompd_icv_id_t icv_id, ompd_word_t *icv_value); 1361 1362 ompd_rc_t ompd_get_icv_string_from_scope(void *handle, ompd_scope_t scope, 1363 ompd_icv_id_t icv_id, 1364 const char **icv_string); 1365 1366 ompd_rc_t ompd_get_tool_data(void *handle, ompd_scope_t scope, 1367 ompd_word_t *value, ompd_address_t *ptr); 1368 1369 typedef struct ompt_record_ompt_t { 1370 ompt_callbacks_t type; 1371 ompt_device_time_t time; 1372 ompt_id_t thread_id; 1373 ompt_id_t target_id; 1374 union { 1375 ompt_record_thread_begin_t thread_begin; 1376 ompt_record_parallel_begin_t parallel_begin; 1377 ompt_record_parallel_end_t parallel_end; 1378 ompt_record_work_t work; 1379 ompt_record_dispatch_t dispatch; 1380 ompt_record_task_create_t task_create; 1381 ompt_record_dependences_t dependences; 1382 ompt_record_task_dependence_t task_dependence; 1383 ompt_record_task_schedule_t task_schedule; 1384 ompt_record_implicit_task_t implicit_task; 1385 ompt_record_masked_t masked; 1386 ompt_record_sync_region_t sync_region; 1387 ompt_record_mutex_acquire_t mutex_acquire; 1388 ompt_record_mutex_t mutex; 1389 ompt_record_nest_lock_t nest_lock; 1390 ompt_record_flush_t flush; 1391 ompt_record_cancel_t cancel; 1392 ompt_record_target_t target; 1393 ompt_record_target_data_op_t target_data_op; 1394 ompt_record_target_map_t target_map; 1395 ompt_record_target_kernel_t target_kernel; 1396 ompt_record_control_tool_t control_tool; 1397 } record; 1398 } ompt_record_ompt_t; 1399 1400 typedef ompt_record_ompt_t *(*ompt_get_record_ompt_t) ( 1401 ompt_buffer_t *buffer, 1402 ompt_buffer_cursor_t current 1403 ); 1404 1405 #define ompt_id_none 0 1406 #define ompt_data_none {0} 1407 #define ompt_time_none 0 1408 #define ompt_hwid_none 0 1409 #define ompt_addr_none ~0 1410 #define ompt_mutex_impl_none 0 1411 #define ompt_wait_id_none 0 1412 1413 #define ompd_segment_none 0 1414 1415 #endif /* __OMPT__ */ 1416