SlideShare a Scribd company logo
Mark Batty

University of Kent

Industrial concurrency specification for C/C++
It is time for mechanised industrial standards
2
Specifications are written in English prose: this is insufficient
Write mechanised specs instead (formal, machine-readable, executable)
Designers can scrutinise, research questions can be identified
Mechanised specs enable verification for secure systems
Writing mechanised specifications is practical now
A case study:
industrial concurrency specification
3
Multiple threads communicate through a shared memory
Shared memory concurrency
4
…Thread Thread
Shared memory
…
Multiple threads communicate through a shared memory
Most systems use a form of shared memory concurrency:
Shared memory concurrency
5
…Thread Thread
Shared memory
…
An example programming idiom
6
…Thread 1 Thread 2
data, flag, r
…
Thread 1:
data = 1;
flag = 1;
Thread 2:
while (flag==0)
{};
r = data;
data, flag, r initially zero
In the end r==1
Sequential consistency:
simple interleaving of
concurrent accesses
Reality: more complex
An example programming idiom
7
…Thread 1 Thread 2
data, flag, r
…
Thread 1:
data = 1;
flag = 1;
Thread 2:
while (flag==0)
{};
r = data;
data, flag, r initially zero
In the end r==1
Sequential consistency:
simple interleaving of
concurrent accesses
Reality: more complex
Memory is slow, so it is optimised (buffers, caches, reordering…)
e.g. IBM’s machines allow reordering of unrelated writes
(so do compilers,ARM, Nvidia…)
Sometimes, in the end r==0, a relaxed behaviour
Many other behaviours like this, some far more subtle, leading to trouble
Relaxed concurrency
8
Thread 1:
data = 1;
flag = 1;
Thread 2:
while (flag==0)
{};
r = data;
data, flag, r initially zero
In the end r==1
Memory is slow, so it is optimised (buffers, caches, reordering…)
e.g. IBM’s machines allow reordering of unrelated writes
(so do compilers,ARM, Nvidia…)
Sometimes, in the end r==0, a relaxed behaviour
Many other behaviours like this, some far more subtle, leading to trouble
Relaxed concurrency
9
Thread 1:
flag = 1;
data = 1;
Thread 2:
while (flag==0)
{};
r = data;
data, flag, r initially zero
In the end r==1
Relaxed behaviour leads to problems
10
Power/ARM processors:
unintended relaxed behaviour
observable on shipped machines
[AMSS10]
Bugs in deployed processors
Many bugs in compilers
Bugs in language specifications
Bugs in operating systems
Relaxed behaviour leads to problems
11
Errors in key compilers (GCC,
LLVM): compiled programs could
behave outside of spec.
[MPZN13, CV16]
Bugs in deployed processors
Many bugs in compilers
Bugs in language specifications
Bugs in operating systems
Relaxed behaviour leads to problems
12
The C and C++ standards had
bugs that made unintended
behaviour allowed.
More on this later.
[BOS+11, BMN+15]
Bugs in deployed processors
Many bugs in compilers
Bugs in language specifications
Bugs in operating systems
Relaxed behaviour leads to problems
13
Confusion among operating
system engineers leads to
bugs in the Linux kernel
[McK11, SMO+12]
Bugs in deployed processors
Many bugs in compilers
Bugs in language specifications
Bugs in operating systems
Relaxed behaviour leads to problems
14
Bugs in deployed processors
Many bugs in compilers
Bugs in language specifications
Bugs in operating systems
Current engineering practice is severely lacking!
Vague specifications are at fault
15
Relaxed behaviours are subtle,
difficult to test for and often
unexpected, yet allowed for
performance
Specifications try to define what
is allowed, but English prose is
untestable, ambiguous, and hides
errors
A diverse and continuing effort
16
Build mechanised executable
formal models of specifications
[AFI+09,BOS+11,BDW16]
[FGP+16,LDGK08,OSP09]
[FSP+17]
Modelling of hardware and languages
Simulation tools and reasoning principles
Empirical testing of current hardware
Verification of language design goals
Test and verify compilers
Feedback to industry: specs and test suites
A diverse and continuing effort
17
Provide tools to simulate the
formal models, to explain their
behaviours to non-experts
Provide reasoning principles to
help in the verification of code
[BOS+11,SSP+,BDG13]
Modelling of hardware and languages
Simulation tools and reasoning principles
Empirical testing of current hardware
Verification of language design goals
Test and verify compilers
Feedback to industry: specs and test suites
A diverse and continuing effort
18
Run a battery of tests to
understand the observable
behaviour of the system and
check it against the model
[AMSS’11]
Modelling of hardware and languages
Simulation tools and reasoning principles
Empirical testing of current hardware
Verification of language design goals
Test and verify compilers
Feedback to industry: specs and test suites
A diverse and continuing effort
19
Explicitly stated design goals
should be proved to hold
[BMN+15]
Modelling of hardware and languages
Simulation tools and reasoning principles
Empirical testing of current hardware
Verification of language design goals
Test and verify compilers
Feedback to industry: specs and test suites
A diverse and continuing effort
20
Test to find the relaxed
behaviours introduced by
compilers and verify that
optimisations are correct
[MPZN13, CV16]
Modelling of hardware and languages
Simulation tools and reasoning principles
Empirical testing of current hardware
Verification of language design goals
Test and verify compilers
Feedback to industry: specs and test suites
A diverse and continuing effort
21
Specifications should be fixed
when problems are found
Test suites can ensure
conformance to formal models
[B11]
Modelling of hardware and languages
Simulation tools and reasoning principles
Empirical testing of current hardware
Verification of language design goals
Test and verify compilers
Feedback to industry: specs and test suites
A diverse and continuing effort
22
Modelling of hardware and languages
Simulation tools and reasoning principles
Empirical testing of current hardware
Verification of language design goals
Test and verify compilers
Feedback to industry: specs and test suites
I will describe my part:
The C and C++ memory model
23
Acknowledgements
24
S. Owens
S. Sarkar P. Sewell T.Weber
K. MemarianM. Dodds A. Gotsman K. Nienhuis
J. Pichon-Pharabod
The medium for system implementation
Defined by WG14 and WG21 of the International Standards Organisation
The ’11, ’14 and ‘17 revisions define relaxed memory behaviour
I worked with WG21, formalising and improving their concurrency design
C and C++
25
The medium for system implementation
Defined by WG14 and WG21 of the International Standards Organisation
The ’11, ’14 and ‘17 revisions define relaxed memory behaviour
We worked with the ISO, formalising and improving their concurrency design
C and C++
26
C++11 concurrency design
A contract with the programmer: they must avoid data races,
two threads competing for simultaneous access to a single variable
Beware:
Violate the contract and the compiler is free to allow anything: catch fire!
27
Thread 1:
data = 1;
Thread 2:
r = data;
data initially zero
C++11 concurrency design
A contract with the programmer: they must avoid data races,
two threads competing for simultaneous access to a single variable
Beware:
Violate the contract and the compiler is free to allow anything: catch fire!
28
Thread 1:
data = 1;
Thread 2:
r = data;
data initially zero
C++11 concurrency design
A contract with the programmer: they must avoid data races,
two threads competing for simultaneous access to a single variable
Beware:
Violate the contract and the compiler is free to allow anything: catch fire!
Atomics are excluded from the requirement, and can order non-atomics,
preventing simultaneous access and races
29
Thread 1:
data = 1;
Thread 2:
r = data;
data initially zero
C++11 concurrency design
A contract with the programmer: they must avoid data races,
two threads competing for simultaneous access to a single variable
Beware:
Violate the contract and the compiler is free to allow anything: catch fire!
Atomics are excluded from the requirement, and can order non-atomics,
preventing simultaneous access and races
30
Thread 1:
data = 1;
flag = 1;
Thread 2:
while (flag==0)
{};
r = data;
data, r, atomic flag, initially zero
Design goals in the standard
31
The design is complex but the standard claims a powerful simplification:
C++11/14: §1.10p21
It can be shown that programs that correctly use mutexes and
memory_order_seq_cst operations to prevent all data races and use no
other synchronization operations behave [according to] “sequential
consistency”.
This is the central design goal of the model, called DRF-SC
32
Compilers like GCC, LLVM map C/C++ to pieces of machine code
C/C++ Power ARM x86
Load acquire ld; cmp; bc; isync ldr; dmb MOV (from memory)
Implicit design goals
Each mapping should preserve the behaviour of the original program
Power ARMx86
C/C++11
33
A mechanised formal model, close to the standard text
In total, several thousand lines of Lem [MOG+14]
We formalised a draft of the standard
C++11 standard §1.10p12:
An evaluation A happens before an
evaluation B if:
• A is sequenced before B, or

