316 research outputs found
Clarifying and compiling C/C++ concurrency: from C++11 to POWER
The upcoming C and C++ revised standards add concurrency to the languages, for the first time, in the form of a subtle *relaxed memory model* (the *C++11 model*). This aims to permit compiler optimisation and to accommodate the differing relaxed-memory behaviours of mainstream multiprocessors, combining simple semantics for most code with high-performance *low-level atomics* for concurrency libraries. In this paper, we first establish two simpler but provably equivalent models for C++11, one for the full language and another for the subset without consume operations. Subsetting further to the fragment without low-level atomics, we identify a subtlety arising from atomic initialisation and prove that, under an additional condition, the model is equivalent to sequential consistency for race-free programs
Constructing cities, deconstructing scaling laws
Cities can be characterised and modelled through different urban measures.
Consistency within these observables is crucial in order to advance towards a
science of cities. Bettencourt et al have proposed that many of these urban
measures can be predicted through universal scaling laws. We develop a
framework to consistently define cities, using commuting to work and population
density thresholds, and construct thousands of realisations of systems of
cities with different boundaries for England and Wales. These serve as a
laboratory for the scaling analysis of a large set of urban indicators. The
analysis shows that population size alone does not provide enough information
to describe or predict the state of a city as previously proposed, indicating
that the expected scaling laws are not corroborated. We found that most urban
indicators scale linearly with city size regardless of the definition of the
urban boundaries. However, when non-linear correlations are present, the
exponent fluctuates considerably.Comment: Accepted for publication, Journal of the Royal Society Interfac
Evaluation of the South Yorkshire Social Infrastructure Programme - Report H: Neighbourhood Infrastructure
Evaluation of the South Yorkshire Social Infrastructure Programme - Report D: Investment in Volunteer Centres
Evaluation of the South Yorkshire Social Infrastructure Programme - Report F: Core Infrastructure Services
Synchronising C/C++ and POWER
Shared memory concurrency relies on synchronisation primitives: compare-and-swap, load-reserve/store-conditional (aka LL/SC), language-level mutexes, and so on. In a sequentially consistent setting, or even in the TSO setting of x86 and Sparc, these have well-understood semantics. But in the very relaxed settings of IBM®, POWER®, ARM, or C/C++, it remains surprisingly unclear exactly what the programmer can depend on.
This paper studies relaxed-memory synchronisation. On the hardware side, we give a clear semantic characterisation of the load-reserve/store-conditional primitives as provided by POWER multiprocessors, for the first time since they were introduced 20 years ago; we cover their interaction with relaxed loads, stores, barriers, and dependencies. Our model, while not officially sanctioned by the vendor, is validated by extensive testing, comparing actual implementation behaviour against an oracle generated from the model, and by detailed discussion with IBM staff. We believe the ARM semantics to be similar.
On the software side, we prove sound a proposed compilation scheme of the C/C++ synchronisation constructs to POWER, including C/C++ spinlock mutexes, fences, and read-modify-write operations, together with the simpler atomic operations for which soundness is already known from our previous work; this is a first step in verifying concurrent algorithms that use load-reserve/store-conditional with respect to a realistic semantics. We also build confidence in the C/C++ model in its own terms, fixing some omissions and contributing to the C standards committee adoption of the C++11 concurrency model
Mathematizing C++ concurrency
Shared-memory concurrency in C and C++ is pervasive in systems programming, but has long been poorly defined. This motivated an ongoing shared effort by the standards committees to specify concurrent behaviour in the next versions of both languages. They aim to provide strong guarantees for race-free programs, together with new (but subtle) relaxed-memory atomic primitives for high-performance concurrent code. However, the current draft standards, while the result of careful deliberation, are not yet clear and rigorous definitions, and harbour substantial problems in their details.
In this paper we establish a mathematical (yet readable) semantics for C++ concurrency. We aim to capture the intent of the current (`Final Committee') Draft as closely as possible, but discuss changes that fix many of its problems. We prove that a proposed x86 implementation of the concurrency primitives is correct with respect to the x86-TSO model, and describe our Cppmem tool for exploring the semantics of examples, using code generated from our Isabelle/HOL definitions.
Having already motivated changes to the draft standard, this work will aid discussion of any further changes, provide a correctness condition for compilers, and give a much-needed basis for analysis and verification of concurrent C and C++ programs
Alguns aspectos da avifauna da Ilha de Santa Maria.
V Expedição CientĂfica do Departamento de Biologia – Santa Maria e Formigas 1990.0s objectivos da presente expedição foram os seguintes: 1) observação de espĂ©cies residentes e migratĂłrias; 2) obtenção de dados sobre a distribuição de Calonectris diomedea borealis (Cory, 1881) cagarro; 3) consulta das colecções de aves preservadas do Externato de Vila do Porto e da colecção particular do Senhor Pombo; 4) obtenção de dados sobre a distribuição e ciclo reprodutor de Sterna dougallii (Montagu, 1813) garajau-rosado. Apesar de terem sido definidos estes quatro objectivos, os estudos desenvolvidos visaram sobretudo a distribuição e ciclo reprodutor de S. dougallii (Montagu, 1813). Trata-se de uma espĂ©cie que consta da lista mundial de aves ameaçadas da ICBP (International Council for Bird Preservation), do anexo I de Conservação de Aves Selvagens da CEE e do ApĂŞndice II da Convenção de Berna. Ocorre no Reino, França, Irlanda, Portugal
(Açores, Selvagens e Madeira) e Espanha (Canárias)
Social investment and its impact: the evaluation of charity bank in the north: executive summary
- …