bank vs variable
Übersicht

SevenBetreff: bank vs variable |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Tag,
Ich danke gerade ein wenig über Optimierungen nach und da stieß ich auf createbank ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das kannst du auch ganz einfach mit Local![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() ![]() 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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Seven hat Folgendes geschrieben: Wenn man jetzt diese mathematische Formel nimmt und den Binär-teil
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".
raus nimmt, dann hat man eine einfachere Formel. 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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() 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 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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.^^ |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group