Specialeforsvar: Fundamentet for et fleksibelt container bibliotek



Relaterede dokumenter
Abstrakte datatyper C#-version

Programmering i C. Lektion december 2008

A Profile for Safety Critical Java

Online kursus: C++ Programming

Algorithms & Architectures II

17 Søgning og Søgetræer.

Skriftlig eksamen i Datalogi

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Ugeseddel 4 1. marts - 8. marts

DM507 Algoritmer og datastrukturer

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

DATALOGI 0GB. Skriftlig eksamen tirsdag den 6. januar 2004

DM507 Algoritmer og datastrukturer

Sortering. Eksempel: De n tal i sorteret orden

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

DM502. Peter Schneider-Kamp

Sortering. Eksempel: De n tal i sorteret orden

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Systemkald DM Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/ Afleveret af: Jacob Christiansen,

Projekt arbejde til kurset Advanced Models and Programs, SASP-AMP 2008 Poul Brønnum, IT Universitetet i København, Maj Indholdsfortegnelse

Speciale. Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP)

Singleton pattern i Java

High-Performance Data Mining med SAS Enterprise Miner 14.1

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Sådan kommer du nemt i gang med Joomla!

DM507 Algoritmer og datastrukturer

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

EA3 eller EA Cube rammeværktøjet fremstilles visuelt som en 3-dimensionel terning:

MapBasic &.NET interaktion. MapBasic.NET. Jakob Lanstorp IT konsulent COWI. Odense 23. Juni jun 2011 MapBasic &.

Danmarks Tekniske Universitet

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Asymptotisk analyse af algoritmers køretider

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Programmering og Problemløsning, 2017

Videregående Programmering for Diplom-E Noter

Programmering og Problemløsning, 2017

DM507 Algoritmer og datastrukturer

STS Designdokument. STS Designdokument

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer

The ADSL-optimizer: Korrekt trafikstyring på ADSL linier

DM507 Algoritmer og datastrukturer

Specifikation Abstrakt OO OS-API Rev Specifikation. Abstrakt, objektorienteret operativsystem-api

DM507 Algoritmer og datastrukturer

Introduktion til design patterns.

4 Basal Objekt-orienteret Programmering I.

Rekursion og dynamisk programmering

Transkript:

Specialeforsvar: Fundamentet for et fleksibelt container bibliotek Foundations of an adaptable container library Bo Simonsen Datalogisk Institut, Københavns Universitet Denne præsentation, afhandlingen, samt errata kan hentes på http://bo.geekworld.dk/master.html. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (1)

Overblik Specialet omhandler arkitekturen og designet af CPH STL, samt løsninger af problemer i forbindelse med brug af CPH STL. STL er et generisk program bibliotek for C++ der tilbyder algoritmiske byggeklodser. STL tilbyder en implementation af en data struktur for hver container. CPH STL er en udvidet udgave af STL der tilbyder forskellige implementationer af data strukturer med forskellige karakteriska blandt andet: ydelse, plads effektivitet og sikkerhed. Specialet består af tre artikler, hvoraf to af dem er skrevet sammen med Jyrki Katajainen. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (2)

STL Generiske algorithmer sort, find,.. Iteratorer Containers set, list, vector, deque.. En container er en class template der kan opdateres dynamisk ved hjælp af de funktioner der stilles tilrådighed af containeren. En generisk algoritme er en function template der udfører operationer på en container eller en sekvens. En iterator er en type der gør det muligt for de generiske algoritmer at tilgå de data der er gemt i en container. Ordning og hukommelses allokering er afkoblet og placeret i henholdsvis en comparator og allocator. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (3)

Arkitekturen i CPH STL Decoratorer Dekorations lag cphstl::filter view cphstl::filter iterator Container grænseflader Iteratorer Abstraktions lag leda::dictionary Standard kompatibel map Fleksibelt map cphstl::node iterator Realizatorer Search-tree framework red-black tree Balancers Implementations lag AVL tree red-black tree 1. generation Encapsulatorer 2. generation AVL node bit-packed AVL node red-black tree node bit-packed RBT node 3. generation c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (4)

Case study: vector En vector kan indeholde en sekvens af elementer der kan tilgås via iteratorer eller indices i konstant tid. Jvf. C++ standarden er den eneste mulige implementation et dynamisk array da elemeterne skal opbevares i et sammenhængende hukommelses segment. alloker og kopier alloker og kopier v 1 v 1 v 2 v 1 v 2 v 3 v 4 Vores implementationer er ikke altid standard kompatible. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (5)

Problemer og mulige udvidelser Referentiel Integritet: Uønsket adfærd i nogle tilfælde: insert(++begin(), v 2 ) 0 1 2 0 1 2 v 1 v 3 v 1 v 2 v 3 Stærk undtagelses sikkerhed: Uønsket adfærd i nogle tilfælde: insert(++begin(), v 2 ) 0 1 2 0 1 2 v 1 v 3 v 1 v 3 Copy constructoren for værdien kaster en exception. Rollback ikke muligt.? Pladseffektivitet og værstefalds tidskompleksitet. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (6)

Vector framework Framework Faktoriserer container operationer. Kernel Håndterer hukommelses segmenter. Tilbyder grow, shrink og access. Surrogate pointer i Encapsulator Indkapsler en værdi i et lille objekt. Dette objekt kan enten være allokeret eller gemt direkte i kernen. v i Surrogate Tilbyder en proxy for kernen der sikre at swap ikke invaliderer iteratorer. Iterator c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (7)

Encapsulatorer Elementer opbevaret direkte direct encapsulator v Elementer opbevaret indirekte indirect encapsulator Elementer opbevaret dobbelt indirekte doubly indirect encapsulator Surrogate i Surrogate i Surrogate i v i Encapsulator i Encapsulator i Iterator v Iterator Iterator - Stærk undtagelses sikkerhed - Referentiel Integritet (+) Stærk undtagelses sikkerhed + Referentiel Integritet + Stærk undtagelses sikkerhed + Referentiel Integritet c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (8)

Kerner Alle kerner: indsættelse samt sletning i fronten og midten i O(n) værstefalds tid (n = # elementer). Dynamisk array: push_back og pop_back i amortiseret O(1) tid. Plads forbrug 6n+O(1). Hashed array tree: push_back og pop_back i amortiseret O(1) tid. Plads forbrug n + O( n). Levelwise-allocated pile: push_back og pop_back i O(1) værstefalds tid. Plads forbrug 2n + O(lg n). 0 1 2 0 4 8 12 1 5 9 13 3 4 5 6 2 3 6 7 10 11 14 15 7 8 9 10 11 12 13 14 c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (9)

Hvorfor component framework? Fleksibilitet: vector value type int float bool vector framework kernel encapsulator iterator dynamic array direct encapsulator rank iterator hashed array tree indirect encapsulator proxy iterator Vedligeholdelse: En container er sammensat af genbrugelige komponenter, dette giver os en høj grad af kode genbrug. Fair benchmarking: Idéelt vil målingsresultaterne afspejle effektiviteten af data strukturene og ikke programmørenes dygtighed. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (10)

Effektivitet Execution time per operation [in nanoseconds] 200 180 160 140 120 100 80 60 40 20 push_back for integer data push back: For i [0, n): v.push back(i) dynamic array, doubly indirect encapsulation levelwise allocated pile, indirect encapsulation hashed array tree, indirect encapsulation dynamic array, indirect encapsulation levelwise allocated pile, direct encapsulation dynamic array, direct encapsulation hashed array tree, direct encapsulation std::vector 2 17 2 18 2 19 2 20 2 21 2 22 2 23 Number of operations n c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (11)

Fleksibilitet (Adaptability) template argumenter politikker component framework Er C++ kraftigt nok fra brugerens synspunkt? en brugertilpasset komponent c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (12)

Problemer med container deklarationer typedef cphstl::set<int, std::less<int>, std::allocator<int>, cphstl::tree<int, int, cphstl::unnamed::identity<int>, std::less<int>, std::allocator<int>, cphstl::avl_tree_node<int, true>, cphstl::avl_tree_balancer< cphstl::avl_tree_node<int, true> > >, cphstl::node_iterator< cphstl::avl_tree_node<int, true>, false>, cphstl::node_iterator< cphstl::avl_tree_node<int, true>, true> > C; Problemer med typiske deklarationer af containers: Størrelse, læsbarhed, og forståelse. Opstår ved: Det samme template argument gives flere gange, det enkelte template arguments betydning er ikke klart, og default argumenters betydning forsvinder ved overstyring. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (13)

Løsningerne Prædefinerede container klasser, vh.a. templates): nedarvning (eller typedef cphstl::vector cphstl::fast vector cphstl::compact vector cphstl::safe vector Named template arguments: typedef cphstl::set!<v=int, R=cphstl::tree!< N=cphstl::avl_tree_node!<packed=true!>, B=cphstl::avl_tree_balancer!>, J=cphstl::node_iterator!<is_const=true!>, I=cphstl::node_iterator!<is_const=false!>!> C; Template argumenter er globale. For manglende template argumenter benyttes default argumenter. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (14)

Et problem mere: Component mismatch Et scenarie: Encapsulator gives som kernel vector value type int float bool vector framework kernel encapsulator iterator dynamic array direct encapsulator rank iterator hashed array tree indirect encapsulator proxy iterator proxy iterator kan kun bruges for indirect encapsulator og doubly indirect encapsulator Ovenstående konfiguration giver mange ulæselige fejlmeddelser! c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (15)

Løsningerne Prædefinerede relationer: Component families, static assertions ved associative typer. Autogenerede relationer: C++0x concepts (generelt constraint polymorphism), BOOST Concept checking library. C++0x concepts auto concept LessThanComparable < typename T> { bool operator<(t, T); } template <LessThanComparable T> void min(t const& v1, T const& v2); Component families namespace cphstl { NEW_ENCAPSULATOR_FAMILY(proxy) JOIN_ENCAPSULATOR_FAMILY(proxy, doubly_indirect_encapsulator) JOIN_ENCAPSULATOR_FAMILY(proxy, indirect_encapsulator) } IS_ENCAPSULATOR_IN_FAMILY( indirect_encapsulator, proxy) c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (16)

C++0x (C++1x) Language feature C++ C++0x Friend templates Type inference Constraint polymorphism Partial specialization of member function Compile-time reflection Named template arguments Typedef templates Generic encapsulators Inheriting constructors Circular template arguments Static assertions c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (17)

Konklusion Vores arkitektur tilbyder den nødvendige fleksibilitet for realisering af vores ønskede design samt den introducere blot et begrænset performance overhead (i de fleste tilfælde intet). Prisen for stærkere garantier for vector er meget dyr i det cache misses og hukommelses allokeringer er dyre. Elementerne i C++0x giver bedre værktøjer for biblioteks udvikling generelt. C++/C++0x er ikke stærkt nok til at konstruere et fleksibelt program bibliotek med ønsket brugervenlighed. c Performance Engineering Laboratory Specialeforsvar, d. 17 December 2009 (18)