<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/72231>72231</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[openmp][runtime][test] ompt test case failed occasionally
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
MANGOPIE3
</td>
</tr>
</table>
<pre>
Hello, I find that there is a low probability that the `openmp/runtime/test/ompt/tasks/explicit_task_thread_num.c` fails.
```c
// RUN: %libomp-compile-and-run | FileCheck %s
// REQUIRES: ompt
#include "callback.h"
#include <omp.h>
__attribute__ ((noinline)) // workaround for bug in icc
void print_task_info_at(int ancestor_level, int id)
{
#pragma omp critical
{
int task_type;
char buffer[2048];
ompt_data_t *parallel_data;
ompt_data_t *task_data;
int thread_num;
ompt_get_task_info(ancestor_level, &task_type, &task_data, NULL,
¶llel_data, &thread_num);
format_task_type(task_type, buffer);
printf("%" PRIu64 ": ancestor_level=%d id=%d task_type=%s=%d "
"parallel_id=%" PRIu64 " task_id=%" PRIu64
" thread_num=%d\n",
ompt_get_thread_data()->value, ancestor_level, id, buffer,
task_type, parallel_data->value, task_data->value, thread_num);
}
};
int main()
{
#pragma omp parallel num_threads(2)
{
if (omp_get_thread_num() == 1) {
// To assert that task is executed by the worker thread,
// if(0) is used in order to ensure that the task is immediately
// executed after its creation.
#pragma omp task if(0)
{
// thread_num should be equal to 1 for both explicit and implicit task
print_task_info_at(0, 1);
print_task_info_at(1, 0);
};
}
}
// Check if libomp supports the callbacks for this test.
// CHECK-NOT: {{^}}0: Could not register callback 'ompt_event_parallel_begin'
// CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_task_create'
// CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_implicit_task'
// CHECK: {{^}}0: NULL_POINTER=[[NULL:.*$]]
// CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_initial_task_begin
// parallel region used only to determine worker thread id
// CHECK: {{^}}[[MASTER_ID]]: ompt_event_parallel_begin
// CHECK-DAG: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin
// CHECK-DAG: {{^}}[[WORKER_ID:[0-9]+]]: ompt_event_implicit_task_begin
// thread_num must be equal to 1 for both explicit and the implicit tasks
// CHECK: {{^}}[[WORKER_ID]]: ancestor_level=0 id=1 task_type=ompt_task_explicit
// CHECK-SAME: thread_num=1
// CHECK: {{^}}[[WORKER_ID]]: ancestor_level=1 id=0 task_type=ompt_task_implicit
// CHECK-SAME: thread_num=1
return 0;
}
```
And error prompt
```log
~/openmp/runtime/test/ompt/tasks/explicit_task_thread_num.c:62:12: error: CHECK: expected string not fou nd in input
// CHECK: {{^}}[[WORKER_ID]]: ancestor_level=0 id=1 task_type=ompt_task_explicit
^
<stdin>:22:48: note: scanning from here
281474976710658: ompt_event_implicit_task_begin: parallel_id=281474976710661, task_id=281474976710662, team_size=2, thread_num=0
^
<stdin>:22:48: note: with "WORKER_ID" equal to "562949953421313"
281474976710658: ompt_event_implicit_task_begin: parallel_id=281474976710661, task_id=281474976710662, team_size=2, thread_num=0
^
<stdin>:24:98: note: possible intended match here
281474976710658: task level 0: parallel_id=281474976710661, task_id=281474976710662, exit_frame=(nil), reenter_frame=(nil), task_type=ompt _task_implicit|ompt_task_undeferred=134217730, thread_num=0
^
Input file: <stdin>
Check file: ~/openmp/runtime/test/ompt/tasks/explicit_task_thread_num.c
-dump-input=help explains the following input dump.
Input was:
<<<<<<
.
.
.
17: 562949953421313: ompt_event_task_schedule: first_task_id=562949953421315, second_task_id=562949953421314, prior_task_status =ompt_task_complete=1
18: 562949953421313: ompt_event_task_end: task_id=562949953421315
19: 562949953421313: ompt_event_barrier_begin: parallel_id=281474976710661, task_id=562949953421314, codeptr_ra=(nil)
20: 562949953421313: task level 0: parallel_id=281474976710661, task_id=562949953421314, exit_frame=(nil), reenter_frame=(nil), task_type=ompt_task_implicit|ompt_task_undeferred=134217730, thread_num=1
21: 562949953421313: ompt_event_wait_barrier_begin: parallel_id=281474976710661, task_id=562949953421314, codeptr_ra=(nil)
22: 281474976710658: ompt_event_implicit_task_begin: parallel_id=281474976710661, task_id=281474976710662, team_size=2, thread_ num=0
check:62'0 X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ error: no match found
check:62'1 with "WORKER_ID" equal to "562949953421313"
23: 281474976710658: ompt_event_barrier_begin: parallel_id=281474976710661, task_id=281474976710662, codeptr_ra=0xaaaabe68dd24
check:62'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24: 281474976710658: task level 0: parallel_id=281474976710661, task_id=281474976710662, exit_frame=(nil), reenter_frame=(nil), task_type=ompt_task_implicit|ompt_task_undeferred=134217730, thread_num=0
check:62'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:62'2 ? possible intended match
25: 281474976710658: ompt_event_wait_barrier_begin: parallel_id=281474976710661, task_id=281474976710662, codeptr_ra=0xaaaabe68 dd24
check:62'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~
26: 281474976710658: ompt_event_wait_barrier_end: parallel_id=0, task_id=281474976710662, codeptr_ra=0xaaaabe68dd24
check:62'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27: 281474976710658: ompt_event_barrier_end: parallel_id=0, task_id=281474976710662, codeptr_ra=0xaaaabe68dd24
check:62'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
28: 281474976710658: ompt_event_implicit_task_end: parallel_id=0, task_id=281474976710662, team_size=2, thread_num=0
check:62'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
29: 281474976710658: ompt_event_parallel_end: parallel_id=281474976710661, task_id=281474976710659, invoker=2, codeptr_ra=0xaaa abe68dd24
check:62'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~
.
.
.
>>>>>>
```
OpenMP does not guarantee the order in which the master(thread id=0) and worker(thread id =1) threads execute tasks.
So this test case uses `CHECK-DAG`.
The Successful output is below, (I remove some unrelated output, assume MASTER_ID=281474976710658, and WORKER_ID=562949953421313)
1. MASTER thread ompt_event_implicit_task_begin before two 'ancestor_level=' check
```log
0: NULL_POINTER=(nil)
281474976710658: ompt_event_thread_begin: thread_type=ompt_thread_initial=1, thread_id=281474976710658
281474976710658: ompt_event_initial_task_begin: parallel_id=281474976710660, task_id=281474976710659, actual_parallelism=1, index=1, flags=1
281474976710658: ompt_event_parallel_begin: parent_task_id=281474976710659, parent_task_frame.exit=(nil), parent_task_frame.reenter=0xffffce4d3310, parallel_id=281474976710661, requested_team_size=2, codeptr_ra=0xaaaabe68dd24, invoker=2
281474976710658: ompt_event_implicit_task_begin: parallel_id=281474976710661, task_id=281474976710662, team_size=2, thread_num=0
562949953421313: ompt_event_implicit_task_begin: parallel_id=281474976710661, task_id=562949953421314, team_size=2, thread_num=1
562949953421313: ancestor_level=0 id=1 task_type=ompt_task_explicit|ompt_task_undeferred=134217732 parallel_id=281474976710661 task_id=562949953421315 thread_num=1
562949953421313: ancestor_level=1 id=0 task_type=ompt_task_implicit|ompt_task_undeferred=134217730 parallel_id=281474976710661 task_id=562949953421314 thread_num=1
281474976710658: ompt_event_thread_end: thread_id=281474976710658
562949953421313: ompt_event_thread_end: thread_id=562949953421313
```
but if MASTER thread ompt_event_implicit_task_begin after two 'ancestor_level=' check, the 'ancestor_level=' check will failed!
```log
0: NULL_POINTER=(nil)
281474976710658: ompt_event_thread_begin: thread_type=ompt_thread_initial=1, thread_id=281474976710658
281474976710658: ompt_event_initial_task_begin: parallel_id=281474976710660, task_id=281474976710659, actual_parallelism=1, index=1, flags=1
281474976710658: ompt_event_parallel_begin: parent_task_id=281474976710659, parent_task_frame.exit=(nil), parent_task_frame.reenter=0xffffce4d3310, parallel_id=281474976710661, requested_team_size=2, codeptr_ra=0xaaaabe68dd24, invoker=2
562949953421313: ompt_event_implicit_task_begin: parallel_id=281474976710661, task_id=562949953421314, team_size=2, thread_num=1
562949953421313: ancestor_level=0 id=1 task_type=ompt_task_explicit|ompt_task_undeferred=134217732 parallel_id=281474976710661 task_id=562949953421315 thread_num=1
562949953421313: ancestor_level=1 id=0 task_type=ompt_task_implicit|ompt_task_undeferred=134217730 parallel_id=281474976710661 task_id=562949953421314 thread_num=1
281474976710658: ompt_event_implicit_task_begin: parallel_id=281474976710661, task_id=281474976710662, team_size=2, thread_num=0
281474976710658: ompt_event_thread_end: thread_id=281474976710658
562949953421313: ompt_event_thread_end: thread_id=562949953421313
0: ompt_event_runtime_shutdown
```
Does openmp guarantee the master thread do task before woker thread ?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWl1z4rb6_zTKjSaMLWPAF7kgIWkz7b78d7fzP3eMsB-DzsoSleSwORf97Gck2cY2hrBJ2qZnlmEA29Lz8tPzKkG1ZmsBcIXiaxQvLmhpNlJdvZu__-nDx_vb6GIls8ern4FzicgNvsc5Exk2G2qw2YACzDSmmMsd3iq5oivGmXlsnmM0CeQWRLFF5E6VwrACELkzoA0id7LY2i9D9VeNyB1823KWMrO0N5Zmo4BmS1EWoxRNApxTxvUIBQsUzNEk8O-0uiZ3iNzhT7-9R9EcIxJztpLF9jKVxZZxuKQiu1SlwGh6g-8Yh5sNpF_tON2df_t_v91_uv1siTjZ_MNqSMREyssMMCIkpZyvaPp1tEGEHA6IbmSxHW1QdNsh4T6XS2qMYqvSwHKJEZkhMhOSCc4EIJIgkuBKnJ1UX6mSpchwLhVelWvMBGZppfSDZBneKiYqwJjI5ZIaRGZMGExFCtpIteTwANwunb3LMsvCSzO9bgTfKrouqNUZp4oZllLun2HcDMMYOxJ-cR63gKLWk3RDrYR5DgrF1yQYz1C82I-waC4zaujSYETmW6oo58DdrQ6d3kDH7GCQE6Mxj8P5a2hBgsjsEAtEJns9WteOFbnB73_79VdEbvZ0B16ITLp6VHT2gpFkL1suVUFr03ZcZx0JKuzaUzD2y5s7IyGIxIgQ_PHTfTkZWyO0ZtpTLVogEmd2matfrdVaOHuv7jdma381atTzunw8kcNnp9Bx01pL5Lii-EY4RXrA7hfNz_BozhBJLlF0-0B56SAaMOmsDV2Pagfezkp1qDbr3r07vIoYTRe1--zN239aqywoE17yvpMNuFotExZlUamuEZmRZnbL-1rGn9ugIYttGzEn58zFjmiBogUO3e-27-I6rHyRmGoNylRRmuqvNojDN0hLAxlePbrIbaMPqAqIHrgVJWYtM7CcmMalhszGJ6kyO01iELpUsE8FNSNWFJAxaoA_DtBsxKC5AYWZ0ThVQA2TYjQEoqdaC9Ih2NW-4bCHDOuNLHmGV4Dh95JyK3XoY600G1znI0xFhllRXViGFd3B4BtY8wn7jtw4c394aIcHneFt0_KKLA7Nr77hdfIJjeXYJz6sy-1WKqMd8HWy0k41s2Ea2wQ86tP4-fbml8v3H764HDq9tu_41nKcLgJ778aBJaTBCtZM2-WpSWNEps6L4QGEWTbetoK1dYjpn8GqvuERdUYCfzar2gocz4bZEMtj7GxmWX78cP_-y-0n66u26rp26SaajxCZIzK2mTNenEnUE3g3__zl9tPyfoGiOYqvg8vEUiDXFamqnqlWhwlmGOUeN79CQ2o04cniIoV3cCn4o3WTDAyogolenLAR-XlyDwnaM6OhhV3Mf3om8c5SPpPD_3_49Mv5sB9j2GPbik9Fqc1Z0cm6eSdC6e9ahr0ejeAHhUXgq4qwU1I49dyNWpxBDD_P391aop2KIHx1EUMvYnBExBqg7xaxnqDAlErgYJ_4m3BcNyT-ci4yDEpJZZuifSNRD-Jy7e_8YZugV2iPovnEVoOhKwkdYxfZakDh2xZSm1O1UUysXbDLZXmkrnUv4XI5E9vSNHXi32NI-5Iyrrup6EabjAnbXkVzVwePZ5aVkAbst06pEFbRXMkC2y7VTySzcDwdJ9PJNAwm8ewM_4zmuFscd0hMwqaAHHhI3EOgxVKz_1gdSa-wjBZBje3Zqu2Y2djieg80IfvwgAiJJyQZJ0kcjUkYhVFT5__jdB-jaJ50dN9KrdmKg-3_QGSQ4YKadHN6gV196EwPBy9XCb4xs8wVLXw_NROMu579BisAYUANP-xbOu4FpOnN3v5LkUEOSoFzEruM02kUnAGf-7y3Hotzxh1ibUjdY18n1o9fK_y0-F9mZbG99HEjWmyAb12iokz4WjSXnMud9U03Btvho0MFdlTblFrbRf_tVR8dNqBn3QqnVvm-o3Qdwimp0w1kpccqZ0rXecSuTHd6bNdHQypFdnTM2PWhiklVUTfUlBp3gl8qiy0Ha-779LiXe3am3CCy2vSHhT2gnDxNeUWVYqCeFRwGgEhlBlujlop2nKUvGQmOSPYCvx6Q5pX8-uVuXa86CZ9ekR1lf-2y-C2nN5RJcCcWpja4-VqITAP8rz9e74Wrr6a2ErJKPrksRTbAP3x-qm6bf_Q04i-xgAGsOxYQfKOU0hVMZllGxoMwvyLK3_uqzXJ8BKQ3mftfLfW_nXV4Td4DuhGMortj1d-hy8RPu8yLI-f5foPfouPgFtRt6CbfCV1VaHSBC_7xIaaOK9Pzg-__HhI1CLPvzfnPhOKsbvHvdqEalORpUBr9B_E4P7rEiT-8fZBfQdXYHNrNqc2cN2NT_Rc-QPa8Xq7uGKPb_ntoN85_ftiCePcRZxK02wBbl1RRYQBcX-pPrZjAuw1LN-5WQbUBhchsv7Xt7DhxO65-27v9FLvynSSV4TYnan4_thL5s9wfwOCUasClBo3RJNjvNk-CavCXDeDPZZqC1nnJsSyN7Y2ZxivgcufPm2f3WEEhHwBrWQAuhQJODWS4Gu4OTrUuC8CtQ4JF33bd8WqGWxvai4PyNGnDGY4qevXO_-keAK8glwqw2dnSdzpwbD3F3i6PbJUOHp50-5PT_liFkybbV9edyszfqs5H_HI2cWjAM2dnba0dnrY8EQ1OxUofDWhqSsqbEMN0UQvLRAbf6ouc07XeN5Vnxqu2jM2WwjFJ2mNc-TuyZXK_Bj4cVZXMLnrleZ6nMM6iKAw6Z_XHIqWC30vQBrLlQdI4lVB7YfRNb4ue7vxfLtdA639arvCoXM_e4H-y9SGnNTq-wfVs0c89QXq6a3um6OMTB1Bnxbd67--poPXENuJRYv15Qwl3ZbNUjr8vQfj_ezydH5xhwulBeMc4d_8YhAyRDog_MsuPzPKXZJYfEfxHBD_XQ_6-OuPt5pSgN706n1zqTWkyuRMnWr2F7fH8wWavzfM9XZ2RMum3iKveZCdbf2RC0R1u07zIrqIsiRJ6AVfhJEmSmIyj8GJzlQXjLEyiMZmlEMM4oWEyoxSyZAWTMBpPLtgVCUgUhuE4SIIgCkdkNp6M6WqaxTTP41mIxgEUlPER5w_FSKr1BdO6hKspIVF4wekKuHZ_zydEwA67h4gQFC8u1JWdc7kq1xqNA8600Xsqhhnu_tdfnfHGCxRf18e87sKd9MYLB3OrJfWJE8s0pZpJQTl_vCgVv9oYs3Xnsu6vIGtmNuVqlMoCkTvLtPq63Cr5b0gNIndOVI3InVPlvwEAAP__ZPT8QQ">