INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

FFT auf mehrere Rechenkerne optimieren



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

02.02.2009, 17:37 (Dieser Beitrag wurde zuletzt bearbeitet: 03.02.2009 23:22 von jg.)
Beitrag #1

pimbolie1979 Offline
LVF-Grünschnabel
*


Beiträge: 31
Registriert seit: Jun 2005

2010
2006
kA

23xxx
Deutschland
FFT auf mehrere Rechenkerne optimieren
Hallo @ all.

Ich habe ein großes zweidimensonales Array mit 4096x1000 Punkten. Daraus möchte ich die FFT berechnen. Die FFT wird aus den 4096 Punkten berechnet und das ganze dann 1000 mal. Ich habe mal ein einfaches Beispiel geschrieben. Dort erzeuge ich mir ein Testarray und lasse es von der FFT-Funktion berechnen. Wenn man auf den Parallelbutton klick, dann wird das Array in 2 gleich große Teile geteil und die FFT auf 2 CPU-Kernen berechnet, jedoch ist meien Version alles andere als super in der Performance. Ich messe die Zeit für die Berechnung der FFT mit 1 CPU-Kern und mit 2 CPU Kerne, die parallel arbeiten.

Mache ich etwas bei der Optimierung falsch?
Lv86_img


Angehängte Datei(en)
Sonstige .vi  FFT_Performance_Version_1.1.vi (Größe: 63,57 KB / Downloads: 240)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2009, 17:49 (Dieser Beitrag wurde zuletzt bearbeitet: 03.02.2009 23:22 von jg.)
Beitrag #2

pimbolie1979 Offline
LVF-Grünschnabel
*


Beiträge: 31
Registriert seit: Jun 2005

2010
2006
kA

23xxx
Deutschland
FFT auf mehrere Rechenkerne optimieren
Ich habe noch eine weiter Version erstellt, die ich für besser halte, jedoch weiß ich nicht wie ich am besten das Array wieder zusammenfügen soll. Vielleicht kann mir da ja jemand einen Rat geben. Diese scheint aber besser zu laufen als die andere Version. Vielleicht liegt dies jedoch daran, das das Ausgabearray nur so klein ist.
Lv86_img


Angehängte Datei(en)
Sonstige .vi  FFT_Performance_Test_Version_2.vi (Größe: 52,56 KB / Downloads: 208)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2009, 18:09
Beitrag #3

pimbolie1979 Offline
LVF-Grünschnabel
*


Beiträge: 31
Registriert seit: Jun 2005

2010
2006
kA

23xxx
Deutschland
FFT auf mehrere Rechenkerne optimieren
Die Vis sind mit LabVIEW 8.6 erzeugt. Ich kann diese bei bedarf auch für ältere Versionen zu Verfügung stellen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2009, 19:28 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2009 19:28 von Y-P.)
Beitrag #4

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
FFT auf mehrere Rechenkerne optimieren
Hier ist's mal ohne Express-VIs. Ist mir gleich angenehmer. Wink


Sonstige .vi  FFT_Performance_Test_Version_NEU.vi (Größe: 18,63 KB / Downloads: 225)

Lv86_img

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2009, 20:32 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2009 20:42 von jg.)
Beitrag #5

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
FFT auf mehrere Rechenkerne optimieren
' schrieb:Hallo @ all.

Ich habe ein großes zweidimensonales Array mit 4096x1000 Punkten. Daraus möchte ich die FFT berechnen. Die FFT wird aus den 4096 Punkten berechnet und das ganze dann 1000 mal. Ich habe mal ein einfaches Beispiel geschrieben. Dort erzeuge ich mir ein Testarray und lasse es von der FFT-Funktion berechnen. Wenn man auf den Parallelbutton klick, dann wird das Array in 2 gleich große Teile geteil und die FFT auf 2 CPU-Kernen berechnet, jedoch ist meien Version alles andere als super in der Performance. Ich messe die Zeit für die Berechnung der FFT mit 1 CPU-Kern und mit 2 CPU Kerne, die parallel arbeiten.

Mache ich etwas bei der Optimierung falsch?
Ich weiss nicht, sieht doch gut aus.

Ich messe auf meinen Athlon 64 5050e (also ein relativer aktueller Dual-Core Prozessor) bei "nicht-parallerer" Verarbeitung eine durchschnittliche Durchlaufzeit von etwas über 300 ms, bei paraller Verarbeitung dagegen knapp über 200 ms. Insgesamt also 50% schneller, das ist doch gut! Bedenke, dass du auch einiges an Zeit für das Aufteilen und vereinen der Arrays draufgeht.

