Skip to content

Commit 3aa96f5

Browse files
rneveuRulior
andauthoredMar 12, 2025
[OpenMP] [Taskgraph] Differentiating task ids from the taskgraph and from the debugger (llvm#130660)
This PR creates a new member for task data, which is used to identify the task in its taskgraph (when ompx taskgraph is enabled). It aims to remove the overloading of the td_task_id member, which was used both by the debugger and the taskgraph. This resulted in the identifier's non-unicity in the case of multiple taskgraphs. Co-authored-by: Rémy Neveu <rem2007@free.fr>
1 parent ab53e1c commit 3aa96f5

File tree

4 files changed

+20
-20
lines changed

4 files changed

+20
-20
lines changed
 

‎openmp/runtime/src/kmp.h

+1
Original file line numberDiff line numberDiff line change
@@ -2790,6 +2790,7 @@ struct kmp_taskdata { /* aligned during dynamic allocation */
27902790
#if OMPX_TASKGRAPH
27912791
bool is_taskgraph = 0; // whether the task is within a TDG
27922792
kmp_tdg_info_t *tdg; // used to associate task with a TDG
2793+
kmp_int32 td_tdg_task_id; // local task id in its TDG
27932794
#endif
27942795
kmp_target_data_t td_target_data;
27952796
}; // struct kmp_taskdata

‎openmp/runtime/src/kmp_taskdeps.cpp

+7-6
Original file line numberDiff line numberDiff line change
@@ -233,10 +233,10 @@ static inline void __kmp_track_dependence(kmp_int32 gtid, kmp_depnode_t *source,
233233
if (task_sink->is_taskgraph &&
234234
__kmp_tdg_is_recording(task_sink->tdg->tdg_status)) {
235235
kmp_node_info_t *source_info =
236-
&task_sink->tdg->record_map[task_source->td_task_id];
236+
&task_sink->tdg->record_map[task_source->td_tdg_task_id];
237237
bool exists = false;
238238
for (int i = 0; i < source_info->nsuccessors; i++) {
239-
if (source_info->successors[i] == task_sink->td_task_id) {
239+
if (source_info->successors[i] == task_sink->td_tdg_task_id) {
240240
exists = true;
241241
break;
242242
}
@@ -251,11 +251,12 @@ static inline void __kmp_track_dependence(kmp_int32 gtid, kmp_depnode_t *source,
251251
__kmp_free(old_succ_ids);
252252
}
253253

254-
source_info->successors[source_info->nsuccessors] = task_sink->td_task_id;
254+
source_info->successors[source_info->nsuccessors] =
255+
task_sink->td_tdg_task_id;
255256
source_info->nsuccessors++;
256257

257258
kmp_node_info_t *sink_info =
258-
&(task_sink->tdg->record_map[task_sink->td_task_id]);
259+
&(task_sink->tdg->record_map[task_sink->td_tdg_task_id]);
259260
sink_info->npredecessors++;
260261
}
261262
}
@@ -727,8 +728,8 @@ kmp_int32 __kmpc_omp_task_with_deps(ident_t *loc_ref, kmp_int32 gtid,
727728
}
728729
__kmp_release_bootstrap_lock(&tdg->graph_lock);
729730
}
730-
tdg->record_map[new_taskdata->td_task_id].task = new_task;
731-
tdg->record_map[new_taskdata->td_task_id].parent_task =
731+
tdg->record_map[new_taskdata->td_tdg_task_id].task = new_task;
732+
tdg->record_map[new_taskdata->td_tdg_task_id].parent_task =
732733
new_taskdata->td_parent;
733734
KMP_ATOMIC_INC(&tdg->num_tasks);
734735
}

‎openmp/runtime/src/kmp_taskdeps.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ static inline void __kmp_release_deps(kmp_int32 gtid, kmp_taskdata_t *task) {
9898

9999
#if OMPX_TASKGRAPH
100100
if (task->is_taskgraph && !(__kmp_tdg_is_recording(task->tdg->tdg_status))) {
101-
kmp_node_info_t *TaskInfo = &(task->tdg->record_map[task->td_task_id]);
101+
kmp_node_info_t *TaskInfo = &(task->tdg->record_map[task->td_tdg_task_id]);
102102

103103
for (int i = 0; i < TaskInfo->nsuccessors; i++) {
104104
kmp_int32 successorNumber = TaskInfo->successors[i];

‎openmp/runtime/src/kmp_tasking.cpp

+11-13
Original file line numberDiff line numberDiff line change
@@ -1656,7 +1656,8 @@ kmp_task_t *__kmp_task_alloc(ident_t *loc_ref, kmp_int32 gtid,
16561656
(task_entry != (kmp_routine_entry_t)__kmp_taskloop_task)) {
16571657
taskdata->is_taskgraph = 1;
16581658
taskdata->tdg = __kmp_global_tdgs[__kmp_curr_tdg_idx];
1659-
taskdata->td_task_id = KMP_ATOMIC_INC(&__kmp_tdg_task_id);
1659+
taskdata->td_task_id = KMP_GEN_TASK_ID();
1660+
taskdata->td_tdg_task_id = KMP_ATOMIC_INC(&__kmp_tdg_task_id);
16601661
}
16611662
#endif
16621663
KA_TRACE(20, ("__kmp_task_alloc(exit): T#%d created task %p parent=%p\n",
@@ -2019,11 +2020,11 @@ kmp_int32 __kmp_omp_task(kmp_int32 gtid, kmp_task_t *new_task,
20192020
__kmp_tdg_is_recording(new_taskdata->tdg->tdg_status)) {
20202021
kmp_tdg_info_t *tdg = new_taskdata->tdg;
20212022
// extend the record_map if needed
2022-
if (new_taskdata->td_task_id >= new_taskdata->tdg->map_size) {
2023+
if (new_taskdata->td_tdg_task_id >= new_taskdata->tdg->map_size) {
20232024
__kmp_acquire_bootstrap_lock(&tdg->graph_lock);
20242025
// map_size could have been updated by another thread if recursive
20252026
// taskloop
2026-
if (new_taskdata->td_task_id >= tdg->map_size) {
2027+
if (new_taskdata->td_tdg_task_id >= tdg->map_size) {
20272028
kmp_uint old_size = tdg->map_size;
20282029
kmp_uint new_size = old_size * 2;
20292030
kmp_node_info_t *old_record = tdg->record_map;
@@ -2052,9 +2053,9 @@ kmp_int32 __kmp_omp_task(kmp_int32 gtid, kmp_task_t *new_task,
20522053
__kmp_release_bootstrap_lock(&tdg->graph_lock);
20532054
}
20542055
// record a task
2055-
if (tdg->record_map[new_taskdata->td_task_id].task == nullptr) {
2056-
tdg->record_map[new_taskdata->td_task_id].task = new_task;
2057-
tdg->record_map[new_taskdata->td_task_id].parent_task =
2056+
if (tdg->record_map[new_taskdata->td_tdg_task_id].task == nullptr) {
2057+
tdg->record_map[new_taskdata->td_tdg_task_id].task = new_task;
2058+
tdg->record_map[new_taskdata->td_tdg_task_id].parent_task =
20582059
new_taskdata->td_parent;
20592060
KMP_ATOMIC_INC(&tdg->num_tasks);
20602061
}
@@ -4681,14 +4682,11 @@ kmp_task_t *__kmp_task_dup_alloc(kmp_info_t *thread, kmp_task_t *task_src
46814682

46824683
// Initialize new task (only specific fields not affected by memcpy)
46834684
#if OMPX_TASKGRAPH
4684-
if (!taskdata->is_taskgraph || taskloop_recur)
4685-
taskdata->td_task_id = KMP_GEN_TASK_ID();
4686-
else if (taskdata->is_taskgraph &&
4687-
__kmp_tdg_is_recording(taskdata_src->tdg->tdg_status))
4688-
taskdata->td_task_id = KMP_ATOMIC_INC(&__kmp_tdg_task_id);
4689-
#else
4690-
taskdata->td_task_id = KMP_GEN_TASK_ID();
4685+
if (taskdata->is_taskgraph && !taskloop_recur &&
4686+
__kmp_tdg_is_recording(taskdata_src->tdg->tdg_status))
4687+
taskdata->td_tdg_task_id = KMP_ATOMIC_INC(&__kmp_tdg_task_id);
46914688
#endif
4689+
taskdata->td_task_id = KMP_GEN_TASK_ID();
46924690
if (task->shareds != NULL) { // need setup shareds pointer
46934691
shareds_offset = (char *)task_src->shareds - (char *)taskdata_src;
46944692
task->shareds = &((char *)taskdata)[shareds_offset];

0 commit comments

Comments
 (0)
Please sign in to comment.