' 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.