Übrigens, wenn du die Abarbeitung eines Programmteils auf einem der Prozessoren erzwingen willst, dann musst du mit Timed-Sequences oder Timed-Loops arbeiten:

Könnte so aussehen:
   

Übrigens, dein 2. Bsp. zeigt bei mir keinen Performance-Gewinn.

Gruß, Jens

EDIT: Die Build-Array Fkt. scheint besser zu sein als die von dir verwendete Insert-Into-Array

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.02.2009, 11:49
Beitrag #6

pimbolie1979 Offline
LVF-Grünschnabel
*


Beiträge: 31
Registriert seit: Jun 2005

2010
2006
kA

23xxx
Deutschland
FFT auf mehrere Rechenkerne optimieren
Bei Version 1.1 habe ich ohne parallele Verarbeitung so ca. 230ms Rechenzeit. Mit 2 Kernen so ca. 210ms. Dies ist ein sehr schlechtes Ergebnis.

Bei der Version 2.0 habe ich so mit 1. CPU Kern 200ms und mit 2 Kernen 110ms. Jedoch habe ich nur 84% Systemauslastung. Es geht also noch Zeit verloren. Ich werde mal die Frequenzgesteuerten Schleifen nehmen.


Noch ganz wichtig.

Kann mir vielleicht einer einen Rat geben, wie ich bei Version 2.0 das Array wieder in die Ausgangsform bekommen. Es muss wieder zum Schluss ein zweidimensionales Array rauskommen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
03.02.2009, 12:07
Beitrag #7

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
FFT auf mehrere Rechenkerne optimieren
Rückfrage (ausser der Reihe): Wieso teilst du eigentlich bei Version 2.0 auf 4 Teile auf? Hast du einen QuadCore?
Außerdem hast du bei Version 2.0 "nur" 1000x2048 Arrays, Absicht, Versehen?

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.02.2009, 12:12
Beitrag #8

pimbolie1979 Offline
LVF-Grünschnabel
*


Beiträge: 31
Registriert seit: Jun 2005

2010
2006
kA

23xxx
Deutschland
FFT auf mehrere Rechenkerne optimieren
Ich bekomme heute meinen Quadcore. Das mit der Arraygröße war ein versehen. Die kann man einfach von 2049 auf 4096 erhöhen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.02.2009, 16:24
Beitrag #9

pimbolie1979 Offline
LVF-Grünschnabel
*


Beiträge: 31
Registriert seit: Jun 2005

2010
2006
kA

23xxx
Deutschland
FFT auf mehrere Rechenkerne optimieren
So Quadecore ist zusammengebaut nur noch alles installieren. Dann kann ich das ganze mit dem neuen System ausprobieren.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.02.2009, 21:46
Beitrag #10

joedoe1979 Offline
LVF-Grünschnabel
*


Beiträge: 40
Registriert seit: Sep 2006

8.5.1
2005
de

23654
Deutschland
FFT auf mehrere Rechenkerne optimieren
Die Version 2 läuft unter dem neuen i-7 920 (neuer Quadcore von Intel mit Tripple Channel DDR3 Speicher) nicht wirklich gut. Die Gesamtauslastung ist so bei 20%. Dies heist so wie ich das Programm erstellt habe werden die 4 Kerne (8 Threads) nicht wirklich belastet. Deshalb muss ich es neu programmieren. Als erstes werde ich es mal mit den zeitgesteuerten sequenzen probieren.

Was muss ich denn bei diesen Sequenzen beachten? Was für eine Timing muss ich da angeben?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  3 Variablen optimieren Blubber 2 3.122 18.12.2014 11:40
Letzter Beitrag: Blubber
  Optimieren ichnur 9 6.478 20.12.2007 12:40
Letzter Beitrag: jeffrey
  Frontpanel optimieren Physikus 2 3.757 19.12.2007 17:59
Letzter Beitrag: Physikus
  Quellcode optimieren eg 4 4.232 14.09.2006 19:29
Letzter Beitrag: cb
  Programm optimieren/CPU 100% s.tante 7 5.356 16.02.2006 16:21
Letzter Beitrag: s.tante
  Strukturen: komplexes programm optimieren ladwest 28 16.598 17.03.2005 14:06
Letzter Beitrag: unaimed

Gehe zu: