Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 06.10.2005, 18:48 Titel: Warp 9.97, beschleunigen! |
|
|
Also, ich ahb da fragen:
Kann mir einer von euch tipps geben, wie ich meine programme EFFEKTIV beschleunige? und, ich möchte dabei gerne den schwerpunkt auf die GRAFIK lenken, wie man die am besten beschleunigen könnte!
RHX schon im vorraus |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 06.10.2005, 19:37 Titel: |
|
|
Öhm, OpenGL zB benutzen? Das lagert den Grafikteil auf die GPU aus und deine CPU bleibt frei, zudem rechnet die GPU sowas schneller als die CPU weil die dafür optimiert ist. _________________ "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 |
|
|
Lutz Ifer Grillmeister
Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 06.10.2005, 22:07 Titel: |
|
|
Servus!
Statt "Line" und "Circle" und was-weiß-ich-nicht mit direktem Speierzugriff arbeiten?
Gruß
Lutz Ifer |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 06.10.2005, 22:14 Titel: |
|
|
Das solltest du dann schon in Assembler erledigen, da die Berechnungen (speziell beim Kreis)
auch noch einmal Rechenzeit brauchen... |
|
Nach oben |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 06.10.2005, 23:58 Titel: |
|
|
Da du gerade von assembler redest:
Ist eine rechenaufgabe wie 124124+8716239 schneller im assembler als in Freebasic?? Zählt das auch für InlneAssembling??
Michael |
|
Nach oben |
|
|
d.j.peters Gast
|
Verfasst am: 07.10.2005, 06:03 Titel: |
|
|
programmierer hat Folgendes geschrieben: | ...Ist eine rechenaufgabe wie 124124+8716239 schneller im assembler als in Freebasic?? |
Das kann kein Unterschied sein weil es nicht zur Laufzeit berechnet sondern beim Kompelieren addiert FreeBASIC beide Konstanten und speicheret direkt das Ergebnis 8840363.
Erzeugt
Code: | mov dword ptr [_A], 8840363 |
programmierer hat Folgendes geschrieben: | Zählt das auch für InlneAssembling?? |
Ob Du einen seperaten oder den internen Assembler benutzt macht keinen Geschwindigkeitsunterschied. Es ist aber einfacher den Inlineassembler zu benutzen z.B. beim Zugriff auf Variablen.
In BASIC
Code: | option explicit
dim as integer a,b,c
a=124124
b=8716239
c=a+b
print c
sleep |
das erzeugt FreeBASIC
Code: | mov dword ptr [_A], 124124
mov dword ptr [_B], 8716239
mov eax, dword ptr [_B]
add eax, dword ptr [_A]
mov dword ptr [_C], eax |
und das lohnt sich nicht zu optimieren in Assembler.
Wenn Du aber viele Grafik Sachen machst und auch Arrays in Schleifen benutzt
dann kommt man "oft" auf bis zu 10 facher Ausführungsgeschwindigkeit mit Assembler.
Um dieses zu demonstrieren habe ich auch hier im Forum das echtzeit Mandelbrot "Apfelmänchen" in Inlineassembler gepostet.
Auf [url=http://fb.exp-soft.de/FBtuts.php?zeig=tuts&view=Inline)Assembling-1.~Was~ist~Inline)Assembling(.txt]FreeBASIC.de[/url] befindet sich ein sehr gutes Einsteiger-Tutorial für den Inlineassembler.
Wenn Du den Einstieg gemeistert hast dann lohnt es sich die Grafiksachen zu optimieren.
Ich schreibe z.Z. die Physicengine von FreeSpeedRacer und in Inlineassembler habe ich
bis zu 50 facher Rechenleistung (weil viele Vectoren in Arrays inerhalb von Schleifen).
Grüsse Joshy |
|
Nach oben |
|
|
helium
Anmeldungsdatum: 10.09.2004 Beiträge: 397 Wohnort: Leverkusen
|
Verfasst am: 07.10.2005, 09:28 Titel: Re: Warp 9.97, beschleunigen! |
|
|
psygate hat Folgendes geschrieben: | Kann mir einer von euch tipps geben, wie ich meine programme EFFEKTIV beschleunige? |
Indem du geziehlt nach Flaschenhälsen suchst und dort gezielt optimierst. Am wichtigsten: geeignete Algorithmen wählen! Ein Algorithmus, der der O(n²) braucht wird trotz ausgefeiltester Assambler-Implementierung niemals schneller werden, als ein Algorithmus, der das selbe in O(n) schafft (es sei denn du weist die genaue Anzahl und bist sicher (=> hast getestet), dass die Zeitkonstante des O(n²)-Algorithmus derart kürzer ist, dass er schneller arbeitet).
Anderes Beispiel für Optimierungen: Musst du Strings extrem oft kopieren, dann wäre COW (Copy-On-Write) sicherlich die beste Wahl. Willst du hingegen Strings oft aneinanderhängen, dann solltest du ein gutes Speichermanagement haben, dass den Puffer von vorne herein etwas großzügiger gestaltet.
Mit Microoptimierungen fängst du dann erst an, wenn du dir ziemlich sicher bist, dass du mit anderen Algorithmen und/oder Datenstrukturen nichts mehr herausholen kannst. _________________ Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit. |
|
Nach oben |
|
|
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 07.10.2005, 23:05 Titel: |
|
|
@Helium: Nix verstehen... Du können in deutsch nochmal sagen?
@andere: Wie nutze ich die opengl?? Sind das spezielle befehle?!
und, was ist schnelle:
Code: | pset(sin(x)*6,sin(x)*6),1 |
oder
Code: | x=sin(x)*6
pset(x,x),1 |
|
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 07.10.2005, 23:26 Titel: |
|
|
Helium meinte, du sollst deine Routinen erst mal verbessern, das bringt mehr als auf assembler umzusteigen
Ja, OpenGL hat eigene Befehle
Beide Varianten sind gleich schnell, dafür gibts ja compiler.. der rechnet das aus bevor ers in die exe schreibt weils konstante werte sind (sollte er zumindest) _________________ "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
|
Verfasst am: 08.10.2005, 00:01 Titel: |
|
|
könnte mir jemand das mit der opengl näher erklären.......bitte? |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 08.10.2005, 00:04 Titel: |
|
|
ich lerne grade.. wollt eventuell ein tutorial schreiben, allerdings für 3D-Grafik.. _________________ "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 |
|
|
d.j.peters Gast
|
Verfasst am: 08.10.2005, 00:04 Titel: |
|
|
Hallo psygate,
schau dir doch mal die OpenGl Beispiele in Deinem FreeBASIC Beispielverzeichnis an.
Grüsse Joshy |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 08.10.2005, 01:52 Titel: |
|
|
die sind auch für 3d.. _________________ "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 |
|
|
marzec
Anmeldungsdatum: 13.10.2004 Beiträge: 267
|
Verfasst am: 08.10.2005, 02:18 Titel: |
|
|
falsch verwendet bringt auch opengl nüsse. halt dich an das was helium gesagt hat ( geeignete datenstrukturen verwenden, bessere algorithmen ). alles was du wissen mußt ist welche algorithmus du für ein bestimmtes problem verwendest ( kollision, visibility, sortieren etc. etc. ) und dann einfach mal google bemühen um etwaige equivalente weniger aufwändige algorithmen zu finden. _________________ Yagl - yet another gameprogramming library |
|
Nach oben |
|
|
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 08.10.2005, 12:24 Titel: |
|
|
ok... wahrscheinlich habt ihr mich falsch verstanden, aber ich möchte, bei einer auflösung von 1280*1024 eine höhere pps rate als 10 pro sekunde haben. eine sehr viel höhere! ich möchte einfach, meine Grafiken in 2D beschleunigen... |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 08.10.2005, 14:14 Titel: |
|
|
ja. Und du zeichnest die irgendwo. Und die Routine, bei der du die Zeichenkommandos sendest sollst du eher optimieren als auf Assembler oder OpenGL umzusteigen, das bringt mehr. Wir ham dich schon richtig verstanden. _________________ "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 |
|
|
|