bank vs variable

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Seven

Betreff: bank vs variable

BeitragSo, Nov 13, 2011 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Tag,
Ich danke gerade ein wenig über Optimierungen nach und da stieß ich auf createbank und co.
Da man Speicherbänke einfach löschen kann, wenn man es gerade will und auch die
größe anpassen kann, wäre es dann nicht resourcenschonender, wenn man einfach alle
Variablen, bei denen es wirklich geht, durch Speicherbänke ersetzt?

ZEVS

BeitragSo, Nov 13, 2011 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kannst du auch ganz einfach mit Localen Variablen machen - Funktion beenden und Ende.
Ein weiteres Problem ist, dass du nie so einfach weißt, wo die Variable nun in der Bank ist, dafür müsstest du eine extra Variable haben oder feste Plätze (und ergo feste Größe)...

So einfach geht das nicht.

ZEVS

Pummelie

BeitragSo, Nov 13, 2011 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Was du vorhast ist nicht einfach, und lässt sich wohl eher mit Types schaffen.
Bank's können in BB aber einen billigen Ersatz für Variablen-Pointer darstellen.
It's done when it's done.

Propellator

BeitragSo, Nov 13, 2011 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Überleg dir doch mal, was schneller und einfacher ist: Eine Variable mit einem Wert, oder eine Variable die auf einen Speicherblock zeigt, aus welchem du Werte auslesen kannst?

Tipp: Variablen sind die bessere Wahl!

Wenn du Optimierungen vornehmen willst, solltest du erst herausfinden wo überhaupt der Bottleneck ist.

MfG
Propellator
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

Pummelie

BeitragSo, Nov 13, 2011 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Gegenargument:

Was ist wohl einfach, 5 Variablen, oder eine die alle beinhaltet?

Ok, ja es gibt dims, aber einmal definiert sind sie nichtmehr aus dem Speicher zubekommen.
It's done when it's done.

Xeres

Moderator

BeitragSo, Nov 13, 2011 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist es leichter zu handhaben? Nein.
Ist es schwerer zu debuggen? Ja.
Spart es Ressourcen? Nein.

Ich sehe keinen Grund mit Banken zu arbeiten, wo keine nötig sind.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Noobody

BeitragSo, Nov 13, 2011 23:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Pummelie hat Folgendes geschrieben:
Was ist wohl einfach, 5 Variablen, oder eine die alle beinhaltet?

Die Anzahl der Variablen ist im kompilierten Programm völlig egal. Wenn die Funktion aufgerufen wird, setzt der Compiler einmal ein Stackframe auf (welches gleich teuer ist, unabhängig davon, wieviele Variablen du in der Funktion benutzt) und ab dann hast du deine Variablen im Stack, gecached und je nach dem sogar in Registern. Wenn du eine Bank benutzt, hast du stattdessen für deine Variablen explizite Speicheranforderung auf dem Heap (= langsam) und zudem bei jedem Zugriff einen Bank-Peek, d.h. ein Funktionsaufruf plus noch der Overhead der Peek-Funktion (Bound-checking etc.). Der Witz ist ja vor allem, dass das Resultat des Bank-Peeks sowieso irgendwie zwischengespeichert werden muss (sei es nun in Registern oder bei einem Spill halt auf dem Stack), bevor er weiterbearbeitet werden kann, sprich du hast den gleichen Effekt, wie wenn du halt einfach eine Variable verwendet hättest, nur halt sehr langsam, extrem aufwändig und ziemlich dumm.

Überhaupt sollte man, wenn man auf diesem Level der Optimierung angelangt ist, eher mal darüber nachdenken, die Sprache zu wechseln, denn B3D ist nun nicht wirklich dafür bekannt, besonders schnell zu sein. Falls man bei B3D bleibt, sollte man solche "Optimierungen" tunlichst unterlassen, es sei denn, man benchmarkt genaustens vor und nach der "Optimierung" und schaut sich ggf. den ASM-Output an, um nachzuprüfen, dass genau das passiert, was man will. Aber nochmals, in B3D ist das sowieso unsinnig, da der Compiler halt nicht sehr effizient arbeitet.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun
 