• A inter-thread happens before B.
The implementation shall ensure that no
program execution demonstrates a cycle in
the “happens before” relation.
The corresponding formalisation:
let happens_before sb ithb = sb ∪ ithb
let consistent_hb hb =
isIrreflexive (transitiveClosure hb)
Issues were discussed in N-papers and Defect Reports
Communication with WG21 and WG14
4/3/2016 3057: Explicit Initializers for Atomics
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3057.html 1/5
Explicit Initializers for Atomics
ISO/IEC JTC1 SC22 WG21 N3057 = 10-0047 - 2010-03-11
Paul E. McKenney, paulmck@linux.vnet.ibm.com
Mark Batty, mjb220@cl.cam.ac.uk
Clark Nelson, clark.nelson@intel.com
N.M. Maclaren, nmm1@cam.ac.uk
Hans Boehm, hans.boehm@hp.com
Anthony Williams, anthony@justsoftwaresolutions.co.uk
Peter Dimov, pdimov@mmltd.net
Lawrence Crowl, crowl@google.com, Lawrence@Crowl.org
Introduction
Mark Batty recently undertook a partial formalization of the C++ memory model, which Mark
summarized in N2955. This paper summarizes the discussions on Mark's paper, both verbal and
email, recommending appropriate actions for the Library Working Group. Core issues are dealt with
in a companion N3074 paper.
This paper is based on N3045, and has been updated to reflect discussions in the Concurrency
subgroup of the Library Working Group in Pittsburgh. This paper also carries the C-language side of
N3040, which was also discussed in the Concurrency subgroup of the Library Working Group in
Pittsburgh.
Library Issues
Library Issue 1: 29.3p1 Limits to Memory-Order Relaxation (Non-Normative)
Add a note stating that memory_order_relaxed operations must maintain indivisibility, as described
in the discussion of 1.10p4. This must be considered in conjunction with the resolution to LWG 1151,
which is expected to be addressed by Hans Boehm in N3040.
Library Issue 2: 29.3p11 Schedulers, Loops, and Atomics (Normative)
The second sentence of this paragraph, “Implementations shall not move an atomic operation out of
an unbounded loop”, does not add anything to the first sentence, and, worse, can be interpreted as
restricting the meaning of the first sentence. This sentence should therefore be deleted. The Library
Working Group discussed this change during the Santa Cruz meeting in October 2009, and agreed
with this deletion.
Library Issue 3: 29.5.1 Uninitialized Atomics and C/C++ Compatibility
(Normative)
This topic was the subject of a spirited discussion among a subset of the participants in the C/C++-
compatibility effort this past October and November.
Unlike C++, C has no mechanism to force a given variable to be initialized. Therefore, if C++ atomics
are going to be compatible with those of C, either C++ needs to tolerate uninitialized atomic objects,
or C needs to require that all atomic objects be initialized. There are a number of cases to consider:
Major problems fixed, key properties verified
35
DRF-SC:
The central design goal, was false, the standard permitted too much
Fixed the model and then proved (in HOL4) that the goal is now true
Fixes were incorporated, pre-ratification, and are in C++11/14
Compilation mappings:
Efficient x86, Power mappings are sound [BOS+11,BMO+12,SMO+12]
Reasoning:
Developed a reasoning principle for proving programs correct [BDO13]
Timing was everything
36
Achieved direct impact on the standard
Making this work was partly a social problem
C++11 was a major revision, so the ISO was receptive to change
But…
A fundamental problem uncovered
37
// Thread 1
r1 = x;
if(r1==1) y = 1;
// Thread 2
r2 = y;
if(r2==1) x = 1;
x, y, r1, r2 initially zero
Can we observe r1==1, r2==1 at the end?
The write of y is dependent on the read of x
The write of x is dependent on the read of y
This will never occur in compiled code, and ought to be forbidden
“[ Note: […] However, implementations should not allow such behavior. — end note ]”
The ISO: notes carry no force, and “should” imposes no constraint
38
// Thread 1
r1 = x;
if(r1==1) y = 1;
// Thread 2
r2 = y;
if(r2==1) x = 1;
x, y, r1, r2 initially zero
Can we observe r1==1, r2==1 at the end?
A fundamental problem uncovered
The write of y is dependent on the read of x
The write of x is dependent on the read of y
This will never occur in compiled code, and ought to be forbidden
“[ Note: […] However, implementations should not allow such behavior. — end note ]”
The ISO: notes carry no force, and “should” imposes no constraint
39
// Thread 1
r1 = x;
if(r1==1) y = 1;
// Thread 2
r2 = y;
if(r2==1) x = 1;
x, y, r1, r2 initially zero
Can we observe r1==1, r2==1 at the end?
A fundamental problem uncovered
The write of y is dependent on the read of x
The write of x is dependent on the read of y
1/1 never occurs in compiled code, and ought to be forbidden
“[ Note: […] However, implementations should not allow such behavior. — end note ]”
The ISO: notes carry no force, and “should” imposes no constraint
40
// Thread 1
r1 = x;
if(r1==1) y = 1;
// Thread 2
r2 = y;
if(r2==1) x = 1;
x, y, r1, r2 initially zero
Can we observe r1==1, r2==1 at the end?
A fundamental problem uncovered
The write of y is dependent on the read of x
The write of x is dependent on the read of y
1/1 never occurs in compiled code, and ought to be forbidden
“[ Note: […] However, implementations should not allow such behavior. — end note ]”
ISO: notes carry no force, and “should” imposes no constraint, so yes!
41
// Thread 1
r1 = x;
if(r1==1) y = 1;
// Thread 2
r2 = y;
if(r2==1) x = 1;
x, y, r1, r2 initially zero
Can we observe r1==1, r2==1 at the end?
A fundamental problem uncovered
The write of y is dependent on the read of x
The write of x is dependent on the read of y
1/1 never occurs in compiled code, and ought to be forbidden
“[ Note: […] However, implementations should not allow such behavior. — end note ]”
ISO: notes carry no force, and “should” imposes no constraint, so yes!
42
// Thread 1
r1 = x;
if(r1==1) y = 1;
// Thread 2
r2 = y;
if(r2==1) x = 1;
x, y, r1, r2 initially zero
Can we observe r1==1, r2==1 at the end?
A fundamental problem uncovered
Why? Dependencies are ignored to allow
dependency-removing optimisations
C++ Should respect the left-over dependencies
We have proved that no fix exists in the structure
of the current specification
This identifies a difficult research problem
The thin-air problem
43
In both branches on Thread 2, 1 is written to x
An optimising compiler may perform common subexpression elimination
In the altered program,ARM would allow outcome 1/1
44
// Thread 1
r1 = x;
if(r1==1) y = 1;
// Thread 2
r2 = y;
if(r2==1) {x = 1}
else {x = 1}
x, y, r1, r2 initially zero
Can we observe r1==1, r2==1 at the end?
A slightly different program
In both branches on Thread 2, 1 is written to x
An optimising compiler may perform common subexpression elimination
In the altered program,ARM would allow the outcome 1/1
45
// Thread 1
r1 = x;
if(r1==1) y = 1;
// Thread 2
r2 = y;
x = 1;
x, y, r1, r2 initially zero
Can we observe r1==1, r2==1 at the end?
A slightly different program
46
// Thread 1
r1 = x;
if(r1==1) y = 1;
// Thread 2
r2 = y;
if(r2==1) {x = 1}
else {x = 1}
x, y, r1, r2 initially zero
Can we observe r1==1, r2==1 at the end?
A slightly different program
We need a semantic notion of dependency
Execution depends on more than one control-flow path
C++ spec considers one at a time: fundamental change is needed
Current work
47
Several candidates:
• The Promising Semantics [KHL+17] — an abstract machine with speculation of writes through promises.At
each step, promised writes must be sure to execute.
• Jeffrey and Riely [JR16] — based on event structures, executions are built up iteratively, out of order.Add a
read only if the write it reads from must be executed.
• Podkopaev, Sergey, and Nanevski [PSN16] — an abstract machine where conditionals can be preemptively
explored, and writes that always occur can be promoted.
• Bubbly and Ticky semantics [PPS16] — based on event structures.The event structure is non-
deterministically mutated in a transition system that mimics compiler optimisations.
Each relies on a repeated search over multiple control-flow paths
This makes the models more expensive to evaluate than C++ (cannot use SAT)
Which model to choose?
Model simulation
48
Simulators provide lightweight automatic validation of design criteria:
[WBSC17] uses SAT to check DRF-SC, compiler mappings, litmus tests for C++, OpenCL, CPUs, GPUs
We are building a simulator for thin-air models
Higher complexity requires advanced Quantified Boolean Formula solvers
AVeTTS grant is paying for the development of a web interface
Our own solution to the thin-air problem is under development:
a compositional denotational semantics that looks rather different [B17]
Marco PaviottiSimon Cooksey Radu Grigore Sarah Harris Scott Owens
Conclusion
49
Mechanised industrial specification is practical, with a valuable payoff:
• Improved specs
• Simulators — an executable golden model that matches the spec
• Test suites can be generated
• Design criteria can be validated
It can guide us to future research questions
It is a necessary step in formal verification of security properties
[ABD+15] J. Alglave, M. Batty, A. Donaldson, G. Gopalakrishnan, J. Ketema, D. Poetzl, T. Sorensen, J. Wickerson. GPU concurrency: weak behaviours and programming assumptions. ASPLOS’15
[AFI+09] J. Alglave, A. Fox, S. Ishtiaq, M. O. Myreen, S. Sarkar, P. Sewell, and F. Zappa Nardelli. The semantics of Power and ARM multiprocessor machine code. DAMP’09
[AMSS10] J. Alglave, L. Maranget, S. Sarkar, and P. Sewell. Fences in weak memory models. CAV’10
[AMSS’11] J. Alglave, L. Maranget, S. Sarkar, and P. Sewell. Litmus: Running tests against hardware. TACAS’11/ETAPS’11
[B17] M. Batty. Compositional relaxed concurrency. Philosophical Transactions A, 2017
[B11] P. Becker, editor. Programming Languages — C++. 2011. ISO/IEC 14882:2011. A non-final version is available at http://www.open-std.org/jtc1/sc22/ wg21/docs/papers/2011/n3242.pdf.
[BDG13] M. Batty, M. Dodds, A. Gotsman. Library Abstraction for C/C++ Concurrency. POPL’13
[BDW16] M. Batty, A. Donaldson, J. Wickerson. Overhauling SC atomics in C11 and OpenCL. POPL’16
[BMN+15] M. Batty, K. Memarian, K. Nienhuis, J. Pichon, P. Sewell. The Problem of Programming Language Concurrency Semantics. ESOP’15
[BMO+12] M. Batty, K. Memarian, S. Owens, S. Sarkar, and P. Sewell. Clarifying and compiling C/C++ concurrency: from C++0x to POWER. POPL’12
[BOS+11] M. Batty, S. Owens, S. Sarkar, P. Sewell, and T. Weber. Mathematizing C++ concurrency. POPL’11
[CV16] S. Chakraborty, V. Vafeiadis. Validating optimizations of concurrent C/C++ programs. CGO’16
[FGP+16] S. Flur, K. E. Gray, C. Pulte, S. Sarkar, A. Sezgin, L. Maranget, W. Deacon, P. Sewell. Modelling the ARMv8 Architecture, Operationally: Concurrency and ISA. PLDI’16
[FSP+17] S. Flur, S. Sarkar, C. Pulte, K. Nienhuis, L. Maranget, K. E. Gray, A. Sezgin, M. Batty, P. Sewell. Mixed-size concurrency: ARM, POWER, C/C++11, and SC. POPL’17
[JR16] A. Jeffrey, J. Riely. On Thin Air Reads: Towards an Event Structures Model of Relaxed Memory. LICS’16
[LDGK08] G. Li, M. Delisi, G. Gopalakrishnan, and R. M. Kirby. Formal specification of the MPI-2.0 standard in TLA+. PPoPP’08
[KHL+17] A Promising Semantics for Relaxed-Memory Concurrency. J. Kang, C.-K. Hur, O. Lahav, V. Vafeiadis, D. Dreyer. POPL’17
[McK11] P. E. McKenney. [patch rfc tip/core/rcu 0/28] preview of RCU changes for 3.3, November 2011. https://lkml.org/lkml/2011/11/2/363
[MOG+14] D. P. Mulligan, S. Owens, K. E. Gray, T. Ridge, and P. Sewell. Lem: reusable engineering of real-world semantics. ICFP ’14
[MPZN13] R. Morisset, P. Pawan, F. Zappa Nardelli. Compiler testing via a theory of sound optimisations in the C11/C++11 memory model. PLDI’13
[OSP09] S. Owens, S. Sarkar, and P. Sewell. A better x86 memory model: x86-TSO. TPHOLS’09
[PPS16] J. Pichon-Pharabod and P. Sewell. A concurrency semantics for relaxed atomics that permits optimisation and avoids thin-air executions. POPL’16
[PSN16] A. Podkopaev, I. Sergey, and A. Nanevski. Operational aspects of C/C++ concurrency. CoRR’16.
[SMO+12] S. Sarkar, K. Memarian, S. Owens, M. Batty, P. Sewell, L. Maranget, J. Alglave, and D. Williams. Synchronising C/C++ and POWER. PLDI’12
[SSP+] S. Sarkar, P. Sewell, P. Pawan, L. Maranget, J. Alglave, D. Williams, F. Zappa Nardelli. The PPCMEM Web Tool. www.cl.cam.ac.uk/~pes20/ppcmem/
[WBDB15] J. Wickerson. M. Batty, B. Beckmann, A. Donaldson. Remote-Scope Promotion: Clarified, Rectified, and Verified. OOPSLA’15
[WBSC17] J. Wickerson, M. Batty, T. Sorensen, G. A. Constantinides. Automatically comparing memory consistency models. POPL’17

More Related Content

What's hot

C Programming - Refresher - Part I
C Programming - Refresher - Part I C Programming - Refresher - Part I
C Programming - Refresher - Part I
Emertxe Information Technologies Pvt Ltd
 
Introduction to programming with c,
Introduction to programming with c,Introduction to programming with c,
Introduction to programming with c,
Hossain Md Shakhawat
 
Introduction to c_language
Introduction to c_languageIntroduction to c_language
Introduction to c_language
Way2itech
 
INTRODUCTION TO C PROGRAMMING
INTRODUCTION TO C PROGRAMMINGINTRODUCTION TO C PROGRAMMING
INTRODUCTION TO C PROGRAMMING
JEENA SARA VIJU
 
Introduction to C programming
Introduction to C programmingIntroduction to C programming
Introduction to C programming
Rokonuzzaman Rony
 
Introduction to C Language
Introduction to C LanguageIntroduction to C Language
Introduction to C LanguageKamal Acharya
 
C intro
C introC intro
C intro
Mohit Patodia
 
C programming tutorial for beginners
C programming tutorial for beginnersC programming tutorial for beginners
C programming tutorial for beginners
Thiyagarajan Soundhiran
 
C programming basics
C  programming basicsC  programming basics
C programming basics
argusacademy
 
Installation of PC-Lint and its using in Visual Studio 2005
Installation of PC-Lint and its using in Visual Studio 2005Installation of PC-Lint and its using in Visual Studio 2005
Installation of PC-Lint and its using in Visual Studio 2005
PVS-Studio
 
Embedded C programming based on 8051 microcontroller
Embedded C programming based on 8051 microcontrollerEmbedded C programming based on 8051 microcontroller
Embedded C programming based on 8051 microcontroller
Gaurav Verma
 
C programming first_session
C programming first_sessionC programming first_session
C programming first_session
Keroles karam khalil
 
C programming slide day 01 uploadd by md abdullah al shakil
C programming slide day 01 uploadd by md abdullah al shakilC programming slide day 01 uploadd by md abdullah al shakil
C programming slide day 01 uploadd by md abdullah al shakil
Zenith SVG
 
Nishar_Resume
Nishar_ResumeNishar_Resume
Nishar_ResumeMD NISHAR
 
Introduction to c
Introduction to cIntroduction to c
Introduction to c
amol_chavan
 
Programming in c
Programming in cProgramming in c
Programming in c
indra Kishor
 
C programming
C programmingC programming
C programming
Rounak Samdadia
 
Hardware description languages
Hardware description languagesHardware description languages
Hardware description languages
Akhila Rahul
 
Lean Model-Driven Development through Model-Interpretation: the CPAL design ...
Lean Model-Driven Development through  Model-Interpretation: the CPAL design ...Lean Model-Driven Development through  Model-Interpretation: the CPAL design ...
Lean Model-Driven Development through Model-Interpretation: the CPAL design ...
Nicolas Navet
 
