Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 05.03.2006, 16:51 Titel: Fraktal Calculation 1.1 |
|
|
also... Ich hab jetzt mal meine Fraktalberechnung fertig... aber es fehlt eben noch an der optimierung.
ich bitte daher alle mal:
Ich möchte geerne noch eine zoomfunktion einbauen und emine berechnungsroutinen mit assembler ersetzen, kann mir da jemand helfen?
PS: Später möchte ich noch meine Komplexe-Zahlen-Bibliothek schreiben, da bräuchte ich auch hilfe...  |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 05.03.2006, 17:01 Titel: |
|
|
Kein Code, keine Optmierungen.
Post erst denn Code dann kann man sehen. |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 06.03.2006, 22:12 Titel: |
|
|
nein, ich meinte das anders:
Wer wäre als erstes einmal bereit mir zu helfen? |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 07.03.2006, 02:07 Titel: |
|
|
lol vermutlich finden sich einige die dir helfen würden aber ohne code geht das einfach ned xD wenn du jemanden als so ne art nachhilfelehrer suchst schreib das dazu, dann gibts keine missverständnisse. Ansonsten geht man in nem Forum eigentlich auf kollektive zusammenarbeit, sprich einer sagt sein problem und wer was weiß hilft. nicht einer fragt ob jemand bei einem problem helfen könnte aber nicht sagt, was er für eins hat geschweige denn material zeigt.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 07.03.2006, 18:27 Titel: |
|
|
Einige hier werden dir helfen beim Optimieren.
Aber sich erst bei dir melden um dann denn Code zu erhalten und dann das hin- und her mit anderen Entwicklern ist schon etwas Aufwendig
Wenn du den Code bei http://freebasic.de/fbnp/ Online stellst, werden kleine änderungen direkt hier im Forum diskutiert und weiter optimiert und grosse Änderungen werden wieder auf http://freebasic.de/fbnp/ hochgeladen.
Wenn der Code hier im Forum liegt, ist auch die Effizenz viel höher weil jeder immer mit der neusten Version arbeiten kann.
Gleich was konkrettes:
Zitat: | und emine berechnungsroutinen mit assembler ersetzen, kann mir da jemand helfen? |
Als erstes nach möglichkeit die Befehle noch in Basic optimieren.
Dann nur diesem Teilcode compileren, wobei der Compiler denn Schalter "-r" mit bekommt. Dann die entstandene ASM Datei öffnen, den ASm-Code ins Basic Programm übertragen und dann frohes tunen.
(mit diesem Trick spart man sich das mühsam auscodieren in ASM, muss dafür aber mehr von Hand optimieren) |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 09.03.2006, 20:57 Titel: |
|
|
hm... das ist alels schön und gut, aber ich will nciht, dass mein programm code einfach wo anders weiter verwendet wird... |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 09.03.2006, 22:29 Titel: |
|
|
poste einfach den relevanten abschnitt oder nur teile die man so halt nich benutzen kann oder sonst was. wie bereits gesagt, wenn du ne art privathelfer suchst sag das, ansonsten gib uns code oder stell ne konkrete frage. ansonsten kann dir niemand helfen. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 10.03.2006, 21:31 Titel: |
|
|
http://referenz.freebasic.de/?s=SELECT
zeile 59 - 67 kannst du damit deutlich verbessern.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 11.03.2006, 10:06 Titel: |
|
|
"on error goto erroc" braucht unnötig Zeit, der Code funktioniert ja.
Folglich kannst du auch die Zeilen 171 bis 181 entfernen.
Noch was:
Bei divisionen gibt es einen Elganten Kunstgriff:
Code: | do
input a
b=a/2
? b
b=a shr 1
? b
loop |
Durch Zwei teilen entspricht der Verschiebung um ein Bit nach Rechts.
Durch 4 entspricht eine Verschiebung um 2 Bit nach Rechts.
Und noch etwas:
Ich sehe nirgends einen RND Befehl, ich glaube den kann man entfernen.
Hier der Code:
http://freebasic.de/fbnp/index.php?view=259 |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 11.03.2006, 12:39 Titel: |
|
|
Hi,
wenn möglich statt Gleitkommazahlen (double) lieber Integer nötigenfals Longint benutzen.
Besonders alle Laufvariable in FOR .. NEXT Schleifen, die nicht als Gleitkommazahlen (double) benutzt werden,
sind als Integer wesentlich schneller
Ich konnte nicht erkennen, dass eine Laufvariable bei dir als Gleitkommazahl genutzt wird? _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 11.03.2006, 14:14 Titel: |
|
|
richtig, ich hab einfach mal alle einfach als integer dimensioniert  |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 11.03.2006, 14:19 Titel: |
|
|
Psygate, kanst du bitte irgendeine Art Benchmark Funktion einbauen, damit man den Erfolg der Optimierungen erkennt? |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 11.03.2006, 15:11 Titel: |
|
|
So, Benchmark ist drinnen, code ist von mir weiter optimiert.
Ich habe noch ein Benchmark eingebaut, es ist aber nur ein kommentar, da es, wenn es wirklich in dieser form bestehen bleibt das programm sehr viel langsamer macht. Es ist also ratsam das Benchmarking nur dann zu benutzen, wenn man nicht gerade fraktale explorieren will!
PS: Danke an alle die mir bis jetzt so tatkräftig geholfe haben! Ich hoffe auf weitere zusammenarbeit |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 11.03.2006, 16:27 Titel: |
|
|
Ist das der Aktuelle Code?
http://freebasic.de/fbnp/?view=261
Zeile 91 ist meiner Meinung nach nicht nötig:
Auch hier (Zeile 21) gibt es noch Tricks:
Code: | dim shared as string key,path |
Code: | dim key as string*2
dim path as string |
So wenig Global wie möglich und die Variabeln auch so klein wie möglich lautet hier das Motto.
Zeile 39:
Code: | declare sub julia(x0 as double,y0 as double, julmod as integer) |
wird zu
Code: | declare sub julia(byval x0 as double, byval y0 as double, byval julmod as integer) |
Zeile 105:
Code: | sub julia(x0 as double,y0 as double,julmod as integer) |
Code: | sub julia(byval x0 as double,byval y0 as double,byval julmod as integer) |
BYVAL braucht viel weniger Zeit und Speicher als BYREF (=Standart bei Subroutinen).
Edit:/
Sorry die Zeile hier ist Falsch:
Code: | #Define div4(a) (a SHR 4) |
es lautet
Code: | #Define div4(a) (a SHR 2) |
(erst denken dann posten) |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 11.03.2006, 16:40 Titel: |
|
|
byval brauch weniger speicher als byref? Leuchtet mir auf den ersten blick nich ein weil bei byref einfach der alte speicherplatz benutzt wird, bei byval wird n neuer erstellt und der wert erst noch kopiert.. von daher würd ich tippen, byref is schneller/sparsamer. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 11.03.2006, 16:46 Titel: |
|
|
Also ich bin der Meinung, das immer zwei Platze erstellt werden und das das ein Malige kopieren (BYVAL) weniger Zeit braucht als das Zweimalige (BYREF).
Also die .Exe Datei wird auf jeden fall viell kleiner und deshalb vermute ich auch schneller.
(Probiers aus, ein mal mit BYVAL und einmal ohne) |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 11.03.2006, 17:46 Titel: |
|
|
Oi..... Also, ich glaube auch, dass es durch byref schneller geht. Dadurch wird einfach die variable übergeben und aus. Bei byval denke ich mir muss die variable erstmal kopiert werden und ein neuer speicherbereich ermittet werden, da sonst die alte geändert wird.
naja, agle:
neue version (1.5):
http://www.freebasic.de/fbnp/index.php?view=262
Zuletzt bearbeitet von psygate am 11.03.2006, 17:54, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 11.03.2006, 17:52 Titel: |
|
|
Etwas schwer zum Nachvollziehen aber seht selbst:
Code: | dim t as double
sub a(x)
y= x*5
end sub
Sub b(byval x)
y= x*5
End sub
for i2=0 to 10
?
t=timer
for i=0 to 100000000
a(i)
next i
? timer-t
t=timer
for i=0 to 100000000
b(i)
next i
? timer-t
next i2
sleep |
Leider entsteht hier eine Riesen Streung, die Messung ist Unbrauchbar.
Aber:
Der Asembler Code kann ja analysiert werden :
Die Byref Lösung gibt das hier (bei Aufruf):
Code: | mov dword ptr [_Ii], 0
.Lt_000E:
push offset _Ii
call _A@4 |
Byval gibt das:
Code: | mov dword ptr [_Ii], 0
.Lt_0012:
push dword ptr [_Ii]
call _B@4 |
Gleich viele zeilen!
Bei der eigentlichen Sub:
Eine Zeile weniger und bei ASM kostet jede einzelne Zeile Zeit.
(1 Zeilen gespart bei solch einer einfachen Sub, bei grossen ist der Erfolg bestimmt noch grösser)
/Edit:
Falsch Analisiert, sorry.
Man spart nur eine Zeile hier im Beispiel |
|
Nach oben |
|
 |
|