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 

Berechnung mit CLF-Knoten schneller?



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!

24.01.2008, 14:27 (Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2008 21:24 von jg.)
Beitrag #1

LLEA2 Offline
LVF-Grünschnabel
*


Beiträge: 37
Registriert seit: Jan 2008

8.5
2008
kA

10777
Deutschland
Berechnung mit CLF-Knoten schneller?
Hallo,

in dem Buch "Einführung in LabVIEW" aus dem Hanser Verlag wird ein Beispiel zur Einbindung von C++ Code mit Hilfe eines CLF-Knoten beschrieben...und aufgezeigt, dass die Berechnung einer Reihe mit dem C++ Code schneller geht....aber leider keine Antwort darauf gegeben, warum es denn so ist.

Vielleicht könnt ihr mir erklären, warum es mit dem "Fremdcode" schneller geht...

... (VIs LV 6.1)

http://www.hs-weingarten.de/~georgi/Lehrbu...ReiheOhneCLF.vi

und mit CLF und der dazugehörigen dll-Datei zur Berechnung...

http://www.hs-weingarten.de/~georgi/Lehrbu...-ReiheMitCLF.vi

http://www.hs-weingarten.de/~georgi/Lehrbu...5/src/Reihe.dll

Quellcodeauszug:

#include stdafx.h

....

double WINAPI summieren(long n)
{ double s=0.0;
long=k;
for(k=1;k<=n;k++)
s+=1.0/(k*k);
return (s);
}



thx...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
24.01.2008, 22:05 (Dieser Beitrag wurde zuletzt bearbeitet: 19.02.2009 19:16 von jg.)
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Berechnung mit CLF-Knoten schneller?
Hallo,

aus meiner Sicht mehrere Gründe:

1. Der C-Code berechnet das Produkt k*k bestimmt erst mal mit Integer-Operationen. Im reinen LV-Code wird vor der Quadrierung nach DBL gewandelt. Wenn man das ändert, holt man übrigens ein wenig Geschwindigkeit aus dem Bsp raus:
   

2. Der Vergleich ist etwas unfair. Im Bsp mit DLL liegt die Berechnung ja schon im (puren) Maschinencode vor, und ich gehe mal davon aus, dass bei so einem einfachen Bsp ein C-Compiler bestimmt auch einen guten Code erzeugen kann. In reinen LV-Bsp "schleppst" du halt immer noch die ganze LV-Umgebung mit.

Fazit: Ein fairer Vergleich sollte zwischen 2 Exe-Dateien erfolgen, und das habe ich auch mal schnell gemacht: Und siehe da, beide exe sind praktisch gleich schnell...

Das Archiv enthält die Beiden Exe-Dateien, erstellt mit LV 8.21, es ist also ein Runtime-Engine V8.2 oder 8.21 zur Ausführung erforderlich.

Sonstige .zip  builds.zip (Größe: 98,34 KB / Downloads: 274)


MfG, 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
25.01.2008, 01:30
Beitrag #3

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Berechnung mit CLF-Knoten schneller?
Tu mal einer das Eingabeelement aus der inneren Schleife raus und schau sich dann das ergebnis an: 0.000 Sekunden mit und ohne DLL. Bei einem modernen Prozessor muss man schon 1Mio Durchläufe machen um was zu sehen. Nicht, dass der Overhead wie DLL-Aufruf etc größer ist als die For-Schleife.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.01.2008, 08:43
Beitrag #4

LLEA2 Offline
LVF-Grünschnabel
*


Beiträge: 37
Registriert seit: Jan 2008

8.5
2008
kA

10777
Deutschland
Berechnung mit CLF-Knoten schneller?
alles klar ...danke ...mit den exe-Dateien stelle ich auch (fast) keinen Unterschied mehr fest....das hätten sie ja auch irgendwie mal ins Buch reinschreiben können, da wird groß angekündigt, dass es mit der Einbindung des C++-Codes schneller geht ...aber dann kein weiterer Satz warum oder weshalb....nicht so tragitsch aber schön wäre es gewesen ^^...