introduction to C programming (C)
introduction to C programming (C)introduction to C programming (C)
introduction to C programming (C)
Abhishek Walia
 

What's hot (20)

C Programming - Refresher - Part I
C Programming - Refresher - Part I C Programming - Refresher - Part I
C Programming - Refresher - Part I
 
Introduction to programming with c,
Introduction to programming with c,Introduction to programming with c,
Introduction to programming with c,
 
Introduction to c_language
Introduction to c_languageIntroduction to c_language
Introduction to c_language
 
INTRODUCTION TO C PROGRAMMING
INTRODUCTION TO C PROGRAMMINGINTRODUCTION TO C PROGRAMMING
INTRODUCTION TO C PROGRAMMING
 
Introduction to C programming
Introduction to C programmingIntroduction to C programming
Introduction to C programming
 
Introduction to C Language
Introduction to C LanguageIntroduction to C Language
Introduction to C Language
 
C intro
C introC intro
C intro
 
C programming tutorial for beginners
C programming tutorial for beginnersC programming tutorial for beginners
C programming tutorial for beginners
 
C programming basics
C  programming basicsC  programming basics
C programming basics
 
Installation of PC-Lint and its using in Visual Studio 2005
Installation of PC-Lint and its using in Visual Studio 2005Installation of PC-Lint and its using in Visual Studio 2005
Installation of PC-Lint and its using in Visual Studio 2005
 
Embedded C programming based on 8051 microcontroller
Embedded C programming based on 8051 microcontrollerEmbedded C programming based on 8051 microcontroller
Embedded C programming based on 8051 microcontroller
 
C programming first_session
C programming first_sessionC programming first_session
C programming first_session
 
C programming slide day 01 uploadd by md abdullah al shakil
C programming slide day 01 uploadd by md abdullah al shakilC programming slide day 01 uploadd by md abdullah al shakil
C programming slide day 01 uploadd by md abdullah al shakil
 
Nishar_Resume
Nishar_ResumeNishar_Resume
Nishar_Resume
 
Introduction to c
Introduction to cIntroduction to c
Introduction to c
 
Programming in c
Programming in cProgramming in c
Programming in c
 
C programming
C programmingC programming
C programming
 
Hardware description languages
Hardware description languagesHardware description languages
Hardware description languages
 
Lean Model-Driven Development through Model-Interpretation: the CPAL design ...
Lean Model-Driven Development through  Model-Interpretation: the CPAL design ...Lean Model-Driven Development through  Model-Interpretation: the CPAL design ...
Lean Model-Driven Development through Model-Interpretation: the CPAL design ...
 
introduction to C programming (C)
introduction to C programming (C)introduction to C programming (C)
introduction to C programming (C)
 

Similar to HIS 2017 Mark Batty-Industrial concurrency specification for C/C++

Computing Without Computers - Oct08
Computing Without Computers - Oct08Computing Without Computers - Oct08
Computing Without Computers - Oct08
Ian Page
 
Compiler gate question key
Compiler gate question keyCompiler gate question key
Compiler gate question key
ArthyR3
 
Fundamentals of programming with C++
Fundamentals of programming with C++Fundamentals of programming with C++
Fundamentals of programming with C++
Seble Nigussie
 
Csharp dot net
Csharp dot netCsharp dot net
Csharp dot net
Ekam Baram
 
Larson and toubro
Larson and toubroLarson and toubro
Larson and toubro
anoopc1998
 
tybsc it asp.net full unit 1,2,3,4,5,6 notes
tybsc it asp.net full unit 1,2,3,4,5,6 notestybsc it asp.net full unit 1,2,3,4,5,6 notes
tybsc it asp.net full unit 1,2,3,4,5,6 notes
WE-IT TUTORIALS
 
The Concurrency Challenge : Notes
The Concurrency Challenge : NotesThe Concurrency Challenge : Notes
The Concurrency Challenge : Notes
Subhajit Sahu
 
(Costless) Software Abstractions for Parallel Architectures
(Costless) Software Abstractions for Parallel Architectures(Costless) Software Abstractions for Parallel Architectures
(Costless) Software Abstractions for Parallel Architectures
Joel Falcou
 
Reversing and Patching Machine Code
Reversing and Patching Machine CodeReversing and Patching Machine Code
Reversing and Patching Machine Code
Teodoro Cipresso
 
C_Intro.ppt
C_Intro.pptC_Intro.ppt
C_Intro.ppt
gitesh_nagar
 
Csharp dot net
Csharp dot netCsharp dot net
Csharp dot net
Revanth Mca
 
Developing Real-Time Systems on Application Processors
Developing Real-Time Systems on Application ProcessorsDeveloping Real-Time Systems on Application Processors
Developing Real-Time Systems on Application Processors
Toradex
 
Lecture-1&2.pdf Visual Programming C# .net framework
Lecture-1&2.pdf Visual Programming C# .net frameworkLecture-1&2.pdf Visual Programming C# .net framework
Lecture-1&2.pdf Visual Programming C# .net framework
AbdullahNadeem78
 
Typhoon Managed Execution Toolkit
Typhoon Managed Execution ToolkitTyphoon Managed Execution Toolkit
Typhoon Managed Execution Toolkit
Dimitry Snezhkov
 
CS8251_QB_answers.pdf
CS8251_QB_answers.pdfCS8251_QB_answers.pdf
CS8251_QB_answers.pdf
vino108206
 
Software engineering
Software engineeringSoftware engineering
Software engineering
Fahe Em
 
Software engineering
Software engineeringSoftware engineering
Software engineeringFahe Em
 

Similar to HIS 2017 Mark Batty-Industrial concurrency specification for C/C++ (20)

Computing Without Computers - Oct08
Computing Without Computers - Oct08Computing Without Computers - Oct08
Computing Without Computers - Oct08
 
Compiler gate question key
Compiler gate question keyCompiler gate question key
Compiler gate question key
 
Fundamentals of programming with C++
Fundamentals of programming with C++Fundamentals of programming with C++
Fundamentals of programming with C++
 
Csharp dot net
Csharp dot netCsharp dot net
Csharp dot net
 
Larson and toubro
Larson and toubroLarson and toubro
Larson and toubro
 
tybsc it asp.net full unit 1,2,3,4,5,6 notes
tybsc it asp.net full unit 1,2,3,4,5,6 notestybsc it asp.net full unit 1,2,3,4,5,6 notes
tybsc it asp.net full unit 1,2,3,4,5,6 notes
 
The Concurrency Challenge : Notes
The Concurrency Challenge : NotesThe Concurrency Challenge : Notes
The Concurrency Challenge : Notes
 
(Costless) Software Abstractions for Parallel Architectures
(Costless) Software Abstractions for Parallel Architectures(Costless) Software Abstractions for Parallel Architectures
(Costless) Software Abstractions for Parallel Architectures
 
Prasad_CTP
Prasad_CTPPrasad_CTP
Prasad_CTP
 
Reversing and Patching Machine Code
Reversing and Patching Machine CodeReversing and Patching Machine Code
Reversing and Patching Machine Code
 
01 overview
01 overview01 overview
01 overview
 
01 overview
01 overview01 overview
01 overview
 
C_Intro.ppt
C_Intro.pptC_Intro.ppt
C_Intro.ppt
 
Csharp dot net
Csharp dot netCsharp dot net
Csharp dot net
 
Developing Real-Time Systems on Application Processors
Developing Real-Time Systems on Application ProcessorsDeveloping Real-Time Systems on Application Processors
Developing Real-Time Systems on Application Processors
 
Lecture-1&2.pdf Visual Programming C# .net framework
Lecture-1&2.pdf Visual Programming C# .net frameworkLecture-1&2.pdf Visual Programming C# .net framework
Lecture-1&2.pdf Visual Programming C# .net framework
 
Typhoon Managed Execution Toolkit
Typhoon Managed Execution ToolkitTyphoon Managed Execution Toolkit
Typhoon Managed Execution Toolkit
 
CS8251_QB_answers.pdf
CS8251_QB_answers.pdfCS8251_QB_answers.pdf
CS8251_QB_answers.pdf
 
Software engineering
Software engineeringSoftware engineering
Software engineering
 
Software engineering
Software engineeringSoftware engineering
Software engineering
 

More from jamieayre

