czym dokładnie jest "maszyna rejestrująca"?

Z http://code.google.com/p/unladen-swallow/wiki/ProjectPlan cytuję:

" używanie JIT pozwoli nam również przenieść Pythona z maszyny opartej na stosie do maszyny rejestrującej, co wykazano, że poprawia wydajność w innych podobnych językach (Ierusalimschy et al, 2005; Shi et al, 2005)."

W college ' u zbudowałem prosty kompilator dla języka z procedurami rekurencyjnymi - które utrzymywały ramki stosu dla każdej wywołanej procedury - tak aby mogły być wywołane rekurencyjnie i tak, że parametry i wartości zwracane będą działać....

2 rzeczy:

1) Czy mam rację myśląc, że to, co zaimplementowałem, byłoby uważane za "maszynę opartą na stosie", biorąc pod uwagę terminologię używaną w powyższym cytacie?

2) Jeśli moje założenie w punkcie (1) było słuszne, jak działa "maszyna rejestrująca"? czyli czym się różni od maszyny opartej na stosie?

Dzięki!

Author: daf, 2009-10-26

6 answers

Maszyna rejestrująca to urządzenie sprzętowe lub programowe, które podczas pracy z danymi pobiera je z pamięci, umieszcza w miejscu, w którym może szybko z nimi pracować, a następnie zwraca wynik.

Na przykład zwykły procesor jest maszyną rejestrującą. Ponieważ Alu (Jednostka pracująca z numerami w procesorze) może pracować tylko z numerami w rejestrze.

Maszyna oparta na stosie dodaje dane do stosu, a następnie wyskakuje lub wypycha na niego rzeczy.

Na przykład, dodanie dwóch liczby będą

Push 2 // Push 2 onto the stack
Push 3 // Push 3 onto the stack
Add // Add the top two things on the stack.

Gdy w maszynie rejestrującej byłoby to coś takiego.

Load x, r0 // Load x onto register 0
Load y, r1 // Load y onto register 1
Add r0, r1, r2 // Add 1 and 2 and store the result in register 2
 21
Author: Ólafur Waage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-26 02:58:01

Maszyna rejestrująca prawie zawsze ma stos.

Ale maszyna stosowa rzadko ma architektonicznie widoczne rejestry, lub może mieć tylko jeden lub dwa.

Maszyna rejestrująca może mieć pewne operacje stosu, a nawet może mieć tryb adresowania stosu.

Różnica polega na orientacji. Maszyna rejestrująca będzie w większości posiadała instrukcje operujące na rejestrach i będzie miała garść ops do ładowania i przechowywania między rejestrami a stosem lub pamięć.

Maszyna stosu .. i są one bardzo rzadkie jako rzeczywiste urządzenia sprzętowe .. będzie działać bezpośrednio na stosie z jego instrukcji i wll mają handlful ops do ładowania i przechowywania między stosu i pamięci.

Powody, dla których Maszyny rejestrujące sprzęt są szybsze niż maszyny stosujące sprzęt, prawdopodobnie nie mają związku z powodami, dla których oprogramowanie "rejestruje" maszyny wirtualne są szybsze, zgodnie z cytowanym artykułem, niż maszyny "stosujące" oprogramowanie.

Dla oprogramowanie VM, to najwyraźniej przypadek, że mniej instrukcji trzeba wykonać. Zostało to ustalone empirycznie zgodnie z twierdzeniami przytoczonego artykułu, ale wyobrażam sobie, że dzieje się tak dlatego, że znacznie mniej instrukcji, takich jak push, pop i exchange, trzeba wykonać w maszynie rejestrującej, a także dlatego, że maszyna rejestrująca może łatwo ponownie użyć operandów, jeśli nadal leżą w pliku rejestru, bez potrzeby ładowania lub operacji push. Oczywiście to wszystko tylko pamięć, są wirtualne rejestry.

 11
Author: DigitalRoss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-26 05:18:16

Maszyna rejestrująca używa stałej liczby rejestrów lub łyżek do przechowywania wartości pośrednich do obliczeń. Na przykład instrukcja "add" może dodać wartości do dwóch określonych rejestrów i zapisać wynik w innym rejestrze.

Maszyna oparta na stosie używa stosu do przechowywania wartości pośrednich podczas obliczeń. Na przykład, aby dodać dwie liczby, Instrukcja "add" usuwa dwie wartości ze stosu, dodaje je i wypycha wynik z powrotem na stosie.

 5
Author: Brian Ensink,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-25 23:59:02

1) Czy mam rację myśląc, że to, co wdrożony zostanie uznany za "stack-based machine" biorąc pod uwagę terminologia użyta w notowaniu powyżej?

Nie bardzo. Jakiś stos jest właściwie jedynym sposobem implementacji rekurencyjnych wywołań funkcji. Ale "maszyna oparta na stosie" idzie znacznie dalej w robieniu wszystkiego za pośrednictwem stosu. Nie tylko wywołania funkcji, ale także operacje arytmetyczne. W pewnym sensie zachowują się tak, jakby każda instrukcja maszynowa była wywołanie funkcji obsługiwane przez stos. To sprawia, że bardzo prosta konstrukcja maszyny, ale raczej trudny do napisania asembler/kod maszynowy.

2) Jeżeli moje założenie w pkt (1) było racja, jak " maszyna rejestrująca" praca? czyli czym się różni od maszyna oparta na stosie?

Maszyna rejestrująca posiada szybką pamięć wewnętrzną (rejestry) i wykonuje większość swoich operacji na danych w tych rejestrach. Istnieją dodatkowe instrukcje maszynowe do kopiowania danych między rejestry i pamięć główna.

IIRC istnieją dwa rodzaje maszyn stosowych:

    Urządzenia akumulatorowe mają "akumulator", który jest w zasadzie pojedynczym rejestrem, który przechowuje wynik obliczeń (i może również dostarczać operand), a większość instrukcji maszyny działa na akumulatorze.
  • "czyste" maszyny stosu umieszczają wynik obliczeń na stosie po zużyciu operandów.
 4
Author: Michael Borgwardt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-26 00:21:59

Maszyna rejestrująca jest maszyną abstrakcyjną, której kody opcodes są definiowane przez odniesienie do ich działania na zestawie nazwanych rejestrów, a nie przez ich działanie na górnej części stosu.

W maszynie rejestrującej: add może być zdefiniowany tak, aby przyjmować trzy nazwy rejestrów jako operandy, dodawać zawartość dwóch pierwszych i umieszczać wynik w trzecim. (Bardziej powszechny jest projekt, w którym tylko jeden lub dwa są nazwane, a wynik zawsze trafia do specjalnego rejestru akumulatorów, ale to nie o to chodzi.)

W maszynie stosu: add może być zdefiniowany tak, aby wyskakiwać dwa operandy ze stosu, dodawać je i przesuwać wynik na stosie.

 2
Author: Doug McClean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-25 23:58:21

Czy twój kompilator wygenerował kod maszynowy? Jeśli tak, to jego celem była maszyna rejestrująca (prawie wszystkie konstrukcje procesorów są maszynami rejestrującymi).

Maszyny stosowe przechowują wszystkie wartości na stosie, podczas gdy maszyny rejestrujące mają ustaloną liczbę slotów, których "adresy" nie zmieniają się (w przeciwieństwie do maszyn stosowych).

 2
Author: Artelius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-26 00:02:41