Seven

BeitragMo, Nov 14, 2011 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
oho, dass sind schon mal gute Antworten. Danke und schon habe ich wieder was dazu
gelernt^^

Mir ist noch folgendes eingefallen:
Wie verhält es sich eigentlich mit if, for usw?
Darf man sie getrost benutzen, oder sollte man eher sparsam damit umgehen?
Überhaupt, mich würde interessieren, wie man diese Funktionen überhaupt
zu Stande bekommt. Nehmen wir mal if.
If müsste irgendwo mit Hilfe einer mathematischen Formel entstanden sein,
oder nicht? Ich brauche keine genau Angabe, oder die Formel, mich interessiert
nur das Prinzip.

Und: Was ist der Unterschied zwischen 0 und 1 und True und False?
Vor- und Nachteile der der beiden? ^^

ZEVS

BeitragMo, Nov 14, 2011 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
True/False sind Konstanten, die bei der Kompillierung durch 1/0 ersetzt werden. Evtl. ist daher das Kompillieren ~1ms langsamer, das soll nicht stören.

If und For benutzt du, wenn es sinnvoll ist. Auf If kann man meist sowieso nur sehr umständlich verzichten, For-Each durch While-After zu ersetzen ist, dämlich, da For-Each in C++ geschrieben wurde, While-After dagegen langsames BB ist. For mit konstanten Werten mit Copy/Paste zu vermeiden kann schwer messbare Beschleunigung geben, vor allem, wenn keine Variable verwaltet werden muss.

Hast du ein ernsthaftes Interesse daran, zu wissen, wie man If-Abfragen im Assembler durchsetzt?

ZEVS
 

Seven

BeitragMo, Nov 14, 2011 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun ja, die Umsetzung im Assembler wäre schon ein wenig hoch gegriffen.
Mich würde etwas leichteres mehr erfreuen^^

Mir geht es einfach nur darum, dass If überall verwendet wird,
ich aber nicht im entferntesten weiß, wie das umgesetzt wird.
Ein Anhaltspunkt wäre nett.

Lastmayday

BeitragMo, Nov 14, 2011 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
If x > y then x = 0

heißt:

Wenn x größer als y dann x gleich 0

Also benutzt du es immer dann wenn eine Entscheidung zu treffen hast.

MfG Lastmayday

ZEVS

BeitragMo, Nov 14, 2011 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich interpretiere das so, dass du fragst, wie der BB-Compiler mit If-Abfragen umgeht. Das ist halt Assembler, tut mir leid, außerdem sehe ich den Sinn dieser Frage nicht, zumal niemand die Quelltexte des Compilers hat.

Wenn du vorhast, einen eigenen Compiler zu schreiben, kommst du um Assembler halt nicht rum.
Wenn du einen Interpreter einer Script-Sprache schreiben willst, kannst du das auf das BB-If reduzieren.

Die Option "du weißt nicht, wie der BB-Programmierer If verwendet" schließe ich konsequent aus, da deine Beiträge und vor allem das Thread-Tema dazu in keinem Zusammenhang stehen. Höchstens vielleicht das Forum.

ZEVS
 

Seven

BeitragMo, Nov 14, 2011 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß wie man If verwendet^^

Momentan habe ich diesen Sichtpunkt:
BB, C++, Assembler usw. greifen alle auf das Binärsystem zurück.
Die 0en und 1en beruhen auf dem Dualsystem und stammen aus der
Mathematik.

Wenn ich jetzt IF anwende, dann wird das ganze auch ins Binärsystem
übersetzt. Das heißt doch letzt endlich, dass alles, was ich programmiere,
sich mathematisch erklären lässt.
Wenn man jetzt diese mathematische Formel nimmt und den Binär-teil
raus nimmt, dann hat man eine einfachere Formel.


Für den Fall, dass ich etwas undeutlich war:
In der Mathematik gibt es ja die Möglichkeit Geraden im Diagramm
zu berechnen. Wenn man aber eine Gerade hat, die sich nach
einem bestimmten t Wert unproportional zum Rest ändert,
dann hat man letztendlich 2 Formeln.
Das würde dann z.B. so aussehen:

{ 0,5 t für 0 <= t <= 7
h(t) = {
{ 0,7 t für 7 < t <= 29

Das ist im Grunde ja auch eine mathematische If Abfrage. Mein Problem
bei dieser Abfrage ist, dass man logisch vorgehen muss. Der PC kann
dies nicht, sofern man diesem nicht die Formel dafür vorgibt.
Daraus schließe ich, dass es für die oben genannte Formel eine
andere Version geben muss.

Nur interessehalber^^

ZEVS

BeitragMo, Nov 14, 2011 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt einfach keine Formel für alle informatischen Vorgänge. Ein Prozessor kann ein bisschen mehr als nur rechnen, auch wenn das manchmal unterschlagen wird.

Du erkundigst dich nicht nur, wie man If im Assambler durchsetzt - nein, jetzt willst du auch noch wissen, was der Prozessor damit macht. Habe auf einen Schlag 32 If-Strukturen in Assembler gefunden, Kategorie bedingte Sprünge. Quelle: http://andremueller.gmxhome.de/befehle.html#jxx

Es ist zwar so, dass du die gesamte Mathematik informatisch ausdrücken kannst, umgekehrt ist das aber, wie z.B. die If-Struktur zeigt, nicht unbedingt oder nur sinngemäß möglich (man kann die Bedingung mathematisch ausdrücken und als Faktor in Berechnungen verwenden. Ist sie 0, fällt die Rechnung weg. Das ist natürlich langsam und unflexibel).

ZEVS

Xeres

Moderator

BeitragMo, Nov 14, 2011 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Seven hat Folgendes geschrieben:
Wenn man jetzt diese mathematische Formel nimmt und den Binär-teil
raus nimmt, dann hat man eine einfachere Formel.
Mit Verlaub, was ist das für Nonsens? Computer rechnen mit binären Zahlen weil Strom an/aus 2 Zustände sind... Es gibt kein "Binär-teil".
Informatik ist was anderes als Mathematik.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

mpmxyz

BeitragMo, Nov 14, 2011 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Was heißt hier "nicht logisch"?
So viel ich weiß, ist die Grundlage jedes heutigen Computers eine Logik auf Basis der booleschen Algebra. (Über Quantencomputer weiß ich nicht genug. Razz )
Auf die Gefahr hin, dass ich etwas sage, was du schon weißt:
Der Prozessor rechnet nicht mathematische Formeln durch, sondern bekommt kleine Befehle in der Art "Nehme 4 Bytes aus dem Arbeitsspeicher von Position 0xDAAD01DF und lege sie in das Register #10!", "Nehme zwei Ganzzahlen aus Register #1 und #2, addiere sie und speicher das Ergebnis in Register #3!" oder "Wenn im Register #7 0 steht, springe um 10 Befehle weiter!".
Binäre Zahlen werden hier nur zum codieren der Befehle verwendet.
Mathematik in dem Sinn, wie du ihn verstehst, findet man maximal im Rechenwerk des Prozessors.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

BladeRunner

Moderator

BeitragMo, Nov 14, 2011 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Seven, schreib einfach deine Programme. Wenn sie zu langsam werden kannst Du im Einzelfall entscheiden welcher Teil deines Programmes der Zeitfresser mit Optimierungspotential ist.
Es bringt nichts sich jetzt in philosophischen Grundsatzdiskussionen zur Effizienz des Keywords if zu ergehen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Seven

BeitragMo, Nov 14, 2011 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
So sieht das also aus.

Gut, dann wären die Fragen geklärt. Danke.
Ich philosophiere gerne über sowas, immerhin sollte der Grundgedanke
zumindest richtig sein.^^

BladeRunner

Moderator

BeitragMo, Nov 14, 2011 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Da dein Programm im wesentlichen aus einer Abfolge von Entscheidungen besteht wirst Du so oder so nicht um If herumkommen, es sei denn Du willst stur ablaufende, nicht beeinflussbare Werke erstellen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group