Parallele Hochleistungsarrays für Haskell
Data.Array.Accelerate definiert ein eingebettetes Sprachsystem für Arrayberechnungen für Hochleistungsrechnen in Haskell. Berechnungen auf regulären, mehrdimensionalen Arrays werden in der Form von parametrisierten Kollektivoperationen (wie Maps, Reduzierungen und Permutationen) ausgedrückt. Diese Berechnungen werden online kompiliert und auf einer Vielzahl von Architekturen ausgeführt.
Für weitere Details siehe unsere Papers:
Accelerating Haskell Array Codes with Multicore GPUs Optimising Purely Functional GPU Programs
(slides)
Embedding Foreign Code Type-safe Runtime Code Generation: Accelerate to LLVM
(slides)
(video)
Streaming Irregular Arrays
(video)
Es gibt auch Slides von einigen Präsentationen über Accelerate:
Embedded Languages for High-Performance Computing in Haskell GPGPU Programming in Haskell with Accelerate
(video)
(workshop)
Kapitel 6 des Buches von Simon Marlow
Parallel and Concurrent Programming in Haskell enthält eine didaktische Einführung in Accelerate.
Die Dissertation von Trevor
detailiert den Entwurf und die Implementierung von Vordergrundoptimierungen und CUDA-Backend.
Inhaltsverzeichnis
Ein eingebettetes Sprachsystem für acelerierte Arrayberechnungen Ein einfaches Beispiel Verfügbarkeit Zusätzliche Komponenten Anforderungen Dokumentation Beispiele Wer sind wir? Post- und Kontaktliste Zitieren Sie Accelerate Was fehlt? Ein einfaches Beispiel Lassen Sie uns ein einfaches Beispiel betrachten, wie zum Beispiel das Skalarprodukt zweier Vektoren von Single-Precision-Float-Nummern: dotp :: Acc (Vector Float) -> Acc (Vector Float) -> Acc (Scalar Float) dotp xs ys = fold (+) 0 (zipWith (*) xs ys) Abgesehen vom Typ ist dieser Code fast gleich dem entsprechenden Haskell-Code auf Listen von Floats. Die Typen zeigen an, dass die Berechnung online kompiliert werden kann, um Leistung zu verbessern; zum Beispiel, indem man Data.Array.Accelerate.LLVM.PTX.run auf der Fließkompilierung ausführt, kann man sie direkt auf einem GPU laden.
Verfügbarkeit Paket Accelerate ist verfügbar von:
Hackage: accelerate
- fügen Sie einfach diesen in Ihren cabal-Datei ein GitHub: AccelerateHS/accelerate
- laden Sie die Quelle mit
git clone https://github.com/AccelerateHS/accelerate.git Um die Haskell-Toolkette zu installieren, probieren Sie GHCup .
Zusätzliche Komponenten Die folgenden unterstützten Zusatzkomponenten sind als separate Pakete verfügbar: accelerate-llvm-native : Backend für Multicore-CPUs accelerate-llvm-ptx : Backend für NVIDIA-GPUs mit CUDA-Unterstützung. Erfordert einen GPU mit einer Leistungsfähigkeit von 3.0 oder mehr (siehe die
tabelle auf Wikipedia ) accelerate-examples : Computations-Kerne und -Anwendungen, die den Einsatz von Accelerate zeigen, sowie ein Test-Suite für Regressionsprüfungen (unterstützt Funktionstests und Leistungstests) Umwandlung zwischen verschiedenen Formaten: accelerate-io : Für die direkte Kopie von Daten zwischen raw-Punktern accelerate-io-array : Unveränderliche Arrays accelerate-io-bmp : Unkomprimierte BMP-Bilddateien accelerate-io-bytestring : Kompakte, unveränderliche Binärdaten accelerate-io-cereal : Binäre Serialisierung von Arrays mit
cereal accelerate-io-JuicyPixels : Bilder in verschiedenen Pixelformaten accelerate-io-repa : Eine andere Haskell-Bibliothek für parallele Hochleistungsarrays accelerate-io-serialise : Binäre Serialisierung von Arrays mit
cereal accelerate-io-vector : Effiziente, ein- oder mehrdimensionale Arrays accelerate-fft : Implementierung der schnellen Fourier-Transformation, mit FFI-Verbindungen zu optimierten Implementierungen accelerate-blas : BLAS- und LAPACK-Operationen, mit FFI-Verbindungen zu optimierten Implementierungen accelerate-bignum : Feste Breite-Großzahlenarithmetik colour-accelerate : Farbrepräsentationen in Accelerate (RGB, sRGB, HSV und HSL) containers-accelerate : Hashing-basierte Container-Typen
gloss-accelerate : Generiert
gloss Bilder von Accelerate
gloss-raster-accelerate : Paralleler Raster- und Animationen-Render hashable-accelerate : Eine Klasse für Typen, die in einen Hash-Wert umgewandelt werden können lens-accelerate : Lens-Operatoren für Accelerate-Typen linear-accelerate : Lineare Vektorräume in Accelerate mwc-random-accelerate : Generiert Accelerate-Arrays mit hochwertigen Pseudorandomzahlen
Kommentare (0)
Login or Register to apply