<div dir="ltr">I see; I had understood this comment as saying the allocation order of kmp_task_t and the private vars in memory (i.e., that private vars would be always allocated just after kmp_task_t) not really referring that kmp_task_t would be "re-shaped" by the compiler.<div><br></div><div>In the code example I sent before the "task function fun", as I understand, does not have any private/shared vars. Why the structure still has a fifth field? Could you please point me to the LLVM code that compute that? Moreover, accessing these private vars through a pointer to an array, like what is done for shared vars, would make sense?</div><div><br></div><div><br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><br><br>César.</div></div>
<br><div class="gmail_quote">On Tue, Apr 14, 2015 at 3:08 AM, Bataev, Alexey <span dir="ltr"><<a href="mailto:a.bataev@hotmail.com" target="_blank">a.bataev@hotmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>
<div>Actually kmp_task_t can have more than
4 fields. See /* private vars */ comment. It is a place for a
list of private variables used inside of task construct.<br>
<pre cols="72">Best regards,
Alexey Bataev
=============
Software Engineer
Intel Compiler Team</pre>
13.04.2015 23:43, César пишет:<br>
</div>
<blockquote type="cite"><div><div class="h5">
<div dir="ltr">Hello.
<div><br>
</div>
<div>I'm doing some experiments with the RTL and I'm seeing
something that I could not understand. When I compile this
code with clang (clang -S emit-llvm test.c -fopenmp):</div>
<div><br>
</div>
<div>//=--------------------------------------------------=//<br>
</div>
<div>
<div><span style="white-space:pre-wrap"> </span>#pragma
omp parallel<br>
</div>
<div><span style="white-space:pre-wrap"> </span>{</div>
<div><span style="white-space:pre-wrap"> </span>#pragma
omp task <span style="white-space:pre-wrap"> </span></div>
<div><span style="white-space:pre-wrap"> </span>fun();</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div>//=--------------------------------------------------=//<br>
</div>
<div><br>
</div>
<div>the LLVM IR produced contains the following call to
"task_alloc", which, in this case, returns a structure with
*five* fields:</div>
<div><br>
</div>
<div>//=--------------------------------------------------=//<br>
</div>
<div>
<div>%.task_t.val.addr = call { i8*, i32 (i32, i8*)*, i32,
i32 (i32, i8*)*, i32 }* @__kmpc_omp_task_alloc({ i32, i32,
i32, i32, i8* }* %.__kmpc_ident_t.2., i32 %.gtid., i32
%.flags., i64 ptrtoint ({ i8*, i32 (i32, i8*)*, i32, i32
(i32, i8*)*, i32 }* getelementptr ({ i8*, i32 (i32, i8*)*,
i32, i32 (i32, i8*)*, i32 }* null, i32 1) to i64), i64 0,
i32 (i32, i8*)* @.omp_ptask.)</div>
</div>
<div>//=--------------------------------------------------=//<br>
</div>
<div><br>
</div>
<div>the point is, when I inspect the RTL source code the
structure kmp_task_t contains only *four* fields:</div>
<div><br>
</div>
<div>//=--------------------------------------------------=//<br>
</div>
<div>
<div>typedef struct kmp_task { /* GEH:
Shouldn't this be aligned somehow? */</div>
<div> void * shareds; /**<
pointer to block of pointers to shared vars */</div>
<div> kmp_routine_entry_t routine; /**<
pointer to routine to call for executing task */</div>
<div> kmp_int32 part_id; /**<
part id for the task */</div>
<div>#if OMP_40_ENABLED</div>
<div> kmp_routine_entry_t destructors; /* pointer
to function to invoke deconstructors of firstprivate C++
objects */</div>
<div>#endif // OMP_40_ENABLED</div>
<div> /* private vars */</div>
<div>} kmp_task_t;</div>
</div>
<div>//=--------------------------------------------------=//</div>
<div><br>
</div>
<div>What am I doing wrong here? Am I using the wrong version
of some library? To install the RTL and LLVM I followed the
steps from: <a href="http://openmp.llvm.org/" target="_blank">http://openmp.llvm.org/</a>
and <a href="http://clang-omp.github.io/" target="_blank">http://clang-omp.github.io/</a></div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>
<div>César.</div>
</div>
</div>
</div>
<br>
<fieldset></fieldset>
<br>
</div></div><pre>_______________________________________________
Openmp-dev mailing list
<a href="mailto:Openmp-dev@dcs-maillist2.engr.illinois.edu" target="_blank">Openmp-dev@dcs-maillist2.engr.illinois.edu</a>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/openmp-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/openmp-dev</a>
</pre>
</blockquote>
<br>
</div>
</blockquote></div><br></div>