mfg
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.01.2008, 10:07 (Dieser Beitrag wurde zuletzt bearbeitet: 25.01.2008 10:10 von rolfk.)
Beitrag #5

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Berechnung mit CLF-Knoten schneller?
' schrieb:alles klar ...danke ...mit den exe-Dateien stelle ich auch (fast) keinen Unterschied mehr fest....das hätten sie ja auch irgendwie mal ins Buch reinschreiben können, da wird groß angekündigt, dass es mit der Einbindung des C++-Codes schneller geht ...aber dann kein weiterer Satz warum oder weshalb....nicht so tragitsch aber schön wäre es gewesen ^^...

mfg

LabVIEW selber ist auch ein Compiler. Das was Du im Diagramm zeichnest wird direkt in Maschinencode umgesetzt und dann ausgeführt. In diesem Licht sind die meisten Claims dass LabVIEW prinzipiel langsamer ist als C absolut nicht wahr.
Aber in C kannst Du denn Compiler anweisen um hoch-optimalisierten Code zu erzeugen, LabVIEW optimalisiert auch aber hat durch die Datenfluss-Programmierung ganz andere Bedürfnisse in gewissen Gebieten. Ein C Compiler kann ganz einfach davon ausgehen dass der Code immer linear abläuft und dass wenn etwas parallel ausgeführt werden kann der C Programmierer schon damit Rechnung hält und wenn nicht dann ist es halt Pech gewesen und das Programm schmiert ab oder produziert falsche Ergebnisse.

LabVIEW hat durch die Datenflussprogrammierung inherent parallele Ausführung eingebaut und muss damit zu jedem Zeitpunk Rechnung tragen (und tut das auch extrem gut). Das hat aber auch zur Folge, dass nicht jede Optimalisierung die ein C Compiler durchführen kann für LabVIEW legitim ist. Und manchmal muss LabVIEW sogar extra Code einfügen um Kollisionen von ausführemdem Code zu verhindern. Das kann dazu führen dass der LabVIEW Code langsamer abläuft dann der durch einen hoch optimalisierten C Compiler erzeugten Code. Aber hier sprechen wir in den meisten Fällen über Prozente der Ausführungszeit nicht über Faktoren.

Wo es oftmals falsch geht in LabVIEW ist nicht im erzeugten Code selber, aber in der Verwendung eines suboptimalen Algorithmus im LabVIEW Diagramm oder einer suboptimalen Implementation eines Algorithmus. In C muss sich der Programmierer selber um jedes Byte kümmern dass im Speicher angelegt, verschoben und wieder freigegeben wird. In LabVIEW tut man überhaupt nichts dergleichen. LabVIEW alloziert und realloziert Speicher wann immer das nötig ist für uns. Und Speicherallozierung und Kopieren ist eine sehr langsame Operation im Verhältnis zu anderen Dingen. Wenn also jetzt jemand einen Algorithmus schreibt in dem er in einer Schlaufe mit BuildArray in jedem Durchlauf ein oder mehrere Elemente an das im Schieberegister gehaltene Array anfügt, wird in jedem Schleifendruchlauf dieses Array vergrössert, was fast immer mit einer Neuallokation mit anschliessendem Kopieren der Daten im Speicher und Deallozieren des alten Arrays verbunden ist. So ein Algorithmus ist EXTREM langsam, nicht weil LabVIEW schlechten Code erzeugt, sondern weil der Programmierer schlecht programmiert hat.
Das Problem ist hier eigentlich dass Programmieren in LabVIEW fast zu einfach ist. Man kann ohne überhaupt etwas von Programmierung zu verstehen immer noch ein Programm schreiben das mehr oder weniger das zu tun scheint (mit Nachdruck auf dem scheint) was man eigentlich wollte, auch wenn die Art und Weise wie das getan wird eigentlich katastrophal zu nennen ist.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Fehler 1097 bei Knoten zum Aufruf externer Bibliotheken in CLF-Knoten.vi KingLui 2 7.138 16.09.2014 13:47
Letzter Beitrag: KingLui
  CRC Berechnung: Codebeispiel vorhanden Takuro 6 11.993 01.06.2011 17:17
Letzter Beitrag: Lucki
  Knoten zum Aufruf externer Bibliotheken xtro 4 8.086 28.09.2007 06:32
Letzter Beitrag: rolfk
  Konstruktor-Knoten (Constructor Node), Assemblies erstellen Sapphira 2 7.954 24.09.2004 08:34
Letzter Beitrag: Sapphira

Gehe zu: