  OpenMP is the de facto standard to exploit the on-node parallelism in new
generation supercomputers.Despite its overall ease of use, even expert users
are known to create OpenMP programs that harbor concurrency errors, of which
one of the most insidious of errors are {\em data races}.OpenMP is also a
rapidly evolving standard, which means that future data races may be introduced
within unfamiliar contexts.A simple and rigorous operational semantics for
OpenMP can help build reliable race checkers and ward off future errors through
programmer education and better tooling.This paper's key contribution is a
simple operational semantics for OpenMP, with primitive events matching those
generated by today's popular OpenMP runtimes and tracing methods such as
OMPT.This makes our operational semantics more than a theoretical document for
intellectual edification; it can serve as a blueprint for OpenMP event capture
and tool building.We back this statement by summarizing the workings of a new
data race checker for OpenMP being built based on this semantics.The larger
purpose served by our semantics is to serve the needs of the OpenMP community
with regard to their contemplated extensions to OpenMP, as well as future
tooling efforts.
