<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class=""><div class="">Date: Sat, 29 Feb 2020 07:13:58 -0500<br class="">From: Abid Malik via Openmp-dev <<a href="mailto:openmp-dev@lists.llvm.org" class="">openmp-dev@lists.llvm.org</a>><br class="">To: <a href="mailto:openmp-dev@lists.llvm.org" class="">openmp-dev@lists.llvm.org</a><br class="">Subject: [Openmp-dev] __kmpc_for_static_fini<br class="">Message-ID:<br class=""><span class="Apple-tab-span" style="white-space:pre">       </span><<a href="mailto:CAAYQrotWVjQDf-uq0iBfcBNWYQ__yAZG7osgC=06zfTtNfah4g@mail.gmail.com" class="">CAAYQrotWVjQDf-uq0iBfcBNWYQ__yAZG7osgC=06zfTtNfah4g@mail.gmail.com</a>><br class="">Content-Type: text/plain; charset="utf-8"<br class=""><br class="">Hello,<br class=""><br class="">What does  "__kmpc_for_static_fini" do? Does it rewind some parameters for<br class="">the openmp static scheduler? What will happen if I remove it; especially to<br class="">the second openmp for loop immediately available for static scheduling?<br class=""><br class="">Thanks,<br class=""><br class="">-- <br class="">Abid M. Malik<br class="">******************************************************<br class="">"I have learned silence from the talkative, toleration from the intolerant,<br class=""><font face="Courier New" class="">and kindness from the unkind"---Gibran<br class=""></font>"Success is not for the chosen few, but for the few who choose" --- John<br class="">Maxwell<br class="">"Being a good person does not depend on your religion or status in life,<br class="">your race or skin color, political views or culture. IT DEPENDS ON HOW GOOD<br class="">YOU TREAT OTHERS"--- Abid<br class="">"The Universe is talking to us, and the language of the Universe is<br class="">mathematics."----Abid<br class="">-------------- next part --------------<br class=""></div></div></blockquote></div><div class=""><br class=""></div>“Use the source, Luke” <div class=""><br class=""></div><div class=""><div class=""><font face="Courier New" class="">/*!</font></div><div class=""><font face="Courier New" class="">@ingroup WORK_SHARING</font></div><div class=""><font face="Courier New" class="">@param loc Source location</font></div><div class=""><font face="Courier New" class="">@param global_tid Global thread id</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class="">Mark the end of a statically scheduled loop.</font></div><div class=""><font face="Courier New" class="">*/</font></div><div class=""><font face="Courier New" class="">void __kmpc_for_static_fini(ident_t *loc, kmp_int32 global_tid) {</font></div><div class=""><font face="Courier New" class="">  KMP_POP_PARTITIONED_TIMER();</font></div><div class=""><font face="Courier New" class="">  KE_TRACE(10, ("__kmpc_for_static_fini called T#%d\n", global_tid));</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class="">#if OMPT_SUPPORT && OMPT_OPTIONAL</font></div><div class=""><font face="Courier New" class="">  if (ompt_enabled.ompt_callback_work) {</font></div><div class=""><font face="Courier New" class="">    ompt_work_t ompt_work_type = ompt_work_loop;</font></div><div class=""><font face="Courier New" class="">    ompt_team_info_t *team_info = __ompt_get_teaminfo(0, NULL);</font></div><div class=""><font face="Courier New" class="">    ompt_task_info_t *task_info = __ompt_get_task_info_object(0);</font></div><div class=""><font face="Courier New" class="">    // Determine workshare type</font></div><div class=""><font face="Courier New" class="">    if (loc != NULL) {</font></div><div class=""><font face="Courier New" class="">      if ((loc->flags & KMP_IDENT_WORK_LOOP) != 0) {</font></div><div class=""><font face="Courier New" class="">        ompt_work_type = ompt_work_loop;</font></div><div class=""><font face="Courier New" class="">      } else if ((loc->flags & KMP_IDENT_WORK_SECTIONS) != 0) {</font></div><div class=""><font face="Courier New" class="">        ompt_work_type = ompt_work_sections;</font></div><div class=""><font face="Courier New" class="">      } else if ((loc->flags & KMP_IDENT_WORK_DISTRIBUTE) != 0) {</font></div><div class=""><font face="Courier New" class="">        ompt_work_type = ompt_work_distribute;</font></div><div class=""><font face="Courier New" class="">      } else {</font></div><div class=""><font face="Courier New" class="">        // use default set above.</font></div><div class=""><font face="Courier New" class="">        // a warning about this case is provided in __kmpc_for_static_init</font></div><div class=""><font face="Courier New" class="">      }</font></div><div class=""><font face="Courier New" class="">      KMP_DEBUG_ASSERT(ompt_work_type);</font></div><div class=""><font face="Courier New" class="">    }</font></div><div class=""><font face="Courier New" class="">    ompt_callbacks.ompt_callback(ompt_callback_work)(</font></div><div class=""><font face="Courier New" class="">        ompt_work_type, ompt_scope_end, &(team_info->parallel_data),</font></div><div class=""><font face="Courier New" class="">        &(task_info->task_data), 0, OMPT_GET_RETURN_ADDRESS(0));</font></div><div class=""><font face="Courier New" class="">  }</font></div><div class=""><font face="Courier New" class="">#endif</font></div><div class=""><font face="Courier New" class="">  if (__kmp_env_consistency_check)</font></div><div class=""><font face="Courier New" class="">    __kmp_pop_workshare(global_tid, ct_pdo, loc);</font></div><div class=""><font face="Courier New" class="">}</font></div><div class=""><br class=""></div><div class="">So it handles the tracing events required for the OMPT interface, does a runtime check if requested and nothing else…</div><div class=""><br class=""></div><div class=""><blockquote type="cite" class="">What will happen if I remove it; especially to<br class="">the second openmp for loop immediately available for static scheduling?<br class=""></blockquote>If you remove it you won’t have a compliant OpenMP implementation since you’ll lose the OMPT support which is part of the standard,</div><div class=""><br class=""></div><div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">-- Jim<br class="">James Cownie <<a href="mailto:jcownie@gmail.com" class="">jcownie@gmail.com</a>><br class="">Mob: +44 780 637 7146<br class=""><br class=""><br class=""><br class=""></div></div>

</div>
<br class=""></div></body></html>