[Openmp-dev] Size of kmp_task_t

Bataev, Alexey a.bataev at hotmail.com
Mon Apr 13 23:08:15 PDT 2015


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.

Best regards,
Alexey Bataev
=============
Software Engineer
Intel Compiler Team

13.04.2015 23:43, César пишет:
> Hello.
>
> 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):
>
> //=--------------------------------------------------=//
> #pragma omp parallel
> {
> #pragma omp task
> fun();
> }
> //=--------------------------------------------------=//
>
> the LLVM IR produced contains the following call to "task_alloc", 
> which, in this case, returns a structure with *five* fields:
>
> //=--------------------------------------------------=//
> %.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.)
> //=--------------------------------------------------=//
>
> the point is, when I inspect the RTL source code the structure 
> kmp_task_t contains only *four* fields:
>
> //=--------------------------------------------------=//
> typedef struct kmp_task {                   /* GEH: Shouldn't this be 
> aligned somehow? */
>     void *              shareds;            /**< pointer to block of 
> pointers to shared vars   */
>     kmp_routine_entry_t routine;            /**< pointer to routine to 
> call for executing task */
>     kmp_int32           part_id;            /**< part id for the task 
>                          */
> #if OMP_40_ENABLED
>     kmp_routine_entry_t destructors;        /* pointer to function to 
> invoke deconstructors of firstprivate C++ objects */
> #endif // OMP_40_ENABLED
>     /*  private vars  */
> } kmp_task_t;
> //=--------------------------------------------------=//
>
> 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: 
> http://openmp.llvm.org/ and http://clang-omp.github.io/
>
>
>
> César.
>
>
> _______________________________________________
> Openmp-dev mailing list
> Openmp-dev at dcs-maillist2.engr.illinois.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/openmp-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/openmp-dev/attachments/20150414/d2f499a0/attachment.html>


More information about the Openmp-dev mailing list