AGB  ·  Datenschutz  ·  Impressum  







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

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 1 von 3  1 23   
Tubos

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

GOTOs verhindern das RAM-Cachen - ist das richtig?

  Alt 27. Jul 2004, 21:46
Hallo;

mein Informatik-Lehrer hat vor längerer Zeit mal gesagt, dass wir u.a. deshalb keine GOTOs (Programmiersprache egal, aber in unserem Fall geht es um C) verwenden sollen, weil wir dadurch das korrekte Arbeiten des Caches verhindern.

Konkret: der Cache ladet immer die Daten aus dem RAM nach, die vorraussichtlich benötigt werden. Durch eine goto-Anweisung springt die Programmausführung woanders hin und alles, was schon geladen wurde, kann der dann "wegschmeißen" und muss neu laden.
Ungefähr so hat er es erklärt.

Stimmt das?

Wenn ja, wieso gibt es dieses Problem bei Schleifen, etc... nicht?

Danke;
Tubos.
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von mischerr
mischerr

Registriert seit: 6. Feb 2004
Ort: Konz
238 Beiträge
 
Delphi 10.3 Rio
 
#2

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

  Alt 27. Jul 2004, 21:50
Halte ich für ein Gerücht, damit man sich sowas garnicht erst angewöhnt.

Grüsse!
  Mit Zitat antworten Zitat
Tubos

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

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

  Alt 27. Jul 2004, 21:58
möglich...wir haben goto gar nicht gelernt *g*
Lukas
  Mit Zitat antworten Zitat
rantanplan99
(Gast)

n/a Beiträge
 
#4

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

  Alt 27. Jul 2004, 22:05
ähm. Also ich dachte immer BASIC sei die einzige Hochsprache die einen "GOTO" Befehl hat. Hab ich mich da jetzt mit einer Bildungslücke geoutet?
  Mit Zitat antworten Zitat
Chewie

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

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

  Alt 27. Jul 2004, 22:08
Das ist schon richtig, bezieht sich aber nicht nur auf GOTOs, sondern auf jede Art von Sprüngen, also auch Funktionsaufrufe.

Der Grund ist folgender: Wird eine Anweisung ausgeführt, ist es sehr wahrscheinlich, dass die ncächsten Anweisungen ebenfalls ausgeführt werden. Deshlab werden die in den Cache vorgeladen.
Erfolgt jetzt ein Sprung, sind auf einmal nicht die Daten im Cache, die als nächstes gebraucht werden, sondern andere.
Das ganze Konzept des Vorladens nennt sich Pipelining und die Löcher nennt man Bubbles. Und Intels "Hyperthreading" (bei AMD gibts das auch, heißt nur anders) führt jetzt Code aus, während die Daten anderswo geladen werden.
Zumindest hab ich das so in meinen Rechnerarchitektur-Vorlseungen verstanden
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Chewie

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

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

  Alt 27. Jul 2004, 22:09
Zitat von rantanplan99:
ähm. Also ich dachte immer BASIC sei die einzige Hochsprache die einen "GOTO" Befehl hat. Hab ich mich da jetzt mit einer Bildungslücke geoutet?
Ja.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von mischerr
mischerr

Registriert seit: 6. Feb 2004
Ort: Konz
238 Beiträge
 
Delphi 10.3 Rio
 
#7

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

  Alt 27. Jul 2004, 22:22
Aber ist es mittlerweile nicht schon soweit, dass moderne CPUs versuchen den zu verarbeitenden Code vorab zu interpretieren und so auch bereits den Sprung erkennen (könnten)? Da ein OP-Code i.d.R. ja je Befehl eine feste Länge hat, liesse sich doch so bereits der potentielle Zielbereich cachen!?

Grüsse!
  Mit Zitat antworten Zitat
Tubos

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

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

  Alt 27. Jul 2004, 22:26
@rantanplan99: Ich kann kein Basic, ich weiß nur dass es sowohl in Pascal als auch in C++ einen Befehl namens goto gibt.

Zitat:
Das ist schon richtig, bezieht sich aber nicht nur auf GOTOs, sondern auf jede Art von Sprüngen, also auch Funktionsaufrufe.

Der Grund ist folgender: Wird eine Anweisung ausgeführt, ist es sehr wahrscheinlich, dass die ncächsten Anweisungen ebenfalls ausgeführt werden. Deshlab werden die in den Cache vorgeladen.
Erfolgt jetzt ein Sprung, sind auf einmal nicht die Daten im Cache, die als nächstes gebraucht werden, sondern andere.
Das ganze Konzept des Vorladens nennt sich Pipelining und die Löcher nennt man Bubbles. Und Intels "Hyperthreading" (bei AMD gibts das auch, heißt nur anders) führt jetzt Code aus, während die Daten anderswo geladen werden.
Zumindest hab ich das so in meinen Rechnerarchitektur-Vorlseungen verstanden
wow...also bei jedem Funktionsaufruf sind die Daten des Caches sinnlos und müssen neu geladen werden?
das ist ziemlich heftig
Lukas
  Mit Zitat antworten Zitat
ripper8472

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

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

  Alt 27. Jul 2004, 22:49
Zitat von Tubos:
wow...also bei jedem Funktionsaufruf sind die Daten des Caches sinnlos und müssen neu geladen werden?
[edit]
Ich hoffe, die heutigen Sprungvorhersagealgorithmen können wie schon angedacht solche Sprungbefehle berücksichtigen und dementsprechend anders cachen.
[/edit]

Wenn das wirklich stimmen sollte, dann ist ja ein Funktionsaufruf fast so "schlimm" wie ein GOTO
Der einzige Grund, ein goto nicht zu benutzen, ist, dass dabei nicht auf Verschachtelungen (also den Stack) geachtet wird. Wenn du in einer Rekursion bist und mit GOTO plötzlich ausbrichst, dann hast du das Problem, dass die ganzen gepushten Daten der Funktionsaufrufe noch aufm Stack sind während du schon wieder ganz woanders bist. Ich benutze nie GOTOs, weil alle Angst vor GOTOs haben und ich keinem einen GOTO-durchsetzten Code zumuten will. Einen Code mit GOTOs zu schreiben, dürfte auch ein guter "Kopierschutz" sein (solange es kein OpenSource ist...)
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
Chewie

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

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

  Alt 27. Jul 2004, 23:01
Auf Maschinenebene gibt es nur Sprünge, keine Funktionen. Man kann also mit gotos den gleichen Code erzeugen wie mit Funktionen. gotos werden nur geschmäht, weil sie sehr unübersichtlich sind. Funktionen sind abgeschlossene Blöcke, wärehdn Sprungmarken mitten in Blöcken vorkommen und sich eine goto-Sequenz wie Spaghetti durch deinen Code schlängeln kann (daher auch der Name).
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:59 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