Prohibit deprecated initiation of internal/none collectives in progress

Issue #185 resolved
Dan Bonachea created an issue

This issue is a follow-on to spec issue 169.

Starting in Spec 2020.10.0, Section 10.2 states:

A thread running in the restricted context shall not initiate any UPC++ collective operation that has a progress level of user.

Initiating a collective operation with a progress level of internal or none from within the restricted context is deprecated behavior, and it may be prohibited in subsequent revisions.

and the 2020.10.0 ChangeLog documents our enforcement under "Breaking Changes":

  • Initiating collective operations with progress level user from inside the restricted context (within a callback running inside progress) is now prohibited, and diagnosed with a runtime error. Most such calls previously led to silent deadlock.
  • Initiating collective operations with a progress level of internal or none from within the restricted context (within a callback running inside progress) is now a deprecated behavior, and diagnosed with a runtime warning. For details, see spec issue 169.

The next step is to convert the deprecation into a prohibition in the spec and a fatal error in the implementation. I propose to do this after the upcoming Fall 2021 release, so that over a year of releases with deprecation has passed before we move to prohibition.

Comments (3)

  1. Dan Bonachea reporter

    As of Impl PR 426 we now unconditionally prohibit all collective operation initiation inside the restricted context:

    Initiating collective operations with a progress level of internal or none from within the restricted context (within a callback running inside progress), an action deprecated with a runtime warning since 2020.10.0, is now prohibited with a fatal error. For details, see spec issue 169.

  2. Log in to comment