AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein GOTOs verhindern das RAM-Cachen - ist das richtig?
Thema durchsuchen
Ansicht
Themen-Optionen

GOTOs verhindern das RAM-Cachen - ist das richtig?

Ein Thema von Tubos · begonnen am 27. Jul 2004 · letzter Beitrag vom 30. Jul 2004
Antwort Antwort
Seite 2 von 3     12 3      
NicoDE
(Gast)

n/a Beiträge
 
#11

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

  Alt 27. Jul 2004, 22:08
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.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#12

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

  Alt 27. Jul 2004, 22:31
Hm, ich schon. Nur weil zusätzlich noch was auf den Stack gelegt wird, wird trotzdem gesprungen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#13

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

  Alt 27. Jul 2004, 23:57
Ob ihr das nun Sprung nennen wollt oder nicht, der Programmzeiger wird trotzdem auf einen anderen Speicherbereich gesetzt. Und das bei Call und Jump.
Christoph
char l[]="\xd6N\x96\xa6\xe6\xce.\xa6\xe4\xce\x04N\x86\xae\ xce\xfc",I,*i=l-1;for(;I=3,*i
++;){while(*i=*i&~(1<<I|1<<7-I)|(*i&1<<I)<<7-2*I|(*i&1<<7-I)>>7-2*I,I--);}puts(l);
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#14

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

  Alt 28. Jul 2004, 00:04
fast OT: goto landet im Nirwana. Das ist das Problem. Strukturierte Programmierung ist damit fast unmöglich. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#15

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

  Alt 28. Jul 2004, 00:26
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.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#16

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

  Alt 28. Jul 2004, 00:43
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*
Christoph
char l[]="\xd6N\x96\xa6\xe6\xce.\xa6\xe4\xce\x04N\x86\xae\ xce\xfc",I,*i=l-1;for(;I=3,*i
++;){while(*i=*i&~(1<<I|1<<7-I)|(*i&1<<I)<<7-2*I|(*i&1<<7-I)>>7-2*I,I--);}puts(l);
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#17

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

  Alt 28. Jul 2004, 00:54
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.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#18

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

  Alt 28. Jul 2004, 15:45
aber die Pipelines werden in jedem Fall geleert!
Christoph
char l[]="\xd6N\x96\xa6\xe6\xce.\xa6\xe4\xce\x04N\x86\xae\ xce\xfc",I,*i=l-1;for(;I=3,*i
++;){while(*i=*i&~(1<<I|1<<7-I)|(*i&1<<I)<<7-2*I|(*i&1<<7-I)>>7-2*I,I--);}puts(l);
  Mit Zitat antworten Zitat
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#19

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

  Alt 28. Jul 2004, 18:53
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?
Lukas
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#20

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

  Alt 28. Jul 2004, 20:59
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.
Christoph
char l[]="\xd6N\x96\xa6\xe6\xce.\xa6\xe4\xce\x04N\x86\xae\ xce\xfc",I,*i=l-1;for(;I=3,*i
++;){while(*i=*i&~(1<<I|1<<7-I)|(*i&1<<I)<<7-2*I|(*i&1<<7-I)>>7-2*I,I--);}puts(l);
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 Uhr.
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