HIS 2017 David Oswald- Your car is not a safe box - breaking automotive keyle...
HIS 2017 David Oswald- Your car is not a safe box - breaking automotive keyle...HIS 2017 David Oswald- Your car is not a safe box - breaking automotive keyle...
HIS 2017 David Oswald- Your car is not a safe box - breaking automotive keyle...
jamieayre
 
HIS 2017 Paul Sherwood- towards trustable software
HIS 2017 Paul Sherwood- towards trustable software HIS 2017 Paul Sherwood- towards trustable software
HIS 2017 Paul Sherwood- towards trustable software
jamieayre
 
HIS 2017 Robert Martin- assured software a journey and discussion-final
HIS 2017 Robert Martin- assured software  a journey and discussion-finalHIS 2017 Robert Martin- assured software  a journey and discussion-final
HIS 2017 Robert Martin- assured software a journey and discussion-final
jamieayre
 
HIS 2017 Marie Moe- Unpatchable-Living with a Vulnerable Implanted Device
HIS 2017 Marie Moe- Unpatchable-Living with a Vulnerable Implanted DeviceHIS 2017 Marie Moe- Unpatchable-Living with a Vulnerable Implanted Device
HIS 2017 Marie Moe- Unpatchable-Living with a Vulnerable Implanted Device
jamieayre
 
HIS 2017 Jonathan Pallant- Delivering quality, time after time
HIS 2017 Jonathan Pallant-  Delivering quality, time after timeHIS 2017 Jonathan Pallant-  Delivering quality, time after time
HIS 2017 Jonathan Pallant- Delivering quality, time after time
jamieayre
 
HIS 2017 Peter Ladkin- Rigorous-Assurance Points in Software Development
HIS 2017 Peter Ladkin-  Rigorous-Assurance Points in Software DevelopmentHIS 2017 Peter Ladkin-  Rigorous-Assurance Points in Software Development
HIS 2017 Peter Ladkin- Rigorous-Assurance Points in Software Development
jamieayre
 
HIS 2017 Dewi Daniels- bridging the gap between manned and unmanned
HIS 2017 Dewi Daniels- bridging the gap between manned and unmannedHIS 2017 Dewi Daniels- bridging the gap between manned and unmanned
HIS 2017 Dewi Daniels- bridging the gap between manned and unmanned
jamieayre
 
HIS 2017 Roderick chapman- Secure Updates for Embedded Systems
HIS 2017 Roderick chapman- Secure Updates for Embedded SystemsHIS 2017 Roderick chapman- Secure Updates for Embedded Systems
HIS 2017 Roderick chapman- Secure Updates for Embedded Systems
jamieayre
 
AdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech Update
AdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech UpdateAdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech Update
AdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech Update
jamieayre
 
AdaCore Paris Tech Day 2016: Jerome Lambourg - Cross and BareBoard Team Insid...
AdaCore Paris Tech Day 2016: Jerome Lambourg - Cross and BareBoard Team Insid...AdaCore Paris Tech Day 2016: Jerome Lambourg - Cross and BareBoard Team Insid...
AdaCore Paris Tech Day 2016: Jerome Lambourg - Cross and BareBoard Team Insid...
jamieayre
 
AdaCore Paris Tech Day 2016: Eric Perlade - Verification Solutions
AdaCore Paris Tech Day 2016: Eric Perlade - Verification SolutionsAdaCore Paris Tech Day 2016: Eric Perlade - Verification Solutions
AdaCore Paris Tech Day 2016: Eric Perlade - Verification Solutions
jamieayre
 
AdaCore Paris Tech Day 2016: Elie Richa - Integrated Unit Testing for a Trust...
AdaCore Paris Tech Day 2016: Elie Richa - Integrated Unit Testing for a Trust...AdaCore Paris Tech Day 2016: Elie Richa - Integrated Unit Testing for a Trust...
AdaCore Paris Tech Day 2016: Elie Richa - Integrated Unit Testing for a Trust...
jamieayre
 
AdaCore Paris Tech Day 2016: Pierre-Marie Rodat - Libadalang, New Generation ...
AdaCore Paris Tech Day 2016: Pierre-Marie Rodat - Libadalang, New Generation ...AdaCore Paris Tech Day 2016: Pierre-Marie Rodat - Libadalang, New Generation ...
AdaCore Paris Tech Day 2016: Pierre-Marie Rodat - Libadalang, New Generation ...
jamieayre
 
AdaCore Paris Tech Day 2016: Cyrille Comar - Looking Ahead
AdaCore Paris Tech Day 2016: Cyrille Comar - Looking AheadAdaCore Paris Tech Day 2016: Cyrille Comar - Looking Ahead
AdaCore Paris Tech Day 2016: Cyrille Comar - Looking Ahead
jamieayre
 
AdaCore Paris Tech Day 2016: Fabien Chouteau - Making the Ada Drivers Library
AdaCore Paris Tech Day 2016: Fabien Chouteau - Making the Ada Drivers LibraryAdaCore Paris Tech Day 2016: Fabien Chouteau - Making the Ada Drivers Library
AdaCore Paris Tech Day 2016: Fabien Chouteau - Making the Ada Drivers Library
jamieayre
 
AdaCore Paris Tech Day 2016: Arnaud Chalet - GNAT Pro Roadmap
AdaCore Paris Tech Day 2016: Arnaud Chalet - GNAT Pro RoadmapAdaCore Paris Tech Day 2016: Arnaud Chalet - GNAT Pro Roadmap
AdaCore Paris Tech Day 2016: Arnaud Chalet - GNAT Pro Roadmap
jamieayre
 
AdaCore Paris Tech Day 2016: Jamie Ayre - Market Perspective
AdaCore Paris Tech Day 2016: Jamie Ayre - Market PerspectiveAdaCore Paris Tech Day 2016: Jamie Ayre - Market Perspective
AdaCore Paris Tech Day 2016: Jamie Ayre - Market Perspective
jamieayre
 

More from jamieayre (17)

HIS 2017 David Oswald- Your car is not a safe box - breaking automotive keyle...
HIS 2017 David Oswald- Your car is not a safe box - breaking automotive keyle...HIS 2017 David Oswald- Your car is not a safe box - breaking automotive keyle...
HIS 2017 David Oswald- Your car is not a safe box - breaking automotive keyle...
 
HIS 2017 Paul Sherwood- towards trustable software
HIS 2017 Paul Sherwood- towards trustable software HIS 2017 Paul Sherwood- towards trustable software
HIS 2017 Paul Sherwood- towards trustable software
 
HIS 2017 Robert Martin- assured software a journey and discussion-final
HIS 2017 Robert Martin- assured software  a journey and discussion-finalHIS 2017 Robert Martin- assured software  a journey and discussion-final
HIS 2017 Robert Martin- assured software a journey and discussion-final
 
HIS 2017 Marie Moe- Unpatchable-Living with a Vulnerable Implanted Device
HIS 2017 Marie Moe- Unpatchable-Living with a Vulnerable Implanted DeviceHIS 2017 Marie Moe- Unpatchable-Living with a Vulnerable Implanted Device
HIS 2017 Marie Moe- Unpatchable-Living with a Vulnerable Implanted Device
 
HIS 2017 Jonathan Pallant- Delivering quality, time after time
HIS 2017 Jonathan Pallant-  Delivering quality, time after timeHIS 2017 Jonathan Pallant-  Delivering quality, time after time
HIS 2017 Jonathan Pallant- Delivering quality, time after time
 
HIS 2017 Peter Ladkin- Rigorous-Assurance Points in Software Development
HIS 2017 Peter Ladkin-  Rigorous-Assurance Points in Software DevelopmentHIS 2017 Peter Ladkin-  Rigorous-Assurance Points in Software Development
HIS 2017 Peter Ladkin- Rigorous-Assurance Points in Software Development
 
HIS 2017 Dewi Daniels- bridging the gap between manned and unmanned
HIS 2017 Dewi Daniels- bridging the gap between manned and unmannedHIS 2017 Dewi Daniels- bridging the gap between manned and unmanned
HIS 2017 Dewi Daniels- bridging the gap between manned and unmanned
 
HIS 2017 Roderick chapman- Secure Updates for Embedded Systems
HIS 2017 Roderick chapman- Secure Updates for Embedded SystemsHIS 2017 Roderick chapman- Secure Updates for Embedded Systems
HIS 2017 Roderick chapman- Secure Updates for Embedded Systems
 
AdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech Update
AdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech UpdateAdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech Update
AdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech Update
 
