<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - taskgroup surrounding a taskloop"
   href="https://bugs.llvm.org/show_bug.cgi?id=37737">37737</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>taskgroup surrounding a taskloop
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>OpenMP
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Clang Compiler Support
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>protze@itc.rwth-aachen.de
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>When working on the OMPT events for taskloops, we reallized that currently the
clang compiler creates two nested taskgroups for an OpenMP taskloop. 

The test case is at the end of this phabricator review:
<a href="https://reviews.llvm.org/D47709">https://reviews.llvm.org/D47709</a>


In case there is no `nogroup` clause present, the compiler adds a
`__kmpc_taskgroup` call before the `__kmpc_taskloop` call and then passes 0 to
the nogroup argument of the `__kmpc_taskloop` call. The runtime internally also
calls `__kmpc_taskgroup` in the case that `nogroup==0`. This leads to the two
nested taskgroups, we observed.

This is the current interface documentation on __kmpc_taskloop:
@param nogroup   Flag, 1 if nogroup clause specified, 0 otherwise

While this is not a correctness issue, it might improve the performance if we
remove one taskgroup.

I see 2 solutions:
- clang does not create the __kmpc_taskgroup calls (like icc does)
- clang passes always `nogroup=1`, and we update the interface documentation
to:
@param nogroup   Flag, 1 if no taskgroup needs to be added, 0 otherwise</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>