<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">HI all,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I  am experiencing a seg fault with a program similar to the one mentioned in the subject.<o:p></o:p></p>
<p class="MsoNormal">My program looks like the following (I am using clang 6.0.):<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">------------------------------------------------------------------------------------------------------------------------<o:p></o:p></p>
<p class="MsoNormal">    int NUM_THREADS = 2;<o:p></o:p></p>
<p class="MsoNormal">    int i;<o:p></o:p></p>
<p class="MsoNormal">    int N[NUM_THREADS];<o:p></o:p></p>
<p class="MsoNormal">    int *P;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#pragma omp parallel private(P) num_threads(NUM_THREADS)<o:p></o:p></p>
<p class="MsoNormal">    {<o:p></o:p></p>
<p class="MsoNormal">        P = &N[omp_get_thread_num()];<o:p></o:p></p>
<p class="MsoNormal">        // P is firstprivate by default<o:p></o:p></p>
<p class="MsoNormal">#pragma omp task<o:p></o:p></p>
<p class="MsoNormal">            {<o:p></o:p></p>
<p class="MsoNormal">#pragma omp critical<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                    printf("%d\n", *P);<o:p></o:p></p>
<p class="MsoNormal">                    printf("%d: %p\n", omp_get_thread_num(), P);<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">            }<o:p></o:p></p>
<p class="MsoNormal">        }<o:p></o:p></p>
<p class="MsoNormal">------------------------------------------------------------------------------------------------------------------------<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The difference from the original program is the task construct is not inside a single construct.<o:p></o:p></p>
<p class="MsoNormal">According to the comment in the original example, P is expected to be firstprivate.<o:p></o:p></p>
<p class="MsoNormal">However, my example fails with seg faults because P is not a valid pointer inside the task, while if I add explicitly “firstprivate(P)” or an explicit barrier at the end of the task construct the testcase runs as expected.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I am wondering whether it is valid or not to have a task construct without being inside a single construct. If it is valid, looks like the default “firstprivate” behavior is not actually happening.<o:p></o:p></p>
<p class="MsoNormal">In my example, it looks like that all threads are spawning a task but once they reach the implicit barrier at the end of the parallel region their stack is not valid anymore, but the task gets executed by the same threads and the pointer
 P is garbage at that point. If I put the task inside a single construct the program runs correctly.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks.<o:p></o:p></p>
<p class="MsoNormal">Simone<br>
<br>
<o:p></o:p></p>
</div>

<DIV>
<HR>
</DIV>
<DIV>This email message is for the sole use of the intended recipient(s) and may 
contain confidential information.  Any unauthorized review, use, disclosure 
or distribution is prohibited.  If you are not the intended recipient, 
please contact the sender by reply email and destroy all copies of the original 
message. </DIV>
<DIV>
<HR>
</DIV>
</body>
</html>