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 

Problem beim Verwenden von 2D Arrays



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!

03.03.2008, 18:22
Beitrag #13

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.704
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Problem beim Verwenden von 2D Arrays
' schrieb:Also ich meine, dass das so funktionieren müßte.
Ja, gut. Ich schaus mir nachher nochmals an.

Zitat:Tatsächlich scheint somit auch alles zu laufen.
Wichtig wäre zuerst zu wissen, ob es prinzipiell geht. Wie lange es dauert ist erstmal zweitrangig.


Zitat:das geht so weit, dass LV schon gar keine Rückmeldung mehr gibt.
Das kann nicht sein - außer es ist ein schwerer Fehler in deinem C-Code.

Wie groß muss ich mir denn das Bild vorstellen? Eher 100*100 oder doch 10.000*10.000?

Zitat:dass man hohe Geschwindigkeitsgewinne zu erwarten hat wenn man etwas in einer DLL auslagert.
Das gilt aber nicht zwangsläufig. Auch LV kann wohl sehr gut optimieren. Wenn dein C-Code dann besonders schlecht ist, ist der langsamer.

Zitat:Läuft das nun scheinbar und es sind immernoch große Fehler enthalten
Die Möglichkeit besteht, ich kann das noch nicht abschätzen.

Zitat:ist der code nur unglaublich schlecht
siehe unten.

Zitat:aber die LV eigenen DLLs werden es doch kaum anders lösen
Das sitzen Profis am Werk - und die können mit Pointern arbeiten.

Code:
Mittelwert[m][n]=Mittelwert[m][n]+ (*Bild)->elt[((i+(m * *Lrows))*numcol) + (j+(n * *Lcols))];
Wenn der C-Compiler das genau so macht, wie du das hier programmiert hast, ist das um Potenzen langsamer als du denkst. Es findet hier z.B. eine Operation "(m* *LRows)" statt, die für drei Schleifen immer den selben Wert liefert. Die Frage ist, optimiert der C-Kompiler diese Operation oder nicht. Jeder Programmierer wird diese Berechnung also herausziehen. Überlege mal: Die drei inneren Schleifen wenn zusammen 100.000 Durchläufe sind, wird diese Operation sooft umsonst gemacht. Die Operation selbst ist natürlich nur extrem kurz - aber ganz viel mal wenig gibt auch viel (Zeit). Jetzt bleibt es natürlich nicht bei dieser einen Operation. Selbst das, was links vom = steht, stellt eine Operation dar - die möglicherweise nicht zu vernachlässigen ist! Da wird nämlich u.U. multipliziert. Das kann etwas länger dauern als inkrementieren.

Wenn du den Code tatsächlich in C auslagern wolltest wegen Zeitersparnis, müsstest du dir eigentlich den C-Code in ASM ansehen und überlegen, ab das noch zu toppen ist. Wenn in der innersten Schleife nichts weiter steht als ein paar FPU-Befehle und nur wenige INC 's - dann glaube ich, ist das schneller als LV.

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
30
Antwort schreiben 


Nachrichten in diesem Thema
Problem beim Verwenden von 2D Arrays - IchSelbst - 03.03.2008 18:22

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Fehler 1097 beim Übergeben von Arrays Flemmy 4 11.214 22.10.2017 21:07
Letzter Beitrag: rolfk
  Problem beim Einbinden einer DLL preacha 18 20.940 25.09.2008 11:51
Letzter Beitrag: baliik

Gehe zu: