Das Problem
Ich versuche zu verstehen, wie Repa funktioniert und ich habe mit einem "Unschärfe" -Beispiel gearbeitet Code aus dem Paket Repa-Beispiele . Der Code verwendet stencil2 Quasi Quote
:
Was ist einfach TemplateHaskell
Snippet, das eine Funktion erzeugt:
Es ist okay, TH zu verwenden, aber ich würde gerne die Coefs in einem Repa Array behalten, also habe ich den Code geändert, um stattdessen ein Repa Array zu verwenden, aber mein Code arbeitet im Vergleich zum Original zwei Mal langsamer.
Einige ausgefallene Notizen
Ich habe bemerkt, dass Repa-Autoren hartkodierte 7 x 7-Matrix von Werten verwenden, um Koeffizienten zu erhalten: Ссылка (siehe: template7x7)
Fragen
Der Code
Original Unschärfe-Funktion:
%Vor%meine Unschärfe-Funktion:
%Vor%Der Rest des Codes:
%Vor% Kompilieren Sie mit: ghc -O2 -threaded -fllvm -fforce-recomp Main.hs -ddump-splices
Das Lesen von Faltungs-Koeffizienten aus dem Array konnte theoretisch nicht so schnell sein wie das Löten von Konstanten direkt in dem kompilierten Code, weil der letztere Ansatz nichts auf Maschinenebene kostet.
Nein, GHC kann beliebig große statische Schablonen einkochen. Siehe meine Implementierung von statischen Faltungen mit < a href="http://hackage.haskell.org/package/fixed-vector"> fixed-vector
s von lambdas:
Tags und Links haskell performance image-processing repa