Listing 1 zeigt als Beispiel C++-Code, der Intrinsics nutzt. Bei »v4sf« handelt es sich um einen Vektortyp. Der Compiler (in diesem Fall ein GNUC++-Compiler) erkennt diesen Typ, wenn das Ziel eine geeignete CPU ist, und interpretiert ihn als einen MMX-Vektor bestehend aus vier Gleitkomma-Werten mit einfacher Genauigkeit. Unterstützt die verwendete CPU die MMX-Operationen jedoch nicht, kann der Typ als Klasse dienen, um die betreffende Funktion nachzubilden. Die Zuweisungsoperationen können somit entweder MMX-Instruktionen oder Klassenmitglied-Funktionen sein. Ebenso ist die Intrinsics-Funktion »__builtin_ia32_mulps« entweder ein einzelner MMX-MULPS-Befehl, der die vier Elemente des Vektors mit jenen eines anderen Vektors multipliziert, oder es handelt sich um eine Funktion, Bild 2: Level-1-Cache eines »Pentium 4« die dasselbe leistet. Dieser Code ist sogar auf einen anderen ANSI-C++-Compiler portierbar, in dem die vom ursprünglichen Compiler verwendeten Intrinsics nicht berücksichtigt sind.
v4sf a4_0;
v4sf a4_1;
v4sf sample = delays4[n];
v4sf coeff_0 = hImpl4[0];
v4sf coeff_1 = hImpl4[1];
a4_0 = __builtin_ia32_mulps(sample, coeff_0);
a4_1 = __builtin_ia32_mulps(sample, coeff_1);
Listing 1: C++-Code, der Intrinsics nutzt
Tools und Bibliotheken
Profiling-Tools sind besonders wichtig, wenn DSP-Software für eine PC-CPU geschrieben wird – speziell solche, die das Cache-Verhalten beobachten können. Ein gutes Beispiel für die Entwicklung auf Linux-Plattformen ist die »Valgrind Tool Suite«, zu der das Tool »Cachgrind« gehört [1]. Obwohl speziell Cachgrind sehr langsam sein kann (die Software wird von einer virtuellen CPU verarbeitet), stellt es ein überaus mächtiges Werkzeug dar.
Zusätzlich gibt es viele Bibliotheken, welche die Entwicklung einer DSP-Implementierung vereinfachen können. Neben den zahlreichen kommerziellen Bibliotheken sind auch eine ganze Reihe kostenloser Libraries erhältlich. Zwar müssen Entwickler dann darauf achten, die Lizenzbedingungen zu erfüllen, doch das Qualitätsniveau der Bibliotheken ist meist sehr hoch. Erstaunlich effizient sind beispielsweise die FFTW-Bibliotheken [2]. Sie sind für die nichtkommerzielle Nutzung im Rahmen der GPL erhältlich, doch gibt es auch alternative Lizenzen, die andere Nutzungsbedingungen zulassen. (rh)
Peter Massam
arbeitet als Senior Technical Consultant bei
Plextek
Telefon 00 44/17 99/53 32 00
www.plextek.co.uk
Links
[1] www.valgrind.org
[2] www.fftw.org
Siehe auch:
DSP-Algorithmen effizient implementieren – Teil 1