Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   GOTOs verhindern das RAM-Cachen - ist das richtig? (https://www.delphipraxis.net/26693-gotos-verhindern-das-ram-cachen-ist-das-richtig.html)

NicoDE 27. Jul 2004 22:08

Re: GOTOs verhindern das RAM-Cachen - ist das richtig?
 
Zitat:

Zitat von Chewie
Auf Maschinenebene gibt es nur Sprünge, keine Funktionen.

Bei einem 'call' wird die Rücksprungadresse auf den Stack gelegt und bei 'ret' selbige wieder vom Stack geholt. Das würde ich nicht mehr als Sprung bezeichnen.

Chewie 27. Jul 2004 22:31

Re: GOTOs verhindern das RAM-Cachen - ist das richtig?
 
Hm, ich schon. Nur weil zusätzlich noch was auf den Stack gelegt wird, wird trotzdem gesprungen.

ripper8472 27. Jul 2004 23:57

Re: GOTOs verhindern das RAM-Cachen - ist das richtig?
 
Ob ihr das nun Sprung nennen wollt oder nicht, der Programmzeiger wird trotzdem auf einen anderen Speicherbereich gesetzt. Und das bei Call und Jump.

Hansa 28. Jul 2004 00:04

Re: GOTOs verhindern das RAM-Cachen - ist das richtig?
 
fast OT: goto landet im Nirwana. Das ist das Problem. Strukturierte Programmierung ist damit fast unmöglich. 8)

dizzy 28. Jul 2004 00:26

Re: GOTOs verhindern das RAM-Cachen - ist das richtig?
 
Nochmal zum Thema Pipelining: Der Cache kann keinen Sprung vorhersagen, da der Sprung letztendlich vom Prozessor ausgeführt wird. Und sobald der Opcode in der CPU ist, hat er den Cache bereits passiert. Eine 100% zuverlässige Sprungvorhersage ließe sich nur mit einem 2. vorgeschalteten Prozessor machen, der zumindest Sprünge erkennt, und auch deren Ziele berechnen kann. Und das so schnell, dass durch das Springen im RAM, im Cache kein Bubble entsteht. Und für die entsprechende Schnelligkeit wäre für diesen Prä-Prozessor bestimmt auch eine Pipeline nötig... :). Ist eine Frage von Kosten/Nutzen ;)

Was aber duchaus stimmt: Auch mit GOTOs ärgert man eine Pipeline ganz schön, aber auch mit calls und jumps.
Der wirkliche Grund dafür dass GOTOs in Ungnade gefallen sind, ist wie bereits erwähnt die Tatsache dass Code dann sehr schnell sehr unleserlich und sehr schwer zu warten wird.

ripper8472 28. Jul 2004 00:43

Re: GOTOs verhindern das RAM-Cachen - ist das richtig?
 
Ich habs noch nie probiert, aber es müsste rein theoretisch möglich sein, mit so einem goto aus ner Rekursion zu springen, *irgendwo anders* weiterzumachen, dann wieder in die Rekursion zurückzuspringen und regulär beenden. Muss man nur zusehen, dass man nur dann zurückspringt, wenn der Stackpointer auch wieder die richtige Position hat... Nur mal zum Thema "Schwachsinn mit Calls und Jumps" *g*

dizzy 28. Jul 2004 00:54

Re: GOTOs verhindern das RAM-Cachen - ist das richtig?
 
Hmmm, ich wage mal zu vermuten, dass die Labels/Sprungmarken lokal begrenzt sind, du also nur innerhalb einer Prozedur hüpfen kannst.
Aber prinzipiell ist es ja auch in einer normalen Rekursion möglich kurz rauszuspringen, da du ja auch Funktionsaufrufe dort machen kannst. Nur ist der Rücksprung halt garantiert.

ripper8472 28. Jul 2004 15:45

Re: GOTOs verhindern das RAM-Cachen - ist das richtig?
 
aber die Pipelines werden in jedem Fall geleert! :-D

Tubos 28. Jul 2004 18:53

Re: GOTOs verhindern das RAM-Cachen - ist das richtig?
 
Zitat:

Nochmal zum Thema Pipelining: Der Cache kann keinen Sprung vorhersagen, da der Sprung letztendlich vom Prozessor ausgeführt wird. Und sobald der Opcode in der CPU ist, hat er den Cache bereits passiert. Eine 100% zuverlässige Sprungvorhersage ließe sich nur mit einem 2. vorgeschalteten Prozessor machen, der zumindest Sprünge erkennt, und auch deren Ziele berechnen kann. Und das so schnell, dass durch das Springen im RAM, im Cache kein Bubble entsteht. Und für die entsprechende Schnelligkeit wäre für diesen Prä-Prozessor bestimmt auch eine Pipeline nötig... . Ist eine Frage von Kosten/Nutzen
Wäre das dann Hyperthreading?

Werden Sprünge jetzt gecacht oder nicht?

ripper8472 28. Jul 2004 20:59

Re: GOTOs verhindern das RAM-Cachen - ist das richtig?
 
Sprünge werden nicht gecacht, um es einfach auszudrücken. Der Prozessor kann nicht vorahnen, wohin gesprungen wird.

HyperThreading (von Intel) simuliert 2 CPUs. Wenn eine CPU mit dem Cachen beschäftigt ist, bekommt die andere die volle physische Zeit. Sonst teilen sich beide die physische CPU.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:06 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz