O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Multicore-Software

Book Description

  • Solides Grundwissens über parallele Programmierung- Führt gut lesbar durch alle praxisrelevanten Grundlagen. - Kompakt und strukturiert aufbereiteter Leitfaden für den produktiven Einsatz bei der Implementierung von Software für Multicore-Rechner.

Table of Contents

  1. Cover
  2. Titel
  3. Impressum
  4. Vorwort
  5. Inhaltsverzeichnis
  6. I Grundlagen der parallelen Programmierung
    1. 1 Einführung
      1. 1.1 Paradigmenwechsel in der Softwareentwicklung
      2. 1.2 Anwendungsbereiche
      3. 1.3 Parallelität in der Hardware
        1. 1.3.1 Prozessorarchitektur
        2. 1.3.2 Multicore-Prozessoren und Multiprozessorsysteme
      4. 1.4 Parallelität in der Software
        1. 1.4.1 Prozesse und Threads
        2. 1.4.2 Virtualisierung
        3. 1.4.3 Parallelisierende Compiler
        4. 1.4.4 Parallele Bibliotheken
        5. 1.4.5 Amdahl’sches Gesetz
    2. 2 Threads
      1. 2.1 Arbeiten mit Threads
        1. 2.1.1 Erzeugung und Beendigung
        2. 2.1.2 Datenaustausch
        3. 2.1.3 Threadpools
      2. 2.2 Scheduling
        1. 2.2.1 Lastverteilung
        2. 2.2.2 Affinitäten und Prioritäten
      3. 2.3 Speicherzugriff
        1. 2.3.1 Speichermodelle
        2. 2.3.2 Speicherhierarchie
    3. 3 Synchronisation
      1. 3.1 Konflikte
        1. 3.1.1 Entstehung
        2. 3.1.2 Kritische Abschnitte
      2. 3.2 Synchronisationsmechanismen
        1. 3.2.1 Mutexe
        2. 3.2.2 Scoped Locking
        3. 3.2.3 Monitore
        4. 3.2.4 Lese-/Schreibsperren
        5. 3.2.5 Semaphore
        6. 3.2.6 Bedingungsvariablen
        7. 3.2.7 Barrieren
        8. 3.2.8 Einmalige Ausführung
        9. 3.2.9 Atomare Operationen
        10. 3.2.10 Spinlocks
      3. 3.3 Fallstricke und Richtlinien
        1. 3.3.1 Konflikterkennung
        2. 3.3.2 Verklemmungen
        3. 3.3.3 Nichtdeterminismus
        4. 3.3.4 Fairness
        5. 3.3.5 Skalierbarkeit
        6. 3.3.6 Threadsicherheit und Wiedereintrittsfähigkeit
        7. 3.3.7 Schnittstellenentwurf
    4. 4 Task- und Datenparallelität
      1. 4.1 Taskparallelität
        1. 4.1.1 Erzeugung und Synchronisation von Tasks
        2. 4.1.2 Parallelisierung rekursiver Algorithmen
        3. 4.1.3 Taskgruppen
        4. 4.1.4 Spekulation
        5. 4.1.5 Implementierung eines Task-Schedulers
        6. 4.1.6 Programmierrichtlinien
      2. 4.2 Datenparallelität
        1. 4.2.1 Schleifen ohne Datenabhängigkeiten
        2. 4.2.2 Reduktionen
        3. 4.2.3 Präfixberechnungen
        4. 4.2.4 Partitionierung und Abbildung
    5. 5 Datenstrukturen
      1. 5.1 Threadsicherer Zugriff
        1. 5.1.1 Grobgranulare Synchronisation
        2. 5.1.2 Feingranulare Synchronisation
        3. 5.1.3 Optimistische Synchronisation
        4. 5.1.4 Nichtblockierende Synchronisation
        5. 5.1.5 Weitere Optimierungen
      2. 5.2 Auswahl der richtigen Datenstruktur
        1. 5.2.1 Kriterien
        2. 5.2.2 Listen
        3. 5.2.3 Vektoren
        4. 5.2.4 Assoziative Felder
        5. 5.2.5 Warteschlangen und Stacks
        6. 5.2.6 Multimengen
    6. 6 Entwurfsmuster
      1. 6.1 Zugriff auf gemeinsame Daten
        1. 6.1.1 Grundlegende Synchronisationsmuster
        2. 6.1.2 Threadlokaler Speicher
        3. 6.1.3 Futures
        4. 6.1.4 Synchronisationsproxy
        5. 6.1.5 Active Object
      2. 6.2 Zerlegung in parallel bearbeitbare Teilprobleme
        1. 6.2.1 Grundlegende Zerlegungsmuster
        2. 6.2.2 Master-Slave
        3. 6.2.3 Erzeuger-Verbraucher
        4. 6.2.4 Aktoren
        5. 6.2.5 Reihenfolgebewahrender Threadpool
      3. 6.3 Fließbandverarbeitung
        1. 6.3.1 Pipelines
        2. 6.3.2 Pipelines mit parallelen Stufen
        3. 6.3.3 Parallele Pipelines
    7. 7 Architektur paralleler Software
      1. 7.1 Entwurf paralleler Algorithmen
      2. 7.2 Entwurf paralleler Architekturen
  7. II Sprachen und Bibliotheken
    1. 8 Threads und Synchronisation in C/C++
      1. 8.1 POSIX-Threads
        1. 8.1.1 Threads
        2. 8.1.2 Synchronisationsmechanismen
        3. 8.1.3 Threadlokaler Speicher und Speicherallokation
      2. 8.2 Windows-Threads
        1. 8.2.1 Threads
        2. 8.2.2 Synchronisationsmechanismen
        3. 8.2.3 Threadlokaler Speicher und Speicherallokation
        4. 8.2.4 Threadpools
      3. 8.3 C++11
        1. 8.3.1 Lambda-Funktionen
        2. 8.3.2 Threads
        3. 8.3.3 Synchronisationsmechanismen
        4. 8.3.4 Threadlokaler Speicher und Speicherallokation
        5. 8.3.5 Speichermodell
    2. 9 OpenMP
      1. 9.1 Threads
        1. 9.1.1 Parallele Bereiche
        2. 9.1.2 Arbeitsteilung
        3. 9.1.3 Speicherzugriff
        4. 9.1.4 Threadlokaler Speicher
      2. 9.2 Synchronisationsmechanismen
        1. 9.2.1 Kritische Abschnitte
        2. 9.2.2 Mutexe
        3. 9.2.3 Barrieren
        4. 9.2.4 Einmalige Ausführung
        5. 9.2.5 Atomare Operationen
      3. 9.3 Taskparallelität
        1. 9.3.1 Parallelisierung rekursiver Algorithmen
        2. 9.3.2 Variablenzugriff
        3. 9.3.3 Suspendierung
      4. 9.4 Datenparallelität
        1. 9.4.1 Schleifen ohne Datenabhängigkeiten
        2. 9.4.2 Reduktionen
        3. 9.4.3 Partitionierung und Abbildung
      5. 9.5 Speichermodell
    3. 10 Threading Building Blocks
      1. 10.1 Synchronisationsmechanismen
        1. 10.1.1 Sperren
        2. 10.1.2 Atomare Operationen
      2. 10.2 Taskparallelität
        1. 10.2.1 Parallele Funktionsaufrufe
        2. 10.2.2 Taskgruppen
        3. 10.2.3 Task Scheduler
      3. 10.3 Datenparallelität
        1. 10.3.1 Schleifen ohne Datenabhängigkeiten
        2. 10.3.2 Reduktionen
        3. 10.3.3 Präfixberechnungen
      4. 10.4 Datenstrukturen
        1. 10.4.1 Assoziative Felder und Mengen
        2. 10.4.2 Warteschlangen
        3. 10.4.3 Vektoren
      5. 10.5 Algorithmen und Entwurfsmuster
        1. 10.5.1 Sortieren
        2. 10.5.2 Fließbandverarbeitung
        3. 10.5.3 Flussgraphen
      6. 10.6 Threadlokaler Speicher
      7. 10.7 Speicherallokation
      8. 10.8 Ausnahmen und Abbruch
    4. 11 Parallele Programmierung mit Java
      1. 11.1 Threads
        1. 11.1.1 Threaderzeugung
        2. 11.1.2 Threadpools
        3. 11.1.3 Threadlokaler Speicher
      2. 11.2 Synchronisationsmechanismen
        1. 11.2.1 Sperren
        2. 11.2.2 Spezielle Synchronisationsmechanismen
        3. 11.2.3 Atomare Operationen
      3. 11.3 Taskparallelität
        1. 11.3.1 Tasks und Futures
        2. 11.3.2 Starten von Tasks
        3. 11.3.3 Rekursive Tasks
        4. 11.3.4 Blockierende Operationen in Tasks
      4. 11.4 Datenparallelität
      5. 11.5 Datenstrukturen
      6. 11.6 Speichermodell
    5. 12 Parallele Programmierung mit .NET
      1. 12.1 Threads
        1. 12.1.1 Threaderzeugung
        2. 12.1.2 Threadpools
        3. 12.1.3 Threadlokaler Speicher
      2. 12.2 Synchronisationsmechanismen
        1. 12.2.1 Sperren
        2. 12.2.2 Spezielle Synchronisationsmechanismen
        3. 12.2.3 Atomare Operationen
        4. 12.2.4 Einmalige Ausführung
      3. 12.3 Taskparallelität
        1. 12.3.1 Tasks und Futures
        2. 12.3.2 Fortsetzungstasks
      4. 12.4 Datenparallelität
        1. 12.4.1 Schleifen ohne Datenabhängigkeiten
        2. 12.4.2 Parallele Aggregation
        3. 12.4.3 PLINQ
      5. 12.5 Datenstrukturen
      6. 12.6 Ausnahmen und Abbruch
      7. 12.7 Speichermodell
    6. 13 Blick über den Tellerrand
      1. 13.1 Funktionale Sprachen
      2. 13.2 Aktorbasierte Programmierung
      3. 13.3 Transaktionsbasierter Speicher
  8. Literaturverzeichnis
  9. Index