AdaCore Paris Tech Day 2016: Jerome Lambourg - Cross and BareBoard Team Insid...
AdaCore Paris Tech Day 2016: Jerome Lambourg - Cross and BareBoard Team Insid...AdaCore Paris Tech Day 2016: Jerome Lambourg - Cross and BareBoard Team Insid...
AdaCore Paris Tech Day 2016: Jerome Lambourg - Cross and BareBoard Team Insid...
 
AdaCore Paris Tech Day 2016: Eric Perlade - Verification Solutions
AdaCore Paris Tech Day 2016: Eric Perlade - Verification SolutionsAdaCore Paris Tech Day 2016: Eric Perlade - Verification Solutions
AdaCore Paris Tech Day 2016: Eric Perlade - Verification Solutions
 
AdaCore Paris Tech Day 2016: Elie Richa - Integrated Unit Testing for a Trust...
AdaCore Paris Tech Day 2016: Elie Richa - Integrated Unit Testing for a Trust...AdaCore Paris Tech Day 2016: Elie Richa - Integrated Unit Testing for a Trust...
AdaCore Paris Tech Day 2016: Elie Richa - Integrated Unit Testing for a Trust...
 
AdaCore Paris Tech Day 2016: Pierre-Marie Rodat - Libadalang, New Generation ...
AdaCore Paris Tech Day 2016: Pierre-Marie Rodat - Libadalang, New Generation ...AdaCore Paris Tech Day 2016: Pierre-Marie Rodat - Libadalang, New Generation ...
AdaCore Paris Tech Day 2016: Pierre-Marie Rodat - Libadalang, New Generation ...
 
AdaCore Paris Tech Day 2016: Cyrille Comar - Looking Ahead
AdaCore Paris Tech Day 2016: Cyrille Comar - Looking AheadAdaCore Paris Tech Day 2016: Cyrille Comar - Looking Ahead
AdaCore Paris Tech Day 2016: Cyrille Comar - Looking Ahead
 
AdaCore Paris Tech Day 2016: Fabien Chouteau - Making the Ada Drivers Library
AdaCore Paris Tech Day 2016: Fabien Chouteau - Making the Ada Drivers LibraryAdaCore Paris Tech Day 2016: Fabien Chouteau - Making the Ada Drivers Library
AdaCore Paris Tech Day 2016: Fabien Chouteau - Making the Ada Drivers Library
 
AdaCore Paris Tech Day 2016: Arnaud Chalet - GNAT Pro Roadmap
AdaCore Paris Tech Day 2016: Arnaud Chalet - GNAT Pro RoadmapAdaCore Paris Tech Day 2016: Arnaud Chalet - GNAT Pro Roadmap
AdaCore Paris Tech Day 2016: Arnaud Chalet - GNAT Pro Roadmap
 
AdaCore Paris Tech Day 2016: Jamie Ayre - Market Perspective
AdaCore Paris Tech Day 2016: Jamie Ayre - Market PerspectiveAdaCore Paris Tech Day 2016: Jamie Ayre - Market Perspective
AdaCore Paris Tech Day 2016: Jamie Ayre - Market Perspective
 

Recently uploaded

SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
WSO2
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Hivelance Technology
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
Tendenci - The Open Source AMS (Association Management Software)
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
KrzysztofKkol1
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
IES VE
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 

Recently uploaded (20)

SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 

