Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Fraktal Calculation 1.1
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 05.03.2006, 16:51    Titel: Fraktal Calculation 1.1 Antworten mit Zitat

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... durchgeknallt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 05.03.2006, 17:01    Titel: Antworten mit Zitat

Kein Code, keine Optmierungen.
Post erst denn Code dann kann man sehen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 06.03.2006, 22:12    Titel: Antworten mit Zitat

nein, ich meinte das anders:

Wer wäre als erstes einmal bereit mir zu helfen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 07.03.2006, 02:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 07.03.2006, 18:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 09.03.2006, 20:57    Titel: Antworten mit Zitat

hm... das ist alels schön und gut, aber ich will nciht, dass mein programm code einfach wo anders weiter verwendet wird...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 09.03.2006, 22:29    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 10.03.2006, 21:29    Titel: Antworten mit Zitat

na gut, ich post ihn mal unter: http://www.freebasic.de/fbnp/index.php?view=257

PS: Ich erwarte mir GUTE optimierungen happy
PLZ

psy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 10.03.2006, 21:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 10.03.2006, 21:43    Titel: Antworten mit Zitat

verbessert, danke!

neue url: http://freebasic.de/fbnp/index.php?view=258
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 11.03.2006, 10:06    Titel: Antworten mit Zitat

"on error goto erroc" braucht unnötig Zeit, der Code funktioniert ja.
Folglich kannst du auch die Zeilen 171 bis 181 entfernen.

Noch was:
Code:
ymax\2

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:
Code:
randomize timer

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 11.03.2006, 12:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 11.03.2006, 14:14    Titel: Antworten mit Zitat

richtig, ich hab einfach mal alle einfach als integer dimensioniert happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 11.03.2006, 14:19    Titel: Antworten mit Zitat

Psygate, kanst du bitte irgendeine Art Benchmark Funktion einbauen, damit man den Erfolg der Optimierungen erkennt?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 11.03.2006, 15:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 11.03.2006, 16:27    Titel: Antworten mit Zitat

Ist das der Aktuelle Code?
http://freebasic.de/fbnp/?view=261

Zeile 91 ist meiner Meinung nach nicht nötig:
Code:
key=""


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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 11.03.2006, 16:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 11.03.2006, 16:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 11.03.2006, 17:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 11.03.2006, 17:52    Titel: Antworten mit Zitat

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 grinsen:
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz