Intel Threading Building Blocks

Samankaltaiset tiedostot
Rinnakkaisuuden hyväksikäyttö peleissä. Paula Kemppi

Asynkroninen ohjelmointi.net 4.5 versiolla

CUDA. Moniydinohjelmointi Mikko Honkonen

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Processor speed: 1.8 GHz Processor type: Intel(R) Xeon(R) CPU Physical memory: 4094 MB

C++11 seminaari, kevät Johannes Koskinen

Palvelut. Sulautetut järjestelmät Luku 2 Sivu 1 (??) Sulautetut käyttöjärjestelmät

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

Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka

RINNAKKAINEN OHJELMOINTI A,

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

Kieliversiointityökalu Java-ohjelmistoon. Ohje

Rinnakkaistietokoneet luento S

Ohjelmoinnin peruskurssien laaja oppimäärä

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Navistools Standard. Navistools

TeleWell TW-LTE/4G/3G USB -modeemi Cat 4 150/50 Mbps

Ohjelmoinnin peruskurssien laaja oppimäärä

WINE API ja Virtualisointiohjelmistot

Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön?

Rinnakkaislaskentamallien arviointi: Intel Threading Building Blocks

Apuja ohjelmointiin» Yleisiä virheitä

Tech Conference Visual Studio 2015, C#6,.NET4.6. Heikki Raatikainen. #TechConfFI

4. Luento: Prosessit ja säikeets. Tommi Mikkonen,

IPC3 1.3 Mega-Pixel / Moniprofiili IP -kamera

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Nokia Nseries PC Suite painos

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

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

Processes and threads

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

Rinnakkaisohjelmointi.NET-ympäristössä

Luento 5. Timo Savola. 28. huhtikuuta 2006

Ohjelmoinnin peruskurssien laaja oppimäärä

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

Käyttöjärjestelmät: prosessit

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

7. Product-line architectures

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

Lukuteoria. Eukleides Aleksandrialainen (n. 300 eaa)

KYMENLAAKSON AMMATTIKORKEAKOULU

A TIETORAKENTEET JA ALGORITMIT

Backup Exec 3600 Appliance

zotero

Rinnakkaisuuden hyväksikäyttö tietokonepeleissä

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen

SCS Data Manager. Julkaisutiedot. Versio 3.00

Miten voin selvittää säästömahdollisuuteni ja pääsen hyötymään niistä?

OpenStreetMap-aineistojen haltuunotto GDAL:lla

Algoritmit 1. Demot Timo Männikkö

Jouko Nielsen. Ubuntu Linux

Algoritmit 1. Luento 4 Ke Timo Männikkö

Zeon PDF Driver Trial

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi

Security server v6 installation requirements

812315A Ohjelmiston rakentaminen. Asynkronisuus

10 Lock Lock-lause

4.3. Matemaattinen induktio

GPRS-lisäpalvelu INTERNET-ASETUKSET

Algoritmit C++ Kauko Kolehmainen

815338A Ohjelmointikielten periaatteet

Security server v6 installation requirements

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Tietoturvaohjelmistojen toteutus

Avoimen lähdekoodin kehitysmallit

ITKP102 Ohjelmointi 1 (6 op)

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

Digitaalinen haavoittuvuus MATINE Tampere

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

Laskennallisen fysiikan esimerkkejä avoimesta tutkimuksesta Esa Räsänen Fysiikan laitos, Tampereen teknillinen yliopisto

Rinnakkaisohjelmistot. Liisa Marttinen Tietojenkäsittelytieteen laitos Helsingin yliopisto Kevät 2004

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

MagiCAD Toimintaympäristö ja yhteensopivuus MagiCAD AutoCADille ja MagiCAD Revitille

Suomen avoimien tietojärjestelmien keskus COSS ry

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Open Source -ohjelmien perusteet

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

LINUX-HARJOITUS, MYSQL

Ohjelmoinnin perusteet Y Python

Algoritmit 1. Luento 3 Ti Timo Männikkö

TK Palvelinympäristö

Innovative and responsible public procurement Urban Agenda kumppanuusryhmä. public-procurement

MagiCAD 2020 Toimintaympäristö ja yhteensopivuus. MagiCAD Revitille ja AutoCADille

Monitorit. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5

Monitorit. Tavoite. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5. Minimoi virhemahdollisuuksia

Ohjelmoinnin peruskurssien laaja oppimäärä

server "Ismo" $ uname -a Linux ismo #1 SMP Thu Sep 16 19:35:51 UTC 2010 i686 GNU/Linux $ cat /etc/issue Debian GNU/Linux 5.

Prosessi perinteisesti

Stallings, Luku 4.1. KJ-I I S2005 / Tiina Niklander, kalvot Auvo HäkkinenH

BDD (behavior-driven development) suunnittelumenetelmän käyttö open source projektissa, case: SpecFlow/.NET.

Käytettävyys ja käyttäjätutkimus. Yhteisöt ja kommunikaatiosuunnittelu 2012 / Tero Köpsi

5. Luento: Rinnakkaisuus ja jako prosesseihin (+ lyhyesti reaaliajasta) Arto Salminen,

Algoritmit 2. Luento 13 Ti Timo Männikkö

PAINEILMALETKUKELA-AUTOMAATTI AUTOMATIC AIR HOSE REEL

sivu 1 SURFCAM V5 JÄRJESTELMÄN VAATIMUKSET

Tietorakenteet ja algoritmit

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Clojure, funktionaalinen Lisp murre

Ongelma(t): Mihin perustuu tietokoneiden suorituskyky ja sen jatkuva kasvu? Mitkä tekijät rajoittavat suorituskyvyn parantamista ja mitkä niistä ovat

Transkriptio:

Intel Threading Building Blocks Markku Vajaranta Esko Pekkarinen

TBB Pähkinänkuoressa C++ luokkamallinen rinnakkaisuus Abstrahoi rinnakkaisuutta korkean tason tehtävät (tasks) ja niiden skedulointi suuri määrä tehtäviä suhteessa säikeisiin Kaupallinen ja avoin versio saatavilla uusi lisenssi $299, lisenssin uusinta $120

Intel lupaa Intel Threading Building Blocks (Intel TBB) is a library that supports scalable parallel programming using standard ISO C++ code. It does not require special languages or compilers. It is designed to promote scalable data parallel programming. Additionally, it fully supports nested parallelism, so you can build larger parallel components from smaller parallel components. To use the library, you specify tasks, not threads, and let the library map tasks onto threads in an efficient manner. The net result is that Intel Threading Building Blocks enables you to specify parallelism far more conveniently than using raw threads, and at the same time can improve performance.

Vaatimuksia Intelin CPU: Vähintään: Intel(R) Pentium(R) 4 Suositus: Intel(R) Core(TM) 2 Duo processor tai Intel(R) Xeon(R) processor SSE2, SSE3, SSSE3 parantavat suorituskykyä Käyttöjärjestelmät: Windows: 7, Vista, Xp Linux OS X: 10.6.7 tai uudempi Release notes v. 4.0

Kääntäjä Tukee yleisimpiä kääntäjiä: Intel C++ Composer XE 2011 Intel C++ Compiler 11.1 Microsoft Visual C++ 8.0 Linux: gcc 3.4 OS X gcc 4.0.1 Xcode tool suite 3.2.5 Käännökseen otettava mukaan tbb kirjasto, joka on saatavilla Intelin sivuilta esim. g++ -O3 -o software source.cc -ltbb

Valmiita menetelmiä Silmukoiden rinnakkaistaminen parallel_for parallel_do Rinnakkain käsiteltävät säiliöt Hajautustaulu: concurrent_hash_map<t> Vektori: concurrent_vector<t> Jono: concurrent_queue<t> Poissulkeminen Lukko ja semafori Atomiset muuttujat, atomic<t> Muistin varaus scalable_allocator<t> cache_aligned_allocator<t> Tehtävät Liukuhihnoitus

Tehtävät Tyypillisesti pieniä yksittäisiä rutiineja Huomattavasti nopeampia käynnistää ja tuhota kuin säikeet Linux: 18x Windows: yli 100x Rinnakkaisuuden toteutus, kun valmiita rakenteita ei voida käyttää Luokka task execute(): tehtävän suoritus, paluuarvona osoitin seuraavaksi suoritettavaan tehtävään tai NULL spawn(task &child): siirtää tehtävän child odottamaan pääsyä suoritukseen spawn_and_wait_for_all(task &child): siirtää tehtävän child odottamaan pääsyä suoritukseen ja odottaa lapsitehtävien lopettamista recycle-funktiot: tehtävän uudelleensuoritus

Tehtävien skedulointi Epäreilu tehtävien skedulointi Kuorman tasaus jakamalla tehtäviä säikeille Säikeen suoritusjärjestys Syvyys-ensin suoritus Leveys-ensin varkaus 1. Edellisen tehtävän suorituksen palauttama tehtävä 2. Oman jonon alin (uusin) tehtävä 3. Satunnaisen jonon ylin (vanhin) tehtävä Task Y 3 1 Task X spawn() Task B 2 Task Z Task A Thread 1 Thread 2 Top (oldest) 2 1 Bottom (newest)

Esimerkki: Helppo liukuhihnoitus 1/2 Verkkoreitittimen simulointi - Tiedostosta data sisään, Bandwidth management, NAT, IP routing - IP paketit toisistaan riippumattomia -> tbb::paralellel_pipeline

Esimerkki: Helppo liukuhihnoitus 2/2 Teoreettinen suorituskyvyn parannus: 24x -> ~7.2sec suoritusaika Todellinen: ~19x -> 9.094sec -http://software.intel.com/en-us/articles/network-router-emulator/

Testiympäristö Debian GNU/Linux Intel Core2Duo E6550 @2.33GHz, SSSE3 gcc 4.4.5 export CPLUS_INCLUDE_PATH=/home/username/tbb/include/ Paketti suoraan Intelin sivuilta, tbb40_233oss_lin.tgz edit bin/tbbvars.sh export TBBROOT=/home/username/tbb/include/tbb source tbbvars.sh intel64

Piin likiarvon laskeminen mpci (ei-säikeistetty) mcpi_omp (OpenMP) mcpi_tbb (TBB) Suoritusaika (s) 18,53 9,29 (-49,9%) 9,27 (-50,0%) Koodia (riviä) 34 36 67 (+76,5%) Esimerkkiajo: 500 000 000 näytepistettä OpenMP: tarvitaan kaksi #pragma-riviä TBB: tarvitaan SumMCpi_Parallel-luokka

Alkulukujen laskeminen 1/2 Eratostheneen seula on algoritmi kaikkien alkulukujen, jotka ovat pienempiä kuin n, löytämiseksi 1. Kirjoitetaan lista kaikista luonnollisista luvuista 2-n 2. Poistetaan listasta kaikki luvun 2 monikerrat (4, 6, 8 jne.). 3. Listan seuraava jäljellä oleva luku q (=3) on alkuluku. 4. Poistetaan listasta kaikki ne luvun q monikerrat, jotka ovat suurempia kuin q (6,9,12 jne.) 5. Toistetaan vaiheita 3 ja 4, kunnes listan seuraava jäljellä oleva luku on suurempi kuin listan suurimman luvun n neliöjuuri. 6. Lopulta listassa on jäljellä vain alkulukuja. Tehokkain tapa löytää pienet alkuluvut (alle 10 000 000) http://fi.wikipedia.org/wiki/tiedosto:new_animation_sieve_of_erat osthenes.gif

Alkulukujen laskeminen 2/2 Toteutuksesta: Lukujen listana concurrent_vector<bool>, jossa n alkiota Aloittetaan pienimmästä alkuluvusta q=2 q:n monikerrat merkitään yhdistetyksi luvuksi (ei-alkuluku) rinnakkain parallel_for:in avulla Etsitään seuraava alkuluku, joka on suurempi kuin q ja pienempi kuin n. Toistetaan edellinen. Lopulta vektorissa on jäljellä true kaikkien alkulukujen kohdalla Rinnakkainen toteutus nopeampi yli 200 000 alkiolla 2 4 6 8 15 16 18 20 29 30 32 34 3 9 12 15 31 32 33 35 60 63 65 68

Joitakin käyttökohteita Unreal 3 engine Autodesk Maya 3D (plugin) Dreamworks animation säikeiden muistinvarauksen nopeuttaminen: tbb_malloc