HIS 2017 Mark Batty-Industrial concurrency specification for C/C++

  • 1. Mark Batty
 University of Kent
 Industrial concurrency specification for C/C++
  • 2. It is time for mechanised industrial standards 2 Specifications are written in English prose: this is insufficient Write mechanised specs instead (formal, machine-readable, executable) Designers can scrutinise, research questions can be identified Mechanised specs enable verification for secure systems Writing mechanised specifications is practical now
  • 3. A case study: industrial concurrency specification 3
  • 4. Multiple threads communicate through a shared memory Shared memory concurrency 4 …Thread Thread Shared memory …
  • 5. Multiple threads communicate through a shared memory Most systems use a form of shared memory concurrency: Shared memory concurrency 5 …Thread Thread Shared memory …
  • 6. An example programming idiom 6 …Thread 1 Thread 2 data, flag, r … Thread 1: data = 1; flag = 1; Thread 2: while (flag==0) {}; r = data; data, flag, r initially zero In the end r==1 Sequential consistency: simple interleaving of concurrent accesses Reality: more complex
  • 7. An example programming idiom 7 …Thread 1 Thread 2 data, flag, r … Thread 1: data = 1; flag = 1; Thread 2: while (flag==0) {}; r = data; data, flag, r initially zero In the end r==1 Sequential consistency: simple interleaving of concurrent accesses Reality: more complex
  • 8. Memory is slow, so it is optimised (buffers, caches, reordering…) e.g. IBM’s machines allow reordering of unrelated writes (so do compilers,ARM, Nvidia…) Sometimes, in the end r==0, a relaxed behaviour Many other behaviours like this, some far more subtle, leading to trouble Relaxed concurrency 8 Thread 1: data = 1; flag = 1; Thread 2: while (flag==0) {}; r = data; data, flag, r initially zero In the end r==1
  • 9. Memory is slow, so it is optimised (buffers, caches, reordering…) e.g. IBM’s machines allow reordering of unrelated writes (so do compilers,ARM, Nvidia…) Sometimes, in the end r==0, a relaxed behaviour Many other behaviours like this, some far more subtle, leading to trouble Relaxed concurrency 9 Thread 1: flag = 1; data = 1; Thread 2: while (flag==0) {}; r = data; data, flag, r initially zero In the end r==1
  • 10. Relaxed behaviour leads to problems 10 Power/ARM processors: unintended relaxed behaviour observable on shipped machines [AMSS10] Bugs in deployed processors Many bugs in compilers Bugs in language specifications Bugs in operating systems
  • 11. Relaxed behaviour leads to problems 11 Errors in key compilers (GCC, LLVM): compiled programs could behave outside of spec. [MPZN13, CV16] Bugs in deployed processors Many bugs in compilers Bugs in language specifications Bugs in operating systems
  • 12. Relaxed behaviour leads to problems 12 The C and C++ standards had bugs that made unintended behaviour allowed. More on this later. [BOS+11, BMN+15] Bugs in deployed processors Many bugs in compilers Bugs in language specifications Bugs in operating systems
  • 13. Relaxed behaviour leads to problems 13 Confusion among operating system engineers leads to bugs in the Linux kernel [McK11, SMO+12] Bugs in deployed processors Many bugs in compilers Bugs in language specifications Bugs in operating systems
  • 14. Relaxed behaviour leads to problems 14 Bugs in deployed processors Many bugs in compilers Bugs in language specifications Bugs in operating systems Current engineering practice is severely lacking!
  • 15. Vague specifications are at fault 15 Relaxed behaviours are subtle, difficult to test for and often unexpected, yet allowed for performance Specifications try to define what is allowed, but English prose is untestable, ambiguous, and hides errors
  • 16. A diverse and continuing effort 16 Build mechanised executable formal models of specifications [AFI+09,BOS+11,BDW16] [FGP+16,LDGK08,OSP09] [FSP+17] Modelling of hardware and languages Simulation tools and reasoning principles Empirical testing of current hardware Verification of language design goals Test and verify compilers Feedback to industry: specs and test suites
  • 17. A diverse and continuing effort 17 Provide tools to simulate the formal models, to explain their behaviours to non-experts Provide reasoning principles to help in the verification of code [BOS+11,SSP+,BDG13] Modelling of hardware and languages Simulation tools and reasoning principles Empirical testing of current hardware Verification of language design goals Test and verify compilers Feedback to industry: specs and test suites
  • 18. A diverse and continuing effort 18 Run a battery of tests to understand the observable behaviour of the system and check it against the model [AMSS’11] Modelling of hardware and languages Simulation tools and reasoning principles Empirical testing of current hardware Verification of language design goals Test and verify compilers Feedback to industry: specs and test suites
  • 19. A diverse and continuing effort 19 Explicitly stated design goals should be proved to hold [BMN+15] Modelling of hardware and languages Simulation tools and reasoning principles Empirical testing of current hardware Verification of language design goals Test and verify compilers Feedback to industry: specs and test suites
  • 20. A diverse and continuing effort 20 Test to find the relaxed behaviours introduced by compilers and verify that optimisations are correct [MPZN13, CV16] Modelling of hardware and languages Simulation tools and reasoning principles Empirical testing of current hardware Verification of language design goals Test and verify compilers Feedback to industry: specs and test suites
  • 21. A diverse and continuing effort 21 Specifications should be fixed when problems are found Test suites can ensure conformance to formal models [B11] Modelling of hardware and languages Simulation tools and reasoning principles Empirical testing of current hardware Verification of language design goals Test and verify compilers Feedback to industry: specs and test suites
  • 22. A diverse and continuing effort 22 Modelling of hardware and languages Simulation tools and reasoning principles Empirical testing of current hardware Verification of language design goals Test and verify compilers Feedback to industry: specs and test suites I will describe my part:
  • 23. The C and C++ memory model 23
  • 24. Acknowledgements 24 S. Owens S. Sarkar P. Sewell T.Weber K. MemarianM. Dodds A. Gotsman K. Nienhuis J. Pichon-Pharabod
  • 25. The medium for system implementation Defined by WG14 and WG21 of the International Standards Organisation The ’11, ’14 and ‘17 revisions define relaxed memory behaviour I worked with WG21, formalising and improving their concurrency design C and C++ 25
  • 26. The medium for system implementation Defined by WG14 and WG21 of the International Standards Organisation The ’11, ’14 and ‘17 revisions define relaxed memory behaviour We worked with the ISO, formalising and improving their concurrency design C and C++ 26
  • 27. C++11 concurrency design A contract with the programmer: they must avoid data races, two threads competing for simultaneous access to a single variable Beware: Violate the contract and the compiler is free to allow anything: catch fire! 27 Thread 1: data = 1; Thread 2: r = data; data initially zero
  • 28. C++11 concurrency design A contract with the programmer: they must avoid data races, two threads competing for simultaneous access to a single variable Beware: Violate the contract and the compiler is free to allow anything: catch fire! 28 Thread 1: data = 1; Thread 2: r = data; data initially zero
  • 29. C++11 concurrency design A contract with the programmer: they must avoid data races, two threads competing for simultaneous access to a single variable Beware: Violate the contract and the compiler is free to allow anything: catch fire! Atomics are excluded from the requirement, and can order non-atomics, preventing simultaneous access and races 29 Thread 1: data = 1; Thread 2: r = data; data initially zero
  • 30. C++11 concurrency design A contract with the programmer: they must avoid data races, two threads competing for simultaneous access to a single variable Beware: Violate the contract and the compiler is free to allow anything: catch fire! Atomics are excluded from the requirement, and can order non-atomics, preventing simultaneous access and races 30 Thread 1: data = 1; flag = 1; Thread 2: while (flag==0) {}; r = data; data, r, atomic flag, initially zero
  • 31. Design goals in the standard 31 The design is complex but the standard claims a powerful simplification: C++11/14: §1.10p21 It can be shown that programs that correctly use mutexes and memory_order_seq_cst operations to prevent all data races and use no other synchronization operations behave [according to] “sequential consistency”. This is the central design goal of the model, called DRF-SC
  • 32. 32 Compilers like GCC, LLVM map C/C++ to pieces of machine code C/C++ Power ARM x86 Load acquire ld; cmp; bc; isync ldr; dmb MOV (from memory) Implicit design goals Each mapping should preserve the behaviour of the original program Power ARMx86 C/C++11
  • 33. 33 A mechanised formal model, close to the standard text In total, several thousand lines of Lem [MOG+14] We formalised a draft of the standard C++11 standard §1.10p12: An evaluation A happens before an evaluation B if: • A is sequenced before B, or
 • A inter-thread happens before B. The implementation shall ensure that no program execution demonstrates a cycle in the “happens before” relation. The corresponding formalisation: let happens_before sb ithb = sb ∪ ithb let consistent_hb hb = isIrreflexive (transitiveClosure hb)
  • 34. Issues were discussed in N-papers and Defect Reports Communication with WG21 and WG14 4/3/2016 3057: Explicit Initializers for Atomics http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3057.html 1/5 Explicit Initializers for Atomics ISO/IEC JTC1 SC22 WG21 N3057 = 10-0047 - 2010-03-11 Paul E. McKenney, paulmck@linux.vnet.ibm.com Mark Batty, mjb220@cl.cam.ac.uk Clark Nelson, clark.nelson@intel.com N.M. Maclaren, nmm1@cam.ac.uk Hans Boehm, hans.boehm@hp.com Anthony Williams, anthony@justsoftwaresolutions.co.uk Peter Dimov, pdimov@mmltd.net Lawrence Crowl, crowl@google.com, Lawrence@Crowl.org Introduction Mark Batty recently undertook a partial formalization of the C++ memory model, which Mark summarized in N2955. This paper summarizes the discussions on Mark's paper, both verbal and email, recommending appropriate actions for the Library Working Group. Core issues are dealt with in a companion N3074 paper. This paper is based on N3045, and has been updated to reflect discussions in the Concurrency subgroup of the Library Working Group in Pittsburgh. This paper also carries the C-language side of N3040, which was also discussed in the Concurrency subgroup of the Library Working Group in Pittsburgh. Library Issues Library Issue 1: 29.3p1 Limits to Memory-Order Relaxation (Non-Normative) Add a note stating that memory_order_relaxed operations must maintain indivisibility, as described in the discussion of 1.10p4. This must be considered in conjunction with the resolution to LWG 1151, which is expected to be addressed by Hans Boehm in N3040. Library Issue 2: 29.3p11 Schedulers, Loops, and Atomics (Normative) The second sentence of this paragraph, “Implementations shall not move an atomic operation out of an unbounded loop”, does not add anything to the first sentence, and, worse, can be interpreted as restricting the meaning of the first sentence. This sentence should therefore be deleted. The Library Working Group discussed this change during the Santa Cruz meeting in October 2009, and agreed with this deletion. Library Issue 3: 29.5.1 Uninitialized Atomics and C/C++ Compatibility (Normative) This topic was the subject of a spirited discussion among a subset of the participants in the C/C++- compatibility effort this past October and November. Unlike C++, C has no mechanism to force a given variable to be initialized. Therefore, if C++ atomics are going to be compatible with those of C, either C++ needs to tolerate uninitialized atomic objects, or C needs to require that all atomic objects be initialized. There are a number of cases to consider:
  • 35. Major problems fixed, key properties verified 35 DRF-SC: The central design goal, was false, the standard permitted too much Fixed the model and then proved (in HOL4) that the goal is now true Fixes were incorporated, pre-ratification, and are in C++11/14 Compilation mappings: Efficient x86, Power mappings are sound [BOS+11,BMO+12,SMO+12] Reasoning: Developed a reasoning principle for proving programs correct [BDO13]
  • 36. Timing was everything 36 Achieved direct impact on the standard Making this work was partly a social problem C++11 was a major revision, so the ISO was receptive to change But…
  • 37. A fundamental problem uncovered 37 // Thread 1 r1 = x; if(r1==1) y = 1; // Thread 2 r2 = y; if(r2==1) x = 1; x, y, r1, r2 initially zero Can we observe r1==1, r2==1 at the end?
  • 38. The write of y is dependent on the read of x The write of x is dependent on the read of y This will never occur in compiled code, and ought to be forbidden “[ Note: […] However, implementations should not allow such behavior. — end note ]” The ISO: notes carry no force, and “should” imposes no constraint 38 // Thread 1 r1 = x; if(r1==1) y = 1; // Thread 2 r2 = y; if(r2==1) x = 1; x, y, r1, r2 initially zero Can we observe r1==1, r2==1 at the end? A fundamental problem uncovered
  • 39. The write of y is dependent on the read of x The write of x is dependent on the read of y This will never occur in compiled code, and ought to be forbidden “[ Note: […] However, implementations should not allow such behavior. — end note ]” The ISO: notes carry no force, and “should” imposes no constraint 39 // Thread 1 r1 = x; if(r1==1) y = 1; // Thread 2 r2 = y; if(r2==1) x = 1; x, y, r1, r2 initially zero Can we observe r1==1, r2==1 at the end? A fundamental problem uncovered
  • 40. The write of y is dependent on the read of x The write of x is dependent on the read of y 1/1 never occurs in compiled code, and ought to be forbidden “[ Note: […] However, implementations should not allow such behavior. — end note ]” The ISO: notes carry no force, and “should” imposes no constraint 40 // Thread 1 r1 = x; if(r1==1) y = 1; // Thread 2 r2 = y; if(r2==1) x = 1; x, y, r1, r2 initially zero Can we observe r1==1, r2==1 at the end? A fundamental problem uncovered
  • 41. The write of y is dependent on the read of x The write of x is dependent on the read of y 1/1 never occurs in compiled code, and ought to be forbidden “[ Note: […] However, implementations should not allow such behavior. — end note ]” ISO: notes carry no force, and “should” imposes no constraint, so yes! 41 // Thread 1 r1 = x; if(r1==1) y = 1; // Thread 2 r2 = y; if(r2==1) x = 1; x, y, r1, r2 initially zero Can we observe r1==1, r2==1 at the end? A fundamental problem uncovered
  • 42. The write of y is dependent on the read of x The write of x is dependent on the read of y 1/1 never occurs in compiled code, and ought to be forbidden “[ Note: […] However, implementations should not allow such behavior. — end note ]” ISO: notes carry no force, and “should” imposes no constraint, so yes! 42 // Thread 1 r1 = x; if(r1==1) y = 1; // Thread 2 r2 = y; if(r2==1) x = 1; x, y, r1, r2 initially zero Can we observe r1==1, r2==1 at the end? A fundamental problem uncovered Why? Dependencies are ignored to allow dependency-removing optimisations C++ Should respect the left-over dependencies We have proved that no fix exists in the structure of the current specification This identifies a difficult research problem
  • 44. In both branches on Thread 2, 1 is written to x An optimising compiler may perform common subexpression elimination In the altered program,ARM would allow outcome 1/1 44 // Thread 1 r1 = x; if(r1==1) y = 1; // Thread 2 r2 = y; if(r2==1) {x = 1} else {x = 1} x, y, r1, r2 initially zero Can we observe r1==1, r2==1 at the end? A slightly different program
  • 45. In both branches on Thread 2, 1 is written to x An optimising compiler may perform common subexpression elimination In the altered program,ARM would allow the outcome 1/1 45 // Thread 1 r1 = x; if(r1==1) y = 1; // Thread 2 r2 = y; x = 1; x, y, r1, r2 initially zero Can we observe r1==1, r2==1 at the end? A slightly different program
  • 46. 46 // Thread 1 r1 = x; if(r1==1) y = 1; // Thread 2 r2 = y; if(r2==1) {x = 1} else {x = 1} x, y, r1, r2 initially zero Can we observe r1==1, r2==1 at the end? A slightly different program We need a semantic notion of dependency Execution depends on more than one control-flow path C++ spec considers one at a time: fundamental change is needed
  • 47. Current work 47 Several candidates: • The Promising Semantics [KHL+17] — an abstract machine with speculation of writes through promises.At each step, promised writes must be sure to execute. • Jeffrey and Riely [JR16] — based on event structures, executions are built up iteratively, out of order.Add a read only if the write it reads from must be executed. • Podkopaev, Sergey, and Nanevski [PSN16] — an abstract machine where conditionals can be preemptively explored, and writes that always occur can be promoted. • Bubbly and Ticky semantics [PPS16] — based on event structures.The event structure is non- deterministically mutated in a transition system that mimics compiler optimisations. Each relies on a repeated search over multiple control-flow paths This makes the models more expensive to evaluate than C++ (cannot use SAT) Which model to choose?
  • 48. Model simulation 48 Simulators provide lightweight automatic validation of design criteria: [WBSC17] uses SAT to check DRF-SC, compiler mappings, litmus tests for C++, OpenCL, CPUs, GPUs We are building a simulator for thin-air models Higher complexity requires advanced Quantified Boolean Formula solvers AVeTTS grant is paying for the development of a web interface Our own solution to the thin-air problem is under development: a compositional denotational semantics that looks rather different [B17] Marco PaviottiSimon Cooksey Radu Grigore Sarah Harris Scott Owens
  • 49. Conclusion 49 Mechanised industrial specification is practical, with a valuable payoff: • Improved specs • Simulators — an executable golden model that matches the spec • Test suites can be generated • Design criteria can be validated It can guide us to future research questions It is a necessary step in formal verification of security properties
  • 50. [ABD+15] J. Alglave, M. Batty, A. Donaldson, G. Gopalakrishnan, J. Ketema, D. Poetzl, T. Sorensen, J. Wickerson. GPU concurrency: weak behaviours and programming assumptions. ASPLOS’15 [AFI+09] J. Alglave, A. Fox, S. Ishtiaq, M. O. Myreen, S. Sarkar, P. Sewell, and F. Zappa Nardelli. The semantics of Power and ARM multiprocessor machine code. DAMP’09 [AMSS10] J. Alglave, L. Maranget, S. Sarkar, and P. Sewell. Fences in weak memory models. CAV’10 [AMSS’11] J. Alglave, L. Maranget, S. Sarkar, and P. Sewell. Litmus: Running tests against hardware. TACAS’11/ETAPS’11 [B17] M. Batty. Compositional relaxed concurrency. Philosophical Transactions A, 2017 [B11] P. Becker, editor. Programming Languages — C++. 2011. ISO/IEC 14882:2011. A non-final version is available at http://www.open-std.org/jtc1/sc22/ wg21/docs/papers/2011/n3242.pdf. [BDG13] M. Batty, M. Dodds, A. Gotsman. Library Abstraction for C/C++ Concurrency. POPL’13 [BDW16] M. Batty, A. Donaldson, J. Wickerson. Overhauling SC atomics in C11 and OpenCL. POPL’16 [BMN+15] M. Batty, K. Memarian, K. Nienhuis, J. Pichon, P. Sewell. The Problem of Programming Language Concurrency Semantics. ESOP’15 [BMO+12] M. Batty, K. Memarian, S. Owens, S. Sarkar, and P. Sewell. Clarifying and compiling C/C++ concurrency: from C++0x to POWER. POPL’12 [BOS+11] M. Batty, S. Owens, S. Sarkar, P. Sewell, and T. Weber. Mathematizing C++ concurrency. POPL’11 [CV16] S. Chakraborty, V. Vafeiadis. Validating optimizations of concurrent C/C++ programs. CGO’16 [FGP+16] S. Flur, K. E. Gray, C. Pulte, S. Sarkar, A. Sezgin, L. Maranget, W. Deacon, P. Sewell. Modelling the ARMv8 Architecture, Operationally: Concurrency and ISA. PLDI’16 [FSP+17] S. Flur, S. Sarkar, C. Pulte, K. Nienhuis, L. Maranget, K. E. Gray, A. Sezgin, M. Batty, P. Sewell. Mixed-size concurrency: ARM, POWER, C/C++11, and SC. POPL’17 [JR16] A. Jeffrey, J. Riely. On Thin Air Reads: Towards an Event Structures Model of Relaxed Memory. LICS’16 [LDGK08] G. Li, M. Delisi, G. Gopalakrishnan, and R. M. Kirby. Formal specification of the MPI-2.0 standard in TLA+. PPoPP’08 [KHL+17] A Promising Semantics for Relaxed-Memory Concurrency. J. Kang, C.-K. Hur, O. Lahav, V. Vafeiadis, D. Dreyer. POPL’17 [McK11] P. E. McKenney. [patch rfc tip/core/rcu 0/28] preview of RCU changes for 3.3, November 2011. https://lkml.org/lkml/2011/11/2/363 [MOG+14] D. P. Mulligan, S. Owens, K. E. Gray, T. Ridge, and P. Sewell. Lem: reusable engineering of real-world semantics. ICFP ’14 [MPZN13] R. Morisset, P. Pawan, F. Zappa Nardelli. Compiler testing via a theory of sound optimisations in the C11/C++11 memory model. PLDI’13 [OSP09] S. Owens, S. Sarkar, and P. Sewell. A better x86 memory model: x86-TSO. TPHOLS’09 [PPS16] J. Pichon-Pharabod and P. Sewell. A concurrency semantics for relaxed atomics that permits optimisation and avoids thin-air executions. POPL’16 [PSN16] A. Podkopaev, I. Sergey, and A. Nanevski. Operational aspects of C/C++ concurrency. CoRR’16. [SMO+12] S. Sarkar, K. Memarian, S. Owens, M. Batty, P. Sewell, L. Maranget, J. Alglave, and D. Williams. Synchronising C/C++ and POWER. PLDI’12 [SSP+] S. Sarkar, P. Sewell, P. Pawan, L. Maranget, J. Alglave, D. Williams, F. Zappa Nardelli. The PPCMEM Web Tool. www.cl.cam.ac.uk/~pes20/ppcmem/ [WBDB15] J. Wickerson. M. Batty, B. Beckmann, A. Donaldson. Remote-Scope Promotion: Clarified, Rectified, and Verified. OOPSLA’15 [WBSC17] J. Wickerson, M. Batty, T. Sorensen, G. A. Constantinides. Automatically comparing memory consistency models. POPL’17