C++11 seminaari, kevät Johannes Koskinen

Samankaltaiset tiedostot
RINNAKKAINEN OHJELMOINTI A,

Capacity Utilization

Tietorakenteet ja algoritmit

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

anna minun kertoa let me tell you

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

812336A C++ -kielen perusteet,

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

SIMULINK S-funktiot. SIMULINK S-funktiot

EUROOPAN PARLAMENTTI

Choose Finland-Helsinki Valitse Finland-Helsinki

The CCR Model and Production Correspondence

Alternative DEA Models

Results on the new polydrug use questions in the Finnish TDI data

Guidebook for Multicultural TUT Users

1. SIT. The handler and dog stop with the dog sitting at heel. When the dog is sitting, the handler cues the dog to heel forward.

Efficiency change over time

Infrastruktuurin asemoituminen kansalliseen ja kansainväliseen kenttään Outi Ala-Honkola Tiedeasiantuntija

Security server v6 installation requirements

Information on preparing Presentation

Network to Get Work. Tehtäviä opiskelijoille Assignments for students.

TM ETRS-TM35FIN-ETRS89 WTG

LUONNOS RT EN AGREEMENT ON BUILDING WORKS 1 THE PARTIES. May (10)

Encapsulation. Imperative programming abstraction via subprograms Modular programming data abstraction. TTY Ohjelmistotekniikka

Security server v6 installation requirements

National Building Code of Finland, Part D1, Building Water Supply and Sewerage Systems, Regulations and guidelines 2007

,0 Yes ,0 120, ,8

PHYS-C0220 Termodynamiikka ja statistinen fysiikka Kevät 2016

Intel Threading Building Blocks

16. Allocation Models

Mitä Master Class:ssa opittiin?

Voice Over LTE (VoLTE) By Miikka Poikselkä;Harri Holma;Jukka Hongisto

make and make and make ThinkMath 2017

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Information on Finnish Language Courses Spring Semester 2018 Päivi Paukku & Jenni Laine Centre for Language and Communication Studies

Other approaches to restrict multipliers

Information on Finnish Language Courses Spring Semester 2017 Jenni Laine

Green Growth Sessio - Millaisilla kansainvälistymismalleilla kasvumarkkinoille?

Gap-filling methods for CH 4 data

WindPRO version joulu 2012 Printed/Page :47 / 1. SHADOW - Main Result

The Viking Battle - Part Version: Finnish

Rekisteröiminen - FAQ

LYTH-CONS CONSISTENCY TRANSMITTER

Salasanan vaihto uuteen / How to change password

TM ETRS-TM35FIN-ETRS89 WTG

FIS IMATRAN KYLPYLÄHIIHDOT Team captains meeting

S SÄHKÖTEKNIIKKA JA ELEKTRONIIKKA

I. Principles of Pointer Year Analysis

Operatioanalyysi 2011, Harjoitus 2, viikko 38

VAASAN YLIOPISTO Humanististen tieteiden kandidaatin tutkinto / Filosofian maisterin tutkinto

10 Lock Lock-lause

TM ETRS-TM35FIN-ETRS89 WTG

Immigration Studying. Studying - University. Stating that you want to enroll. Stating that you want to apply for a course.

TM ETRS-TM35FIN-ETRS89 WTG

Operatioanalyysi 2011, Harjoitus 4, viikko 40

Returns to Scale II. S ysteemianalyysin. Laboratorio. Esitelmä 8 Timo Salminen. Teknillinen korkeakoulu

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Metsälamminkankaan tuulivoimapuiston osayleiskaava

Tietorakenteet ja algoritmit

Operatioanalyysi 2011, Harjoitus 3, viikko 39

OP1. PreDP StudyPlan

Osa VII. Mitä mallit ovat ja kuinka niitä käytetään Miksi mallit tarjoavat paremman vaihtoehdon makroille Kuinka luokkamalleja luodaan

Vertaispalaute. Vertaispalaute, /9

Information on Finnish Courses Autumn Semester 2017 Jenni Laine & Päivi Paukku Centre for Language and Communication Studies

Uusi Ajatus Löytyy Luonnosta 4 (käsikirja) (Finnish Edition)

Nuku hyvin, pieni susi -????????????,?????????????????. Kaksikielinen satukirja (suomi - venäjä) ( (Finnish Edition)

Käyttöjärjestelmät: poissulkeminen ja synkronointi

TM ETRS-TM35FIN-ETRS89 WTG

Suihkukoneet 1:73 ja pienemmät. Potkurikoneet 1:72-1:49. Suihkukoneet 1:72-1:49. Potkurikoneet 1:35 ja suuremmat. Suihkukoneet 1:35 ja suuremmat

4x4cup Rastikuvien tulkinta

Data protection template

Toppila/Kivistö Vastaa kaikkin neljään tehtävään, jotka kukin arvostellaan asteikolla 0-6 pistettä.

( ( OX2 Perkkiö. Rakennuskanta. Varjostus. 9 x N131 x HH145

WindPRO version joulu 2012 Printed/Page :42 / 1. SHADOW - Main Result

Ohjelmointiharjoituksia Arduino-ympäristössä

PAINEILMALETKUKELA-AUTOMAATTI AUTOMATIC AIR HOSE REEL

Tynnyrivaara, OX2 Tuulivoimahanke. ( Layout 9 x N131 x HH145. Rakennukset Asuinrakennus Lomarakennus 9 x N131 x HH145 Varjostus 1 h/a 8 h/a 20 h/a

1. Liikkuvat määreet

6.3. AVR_rauta. EEPROM-muisti pva

TM ETRS-TM35FIN-ETRS89 WTG

TM ETRS-TM35FIN-ETRS89 WTG

Vesitehokkuus liiketoiminnan uusi ajuri. Pöyry Forest Industry Consulting oy

( ,5 1 1,5 2 km

TM ETRS-TM35FIN-ETRS89 WTG

TM ETRS-TM35FIN-ETRS89 WTG

Exercise 1. (session: )

TM ETRS-TM35FIN-ETRS89 WTG

TM ETRS-TM35FIN-ETRS89 WTG

F-SECURE TOTAL. Pysy turvassa verkossa. Suojaa yksityisyytesi. Tietoturva ja VPN kaikille laitteille. f-secure.com/total

KONEISTUSKOKOONPANON TEKEMINEN NX10-YMPÄRISTÖSSÄ

Travel Getting Around

TIETORAKENTEET JA ALGORITMIT

Kernel (Fig 4.10 [Stal 05]) Operating Systems Examples and Process Management

S Sähkön jakelu ja markkinat S Electricity Distribution and Markets

Curriculum. Gym card

TIEKE Verkottaja Service Tools for electronic data interchange utilizers. Heikki Laaksamo

Tarua vai totta: sähkön vähittäismarkkina ei toimi? Satu Viljainen Professori, sähkömarkkinat

Miehittämätön meriliikenne

Transkriptio:

C++11 seminaari, kevät 2012 Johannes Koskinen

Sisältö Mikä onkaan ongelma? Standardidraftin luku 29: Atomiset tyypit Muistimalli

Rinnakkaisuus On multicore systems, when a thread writes a value to memory, it becomes immediately available for reading on the same core, but threads executing on other cores may see the previous value for some time, and when they get to see values change, it may not be in the same order as what other threads see. In addition, both C++ compilers and CPUs may reorder regular memory accesses within a single thread for efficiency.

Mitä tulee lopputulokseksi? http://channel9.msdn.com/events/goingnative/goingnative-2012/threads-and- Shared-Variables-in-C-11 Alussa kaikki ovat muuttujat nollia. Thread 1 Thread 2 x = 1; y = 1; r1 = y; r2 = x; Myös r1 = r2 = 0 on mahdollinen

Mitä tulee lopputulokseksi? Standardi Alussa kaikki ovat muuttujat nollia. Thread 1 Thread 2 r1 = y; r2 = x; x = r1; y = 42; Myös r1 = r2 = 42 on mahdollinen

Toimiiko? Thread 1 Thread 2 x = 42; while (!done) {} done = true; assert(x == 42);

Entä muuten? 1. struct { char a; char b; } x; 2. struct { int a:8; int b:8; } x; 3. struct { char a; int b:11; } x; 4. list<int> x;

Mutta onhan meillä semaforit&co Mutta synkronointi näiden avulla on usein liian raskasta (ja vaikeaa)

Atomic<T> Tarjoaa helpon tavan rinnakkaiseen käsittelyyn Kääntäjä tekee tarvittavat taiat, jotta homma toimii Voi olla myös hyvin raskasta ja riippua alla olevasta raudasta Onneksi x86 ja muut nykyaikaiset prosessorit selviävät kohtuullisen vähällä Atomic objects are the only C++ objects free of data races; that is, if one thread writes to an atomic while another thread reads from it, the behavior is well-defined.

Operaatioita Load, store Exchange Compare_exchange Fetch_add, Fetch_sub Fetch_and, Fetch_or, Fetch_xor Perinteiset operaattorit Ei kopiorakentajaa/sijoitusta atomicin kanssa Flag, Flag_test_and_set, Flag_clear

Compare_exchange template< class T > bool atomic_compare_exchange_strong(std::atomic<t>* object, T* expected, T desired) if (memcmp(object, expected, sizeof(*object)) == 0) memcpy(object, &desired, sizeof(*object)); else memcpy(expected, object, sizeof(*object)); Palauttaa vertailun tuloksen (true, jos samat)

Compare_exchange (Lock-free list) void append(list* s, node* n) { node* head; do { head = s->head; n->next = head; } while (! std::atomic_compare_exchange_weak(s->head, head, n)); }

Memory_order Välillä voidaan optimoida nopeuden suhteen (kaikkea ei tarvitse sarjallistaa) Each atomic operation accepts a std::memory_order as an additional parameter, which specifies how non-atomic memory accesses are to be ordered around this atomic operation. enum memory_order { memory_order_relaxed, memory_order_consume, memory_order_acquire, memory_order_release, memory_order_acq_rel, memory_order_seq_cst } memory_order;

http://en.cppreference.com/w/cpp/atomic/memory_order order_relaxed order_consume order_acquire order_release order_acq_rel order_seq_cst The operation does not order memory. Performs a consume operation on the affected memory location, marking the root of a data dependency tree. The reads from the affected memory location that carry data dependency cannot be reordered before the load; other reads can be. On most platforms, this affects compiler optimization only. Performs an acquire operation on the affected memory locations, thus making regular memory writes in other threads released through the atomic variable to which it is applied, visible to the current thread. No reads from the affected memory location can be reordered before the load. Performs a release operation on the affected memory locations, thus making regular memory writes visible to other threads through the atomic variable to which it is applied. The operation has both acquire and release semantics. The operation has both acquire and release semantics, and in addition, has sequentially-consistent operation ordering.

Esimerkkejä http://en.cppreference.com/w/cpp/atomic/memory_order