Skip to content

Commit a707d08

Browse files
authored
[OpenMP][OMPT] Indicate loop schedule for worksharing-loop events (#97429)
Use more specific values from `ompt_work_t` to allow the tool identify the schedule of a worksharing-loop. With this patch, the runtime will report the schedule chosen by the runtime rather than necessarily the schedule literally requested by the clause. E.g., for guided + just one iteration per thread, the runtime would choose and report static. Fixes issue #63904
1 parent c5b67dd commit a707d08

23 files changed

+199
-215
lines changed

openmp/runtime/src/kmp_csupport.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2006,13 +2006,13 @@ void __kmpc_for_static_fini(ident_t *loc, kmp_int32 global_tid) {
20062006

20072007
#if OMPT_SUPPORT && OMPT_OPTIONAL
20082008
if (ompt_enabled.ompt_callback_work) {
2009-
ompt_work_t ompt_work_type = ompt_work_loop;
2009+
ompt_work_t ompt_work_type = ompt_work_loop_static;
20102010
ompt_team_info_t *team_info = __ompt_get_teaminfo(0, NULL);
20112011
ompt_task_info_t *task_info = __ompt_get_task_info_object(0);
20122012
// Determine workshare type
20132013
if (loc != NULL) {
20142014
if ((loc->flags & KMP_IDENT_WORK_LOOP) != 0) {
2015-
ompt_work_type = ompt_work_loop;
2015+
ompt_work_type = ompt_work_loop_static;
20162016
} else if ((loc->flags & KMP_IDENT_WORK_SECTIONS) != 0) {
20172017
ompt_work_type = ompt_work_sections;
20182018
} else if ((loc->flags & KMP_IDENT_WORK_DISTRIBUTE) != 0) {

openmp/runtime/src/kmp_dispatch.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,8 +1164,9 @@ __kmp_dispatch_init(ident_t *loc, int gtid, enum sched_type schedule, T lb,
11641164
ompt_team_info_t *team_info = __ompt_get_teaminfo(0, NULL);
11651165
ompt_task_info_t *task_info = __ompt_get_task_info_object(0);
11661166
ompt_callbacks.ompt_callback(ompt_callback_work)(
1167-
ompt_work_loop, ompt_scope_begin, &(team_info->parallel_data),
1168-
&(task_info->task_data), pr->u.p.tc, OMPT_LOAD_RETURN_ADDRESS(gtid));
1167+
ompt_get_work_schedule(pr->schedule), ompt_scope_begin,
1168+
&(team_info->parallel_data), &(task_info->task_data), pr->u.p.tc,
1169+
OMPT_LOAD_RETURN_ADDRESS(gtid));
11691170
}
11701171
#endif
11711172
KMP_PUSH_PARTITIONED_TIMER(OMP_loop_dynamic);
@@ -2121,8 +2122,8 @@ int __kmp_dispatch_next_algorithm(int gtid,
21212122
ompt_team_info_t *team_info = __ompt_get_teaminfo(0, NULL); \
21222123
ompt_task_info_t *task_info = __ompt_get_task_info_object(0); \
21232124
ompt_callbacks.ompt_callback(ompt_callback_work)( \
2124-
ompt_work_loop, ompt_scope_end, &(team_info->parallel_data), \
2125-
&(task_info->task_data), 0, codeptr); \
2125+
ompt_get_work_schedule(pr->schedule), ompt_scope_end, \
2126+
&(team_info->parallel_data), &(task_info->task_data), 0, codeptr); \
21262127
} \
21272128
}
21282129
#define OMPT_LOOP_DISPATCH(lb, ub, st, status) \

openmp/runtime/src/kmp_sched.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ static void __kmp_for_static_init(ident_t *loc, kmp_int32 global_tid,
103103
#if OMPT_SUPPORT && OMPT_OPTIONAL
104104
ompt_team_info_t *team_info = NULL;
105105
ompt_task_info_t *task_info = NULL;
106-
ompt_work_t ompt_work_type = ompt_work_loop;
106+
ompt_work_t ompt_work_type = ompt_work_loop_static;
107107

108108
static kmp_int8 warn = 0;
109109

@@ -114,7 +114,7 @@ static void __kmp_for_static_init(ident_t *loc, kmp_int32 global_tid,
114114
// Determine workshare type
115115
if (loc != NULL) {
116116
if ((loc->flags & KMP_IDENT_WORK_LOOP) != 0) {
117-
ompt_work_type = ompt_work_loop;
117+
ompt_work_type = ompt_work_loop_static;
118118
} else if ((loc->flags & KMP_IDENT_WORK_SECTIONS) != 0) {
119119
ompt_work_type = ompt_work_sections;
120120
} else if ((loc->flags & KMP_IDENT_WORK_DISTRIBUTE) != 0) {

openmp/runtime/src/ompt-specific.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,25 @@ inline const char *ompt_get_runtime_version() {
130130
return &__kmp_version_lib_ver[KMP_VERSION_MAGIC_LEN];
131131
}
132132

133+
inline ompt_work_t ompt_get_work_schedule(enum sched_type schedule) {
134+
switch (SCHEDULE_WITHOUT_MODIFIERS(schedule)) {
135+
case kmp_sch_static_chunked:
136+
case kmp_sch_static_balanced:
137+
case kmp_sch_static_greedy:
138+
return ompt_work_loop_static;
139+
case kmp_sch_dynamic_chunked:
140+
case kmp_sch_static_steal:
141+
return ompt_work_loop_dynamic;
142+
case kmp_sch_guided_iterative_chunked:
143+
case kmp_sch_guided_analytical_chunked:
144+
case kmp_sch_guided_chunked:
145+
case kmp_sch_guided_simd:
146+
return ompt_work_loop_guided;
147+
default:
148+
return ompt_work_loop_other;
149+
}
150+
}
151+
133152
class OmptReturnAddressGuard {
134153
private:
135154
bool SetAddress{false};

openmp/runtime/test/ompt/callback.h

Lines changed: 45 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,36 @@ static const char* ompt_cancel_flag_t_values[] = {
4747
"ompt_cancel_discarded_task"
4848
};
4949

50+
static const char *ompt_work_t_values[] = {"undefined",
51+
"ompt_work_loop",
52+
"ompt_work_sections",
53+
"ompt_work_single_executor",
54+
"ompt_work_single_other",
55+
"ompt_work_workshare",
56+
"ompt_work_distribute",
57+
"ompt_work_taskloop",
58+
"ompt_work_scope",
59+
"ompt_work_workdistribute",
60+
"ompt_work_loop_static",
61+
"ompt_work_loop_dynamic",
62+
"ompt_work_loop_guided",
63+
"ompt_work_loop_other"};
64+
65+
static const char *ompt_work_events_t_values[] = {"undefined",
66+
"ompt_event_loop",
67+
"ompt_event_sections",
68+
"ompt_event_single_in_block",
69+
"ompt_event_single_others",
70+
"ompt_event_workshare",
71+
"ompt_event_distribute",
72+
"ompt_event_taskloop",
73+
"ompt_event_scope",
74+
"ompt_event_workdistribute",
75+
"ompt_event_loop_static",
76+
"ompt_event_loop_dynamic",
77+
"ompt_event_loop_guided",
78+
"ompt_event_loop_other"};
79+
5080
static const char *ompt_dependence_type_t_values[36] = {
5181
"ompt_dependence_type_UNDEFINED",
5282
"ompt_dependence_type_in", // 1
@@ -852,144 +882,21 @@ on_ompt_callback_work(
852882
{
853883
switch(endpoint)
854884
{
855-
case ompt_scope_begin:
856-
switch(wstype)
857-
{
858-
case ompt_work_loop:
859-
case ompt_work_loop_static:
860-
case ompt_work_loop_dynamic:
861-
case ompt_work_loop_guided:
862-
case ompt_work_loop_other:
863-
// TODO: add schedule attribute for the different work_loop types.
864-
// e.g., ", schedule=%s", ..., ompt_schedule_values[wstype]
865-
printf("%" PRIu64 ":" _TOOL_PREFIX
866-
" ompt_event_loop_begin: parallel_id=%" PRIu64
867-
", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
868-
"\n",
869-
ompt_get_thread_data()->value, parallel_data->value,
870-
task_data->value, codeptr_ra, count);
871-
break;
872-
case ompt_work_sections:
873-
printf("%" PRIu64 ":" _TOOL_PREFIX
874-
" ompt_event_sections_begin: parallel_id=%" PRIu64
875-
", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
876-
"\n",
877-
ompt_get_thread_data()->value, parallel_data->value,
878-
task_data->value, codeptr_ra, count);
879-
break;
880-
case ompt_work_single_executor:
881-
printf("%" PRIu64 ":" _TOOL_PREFIX
882-
" ompt_event_single_in_block_begin: parallel_id=%" PRIu64
883-
", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
884-
"\n",
885-
ompt_get_thread_data()->value, parallel_data->value,
886-
task_data->value, codeptr_ra, count);
887-
break;
888-
case ompt_work_single_other:
889-
printf("%" PRIu64 ":" _TOOL_PREFIX
890-
" ompt_event_single_others_begin: parallel_id=%" PRIu64
891-
", task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64 "\n",
892-
ompt_get_thread_data()->value, parallel_data->value,
893-
task_data->value, codeptr_ra, count);
894-
break;
895-
case ompt_work_workshare:
896-
//impl
897-
break;
898-
case ompt_work_distribute:
899-
printf("%" PRIu64 ":" _TOOL_PREFIX
900-
" ompt_event_distribute_begin: parallel_id=%" PRIu64
901-
", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
902-
"\n",
903-
ompt_get_thread_data()->value, parallel_data->value,
904-
task_data->value, codeptr_ra, count);
905-
break;
906-
case ompt_work_taskloop:
907-
//impl
908-
printf("%" PRIu64 ":" _TOOL_PREFIX
909-
" ompt_event_taskloop_begin: parallel_id=%" PRIu64
910-
", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
911-
"\n",
912-
ompt_get_thread_data()->value, parallel_data->value,
913-
task_data->value, codeptr_ra, count);
914-
break;
915-
case ompt_work_scope:
916-
printf("%" PRIu64 ":" _TOOL_PREFIX
917-
" ompt_event_scope_begin: parallel_id=%" PRIu64
918-
", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
919-
"\n",
920-
ompt_get_thread_data()->value, parallel_data->value,
921-
task_data->value, codeptr_ra, count);
922-
break;
923-
}
924-
break;
925-
case ompt_scope_end:
926-
switch(wstype)
927-
{
928-
case ompt_work_loop:
929-
case ompt_work_loop_static:
930-
case ompt_work_loop_dynamic:
931-
case ompt_work_loop_guided:
932-
case ompt_work_loop_other:
933-
printf("%" PRIu64 ":" _TOOL_PREFIX
934-
" ompt_event_loop_end: parallel_id=%" PRIu64
935-
", task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64 "\n",
936-
ompt_get_thread_data()->value, parallel_data->value,
937-
task_data->value, codeptr_ra, count);
938-
break;
939-
case ompt_work_sections:
940-
printf("%" PRIu64 ":" _TOOL_PREFIX
941-
" ompt_event_sections_end: parallel_id=%" PRIu64
942-
", task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64 "\n",
943-
ompt_get_thread_data()->value, parallel_data->value,
944-
task_data->value, codeptr_ra, count);
945-
break;
946-
case ompt_work_single_executor:
947-
printf("%" PRIu64 ":" _TOOL_PREFIX
948-
" ompt_event_single_in_block_end: parallel_id=%" PRIu64
949-
", task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64 "\n",
950-
ompt_get_thread_data()->value, parallel_data->value,
951-
task_data->value, codeptr_ra, count);
952-
break;
953-
case ompt_work_single_other:
954-
printf("%" PRIu64 ":" _TOOL_PREFIX
955-
" ompt_event_single_others_end: parallel_id=%" PRIu64
956-
", task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64 "\n",
957-
ompt_get_thread_data()->value, parallel_data->value,
958-
task_data->value, codeptr_ra, count);
959-
break;
960-
case ompt_work_workshare:
961-
//impl
962-
break;
963-
case ompt_work_distribute:
964-
printf("%" PRIu64 ":" _TOOL_PREFIX
965-
" ompt_event_distribute_end: parallel_id=%" PRIu64
966-
", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
967-
"\n",
968-
ompt_get_thread_data()->value, parallel_data->value,
969-
task_data->value, codeptr_ra, count);
970-
break;
971-
case ompt_work_taskloop:
972-
//impl
973-
printf("%" PRIu64 ":" _TOOL_PREFIX
974-
" ompt_event_taskloop_end: parallel_id=%" PRIu64
975-
", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
976-
"\n",
977-
ompt_get_thread_data()->value, parallel_data->value,
978-
task_data->value, codeptr_ra, count);
979-
break;
980-
case ompt_work_scope:
981-
printf("%" PRIu64 ":" _TOOL_PREFIX
982-
" ompt_event_scope_end: parallel_id=%" PRIu64
983-
", parent_task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64
984-
"\n",
985-
ompt_get_thread_data()->value, parallel_data->value,
986-
task_data->value, codeptr_ra, count);
987-
break;
988-
}
989-
break;
990-
case ompt_scope_beginend:
991-
printf("ompt_scope_beginend should never be passed to %s\n", __func__);
992-
exit(-1);
885+
case ompt_scope_begin:
886+
printf("%" PRIu64 ":" _TOOL_PREFIX " %s_begin: parallel_id=%" PRIu64
887+
", task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64 "\n",
888+
ompt_get_thread_data()->value, ompt_work_events_t_values[wstype],
889+
parallel_data->value, task_data->value, codeptr_ra, count);
890+
break;
891+
case ompt_scope_end:
892+
printf("%" PRIu64 ":" _TOOL_PREFIX " %s_end: parallel_id=%" PRIu64
893+
", task_id=%" PRIu64 ", codeptr_ra=%p, count=%" PRIu64 "\n",
894+
ompt_get_thread_data()->value, ompt_work_events_t_values[wstype],
895+
parallel_data->value, task_data->value, codeptr_ra, count);
896+
break;
897+
case ompt_scope_beginend:
898+
printf("ompt_scope_beginend should never be passed to %s\n", __func__);
899+
exit(-1);
993900
}
994901
}
995902

openmp/runtime/test/ompt/synchronization/ordered_dependences.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
int main() {
88
int a[10][10];
99
#pragma omp parallel num_threads(2)
10-
#pragma omp for ordered(2)
10+
#pragma omp for ordered(2) schedule(static)
1111
for (int i = 0; i < 2; i++)
1212
for (int j = 0; j < 2; j++) {
1313
a[i][j] = i + j + 1;
@@ -23,8 +23,8 @@ int main() {
2323
}
2424
// CHECK: 0: NULL_POINTER=[[NULL:.*$]]
2525

26-
// CHECK: {{^}}[[MASTER:[0-9]+]]: ompt_event_loop_begin:
27-
// CHECK-SAME: parallel_id={{[0-9]+}}, parent_task_id=[[ITASK:[0-9]+]],
26+
// CHECK: {{^}}[[MASTER:[0-9]+]]: ompt_event_loop_static_begin:
27+
// CHECK-SAME: parallel_id={{[0-9]+}}, task_id=[[ITASK:[0-9]+]],
2828

2929
// CHECK: {{^}}[[MASTER]]: ompt_event_dependences: task_id=[[ITASK]],
3030
// CHECK-SAME: deps=[(0, ompt_dependence_type_source), (0,
@@ -38,8 +38,8 @@ int main() {
3838
// CHECK-SAME: deps=[(0, ompt_dependence_type_source), (1,
3939
// CHECK-SAME: ompt_dependence_type_source)], ndeps=2
4040

41-
// CHECK: {{^}}[[WORKER:[0-9]+]]: ompt_event_loop_begin:
42-
// CHECK-SAME: parallel_id={{[0-9]+}}, parent_task_id=[[ITASK:[0-9]+]],
41+
// CHECK: {{^}}[[WORKER:[0-9]+]]: ompt_event_loop_static_begin:
42+
// CHECK-SAME: parallel_id={{[0-9]+}}, task_id=[[ITASK:[0-9]+]],
4343

4444
// CHECK: {{^}}[[WORKER]]: ompt_event_dependences: task_id=[[ITASK]],
4545
// CHECK-SAME: deps=[(0, ompt_dependence_type_sink), (0,

openmp/runtime/test/ompt/tasks/taskloop.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ int main() {
3737
// CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID1]]
3838
// CHECK: {{^}}[[MASTER_ID]]: ompt_event_taskloop_begin:
3939
// CHECK-SAME: parallel_id=[[PARALLEL_ID]]
40-
// CHECK-SAME: parent_task_id=[[IMPLICIT_TASK_ID1]]
40+
// CHECK-SAME: task_id=[[IMPLICIT_TASK_ID1]]
4141
// CHECK-SAME: codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]], count=2
4242
// CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_create:
4343
// CHECK-SAME: parent_task_id=[[IMPLICIT_TASK_ID1]]
@@ -52,7 +52,7 @@ int main() {
5252
// CHECK-NOT: {{^}}[[MASTER_ID]]: ompt_event_task_create:
5353
// CHECK: {{^}}[[MASTER_ID]]: ompt_event_taskloop_end:
5454
// CHECK-SAME: parallel_id=[[PARALLEL_ID]]
55-
// CHECK-SAME: parent_task_id=[[IMPLICIT_TASK_ID1]]
55+
// CHECK-SAME: task_id=[[IMPLICIT_TASK_ID1]]
5656
// CHECK-SAME: count=2
5757
// CHECK-DAG: {{^}}[[MASTER_ID]]: ompt_event_wait_taskgroup_begin:
5858
// CHECK: {{^}}[[MASTER_ID]]: ompt_event_wait_taskgroup_end:

openmp/runtime/test/ompt/tasks/taskloop_dispatch.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ int main() {
3232

3333
// CHECK: {{^}}[[MASTER_ID]]: ompt_event_taskloop_begin:
3434
// CHECK-SAME: parallel_id=[[PARALLEL_ID]]
35-
// CHECK-SAME: parent_task_id=[[IMPLICIT_TASK_ID1]]
35+
// CHECK-SAME: task_id=[[IMPLICIT_TASK_ID1]]
3636
// CHECK-SAME: codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]], count=16
3737

3838
// CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_create:

openmp/runtime/test/ompt/teams/distribute_dispatch.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,28 +24,28 @@ int main() {
2424

2525
// CHECK: {{^}}[[THREAD_ID0:[0-9]+]]: ompt_event_distribute_begin:
2626
// CHECK-SAME: parallel_id=[[PARALLEL_ID0:[0-9]+]]
27-
// CHECK-SAME: parent_task_id=[[TASK_ID0:[0-9]+]]
27+
// CHECK-SAME: task_id=[[TASK_ID0:[0-9]+]]
2828
// CHECK: {{^}}[[THREAD_ID0]]: ompt_event_distribute_chunk_begin:
2929
// CHECK-SAME: parallel_id=[[PARALLEL_ID0]], task_id=[[TASK_ID0]]
3030
// CHECK-SAME: chunk_start={{[0-9]+}}, chunk_iterations=16
3131

3232
// CHECK: {{^}}[[THREAD_ID1:[0-9]+]]: ompt_event_distribute_begin:
3333
// CHECK-SAME: parallel_id=[[PARALLEL_ID1:[0-9]+]]
34-
// CHECK-SAME: parent_task_id=[[TASK_ID1:[0-9]+]]
34+
// CHECK-SAME: task_id=[[TASK_ID1:[0-9]+]]
3535
// CHECK: {{^}}[[THREAD_ID1]]: ompt_event_distribute_chunk_begin:
3636
// CHECK-SAME: parallel_id=[[PARALLEL_ID1]], task_id=[[TASK_ID1]]
3737
// CHECK-SAME: chunk_start={{[0-9]+}}, chunk_iterations=16
3838

3939
// CHECK: {{^}}[[THREAD_ID2:[0-9]+]]: ompt_event_distribute_begin:
4040
// CHECK-SAME: parallel_id=[[PARALLEL_ID2:[0-9]+]]
41-
// CHECK-SAME: parent_task_id=[[TASK_ID2:[0-9]+]]
41+
// CHECK-SAME: task_id=[[TASK_ID2:[0-9]+]]
4242
// CHECK: {{^}}[[THREAD_ID2]]: ompt_event_distribute_chunk_begin:
4343
// CHECK-SAME: parallel_id=[[PARALLEL_ID2]], task_id=[[TASK_ID2]]
4444
// CHECK-SAME: chunk_start={{[0-9]+}}, chunk_iterations=16
4545

4646
// CHECK: {{^}}[[THREAD_ID3:[0-9]+]]: ompt_event_distribute_begin:
4747
// CHECK-SAME: parallel_id=[[PARALLEL_ID3:[0-9]+]]
48-
// CHECK-SAME: parent_task_id=[[TASK_ID3:[0-9]+]]
48+
// CHECK-SAME: task_id=[[TASK_ID3:[0-9]+]]
4949
// CHECK: {{^}}[[THREAD_ID3]]: ompt_event_distribute_chunk_begin:
5050
// CHECK-SAME: parallel_id=[[PARALLEL_ID3]], task_id=[[TASK_ID3]]
5151
// CHECK-SAME: chunk_start={{[0-9]+}}, chunk_iterations=16

openmp/runtime/test/ompt/worksharing/for/auto.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,7 @@
44
// XFAIL: gcc
55

66
#define SCHEDULE auto
7+
// The runtime uses guided schedule for auto,
8+
// which is a reason choice
9+
#define SCHED_OUTPUT "guided"
710
#include "base.h"

openmp/runtime/test/ompt/worksharing/for/auto_serialized.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,7 @@
44
// XFAIL: gcc
55

66
#define SCHEDULE auto
7+
// The runtime uses static schedule for serialized loop,
8+
// which is a reason choice
9+
#define SCHED_OUTPUT "static"
710
#include "base_serialized.h"

openmp/runtime/test/ompt/worksharing/for/auto_split.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,7 @@
55
// XFAIL: gcc
66

77
#define SCHEDULE auto
8+
// The runtime uses guided schedule for auto,
9+
// which is a reason choice
10+
#define SCHED_OUTPUT "guided"
811
#include "base_split.h"

0 commit comments

Comments
 (0)