PL165585B1 - Uklad do równoleglego przetwarzania instrukcji w komputerze jednoprocesorowym PL - Google Patents

Uklad do równoleglego przetwarzania instrukcji w komputerze jednoprocesorowym PL

Info

Publication number
PL165585B1
PL165585B1 PL91289724A PL28972491A PL165585B1 PL 165585 B1 PL165585 B1 PL 165585B1 PL 91289724 A PL91289724 A PL 91289724A PL 28972491 A PL28972491 A PL 28972491A PL 165585 B1 PL165585 B1 PL 165585B1
Authority
PL
Poland
Prior art keywords
instruction
instructions
input
output
label
Prior art date
Application number
PL91289724A
Other languages
English (en)
Other versions
PL289724A1 (en
Inventor
Bartholomew Blaner
Stamatis Vassiliadis
Richard James Eickemeyer
Original Assignee
Ibm
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ibm filed Critical Ibm
Publication of PL289724A1 publication Critical patent/PL289724A1/xx
Publication of PL165585B1 publication Critical patent/PL165585B1/pl

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

1. Uklad do równoleglego przetwarzania ins- trukcji w komputerze jednoprocesorowym zawiera- jacy magistrale wejscia - wyjscia, magistrale pamieci oraz pamiec glówna i pamiec podreczna dolaczone do magistrali pamieci, znamienny tym, ze zawiera uklad sprzegania (11) instrukcji, którego wejscie jest dolaczone poprzez adapter wejscia - wyjscia (8) do magistrali wejscia - wyjscia (7), a wyjscia sa dolaczone do magistrali adresów i rozkazów (9a) oraz do magistrali tekstów (9b), stanowiacych magistrale pamieci (9), przy czym adapter wejscia - wyjscia (8) jest dolaczony ponadto do magistrali tekstów (9b), pamiec glówna (10) jest dolaczona do magistrali adresów i rozkazów (9a) oraz do magis trali tekstów (9b), a pamiec podreczna (112) ins trukcji sprzezonych jest dolaczona do magistrali tekstów (9b), oraz zawiera uklad pobierania - wydawania (116) instrukcji, którego wejscie jest dolaczone do wyjscia pamieci podrecznej (112) ins- trukcji sprzezonych, a wyjscie jest dolaczone poprzez magistrale funkcji (17) do wejsc jednostek funkcjonalnych (13,14,15...). FIG. 1 PL

Description

Przedmiotem wynalazku jest układ do równoległego przetwarzania instrukcji w komputerze jednoprocesorowym.
Znane są komputery cyfrowe przyjmujące ciąg instrukcji i wykonujące sekwencyjnie po jednej instrukcji w danej chwili czasowej. Instrukcje realizowane przez takie komputery działają z obiektami o jednej wartości i z tej przyczyny są nazywane „skalarnymi. Szybkość operacyjna tradycyjnych komputerów skalarnych zbliżyła się do wartości granicznych w wyniku postępów technologii układów, metod obliczeniowych i architektury komputerów.
Innym znanym rozwiązaniem zwiększania prędkości obliczeniowej komputerów jednoprocesorowych jest architektura zredukowanego zestawu instrukcji, w której wykorzystuje się ograniczony zestaw bardzo prostych instrukcji. Inne znane rozwiązanie polega na wykorzystaniu architektury zestawu instrukcji złożonych bazującego na minimalnym zestawie złożonych instrukcji wieloargumentowych. Zastosowanie tych znanych rozwiązań w istniejącym komputerze skalarnym wymaga fundamentalnej zmiany zestawu instrukcji i architektury maszyny. Takie daleko idące zmiany prowadzą do dużych wydatków, straty czasu i występującego w początkowym okresie zmniejszenia niezawodności i gotowości maszyny.
Podczas prób wykorzystania w maszynych skalarnych zredukowanego zestawu instrukcji, opracowane zostały tak zwane komputery „superskalarne. Są to w zasadzie maszyny skalarne, w których zwiększenie wydajności uzyskuje się w wyniku przystosowania ich do równoczesnego wykonywania więcej niż jednej instrukcji, które to instrukcje są pobierane z potoku instrukcji zawierającego ciąg pojedynczych instrukcji skalarnych. Maszyny te zwykle w czasie wykonywania instrukcji podejmują decyzję czy dwie, lub więcej, instrukcje z ciągu instrukcji skalarnych mogą być wykonywane równolegle. Decyzja jest podejmowana na podstawie kodów operacji instrukcji i zależnie od wpółzależności danych, która może występować pomiędzy instrukcjami. Kod operacji określa wymagany dla danej instrukcji sprzęt komputera. ’
Zwykle nie jest możliwe równoległe wykonywanie dwu lub większej liczby instrukcji wykorzystujących ten sam sprzęt (zależność od sprzętu) lub te same argumenty (zależność od danych). Te zależności od sprzętu i od danych uniemożliwiają równoległe wykonywanie niektórych kombinacji instrukcji. W tych przypadkach rozpatrywane instrukcje są wykonywane szeregowo. Oczywiście zmniejsza to wydajność maszyny superskalarnej. W czasie wykonywania instrukcji określona ilość czasu jest zużywana na podjęcie decyzji o możliwości równoległego wykonywania instrukcji. Ten czas nie może być łatwo ukryty poprzez nakładanie innych operacji maszynowych. Wada ta staje się jeszcze bardziej wyraźna w miarę wzrostu złożoności zestawu instrukcji. Decyzja o równoległym wykonywaniu instrukcji musi być powtarzana każdorazowo również przed wykonywaniem tych samych instrukcji.
Przy wydłużaniu czasu eksploatacji istniejących komputerów skalarnych istotny staje się każdy sposób przyspieszenia pracy. Jednak przyspieszenie pracy istniejących maszyn skalarnych przy zastosowaniu architektury bazującej na zestawie instrukcji zredukowanych, architektury bazującej na zestawie instrukcji złożonych lub technik superskalarnych jest potencjonalnie zbyt kosztowne lub zbyt kłopotliwe, aby mogło być brane pod uwagę. Przyspieszenie pracy takich komputerów zaleca się przeprowadzać przez stosowanie równoległego lub współbieżnego wykonywania instrukcji przy zachowaniu istniejącego zestawu instrukcji, co nie wymaga zmiany zestawu instrukcji, zmiany architektury maszyny lub zwiększenie czasu wymaganego dla wykonywania instrukcji.
W zgłoszeniu patentowym nr P. 289 722 jest przedstawione rozwiązanie sposobu przetwarzania instrukcji sprzężonych, w którym równoległość na poziomie instrukcji uzyskano w rezultacie statystycznej analizy ciągu instrukcji skalarnych przeprowadzonej odpowiednio wcześniej, zanim działanie instrukcji spowoduje wygenerowanie instrukcji sprzężonych, utworzonych w wyniku
165 585 grupowania sąsiednich instrukcji w ciąg instrukcji nadających się do wykonywania równoległego. Do potoku instrukcji jest dołączana związana informacja sterująca w postaci etykiet, służąca do wskazywania początku instrukcji sprzężonej oraz wskazania liczby wcześniej istniejących instrukcji połączonych w instrukcję sprzężoną. Używane tutaj określenie „sprzęganie, dotyczy grupowania instrukcji znajdujących się w ciągu instrukcji, przy czym grupowanie wykonywane jest w celu współbieżnego lub równoległego wykonywania zgrupowanych instrukcji. Minimalne sprzęganie sprowadza się do „łączenia pary dwu instrukcji przeznaczonych do równoczesnego wykonania. Wskazane jest, aby postać instrukcji sprzężonych nie różniła się od postaci tych instrukcji stosowanych do realizacji skalarnej.
Istotą układu do równoległego przetwarzania instrukcji w komputerze jednoprocesorowym, według wynalazku, zawierającego magistralę wejścia - wyjścia, magistralę pamięci oraz pamięć główną i pamięć podręczną dołączoną do magistrali pamięci, jest to, że zawiera układ sprzęgania instrukcji, którego wejście jest dołączone poprzez adapter wejścia - wyjścia do magistrali wejścia -wyjścia, a wyjścia są dołączone do magistrali adresów i rozkazów oraz do magistrali tekstów stanowiących razem magistralę pamięci, przy czym adapter wejścia - wyjścia jest dołączony ponadto do magistrali tekstów, pamięć główna jest dołączona do magistrali adresów i rozkazów oraz do magistrali tekstów, a pamięć podręczna instrukcji sprzężonych jest dołączona do magistrali tekstów, oraz zawiera układ pobierania - wydawania instrukcji, którego wejście jest dołączone do wyjścia pamięci podręcznej instrukcji sprzężonych, a wyjście jest dołączone poprzez magistralę funkcji do wejść jednostek funkcjonalnych.
Korzystnie jest, gdy zgodnie z wynalazkiem wejście pamięci głównej jest połączone z adapterem wejścia - wyjścia poprzez jeden z dwóch buforów stron, układ sprzęgania instrukcji i dwa połączone równolegle bufory instrukcji sprzężonych, zaś wyjście pamięci głównej jest połączone z adapterem wejścia - wyjścia poprzez jeden z dwóch buforów stron.
Inne korzyści z wynalazku uzyskuje się, gdy układ sprzęgania instrukcji zawiera jednostkę sprzęgania instrukcji zbudowaną z rejestru instrukcji, którego wyjścia są dołączone do analizatorów sprzężeń, przy czym wyjścia tych analizatorów są połączone poprzez generator etykiet do rejestru wyjściowego.
Dalsze korzyści z wynalazku uzyskuje się, gdy analizator sprzężeń zawiera pierwszy układ logiczny zgodności instrukcji dołączony do pierwszego wejścia pierwszego elementu I, przy czym do jego drugiego wejścia jest dołączony pierwszy układ logiczny zależności rejestrów, oraz drugi układ logiczny zgodności dołączony do pierwszego wejścia drugiego elementu I, przy czym do jego drugiego wejścia jest dołączony drugi układ logiczny zależności rejestrów. Następnie zgodnie z wynalazkiem pierwszy układ logiczny zgodności instrukcji zawiera dekodery, przy czym pierwsze wyjście pierwszego dekodera jest dołączone do pierwszego wejścia trzeciego elementu I, którego drugie wejście jest dołączone do pierwszego wyjścia drugiego dekodera, drugie wyjście pierwszego dekodera jest dołączone do pierwszego wejścia czwartego elementu I, którego drugie wejście jest dołączone do pierwszego wyjścia drugiego dekodera, drugie wyjście drugiego dekodera jest dołączone do pierwszego wejścia piątego elementu I i do pierwszego wejścia szóstego elementu I, zaś drugie wejścia tych elementów są dołączone do pierwszego wyjścia trzeciego dekodera. Następnie wyjścia trzeciego i czwartego elementów I są dołączone do pierwszego elementu LUB, a wyjścia piątego i szóstego elementów I są dołączone do drugiego elementu LUB. Wyjście pierwszego elementu LUB jest dołączone do pierwszego elementu NIE i do pierwszego wejścia trzeciego elementu LUB w generatorze etykiet, a wyjście drugiego elementu LUB jest dołączone poprzez drugi element NIE do drugiego wejścia trzeciego elementu LUB w generatorze etykiet.
Korzystne jest ponadto, gdy według wynalazku jednostka sprzęgania instrukcji jest dołączona poprzez pamięć główną i pamięć podręczną do układu sterującego pobierania - wydawania, który jest następnie połączony z pierwszym układem funkcjonalnym, drugim układem funkcjonalnym, trzecim układem funkcjonalnym oraz z czwartym układem funkcjonalnym zawierającym zespół rejestrów ogólnego zastosowania i szybką pamięć podręczną.
Zaletą układu według wynalazku zawierającego środki do równoległego wykonywania wielu instrukcji bazujące na strukturze pamięci przeznaczonej do sprzęgania instrukcji przed ich pobraniem i wykonaniem i będące częścią składową hierarchicznej struktury pamięciowej dostarczającej
165 585 instrukcje do jednostki centralnej komputera jest to, że struktura typu ma zwykle bardzo szybką pamięć podręczną zawierającą często używane instrukcje, połączoną z tą pamięcią pamięć główną lub pamięć pierwotną o mniejszej szybkości i pamięć pomocniczą o dużej pojemności. Zwykle w pamięci podręcznej i pamięci głównej znajdują się instrukcje, które mogą być bezpośrednio wywołane do wykonania. Dostęp do instrukcji w pamięci pomocniczej uzyskuje się przez układy wejścia - wyjścia włączone między pamięcią główną i pamięcią pomocniczą. Zaletą rozwiązania według wynalazku, w którym w pamięci głównej ulokowane są dane i instrukcje, do których jednostka centralna ma natychmiastowy dostęp i które wykorzystuje w czasie pracy, jest zwiększenie całkowitej wydajności komputera skalarnego. W rozwiązaniu zgodnie z wynalazkiem, przechowywanie w pamięci głównej informacji określającej etykietę grupy pozwala wielokrotnie wykorzystywać tę informację, to jest przez cały czas, w którym rozkazy pozostają w pamięci głównej.
Instrukcje z pamięci głównej po ich przejściu do pamięci podręcznej często pozostają w tej pamięci wystarczająco długo, co pozwala na ich większe od jednorazowego wykorzystanie.
Przedmiot wynalazku jest uwidoczniony w przykładzie wykonania na rysunku, na którym: fig. 1 przedstawia schemat blokowy układu według wynalazku, fig. 2A - 2D przedstawiają alternatywne realizacje przechowywania informacji określającej etykietę sprzężenia pamięci głównej, fig.3 przedstawia szczegółową strukturę realizującą przepływ danych pomiędzy układem wejścia wyjścia i pamięcią główną w układzie przedstawionym na fig. 1, fig. 4 - przebiegi czasowe dla przesłania instrukcji w pokazanej na fig. 3 strukturze realizującej przepływ danych, fig. 5a - długość strumienia instrukcji z etykietą sprzężenia lub obszary etykiet związane z instrukcjami, fig. 5b -długość potoku instrukcji z granicznymi obszarami instrukcji, które są związane z instrukcjami, fig. 6 - wewnętrzną strukturą jednostki sprzęgania instrukcji, która może być zastosowana w układzie pokazanym na fig. 1, fig. 7 - szczegółową strukturę każdego analizatora sprzęgania z przedstawionych na fig. 3, fig. 8 - schemat układu logicznego, który może być wykorzystany do realizacji bloków analizatora sprzężeń i generatora etykiet pokazanych na fig. 6 i który wytwarza etykiety sprzężeń dla trzech pierwszych instrukcji w potoku instrukcji, fig. 9 - tabelę wykorzystywaną do wyjaśnienia działania układu z fig. 8, fig. 10 - wykonanie układu, służące także do wyjaśnienia w jaki sposób instrukcje sprzężone mogą być przetwarzane równolegle w wielu funkcyjnych jednostkach przetwarzania instrukcji, fig. 11 - przykład sekwencji instrukcji, która może być przetwarzana w układzie pokazanym na fig. 10, a fig. 12 przedstawia tabelę wykorzystywaną do wyjaśniania przetwarzania sekwencji instrukcji z fig. 11 w układzie przedstawionym na fig. 10.
Na figurze 1 przedstawiono typowe dla niniejszego wynalazku wykonanie. Przedstawiony układ może wykonywać równolegle dwie lub większą liczbę instrukcji. Ma on pamięć o strukturze hierarchicznej, w której pomocnicze lub wtórne urządzenia pamięciowe są połączone z komputerem magistralą wejścia - wyjścia przez układ adaptera, który jest również dołączony do magistrali pamięci. Z magistralą pamięci jest połączona pamięć główna i bardzo szybka pamięć podręczna. Taka struktura hierarchiczna umożliwia zwykle elementom obliczeniowym komputera uzyskanie bezpośredniego dostępu lub odwołania się do zawartości pamięci głównej i pamięci podręcznej w tym samym czasie, w którym układ adaptera realizuje dostęp do pamięci pomocniczej. W pamięci są przechowywane instrukcje i dane, do których musi istnieć dostęp, lub z których należy korzystać przy wykonywaniu bieżących operacji komputera. Gdy informacje te nie są już potrzebne, są zwracane do pamięci pomocniczej poprzez układ adaptera, natomiast do pamięci głównej są wprowadzane nowe instrukcje i dane. Pamięć podręczna zapewnia jednostce centralnej bardzo szybki dostęp i jest wykorzystywana do pamiętania instrukcji i danych używanych na bieżąco lub tych danych, dla których istnieje duże prawdopodobieństwo, że będą następnie wykorzystywane przez jednostkę centralną.
Przystępując do szczegółowego omawiania fig. 1 należy zauważyć, że układ ma pierwszy mechanizm pamięciowy do pamiętania instrukcji i danych, które będą przetwarzane. Ten mechanizm pamięciowy jest zidentyfikowany jako pamięć główna 10. Pamięć główna 10 jest dołączona do magistrali pamięci 9 zawierającej magistralę adresów i rozkazów 9a oraz magistralę tekstów 9b. Pamięć główna 10 wymienia instrukcje i dane z adapterem wejścia - wyjścia 8 przez magistralę pamięci 9. Adapter wejścia - wyjścia 8 jest dołączony do magistrali pamięci 9 i do magistrali wejścia
165 585
- wyjścia 7. Zakłada się, że do magistrali wejścia - wyjścia 7 jest dołączone jedno lub większa liczba pomocniczych urządzeń pamięciowych, nie pokazanych na rysunku. Adapter 8 przesyła dane przez magistralę wejścia - wyjścia 7 przesyłając do pamięci informacje wykorzystywane w programie i pobierając z pomocniczych urządzeń pamięciowych informacje wykorzystywane w programie.
Adapter 8 realizuje również wymianę danych programu znajdujących się na magistrali pamięci z pamięcią główną 10 i przesyłając i pobierając instrukcje i dane do i z pamięci głównej 10 przez magistralę pamięci 9. Adapter 8 pełni funkcje bufora instrukcji i danych pomiędzy obu magistralami 7 i 9, które mogą charakteryzować się różnymi prędkościami i formatami. Adapter 8 realizuje także funkcje kontroli i obróbki błędów.
Pamięć główna 10 ma stosunkowo dużą pojemność i średnią szybkość działania oraz przez magistralę pamięci 9 jest połączona z pamięcią podręczną o mniejszej pojemności i większej prędkości działania. Ta pamięć jest identyfikowana jako pamięć podręczna 1) instrukcji sprzężonych.
Układ pokazany na fig. 1 ma również układ sprzęgania 11 instrukcji do odbierania instrukcji z adaptera 8 i łączenia tych instrukcji z ich etykietą sprzężenia umieszczoną w obszarach etykiet wskazujących, które instrukcje mogą być przetworzone równolegle. Układ sprzęgania 11 instrukcji analizuje przychodzące instrukcje w celu ustalenia, które z nich mogą być przetwarzane równolegle. Ponadto układ ten wytwarza dla tych przeanalizowanych instrukcji etykietę sprzężenia w postaci instrukcji wspisanej do pół etykiety i wskazującej, które instrukcje mogą, a które nie mogą być przetwarzane równolegle.
Jak pokazano na fig. 1, instrukcje są dostarczane do komputera z pamięci pomocniczej przez adapter 8, jednostkę sprzęgania instrukcji 11 i pamięć główną 10. Pamięć główna 10 przejmuje i zapamiętuje przeanalizowane instrukcje i związane z nimi pola etykiet. Następnie pamięć główna dostarcza przeanalizowane instrukcje i związane z nimi pola etykiet do pamięci podręcznej 11) instrukcji sprzężonych. Pamięć podręczna 11) w porównaniu z pamięcią główną 10 ma mniejszą pojemność i wyższą prędkość oraz należy do klasy pamięci używanych zwykle do podniesienia wydajności komputera przez zredukowanie częstotliwości dostępu do pamięci głównej 10.
Układ pokazany na fig. 1 ma także wiele jednostek funkcjonalnych przetwarzających instrukcje. Jednostki funkcjonalne przetwarzające instrukcje są przedstawione na tej figurze jako jednostki 13,14,15.... Te jednostki funkcjonalne 13,14,15 pracują równolegle w sposób współbieżny i każda z nich może przetwarzać jeden lub więcej rodzajów instrukcji maszynowych. Przykładem jednostek funkcjonalnych, które mogą znaleźć zastosowanie, mogą być jednostki arytmetyczno -logiczne ogólnego zastosowania, jednostki arytmetyczno - logiczne generacji adresu, jednostki arytmetyczno - logiczne do komasacji zależności od danych, jednostki przetwarzające instrukcje skoku, jednostki przetwarzające dla operacji zmiennoprzecinkowych itd. Konkretny komputer cyfrowy może mieć dwa lub więcej rodzajów jednostek funkcjonalnych tego typu. Na przykład może mieć dwie lub więcej jednostek arytmetyczno - logicznych ogólnego zastosowania. Zatem konkretny komputer może mieć każdą i dowolną z wyżej podanych różnych rodzajów jednostek funkcjonalnych.
Układ przedstawiony na fig. 1 ma także układ pobierania - wydawania 116 instrukcji połączony z pamięcią podręczną 11) instrukcji złożonych, służących do dostarczania sąsiednich przechowywanych w tej pamięci instrukcji do różnych jednostek funkcjonalnych 13,14,15 przetwarzających instrukcje w sytuacji, gdy etykiety instrukcji wskazują, że instrukcje te mogą być przetwarzane równolegle. Układ pobierania - wydawania 116 instrukcji pobiera instrukcje z pamięci podręcznej 1), sprawdza zawartość obszarów ich etykiet i kodu operacji i na podstawie wyników tych operacji sprawdzających wysyła instrukcje do odpowiednich jednostek funkcjonalnych 13,14, 15. Jeżeli potrzebna instrukcja znajduje się w pamięci podręcznej 11) instrukcji złożonych, wówczas do pamięci podręcznej 11) jest wysyłany odpowiedni adres w celu pobrania z tej pamięci żądanej instrukcji. Niekiedy jest to nazywane „trafieniem w pamięć podręczną.
W przypadku, gdy żadna instrukcja nie znajduje się w pamięci podręcznej 11), wówczas trzeba ją pobrać z pamięci głównej 10 i umieścić w pamięci podręcznej 11). Jest to niekiedy nazywane „chybieniem pamięci podręcznej. W przypadku takiego chybienia, adres żądanej instrukcji jest wysyłany do pamięci głównej 10. Pamięć główna 10 reaguje rozpoczęciem wysyłania lub czytania
165 585 wiersza instrukcji zawierającą żądaną instrukcję łącznie z obszarami etykiet instrukcji znajdujących się w wierszu. Chybienie pamięci podręcznej powoduje konieczność odwołania się do pamięci głównej 10 w celu określenia, czy żądana instrukcja znajduje się w pamięci głównej 10. Instrukcje zwykle są przechowywane w pamięci głównej 10 w postaci bloków nazywanych „stronami, a układ zarządzania pamięcią, nie pokazany na rysunku, może na podstawie żądanej instrukcji określić, czy w pamięci głównej 10 znajduje się strona, na której jest ta instrukcja. Jeżeli strona ta znajduje się w pamięci głównej 10, wówczas linia zawierająca instrukcję zostaje wysłana lub odczytana z pamięci głównej 10 do pamięci podręcznej 112.
Natomiast w przypadku, gdy w pamięci głównej 10 nie ma poszukiwanej strony z żądaną instrukcją, wówczas ma miejsce „błąd strony, co stwarza konieczność „pobrania brakującej strony z pamięci pomocniczej 112 i umieszczenie jej w pamięci głównej 10. Z chwilą, gdy strona zostanie pobrana, identyfikator brakującej strony jest wysyłany do adaptera 8, który odzyskuje tę stronę, a następnie przez magistralę pamięci 9 dostarczają do pamięci głównej 10, w której zostaje zapamiętana. Strony pobrane w celu zapamiętania w pamięci głównej 10 są przekazywane na wejście układu sprzęgania 11 instrukcji, który przeprowadza analizę tych przechodzących instrukcji i generuje odpowiednią etykietę dla każdej instrukcji. Następnie etykiety i instrukcje są dostarczane do pamięci głównej 10, w której są zapamiętywane, aby w razie potrzeby można byłoby je umieścić w pamięci podręcznej 112 instrukcji sprzężonych.
Chociaż pokazany na fig. 1 układ sprzęgania 11 instrukcji jest włączony pomiędzy adapterem 8 i pamięcią główną 10, to przewiduje się, że układ ten może stanowić wydzielone odgałęzienie magistrali pamięci 9 lub może być dołączony do wejścia pamięci głównej 10.
Pamiętanie instrukcji sprzężonych w pamięci głównej 10 może być realizowane przy wykorzystaniu wielu sposobów, z których część pokazano na figurach 2A-2D. W przykładach na fig. 2A-2D zakłada się, że magistrala tekstu 9b ma szerokość 8 bajtów i dodatkowe linie informacyjne dla etykiet. Zwykle przyjmuje się, że podstawowe przesłania pamięciowe pomiędzy pamięcią główną 10 i pamięcią podręczną 112 instrukcji złożonych wykonuje się za pomocą 64 bajtowych wierszy tej pamięci podręcznej z jednym bitem etykiety dla każdych dwu bajtów tekstu instrukcji. Jeden wiersz pamięci podręcznej 112 jest pokazany w każdym z przykładów na fig. 2A-2D. Liczba bitów etykiety jest generalnie określona przez maksymalną liczbę instrukcji podlegających sprzęganiu i przez informację dostępną dla układu sprzęgania 11 instrukcji.
Najprostszą pod względem sterowania realizację pamiętania etykiety przedstawiono na fig. 2A. Jeżeli przyjąć, że sprzęganie jst ograniczone do dwu instrukcji, to wymagana jest co najmniej jednobitowa etykieta dla każdych dwu bajtów tekstu instrukcji. Zatem w przypadku linii przechowywanej w pamięci pokazanej na fig. 2A dla każdych 64 bitów (to jest co osiem bajtów) wymagane są cztery bity dla etykiety grupy. Jak pokazano na fig. 2A, zapamiętanie tej etykiety wymaga zwiększenia długości słowa z 64 do 68 bitów. Inne, opcjonalne bity etykiety mogą jeszcze powiększyć długość rozszerzonych słów.
Inne podejście, bardziej pasujące do dostępnych technologii pamięci pokazano na fig. 2B. Na fig. 2B wykorzystano oddzielne pamięci tekstu i etykiet, w których zapamiętuje się instrukcje i związaną z nimi etykietę grupy. Pokazana na fig. 2B pamięć etykiety działa równolegle z pamięcią tekstu. Wywiera to wpływ na strukturę pamięci pokazaną na fig. 2B, która to pamięć powinna mieć dodatkowy zestaw linii etykiet tworzący magistralę etykiet w magistrali pamięci 9, dla umożliwienia równoległego działania pamięci tekstu i pamięci etykiet. To rozwiązanie ma szereg zalet w porównaniu z pokazanym na fig. 2A rozwiązaniem bazującym na zwiększonej długości słowa. Po pierwsze pamięć etykiet może pokrywać tylko część słów znajdujących się w pamięci głównej 10. System operacyjny wykorzystuje określone fragmenty pamięci wyłącznie do przechowywania stron danych (w przeciwieństwie do stron instrukcji), etykiety dla tych fragmentów nie są konieczne. Rozróżnianie stron danych od stron instrukcji może być realizowane sprzętowo lub programowo i może być wykonane przy pomocy rozkazów wysyłanych do pamięci etykiet, które to rozkazy wskazują, że określone strony zawierając tylko dane i z tego względu dla tych stron nie jest wymagane przeadresowywanie stron pamięci na adresy pamięci etykiet. Druga zaleta polega na tym, że pamięć etykiet może być na życzenie usunięta dla uzyskania tańszego komputera. Cecha ta rozszerza zakres wymagań eksploatacyjnych osiągalnych w różnych wykonaniach komputerów. W
165 585 przypadku, gdy dla etykiet potrzebna jest większa liczba bitów , co jest konieczne przy tworzeniu grup o większej od dwu liczbie elementów, pamięć etykiet pokazaną na fig. 2B można zastąpić nową pamięcią etykiet, przy czym nie wymaga to zmian w konstrukcji pamięci głównej 10. Poza tym każda pamięć może być wyposażona we własny układ korekcji błędów.
Na podstawie struktur pokazanych na fig. 2A-2D można stwierdzić, że etykiety sprzężenia wygenerowane w układzie sprzęgania 11 towarzyszą potokowi instrukcji w pamięci, niezależnie od tego czy zostały wplecione do potoku, dołączone do jego fragmentów, względnie są przekazywane równolegle z potokiem.
Inne sposoby wykorzystania pamięci etykiet pokazano na fig. 2C i 2D. W przypadku fig. 2C pierwsza część pamięci głównej 10 zawiera tabelę etykiet, a druga część stanowi pamięć stron tekstów instrukcji. Wymagane działanie systemu operacyjnego w tym przykładzie polega na rezerwacji części pamięci na tabelę etykiet i tworzeniu par stron pamięci ze stronami etykiet. W przypadku fig. 2D część każdej strony jest zarezerwowana dla etykiet. Od kompilatora wymaga się w tym przypadku możliwości tworzenia stron. Przykładowo przy 64-bajtowych wierszach pamięci podręcznej 112 kompilator może wykorzystywać 60 bajtów dla instrukcji i 4 bajty dla etykiet. Zgodnie z fig. 2D, w przypadku żądania odczytu pamięci podręcznej 112 instrukcji przez jednostkę centralną etykiety są poprzedzane bajtami instrukcji.
W nawiązaniu do układu pokazanego na fig. 1 można stwierdzić, że układ sprzęgania 11 można tworzyć część adaptera wejścia - wyjścia 8. Zatem po wprowadzeniu strony w układzie sprzęgania 11 rozpoczyna się proces grupowania instrukcji, a następnie przez magistralę pamięci 9 strona ta jest przekazywana do pamięci głównej 10, zakładając, że strona ma strukturę zgodną z fig. 2A, z powyzszych rozwiązań wynika, że magistrala tekstów 9b ma szerokość 68 bitów i, że pamięć główna 10 jest tak skonfigurowana i sterowana, aby mogła pamiętać strony analogiczne do pokazanych na fig. 2A. Pamięć podręczna 112 instrukcji sprzężonych jest oczywiście skonstruowana i sterowana w taki sposób, aby mogła odbierać wiersze zawierające rozszerzone słowa pokazane na fig. 2A.
W przypadku błędu strony, strona jest ładowana do bufora strony w adapterze 8 i przekazywana do układu sprzęgania 11 instrukcji, zgodnie z poniższym opisem. Pokazane na figurze 3 bufory stron 18a i 18b wysyłają sekwencję stron do układu sprzęgania 11 instrukcji, który rozpoczyna operacje sprzęgania wykonując dodawanie etykiet grupy do instrukcji znajdujących się na stronie. Strony przetworzone przez układ sprzęgania 11 są wprowadzane do pamięci głównej 10 przez bufory stron 19a i 19b instrukcji sprzężonych. Jak pokazano na figurze 4, układ sprzęgania 11 powoduje zwiększenie czasu w stosunku do czasu wymaganego dla pobrania segmentu tekstu z pamięci pomocniczej 112 i wprowadza ten segment do pamięci głównej 10. Przyrost czasu jest mały w stosunku do wymaganego czasu całkowitego, a czynność odbywa się asynchronicznie względem jednostki centralnej.
Zgodnie z fig. 4, każdy segment jest przesyłany z pomocniczego urządzenia pamięciowego, takiego jak pamięć dyskowa do jednego z buforów stron 18a lub 18b. Każdy przedział czasu b1 oznacza czas wymagany do przesłania segmentu tekstu „i“ z buforu strony 18a lub 18b do pamięci głównej 10. Tak więc segment tekstu jest przesyłany w czasie ai do jednego z buforów stron 18alub 18b. Każdy przedział czasu b1 oznacza czas wymagany do przesłania segmentu tekstu „i“ z bufora strony do pamięci głównej 10. Tak więc segment tekstu jest przesyłany w czasie ai do jednego z buforów strony 18a lub 18b, a następnie segment tekstu i + 1 jest przesyłany do drugiego z tych buforów. W przypadku, gdy nie wykonuje się czynności sprzęgania, segment tekstu „i„ jest przesyłany w przedziale czasu b1 z bufora strony, w którym jest aktualnie przechowywany, do pamięci głównej 10. Jak pokazano na fig. 4, ten przedział czasu jest znacznie krótszy od czasu wymaganego na wczytanie strony do jednego z buforów 18a lub 18b.
W praktycznej realizacji wynalazku wymagany czas zajętości układu sprzęgania 11 przez segment tekstu jest określony przez czas wypełnienia jednego z tych buforów strony i czas tracony w buforze 19a lub 19b instrukcji sprzężonej określony przez czas wykonania operacji sprzęgania c1. Zatem jak pokazano na fig. 4, przedział czasu b-ι określa czas wymagany na przesłanie segmentu tekstu „i„ z bufora strony do układu sprzęgania 11. Czas wykonania operacji sprzęgania c1 trwa tak długo, dopóki segment tekstu „i“ jest przetwarzany w układzie sprzęgania 11. Zgodnie z fig. 4 suma
165 585 przedziałów czasowych bi i c1 jest mniejsza od przedziału czasowego ai. Trzeba przypomnieć, że maszyna superskalarna musi w czasie wykonywania instrukcji zadecydować o tym, czy instrukcje mogą być realizowane równolegle. Uzyskanie tej decyzji wiąże się z wykonaniem dyskretnej operacji w procesie wykonania instrukcji, co powoduje znaczne zwiększenie czasu pracy maszyny superskalarnej. W przeciwieństwie do tego, jak ilustruje to fig. 4, operacja grupowania w komputerze pokazanym na fig. 1 nie powoduje znacznego zwiększenia czasu wykonania operacji komputerowych. Zatem układ sprzęgania 11 instrukcji oferuje wyższe osiągi w porównaniu z komputerem umieszczonym w układzie wykonywania instrukcji.
Rysunki na fig. 3 i fig. 4 ilustrują dwie istotne zalety realizacji sprzęgania w pamięci głównej. Po pierwsze, z operacji sprzęgania można uczynić część asynchronicznego procesu związanego z „błędem strony, bez konieczności zwiększania czasu na wykonanie tego procesu. Po drugie, sprzęganie dużych bloków tekstów instrukcji, takich jak strony, daje szerokie możliwości dokładnego rozpatrzenia operacji sprzęgania, co umożliwia zoptymalizowanie tej operacji. Konsekwencją powyższego jest to, że wewnątrzpamięciowa jednostka grupowania instrukcji, jaką przedstawiono na fig. 1, zapewni korzystniejsze osiągi, ponieważ jednostka centralna będzie zawsze wykonywała instrukcje, które zostały sprzężone, a sprzęganie może być lepiej zoptymalizowane niż w przypadku, gdy jest wykonywane synchronicznie na małych odcinkach tekstu instrukcji.
Wyjaśnienie działania układu sprzęgania 11 instrukcji rozpoczniemy od zwrócenia uwagi na figurę 5. Na fig. 5 pokazano część potoku sprzężonych lub zaetykietowanych instrukcji, która może się pojawić na wyjściu układu sprzęgania 11 instrukcji z fig. 1. Jak można zauważyć, każda instrukcja ma pole etykiety dołączone do niej przez układ sprzęgania 11 instrukcji. Instrukcje posiadające etykiety, podobne do pokazanych na fig. 5a, są zapamiętywane w pamięci głównej 10 w postaci bloków tworzących strony instrukcji. W przypadku „chybienia instrukcji są w razie potrzeby przesyłane z pamięci głównej 10 do pamięci podręcznej 112. Następnie instrukcje opatrzone etykietami są pobierane z pamięci podręcznej 112 przez układ pobierania - wydawania 116 instrukcji. Z chwilą, gdy instrukcje z etykietami znajdą się w tym układzie 116 przeprowadzane jest sprawdzanie obszarów etykiet w celu określenia, czy instrukcje mogą być przetwarzane równolegle, a obszary kodów operacji są wprawdzane w celu określenia dostępnej jednostki funkcjonalnej, najbardziej odpowiedniej do przetwarzania tych instrukcji. W przypadku, gdy obszary etykiet wskazują, że dwie lub większa liczba instrukcji nadaje się do przetwarzania równoległego, wówczas instrukcje te są wysyłane do odpowiednich jednostek funkcjonalnych, zgodnie z kodami znajdującymi się w obszarach ich kodów operacji. Takie instrukcje są następnie przetwarzane współbieżnie przez odpowiadające im jednostki funkcjonalne.
Jeżeli napotkana zostanie instrukcja nie spełniająca wymagań przetwarzania równoległego, wówczas instrukcja ta jest przesyłana do odpowiedniej jednostki funkcjonalnej, zgodnie z kodem operacji, gdzie odpowiednio do tego kodu jest indywidualnie przetwarzana w wybranej jednostce funkcjonalnej. W najbardziej idealnym przypadku, gdy zawsze odbywa się równoległe przetwarzanie wielu instrukcji, szybkość wykonywania instrukcji w komputerze będzie N-krotnie wyższa w porównaniu z przypadkiem, gdy w każdej chwili jest wykonywana tylko jedna instrukcja, przy czym N oznacza liczbę instrukcji w grupach, przetwarzanych równolegle.
Potok instrukcji z etykietami przedstawiony na fig. 5a jest łatwiejszy od wstępnego przetworzenia w układzie sprzęgania 11 instrukcji, gdy istnieją znane punkty odniesienia wskazujące początki instrukcji. Takie punkty odniesienia mogą być źródłem dokładnych informacji o tym, gdzie znajdują się granice instrukcji. W wielu komputerach granice instrukcji są dokładnie znane tylko dla komputera w czasie kompilowania i tylko dla jednostki centralnej podczas pobierania instrukcji. Graniczny punkt odniesienia nie jest znany w przedziale czasowym pomiędzy trwaniem kompilacji i pobraniem instrukcji chyba, że zostanie opracowany specjalny schemat granic odniesienia. Taki schemat pokazano na fig. 5b, w którym wykorzystano graniczne bity B instrukcji. Jak pokazano na fig. 5b, bity graniczne mogą być umieszczane w potoku instrukcji przez kompilator w czasie kompilowania, dla uzyskania punktów odniesienia, określających rozmieszczenie instrukcji bezpośrednio przed ich sprzężeniem. Oczywiście definiowanie granic nie jest konieczne w przy10
165 585 padku, gdy granice instrukcji mogą być określone na podstawie potoku tekstowego oraz tam, gdzie potok zawiera wyłącznie instrukcje i wszystkie instrukcje są tej samej długości.
Na figurze 6 pokazano wewnętrzną budowę typowego wykonania jednostki sprzęgania instrukcji według niniejszego wynalazku. Ta jednostka sprzęgania 20 instrukcji może być wykorzystywania jako układ 11 sprzęgania instrukcji pokazany na fig. 1. Przedstawiona na fig. 6 jednostka sprzęgania 20 instrukcji jest skonstruowana dla przypadku, w którym równolegle mogą być przetwarzane w tym samym czasie maksymalnie dwie instrukcje. Nie oznacza to jednak ograniczenia wynalazku wyłącznie do sprzęgania par. W tym przykładzie stosowana jest etykieta jednobitowa. Bit etykiety o wartości „1 (jeden) oznacza, że instrukcja jest „pierwszą instrukcją. Bit etykiety o wartości „0“ (zero) oznacza, że instrukcja jest drugą instrukcją i może być wykonywana równolegle z poprzedzającąją pierwszą instrukcją. Instrukcja z bitem etykiety o wartości „1„ może być wykonywana indywidualnie lub w tym samym czasie równolegle z następną instrukcją, zależnie od wartości bitu etykiety tej następnej instrukcji.
Każde łączenie dwu instrukcji, z których jedna ma bit etykiety o wartości jeden, a następna ma bit etykiety o wartości zero, powoduje utworzenie instrukcji sprzężonej dla przetwarzania równoległego, co znaczy, że instrukcje tej pary mogą być przetwarzane równolegle. W przypadku, gdy bity etykiet dwu kolejnych instrukcji mają jednakowe wartości równe jeden, wówczas pierwsza z tych instrukcji jest wykonywana samodzielnie, bez angażowania następnej instrukcji. W najgorszym możliwym przypadku wszystkie instrukcje sekwencji będą miały bity etykiet o wartości równej jeden. W tym najgorszym przypadku wszystkie instrukcje będą wykonywane kolejno w sposób sekwencyjny.
Potok instrukcji, który ma być poddany operacji sprzęgania jest doprowadzany z adaptera wejścia - wyjścia 8 do jednostki szeregowania instrukcji znajdującej się na wejściu jednostki sprzęgania 20 instrukcji. W potoku instrukcji mogą znajdować się bity graniczne B z fig. 5b. Uszeregowanie instrukcji sprowadza się w tym przypadku do detekcji bitów granicznych i dekodowania kodów operacji instrukcji. Jak wiadomo, w zestawie instrukcji systemu IBM/370 w kodach operacji znajdują się bity określające długość instrukcji wyrażoną w bajtach lub połówkach słów. Zatem, z chwilą gdy zostanie zidentyfikowany bit graniczny B określonej instrukcji, następna instrukcja może być jednoznacznie zidentyfikowana przez obliczenie liczby bajtów lub połówek słów, począwszy od bitu granicznego. Identyfikacja granic instrukcji może odbywać się przy pomocy dowolnego znanego sposobu, włączając w to wykorzystywanie bitów granicznych.
Pokazana na fig, 6 jednostka sprzęgania 20 instrukcji ma rejestr 21 instrukcji do odbierania wielu kolejnych instrukcji z buforów stron 18a i 18b. Jednostka sprzęgania 20 instrukcji ma również rozwiązanie pozwalające na analizę wielu instrukcji według zadanej reguły, przy czym każde z nich analizuje różne pary sąsiadujących z sobą instrukcji w rejestrze 21 instrukcji i wytwarza sygnał sprzęgalności wskazujący czy dwie instrukcje rozpatrywanej pary mogą być przetwarzane równolegle. Na fig. 6 pokazano wiele analizatorów 22,23,24,25 sprzężeń. Każdy z tych analizatorów ma dwa wspomniane rozwiązania pozwalające na mechanizmy analizy instrukcji. W efekcie każdy z tych analizatorów wytwarza dwa sygnały sprzęgalności. Na przykład pierwszy analizator 22 sprzężeń wytwarza pierwszy sygnał analizy sprzęgalności MO1 wskazujący, czy instrukcje „0“ i „1“ mogą być przetwarzane równolegle. Pierwszy analizator 22 sprzężeń wytwarza również drugi sygnał analizy sprzęgalności Mi2 wskazujący, czy instrukcje 1 i 2 mogą być przetwarzane równolegle.
W podobny sposób drugi analizator 23 sprzężeń wytwarza pierwszy sygnał sprzęgalności M23 wskazujący, czy instrukcje 2 i 3 mogą być przetwarzane równolegle oraz wytwarza drugi sygnał sprzęgalności M34 wskazujący, czy instrukcje 3 i 4 mogą być przetwarzane równolegle. Trzeci analizator 24 sprzężeń wytwarza pierwszy sygnał sprzęgalności M45 wskazujący, czy instrukcje 4 i 5 mogą być przetwarzane równolegle, i wytwarza drugi sygnał sprzęgalności M56, wskazujący, czy instrukcje 5 i 6 mogą być przetwarzane równolegle. Czwarty analizator 25 sprzężeń wytwarza pierwszy sygnał sprzęgalności M67 wskazujący, czy instrukcje 6 i 7 mogą być przetwarzane równolegle i wytwarza drugi sygnał sprzęgalności M78, wskazujący, czy instrukcje 7 i 8 mogą być przetwarzane równolegle.
165 585
Jednostka sprzęgania )0 instrukcji ma także generator )6 etykiet reagujący na sygnał sprzęgalności pojawiające się na wyjściach analizatorów )), )3, )4, )5 w celu wygenerowania indywidualnych etykiet dla różnych instrukcji znajdujących się w rejestrze )1 instrukcji. Etykiety TO, T1, T), itd. są dostarczane do rejestru wyjściowego )7 stanowiącego rejestr instrukcji zaetykierowanych wraz z instrukcjami uzyskiwanymi z wejściowego rejestru )1 instrukcji. W ten sposób w rejestrze wyjściowym )7 jednostki sprzęgania )6 uzyskiwane są wartości etykiety T0 dla instrukcji 0, T1 dla instrukcji 1 itd.
W niniejszym wykonaniu pola etykiet T0, T1, T) itd. zajmują jedną pozycję binarną. Etykieta, której wartość binarna wynosi „1“ wskazuje, że najbliższa pojawiająca się instrukcja, z którą ta etykieta jest związana jest „pierwszą instrukcją. Etykieta o wartości binarnej równej „0„ wskazuje, że najbliższa pojawiająca się instrukcja jest „drugą instrukcją. W przypadku, gdy za instrukcją o etykiecie równej „1 pojawia się instrukcja z etykietą równą „0 oznacza to, że te dwie instrukcje mogą być przetwarzane równolegle. Instrukcje z etykietami znajdujące się w rejestrze wyjściowym )7 jednostki sprzęgania )0 są podawane na wejście pamięci głównej 10 pokazanej na fig. 1 przez jeden z buforów 19a lub 19b instrukcji sprzężonej pokazanych na fig. 3. Sprzężone instrukcje są pamiętane w pamięci głównej 10.
Na figurze 7 przedstawiono wewnętrzną strukturę analizatora )) sprzężeń występującego na fig. 6. Inne analizatory )3, )4, )5 mają podobną strukturę. Jak pokazano na fig. 7, analizator )) ma pierwszy układ logiczny 30 zgodności instrukcji służący do sprawdzania kodu operacji instrukcji 0 i kodu operacji instrukcji 1 i stwierdzenia, czy te dwa kody operacji są zgodne ze względu na ich równoległe wykonywanie. Układ logiczny 30 jest zbudowany odpowiednio do ustalonych reguł określania par kodów operacji zgodnych pod względem ich równoległego wykonywania. Mówiąc dokładniej, pierwszy układ logiczny 30 stanowią sprzętową realizację reguły określających rodzaje instrukcji spełniających warunki ich równoległego wykonywania w określonej konfiguracji sprzętowej zastosowanej w rozpatrywanym komputerze cyfrowym. Jeżeli kody operacji instrukcji 0 i instrukcji 1 są zgodne, wówczas układ logiczny 30 wytwarza na swoim wyjściu sygnał o wartości logicznej równej jeden. Jeżeli zaś kody te nie są zgodne, wówczas układ logiczny 30 wytwarza sygnał wyjściowy o wartości binarnej zero.
Analizator )) sprzężeń ma również drugi układ logiczny 31 zgodności instrukcji do sprawdzania kodów operacji instrukcji 1 i instrukcji ) oraz określania ich zgodności ze względu na możliwości równoległego wykonywania. Drugi układ logiczny 31 jest skonstruowany w taki sam sposób jak pierwszy układ logiczny 30 zgodnie z tymi samymi regułami ustalonymi dla pierwszego układu logicznego 30, pozwalającymi określić, czy zachodzi zgodność kodów operacji pozwalająca realizować równolegle instrukcje 1 i ). Tak więc drugi układ logiczny 31 stanowią sprzętową realizację reguł określania rodzajów instrukcji zgodnie spełniających warunki równoległego wykonywania, przy czym warunki te są identyczne do stosowanych w pierwszym układzie logicznym 30. W przypadku, gdy zachodzi zgodność kodów operacji instrukcji 1 i instrukcji ), drugi układ logiczny 31 wytwarza wyjściowy sygnał binarny o wartości 1. W innym przypadku układy te wytwarzają wyjściowy sygnał binarny o wartości zero.
Analizator )) sprzężeń ma także pierwszy układ logiczny 3) zależności rejestrów do wykrywania konfliktów występujących przy stosowaniu rejestrów ogólnego przeznaczenia określonych przez obszary R1 i R) instrukcji 0 i 1. Te rejestry ogólnego przeznaczenia będą bardziej szczegółowo omówione dalej. Pomijając inne zagadnienia można stwierdzić, że pierwszy układ logiczny 3) zależności rejestrów może być przystosowany do wykrywania pojawienia się warunku zależności od danych, w którym druga instrukcja (Instrukcja 1) wymaga wykorzystania wyników uzyskanych przy wykonywaniu poprzedniej instrukcji (Instrukcja 0). W tym przypadku albo druga instrukcja może być wykonywana przez sprzęt łączenia zależności od danych, w rezultacie wykonuje się równolegle z pierwszą instrukcją, albo wykonanie drugiej instrukcji musi oczekiwać na zakończenie wykonywania poprzedniej instrukcji i z tego powodu nie może być realizowane równolegle z pierwszą instrukcją. Sposób „oszukania niektórych zależności od danych tego typu będzie omawiany później. Jeżeli nie istnieją żadne zależności rejestrów przeciwdziałające równoległemu wykonaniu instrukcji 0 i 1, to na wyjściu pierwszego układu logicznego 3) zależności rejestrów
165 585 występuje wartość binarna równa „1“. W przypadku istnienia takiej zależności, na wyjściu występuje binarna wartość “zero.
Analizator 22 sprzężeń ma również drugi układ logiczny 33 zależności rejestrów do wykrywania konfliktów występujących przy stosowaniu rejestrów ogólnego przeznaczenia określonych przez obszary R1 i R2 instrukcji 1 i 2. Ten drugi układ logiczny 33 zależności rejestrów jest skonstruowany tak samo, jak poprzednio omawiany pierwszy układ logiczny 32 zależności rejestrów i wytwarza na swoim wyjściu sygnał binarny o wartości jeden jeżeli nie występują zależności między rejestrami lub gdy zależności między rejestrami mogą być rozwiązane przez sprzętowy układ łączenia zależności od danych, natomiast w innym przypadku wytwarza na wyjściu sygnał binarny o wartości logicznej zero.
Wyjścia pierwszego układu logicznego 30 zgodności instrukcji i pierwszego układu logicznego 32 zallżności rejestrów są dołączone do dwu wejść pierwszego elementu I 34. Wartość binarna „1“ występuje na wyjściu pierwszego elementu I 34 wówczas, gdy dwa rozpatrywane kody operacji są zgodne i gdy nie występują zależności rejestrów. Ta wartość binarna “1“ na wyjściu pierwszego elementu I 34 oznacza, że dwie rozpatrywane instrukcje są zgodne, to jest mogą być wykonywane równolegle. Jeżeli zaś na wyjściu pierwszego elementu “ 34 występuje sygnał binarny o wartości “0“, wówczas oznacza to, że dwie instrukcje nie mogą być sprzężone. Tak więc na wyjściu pierwszego elementu I 34 wytwarzany jest pierwszy sygnał sprzęgalności M0 1, który określa, czy instrukcje 0 i 1 mogą być przetwarzane równolegle. Ten sygnał M01 jest dostarczany do generatora 26 etykiet.
Wyjścia drugiego układu logicznego 31 zgodności instrukcji i drugiego układu logicznego 33 zależności rejestrów są dołączone do dwu wejść drugiego elementu I 35. Drugi element I 35 wytwarza na swoim wyjściu drugi sygnał sprzęgalności M12, który ma wartość binarną „1“ wówczas, gdy dwa rozpatrywane kody operacji (kody operacji instrukcji 1 i 2) są zgodne i gdy nie występują zależności w rejestrze dla instrukcji 1 i 2 lub zachodzą zależności w rejestrze, które mogą być rozstrzygnięte przez układ komasacji zależności od danych. W innych przypadkach z wyjścia drugiego elementu “ 35 wysyłana jest binarna wartość logiczna “0“. Wyjście drugiego elementu “ 35 jest dołączone do drugiego wejścia generatora 26 etykiet.
Inne analizatory 23, 24, 25 sprzężeń pokazane na fig. 6 mają taką samą strukturę wewnętrzną jak przedstawione na fig. 7 dla pierwszego analizatora 22 sprzężeń.
Na figurze 8 jest przedstawiony przykład układu logicznego, który może być wykorzystany do zrealizowania analizatora 22 sprzężeń oraz część generatora 26 etykiet wykorzystywaną do generacji pierwszych trzech etykiet. W przykładzie pokazanym na fig. 5 zakładano, że istnieją dwa rodzaje instrukcji oznaczone jako kategoria A i kategoria B. Reguły sprzęgania tych kategorii instrukcji są następujące:
1) A może być zawsze sprzężona z A,
2) A nigdy nie może być sprzężona z B,
3) B nigdy nie może być sprzężona z B,
4) B może być sprzęzona z A,
5) Reguła 4 ma wyższy priorytet niż reguła 1.
Należy zauważyć, że w regułach uwzględnia się kolejność pojawiania się instrukcji. Zakłada się również, że reguły są tego rodzaju, że przy ich przestrzeganiu nie występują problemy z zależnością w rejestrze, ponieważ reguły zakładają, że w przypadku wystąpienia uzależnienia, uzależnienie to jest zawsze rozwiązywalne przez układ łączenia zależności od danych. Wyrażając to innymi słowami dla przykładu na fig. 8 zakłada się, że pokazane na fig. 7 układy logiczne 32 i 33 zależności rejestrów nie są zbędne. W tym przypadku elementy I 34 i 35 są również niepotrzebne i na wyjściu pierwszego układu logicznego 30 występuje sygnał M01, a na wyjściu drugiego układu logicznego 31 występuje sygnał M12.
Na figurze 8 przedstawiono spełniający te założenia układ logiczny, który może być wykorzystany jako pierwszy układ logiczny 30 zgodności instrukcji i drugi układ logiczny 31 zgodności instrukcji (pokazane na fig. 7). Jak pokazano na fig. 8 pierwszy układ logiczny 30 zgodności instrukcji ma pierwszy i drugi dekoder 40 i 41, trzeci i czwarty element I 42 i 43 oraz pierwszy element LUB 44. Drugi układ logiczny 31 zgodności instrukcji ma drugi i trzeci dekoder 41 i 45,
165 585 piąty i szósty element 146 i 47 oraz drugi element LUB 48. Umieszczony w części środkowej drugi dekoder 41 jest wykorzystywany zarówno przez oba układy logiczne 30 i 31.
Pierwszy układ logiczny 30 sprawdza kody operacji OP0 i OP1 instrukcji 0 i 1, w celu określenia ich zgodności pod względem możliwości równoległego wykonywania. Odbywa się to zgodnie z podanymi wyżej regułami 1-4. Pierwszy dekoder 40 sprawdza kod operacji pierwszej instrukcji i w przypadku, gdy należy on do kategorii A kodów operacyjnych, na wyjściu A pierwszego dekodera 40 pojawia się wartość logiczna „1 . W przypadku, gdy kod OP0 należy do kodów operacji kategorii B wartość logiczna „ 1 „ pojawia się na wyjściu B pierwszego dekodera 40. Jeżeli kod OP0 nie należy ani do kategorii A ani do kategorii B. wówczas na obu wyjściach pierwszego dekodera 40 występują poziomy logiczne odpowiadające wartości „0. Drugi dekoder 41 realizuje podobne czynności dekodowania drugiego kodu operacji OP1.
Trzeci element I 42 realizuje podaną wyżej regułę 1. W przypadku, gdy kod OP0 należy do kodów operacji kategorii A, kod OP1 należy również do kodów operacji kategorii A, na wyjściu trzeciego elementu 142 pojawia się poziom logiczny „1„. W innym przypadku na wyjściu trzeciego elementu 142 występuje sygnał logiczny „0„. Czwarty element 143 realizuje podaną wyżej regułę 4. W przypadku, gdy pierwszy kod operacji należy do kategorii B, a drugi kod operacji należy do kategorii A, wówczas na wyjściu czwartego elementu I 43 pojawia się sygnał logiczny o wartości „1. W innych przypadkach na wyjściu tym występuje sygnał logiczny o wartości „0„. Jeżeli na wyjściu trzeciego lub czwartego elementu I 42 lub 43 występuje sygnał logiczny „1, wówczas działanie tego sygnału powoduje, iż na wyjściu pierwszego elementu LUB 44 pojawia się wartość „1„ i w tym przypadku sygnał sprzęgalności M01 ma wartość „1. Ta wartość „1 wskazuje, że instrukcje pierwsza i druga (instrukcje 0 i 1) są zgodne pod względem możliwości ich równoległego wykonywania. W przypadku, gdy pierwszy i drugi dekoder 40 i 41 wykryją jakąkolwiek inną kombinację kategorii kodów operacyjnych, wówczas na wyjściach trzeciego i czwartego elementów I 42 i 43 utrzymywane są poziomy logiczne „0 i sygnał sprzęgalności M01 ma wartość „0„, wskazującą na brak sprzęgalności. Tak więc wystąpienie kombinacji wskazanych przez podane wyżej reguły 2 i 3 nie zadawalają trzeciego i czwartego elementów 142 i 43. W związku z czym sygnał M01 pozostaje na poziomie „0„. Pojawienie się w potoku instrukcji innych kategorii kodów operacjami poza kategoriami A i B nie powoduje uaktywnienia wyjść dekoderów 40 i 41, wobec czego uzyskiwany jest taki sam sygnał sprzęgalności M01 o wartości „0„.
Drugi układ logiczny 31 zgodności instrukcji wykonuje podobną analizę kodów operacji dla drugiej i trzeciej instrukcji (instrukcja 1 i 2). W przypadku, gdy drugi kod operacji OP1 należy do kategorii A i trzeci kod operacji OP2 należy do kategorii A, to zgodnie z regułą 1, na wyjściu piątego elementu I 46 uzyskiwany jest sygnał o wartości „1„ i drugi sygnał sprzęgalności M12 uzyskuje binarną wartość „1, wskazującą możliwość sprzężenia. Jeżeli natomiast OP1 należy do kodów operacji kategorii B, a OP2 należy do kodów operacji kategorii A, to zgodnie z regułą 4 szósty element 147 jest wzbudzany w taki sposób, że na jego wyjściu pojawia się binarny poziom logiczny „1 określający wartość drugiego sygnału sprzęgalności M12. W przypadku wystąpienia jakiejkolwiek kombinacji kodów operacji różniącej się od określonych przez reguły 1 i 4, sygnał M12 przyjmuje wartość „0.
Sygnały sprzęgalności M01 i M12 są doprowadzane do generatora 26 etykiet. Na fig. 8 pokazano układ logiczny, który może być zastosowany w generatorze 26 etykiet do przetwarzania sygnałów sprzęgalności M01 i M12 na pożądane wartości binarne etykiet. Wartość bitu etykiety równa „1 wskazuje, że związana z nią instrukcja jest „pierwszą instrukcją ze względu na możliwość jej równoległego wykonania. Zerowa wartość bitu etykiety wskazuje, że związana z nią instrukcja jest „drugą instrukcją ze względu na możliwość jej równoległego wykonania. Tylko jedna instrukcja pary ma wartość bitu etykiety równą zeru. Każda instrukcja z wartością bitu etykiety równą „1“, w przypadku, gdy następująca po niej instrukcja ma bit etykiety równy „1, jest wykonywana indywidualnie i nie może być wykonywana równolegle z następującą po niej instrukcją.
W pierwszym wierszu tabeli na figurze 9 wszystkie trzy bity etykiet mają wartość „1. Oznacza to, że każda z instrukcji 0 i 1 będzie wykonywana indywidualnie i pojedynczo. W przypadku drugiego wiersza tabeli na fig. 9 instrukcje 0 i 1 będą wykonywane równolegle, gdyż etykieta 0 ma
165 585 wymaganą wartość „1“, a etykieta 1 ma wymaganą wartość „0„. Znajdująca się w trzecim wierszu tabeli na fig. 9 instrukcja 0 będzie wykonywana pojedynczo, natomaist instrukcje 1 i 2 będą wykonywane równolegle. W przypadku czwartego rzędu tabeli instrukcje 0 i 1 będą również wykonywane równolegle. W tych przypadkach, gdy wartość binarna etykiety 2 wynosi „1„, status związanej z nią instrukcji 2 zależy od wartości binarnej etykiety 3. Jeżeli wartość binarna etykiety 3 wynosi „0“, to instrukcje 2 i 3 mogą być wykonywane równolegle. Jeżeli natomiast wartość binarna etykiety 3 wynosi „1„, to instrukcja 2 będzie wykonywana pojedynczo. Należy zauważyć, że układy logiczne zastosowane w generatorze 26 etykiety nie dopuszczają sukcesywnego wystąpienia dwu bitów etykiet o wartościach binarnych równych „0“.
Na podstawie tabeli podanej na fig. 9 można określić strukturę układów logicznych dla części generatora 26 etykiet pokazanej na fig. 8. Jak pokazano na fig. 9, etykieta 0 powinna zawsze mieć binarną wartość „1„. Uzyskuje się to przez podanie stałej wartości „1“ na wyjście 50 generatora 26 etykiet stanowiące zacisk wyjściowy etykiety 0. Z tabeli na fig. 9 wynika również, że wartość bitu etykiety 1 stanowi zawsze negację wartości binarnej sygnału sprzęgalności M01. Ten rezultat uzyskuje się w ten sposób, że wyjściem 51 określającym wartość etykiety 1 jest wyjście pierwszego elementu NIE 52, którego wejście jest dołączone do linii sygnału M01. Wartość binarną etykiety 2 na wyjściu 53 określa trzeci element LUB 54 i drugi element NIE 55. Jedno wejście trzeciego elementu LUB 54 jest dołączone do linii M01. W przypadku, gdy M01 ma wartość „1„, wartość etykiety 2 wynosi również „1„. To każe zwrócić uwagę na wartość etykiety 2 w drugim i czwartym wierszu tabeli na fig. 9. Inne wejście trzeciego elementu LUB 54 jest dołączone przez drugi element NIE 5 5 do linii sygnału Μ12. Jeżeli sygnał Μ12 ma wartość binarną „0“, to wartość ta jest negowana przez drugi element NIE 55 w celu podania binarnej wartości „1“ na drugie wejście trzeciego elementu LUB 54. To powoduje, że na wyjściu 53 pojawia się binarna wartość etykiety 2 równa „1“ oraz powoduje zwrócenie uwagi na wartość etykiety 2 w pierwszym wierszu tabeli na fig. 9. Zauważmy, że w wierszu 3 etykieta 2 musi mieć wartość zero. Przyczyną tego jest to, że w tym przypadku sygnał M01 będzie miał wartość „0“ i sygnał M12 będzie miał wartość „1“, która jest negowana przez drugi element NIE 55, w celu wytworzenia sygnału o wartości „0“ na drugim wejściu trzeciego elementu LUB 54.
W tabeli na fig. 9 w sposób ukryty zrealizowana została zasada priorytetu dla przypadku określonego przez wiersz 4, w którym sygnały M01 i M12 mają wartości binarne „1„. Przypadek określony w wierszu 4 może być wytworzony przez sekwencje instrukcji o kategoriach BA A. To może być odwzorowane przy pomocy sekwencji etykiet 101 jak pokazano na fig. 9, lub alternatywnie przy pomocy sekwencji etykiet 110. W rozważanym wykonaniu uwzględniono regułę 5 i wybrano sekwencję 101 pokazaną na fig. 9. Innymi słowami para typu BA uzyskała preferencję nad parą typu AA. Zestaw wartości 1,1 dla sygnałów M01 i M02 może być również wytworzony przez sekwencję kodów operacji kategorii AAA. W tym przypadku wybrano ponownie pokazaną na fig. 9 sekwencję etykiet 101. Jest ona korzystniejsza, gdyż daje etykietę 2 o wartości ,,1„ i w związku z tym potencjalnie umożliwia sprzęganie instrukcji 2 z instrukcją 3 w przypadku, gdy te instrukcje są zgodne.
Na figurze 10 pokazano przykład ilustrujący w jaki sposób może być skonstruowany układ wykorzystujący etykiety sprzężenia do realizacji równoległego przetwarzania komputerowych instrukcji maszynowych. Zakłada się, że pokazana na fig. 10 jednostka sprzęgania 20 instrukcji jest tego samego typu jak przedstawiona na fig. 6 i w związku z tym dodaje do każdej instrukcji jednobitowe pole etykiety. Te pola etykiet są używane do identyfikacji tych par instrukcji, które mogą być przetwarzane równolegle. Strony z instrukcjami opatrzonymi w etykiety są dostarczane do pamięci głównej 10, w której są zapamiętywane. Gdy instrukcje z etykietami są potrzebne, następuje ich odczytanie lub przesłanie do pamięci podręcznej 12 tego samego typu jak pamięć podręczna 112 instrukcji sprzężonych z fig. 1. Układ sterujący 60 pobierania - wydawania pobiera w miarę potrzeby instrukcje opatrzone etykietami z pamięci podręcznej 12 i szereguje je do celów przetwarzania przez odpowiednią jedną lub niektóre z wielu jednostek funkcjonalnych 61,62,63 i 64 przetwarzających instrukcje. Układ sterujący 60 pobierania - wydawania sprawdza pola etykiet i kody operacji pobranych instrukcji. Jeżeli obszary etykiet wskazują, że dwie kolejne instrukcje mogą być wykonywane równolegle, wówczas ten układ sterujący 60 przypisuje je odpowiednim
165 585 jednostkom funkcjonalnym 61,6), 63, 64 zgodnie z kodami operacji tych instrukcji i instrukcje są przetwarzane równolegle w wybranych jednostkach funkcjonalnych. Jeżeli zaś obszary etykiet wskazują, że konkretna instrukcja powinna być przetwarzana pojedynczo - wóczas układ sterujący 60 pobierania - wydawania przypisuje instrukcję konkretnej jednostce funkcjonalnej, zgodnie z kodem operacji instrukcji, w której jest ona indywidualnie przetwarzana lub wykonywana.
Pierwsza jednostka funkcjonalna 61 jest jednostką przetwarzającą instrukcje skoków (rozgałęzień). Druga jednostka funkcjonalna 6) jest trójwejściową jednostką arytmetyczno-logiczną do generacji adresu, służąca do obliczania adresu pamięci dla instrukcji realizujących przesłania argumentów do lub z pamięci. Trzecia jednostka funkcjonalna 63 jest jednostką arytmetycznologiczną ogólnego przeznaczenia stosowaną do wykonywania operacji matematycznych i logicznych. Czwarta jednostka funkcjonalna 64 w niniejszym przykładzie jest jednostką arytmetycznologiczną do łączenia zależności od danych. Jest to trójwartościowa jednostka arytmetyczno logiczna posiadająca możliwość wykonania dwu operacji arytmetyczno - logicznych w jednym cyklu maszynowym.
W pokazanym na fig. 10 wykonaniu układu znajdują się również zespół rejestrów 65 ogólnego zastosowania używany przy wykonywaniu niektórych instrukcji maszynowych. Typowe wykorzystanie tych rejestrów 65 ogólnego przeznaczenia to: czasowe przechowywanie argumentów operacji (danych i adresów), spełnianie funkcji liczników oraz wykonywanie innych operacji przetwarzania danych. W typowym komputerze stosuje się szesnaście takich rejestrów ogólnego przeznaczenia. W rozpatrywanym wykonaniu przyjmuje się, że zastosowane rejestry 65 ogólnego przeznaczenia należą do grupy rejestrów wielo-portowych, co pozwala uzyskać równoczesny dostęp do dwu lub większej liczby rejestrów.
Układ pokazany na fig. 10 ma również szybką pamięć podręczną 66 do pamiętania argumentów (danych) uzyskiwanych z jednostki pamięci wyższego poziomu jaką jest pamięć główna 10. Dane znajdujące się w szybkiej pamięci podręcznej 66 mogą być odesłane z powrotem do pamięci głównej.
Na figurze 11 zamieszczono przykład sekwencji instrukcji sprzężonych lub wyposażonych w etykiety, która może być przetwarzana przez układ pokazany na fig. 10. Przykład podany na fig. 11 tworzą następujące instrukcje w następującej sekwencji: Ładuj, Dodaj, Porównaj, Skocz według warunku i Zapamiętaj. Instrukcje te są identyfikowane odpowiednio symbolami 11-15. Binarne wartości etykiet tych instrukcji wynoszą odpowiednio 1, 1, 0, 1, 0. Ze względu na strukturę komputera pokazaną na fig. 10, instrukcja „Ładuj jest wykonywana pojedynczo. Instrukcje „Dodaj i „Porównaj są traktowane jako instrukcja i są przetwarzane równolegle w tym samym czasie. Instrukcje „Skocz i „Zapamiętaj są również traktowane jako instrukcja sprzężona i są także przetwarzane równolegle.
W tabeli na figurze 1) zamieszczono dalsze instrukcje o każdej z instrukcji występujące na fig. 11. W kolumnie R/M tabeli na fig. 1) podano zawartość pierwszego pola każdej instrukcji, która jest zwykle używana do identyfikacji konkretnych rejestrów 65 ogólnego zastosowania, zawierających pierwszy argument. Wyjątek stanowi instrukcja „Skocz według warunku, która w polu R/M ma kod maski warunku. Kolumna R/X na fig. 1) określa zawartość drugiego pola każdej instrukcji, które to pole normalnie jest wykorzystywane do identyfikacji drugiego z rejestrów 65 ogólnego przeznaczenia. W tym rejestrze może znajdować się drugi argument lub wartość indeksu adresu (X). Kolumna B na fig. 1) wskazuje zawartość trzeciego możliwego pola każdej instrukcji, w którym to polu może być zidentyfikowany konkretny rejestr 65 ogólnego przeznaczenia zawierający wartość adresu bazowego. Wartość zero w kolumnie B wskazuje na brak obszaru B lub brak odpowiedniej instrukcji adresowej w tym polu. Kolumna D na fig. 1) określa zawartość kolejnego pola każdej instrukcji i w przypadku, gdy jest ono wykorzystywane do generacji adresu, określa wartość przesunięcia adresu. Wartość zero w kolumnie D może również świadczyć o braku odpowiedniego pola w konkretnej rozpatrywanej instrukcji lub zerowej wartości przesunięcia adresu.
Rozpatrując obecnie przetwarzanie podanej na fig. 11 instrukcji „Ładuj zauważmy, że na podstawie bitów etykiet tej instrukcji „Ładuj i następnej instrukcji „Dodaj układ sterujący 60
165 585 pobierania - wydawania stwierdza, że instrukcja „Ładuj powinna być wykonywana pojedynczo. Działanie, które ma być wykonane przez instrukcję Ładuj polega na pobraniu argumentu z pamięci, w tym przypadku z szybkiej pamięci podręcznej 66 i umieszczeniu tego argumentu w rejestrze ogólnego przeznaczenia R2. Adres pamięci, z którego ten argument powinien być pobrany, określa się przez zsumowanie wartości indeksu w rejestrze X, wartości bazowej w rejestrze B i wartości przesunięcia D. Układ sterujący 60 pobierania - wydawania przyporządkowuje tę operację generacji adresu drugiemu układowi funkcjonalnego 62 stanowiącemu jednostkę arytmetyczno - logicznej generacji adresu. W tym przypadku ta jednostka sumuje wartość indeksu adresu w rejestrze X (w tym przykładzie jest ona równa zeru), wartość adresu bazowego znajdującą się w rejestrze ogólnego przeznaczenia i wartość przesunięcia adresu (w tym przykładzie równą zeru) określoną w samej instrukcji. Obliczony wynikowy adres pamięci pojawiający się na wyjściu tej jednostki jest podawany na wejście adresowe szybkiej pamięci podręcznej 66 w celu uzyskania dostępu do pożądanego argumentu. Ten uzyskany argument jest wprowadzany do rejestru ogólnego przeznaczenia R2 zespołu rejestrów 65 ogólnego przeznaczenia.
Przetwarzanie instrukcji Dodaj i Porównaj rozpoczyna się od pobrania tych instrukcji przez układ sterujący 60 pobierania - wydawania. Układ sterujący 60 sprawdza etykiety sprzężeń tych dwu instrukcji i stwierdza, że mogą one być wykonywane równolegle. Jak wynika z fig. 12, instrukcja Porównaj jest jawnie zależna od danych uzyskiwanych z instrukcji Dodaj, gdyż zanim możliwe będzie wykonanie porównania zawartości rejestru R3, powinna być zakończona instrukcja Dodaj. Z tą zależnością może oczywiście uporać się czwarty funkcjonalny 64 stanowiący jednostkę łączenia zależności od danych. W konsekwencji te dwie instrukcje mogą być przetwarzane równolegle w strukturze pokazanej na fig. 10. W tym konkretnym przypadku układ sterujący 60 przyporządkowuje instrukcję Dodaj trzeciemu układowi funkcjonalnemu 63 stanowiącego jednostkę arytmetyczno - logiczną, a przetwarzanie instrukcji Porównaj zleca czwartemu układowi funkcjonalnemu 64.
Trzeci układ funkcjonalny 63 dodaje zawartość rejestru ogólnego przeznaczenia R2 do zawartości rejestru ogólnego przeznaczenia R3 i umieszcza wynik dodawania w rejestrze ogólnego przeznaczenia. W tym samym czasie czwarty układ funkcjonalny 64 wykonuje następującą operację matematyczną:
R3 + R2-R4
Kod warunku dla rezultatu tej operacji jest wysyłany do rejestru kodu warunku znajdującego się w pierwszym układzie funkcjonalnym 61 stanowiącym jednostkę rozgałęzienia.
Zależność od danych zostaje zlikwidowana, ponieważ czwarty układ funkcjonalny 64 oblicza w efekcie sumę R3 + R2, a następnie porównuje tę sumę z R4, w celu określenia kodu warunku. W tej sytuacji czwarty układ funkcjonalny 64 nie musi czekać na wyniki z trzeciego układu funkcjonalnego 63 wykonującej instrukcję Dodaj. W tym konkretnym przypadku numeryczna wartość wyników obliczanych przez czwarty układ funkcjonalny 64 i pojawiających się na jego wyjściu nie jest przekazywana z powrotem do rejestrów 65 ogólnego przeznaczenia. Układ ten w tym przypadku służy jedynie do określenia kodu warunku.
Przetwarzanie pokazanych na fig. 11 instrukcji Skocz i Zapamiętaj rozpoczyna się od pobrania tych instrukcji z pamięci podręcznej 12 przez układ sterujący 60 pobierania - wydawania. Układ sterujący 60 na podstawie wartości bitów etykiet tych instrukcji stwierdza, że instrukcje te mogą być wykonywane równolegle. Z kolei na podstawie kodów operacji tych dwu instrukcji jednostka stwierdza, że instrukcja Skocz powinna być przetwarzana w pierwszym układzie funkcjonalnym 61, a instrukcja Zapamiętaj powinna być przetwarzana w drugim układzie funkcjonalnym 62. Zgodnie z powyższym, do pierwszego układu funkcjonalnego 61 są przekazywane zawartości pól maski M i przesunięcia D instrukcji Skocz. Podobnie, dla rozpatrywanej instrukcji Skocz z rejestrów 65 ogólnego przeznaczenia są uzyskiwane wartości indeksu adresu w rejestrze X i adresu bazowego w rejestrze B, które są także przekazywane do pierwszego układu funkcjonalnego 61. W tym przykładzie wartość jest równa zeru, a wartość bazowa jest uzyskiwana z rejestru ogólnego przeznaczenia R7. Przesunięcie D ma heksadecymalną wartość dwadzieścia, natomiast w polu maski M znajduje się wartość 8.
165 585
Pierwszy układ funkcjonalny 61 rozpoczyna obliczanie potencjalnego adresu skoku (0 + R7 + 20) i w tym samym czasie porównuje z maską M kodu warunku, kod warunku uzyskany w poprzedniej instrukcji „Porównaj**. Jeżeli wartość kodu warunku jest identyczna z wartością kodu maski, to potwierdzony zostaje wymagany warunek skoku, a adres skoku obliczony w pierwszym układzie funkcjonalnym 61 zostaje załadowany do licznika instrukcji w układzie sterującym 60. Ten licznik instrukcji steruje pobieraniem instrukcji z pamięci podręcznej 12. Jeżeli natomiast warunek nie jest spełniony, wówczas kod warunku uzyskany w poprzedniej instrukcji nie jest równy 8, to skok nie jest realizowany i do licznika instrukcji w układzie sterującym 60 nie jest przekazywany adres skoku.
W tym samym czasie, gdy pierwszy układ funkcjonalny 61 jest zajęty wykonywaniem czynności przetwarzania dla instrukcji „Skocz„, drugi układ funkcjonalny 62 przeprowadza obliczenia adresu (0 + R7 + 0) dla instrukcji „Zapamiętaj/ Adres obliczony przez drugi układ funkcjonalny 62 jest dostarczany do szybkiej pamięci podręcznej 66. Jeżeli pierwszy układ funkcjonalny 61 nie wykonuje żadnego skoku, to instrukcja „Zapamiętaj“ powoduje, iż argument znajdujący się w rejestrze ogólnego przeznaczenia R3 zostaje zapamiętany w szybkiej pamięci podręcznej 66 pod adresem obliczonym w drugim układzie funkcjonalnym 62. Jeżeli natomiast warunki skoku są spełnione i skok zostaje wykonany, to zawartość rejestru ogólnego przeznaczenia R3 nie jest przesyłana do szybkiej pamięci podręcznej 66.
Powyższa sekwencja instrukcji według fig. 11 ma wyłącznie charakter przykładu. Realizacja układu pokazana na fig. 10 równie dobrze może przetwarzać różne i zmnieniające się sekwencje instrukcji. Przykład pokazany na fig. 11 pokazuje jednak wyraźnie użyteczność etykiet instrukcji złożonych przy określaniu par rozkazów, które mogą być wykonywane równolegle.
Każde utworzenie pary zawierającej instrukcję z bitem etykiety równym jeden i kolejnej instrukcji z bitem etykiety równym zero daje w rezultacie instrukcję sprzężoną ze względu na możliwość realizacji równoległej, to jest instrukcję zawierającą parę instrukcji, które mogą być przetwarzane równolegle. W przypadku, gdy bity etykiet dwu kolejnych instrukcji w obu przypadkach mają wartość jeden, topierwsza z tych instrukcji jest wykonywana pojedynczo. W najgorszym możliwym przypadku bity etykiet wszystkich instrukcji ciągu będą miały wartości równe jeden. W tym najgorszym przypadku wszystkie instrukcje będą wykonywane pojedynczo w kolejnych przedziałach czasowych.
Przykład rozwiązania sprzętowego został omówiony wyżej w powiązaniu z opisem przykładu wykonania wynalazku, realizującym sprzęganie instrukcji w małym zakresie. Uogólniając powyższe można stwierdzić, że każda para sąsiadujących ze sobą instrukcji jest analizowana w celu określenia, czy instrukcje te mogą być wykonywane równolegle. W rzeczywistości operacja sprzęgania realizowana w pamięci daje możliwość sprawdzania wielu sprzężeń dla liczby instrukcji większej od dwóch i wybranie najlepszego możliwego sposobu sprzężenia.
W podanych wyżej przykładach stosowano również metodę sprzęgania, w której zakłada się znajomość początkowej instrukcji procesu. W przypadku ogólnym granice instrukcji mogą być identyfikowane przez kompilator, co było omawiane wyżej lub przez dekodowanie instrukcji przed ich wykonaniem. Przedstawiony został także przykład układu sprzęgania 11 instrukcji, który umieszczono pomiędzy adapterem wejścia - wyjścia 8 i magistralą pamięci 9. Ten przykład nie ma na celu ograniczania jakiegokolwiek innego położenia w pamięci, w którym układ sprzęgania 11 może pracować. Na przykład może być on wbudowany w adapter wejścia - wyjścia 8, może pracować jako oddzielna jednostka związana z magistralą pamięci 9 wówczas może realizować sprzężenia zarówno dla pamięci głównej 10 lub dla pamięci podręcznej 112 instrukcji sprzężonych lub może stanowić rozwiązanie pośrednie w postaci układu dołączonego tylko do pamięci głównej 10 przez własny port pamięci niedostępny z magistrali pamięci 9. Układ sprzęgania 11 może również funkcjonować pomiędzy pamięcią główną 10 i pamięcią podręczną 112 instrukcji.
Pomięć o zwiększonej długości slow
0 64 bltOW 4b
1 J.
• · ·
7
Tekst Eijktefa
FIG. 2A
Pomięć tekstów
64 bitów
iety
FIG. 2B
Pomięć
FIG. 2C
FIG. 3
Czas dostępu do pamięci pomocniczej tt|+l ai+2
FIG. 4 czas buforu [b^l czas sprzęgania
Etykieta 0 Rozkaz 0 Etykieta 1 Rozkaz 1 Bykieta 2 Rozkaz 2 Etykieta3 Rozkaz 3
FIG. 5a
B Rozkaz 0 B Rozkaz 1 B Rozkaz 2 B Rozkaz 3
FIG. 5b
MOI M12 Etykieta 0 Ełyketa 1 Etykieta 2
0 0 1 1 1
FIG. 9 1 0 1 0 1
0 1 1 ł 0
1 1 1 0 1
Jednostka sprzęgania rozkazów '
I
Z adaptera wejścia/wyjścia
Rozkaz 0 Rozkaz 1 Rozkaz 2 Rozkaz 3 Rozkaz 4 Rozkaz 5 Rozkaz 6 Rozkaz 7 Rozkaz 8
MOI—
—M12 M23—| , —M34 M45—; —M56 M67—
-M78
„Etykieto 0 Rozkaz 0 „Etykieta 1 Rozkaz 1 ł etykieta 2 Rozkaz 2 „Etykieta 3 Rozkaz 3
„Etykieta 4 Rozkaz 4
ETO
Rozkaz I Rozkaz 1 Rozkaz 1 Rozkaz Rozkaz
o pi n .1 2 F 1 3 3 ET 4 4 ET 5
„Etykieta 5 Rozkaz 5
..Etykieta 6 „Etykieta 7
Rozkaz 6 Rozkaz 7 :L
„Etykieta β Rozkaz f
Rozkaz I
P6
Rozkaz 6 ET7 Rozkaz 7 ET 8
L~
Oo pamięci głównej
FIG. 6 □
Rozkaz 0
Rozkaz 1
Rozkaz 2 od peracji
Ri
R2
Kod operacji
RI
R2
Kod operacji
RI
R2
Γ
L
Etykieta 0 Etykieta 1 Etykieta 2 FIG. 7 □PO DPI 0P2
Etykieta O Etykieta 1 Etykieta 2
FIG. 8
Rozkazy
FIG. 10
11 12 13 14 15
1 Ładowanie 1 Dodawanie 0 Porównanie 1 Skok 0 Zapamiętywanie
-/
Rozkaz sprzęgania Rozkaz sprzęgania
FIG. 11
Nr <od operacji R/M R/X 6 D Działanie
11 Lodowanie R2 0 R7 0 Zapam. -— R 2 (adresy oamieci = 0*R7 + 0)
12 Dodawanie R3 R2 0 0 R3 + R2 -— R3
13 Porównanie R3 R4 0 0 R3 <c> R4-—kod warunku
14 Skok wa- runkowy 8 0 R7 20 Adres(ύ*K?♦ 2(Jl Ola rozkazu zliczaj leśli warunek spełniony (CCs 8)
15 Zapamię- tywanie R3 0 R7 0 R3-— zapgmlętajlac res=0+R7+0) {jeśli warunek nie SDe niony)
FIG. 12
165 585
FIG. 1
Departament Wydawnictw UP RP. Nakład 90 egz. Cena 1,00 zł.

Claims (6)

  1. Zastrzeżenia patentowe
    1. Układ do równoległego przetwarzania instrukcji w komputerze jednoprocesorowym zawierający magistralę wejścia - wyjścia, magistralę pamięci oraz pamięć główną i pamięć podręczną dołączone do magistrali pamięci, znamienny tym, że zawiera układ sprzęgania (11) instrukcji, którego wejście jest dołączone poprzez adapter wejścia - wyjścia (8) do magistrali wejścia - wyjścia (7), a wyjścia są dołączone do magistrali adresów i rozkazów (9a) oraz do magistrali tekstów (9b), stanowiących magistralę pamięci (9), przy czym adapter wejścia - wyjścia (8) jest dołączony ponadto do magistrali tekstów (9b), pamięć główna (10) jest dołączona do magistrali adresów i rozkazów (9a) oraz do magistrali tekstów (9b), a pamięć podręczna (112) instrukcji sprzężonych jest dołączona do magistrali tekstów (9b), oraz zawiera układ pobierania - wydawania (116) instrukcji, którego wejście jest dołączone do wyjścia pamięci podręcznej (112) instrukcji sprzężonych, a wyjście jest dołączone poprzez magistralę funkcji (17) do wejść jednostek funkcjonalnych (13,14, 15...).
  2. 2. Układ według zastrz. 1, znamienny tym, że wejście pamięci głównej (10) jest połączone z adapterem wejścia - wyjścia (8) poprzez jeden z dwóch buforów stron (18a, 18b), układ sprzęgania (11) instrukcji i dwa połączone równologle bufory (19a, 19b) instrukcji sprzężonych, zaś wyjście pamięci głównej (10) jest połączone z adapterem wejścia - wyjścia (8) poprzez jeden z dwóch buforów stron (18a, 18b).
  3. 3. Układ według zastrz. 1, znamienny tym, że układ sprzęgania (11) instrukcji zawiera jednostkę sprzęgania (20) instrukcji zbudowaną z rejestru (21) instrukcji, którego wyjścia są dołączone do analizatorów (22,23,24, 25) sprzężeń, przy czym wyjścia tych analizatorów (22,23,24,215) są połączone poprzez generator (26) etykiet do rejestru wyjściowego (27).
  4. 4. Układ według zastrz. 3, znamienny tym, że analizator (22) sprzężeń zawiera pierwszy układ logiczny (30) zgodności instrukcji dołączony do pierwszego wejścia pierwszego elementu I (34), przy czym do jego drugiego wejścia jest dołączony pierwszy układ logiczny (32) zależności rejestrów, oraz drugi układ logiczny (31) zgodności instrukcji dołączony do pierwszego wejścia drugiego elementu I (35), przy czym do jego drugiego wejścia jest dołączony drugi układ logiczny (33) zależności rejestrów.
  5. 5. Układ według zastrz. 4, znamienny tym, że pierwszy układ logiczny (30) zgodności instrukcji zawiera dekodery (40, 41, 45), przy czym pierwsze wyjście (A) pierwszego dekodera (40) jest dołączone do pierwszego wejścia trzeciego elementu I (42), którego drugie wejście jest dołączone do pierwszego wyjścia (A) drugiego dekodera (41), drugie wyjście (B) pierwszego dekodera (40) jest dołączone do pierwszego wejścia czwartego elementu I (43), którego drugie wejście jest dołączone do pierwszego wyjścia (A) drugiego dekodera (41), drugie wyjście (B) drugiego dekodera (41) jest dołączone do pierwszego wejścia piątego elementu I (46) i do pierwszego wejścia szóstego elementu I (47), zaś drugie wejścia tych elementów są dołączone do pierwszego wyjścia (A) trzeciego dekodera (45), następnie wyjścia trzeciego i czwartego elementu I (42, 43) są dołączone do pierwszego elementu LUB (44), a wyjścia piątego i szóstego elementów I (46,47) są dołączone do drugiego elementu LUB (48), po czym wyjście pierwszego elementu LUB (44) jest dołączone do pierwszego elementu NIE (52) i do pierwszego wejścia trzeciego elementu lUb (54) w generatorze (26) etykiet, a wyjście drugiego elementu LUB (48) jest dołączone poprzez drugi element NIE (56) do drugiego wejścia trzeciego elementu LUB (54) w generatorze (26) etykiet.
  6. 6. Układ według zastrz. 3, znamienny tym, że jednostka sprzęgania (20) instrukcji jest dołączona poprzez pamięć główną (10) i pamięć podręczną (12) do układu sterującego (60) pobierania -wydawania, który jest następnie połączony z pierwszym układem funkcjonalnym (61), drugim układem funkcjonalnym (62), trzecim układem funkcjonalnym (63) oraz z czwartym układem
    165 585 3 funkcjonalnym (64) zawierającym zespół rejestrów (65) ogólnego zastosowania i szybką pamięć podręczną (66).
PL91289724A 1990-06-26 1991-04-03 Uklad do równoleglego przetwarzania instrukcji w komputerze jednoprocesorowym PL PL165585B1 (pl)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US54346490A 1990-06-26 1990-06-26

Publications (2)

Publication Number Publication Date
PL289724A1 PL289724A1 (en) 1992-04-21
PL165585B1 true PL165585B1 (pl) 1995-01-31

Family

ID=24168174

Family Applications (1)

Application Number Title Priority Date Filing Date
PL91289724A PL165585B1 (pl) 1990-06-26 1991-04-03 Uklad do równoleglego przetwarzania instrukcji w komputerze jednoprocesorowym PL

Country Status (10)

Country Link
US (2) US5355460A (pl)
EP (1) EP0463296A2 (pl)
JP (1) JPH0778738B2 (pl)
BR (1) BR9102128A (pl)
CA (1) CA2038264C (pl)
CZ (1) CZ280269B6 (pl)
HU (1) HUT57920A (pl)
PL (1) PL165585B1 (pl)
RU (1) RU2109333C1 (pl)
SK (1) SK93491A3 (pl)

Families Citing this family (89)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0474297B1 (en) * 1990-09-05 1998-06-10 Koninklijke Philips Electronics N.V. Very long instruction word machine for efficient execution of programs with conditional branches
JP2642529B2 (ja) * 1991-04-30 1997-08-20 株式会社東芝 並列プロセッサーの命令分配処理装置
US5961629A (en) * 1991-07-08 1999-10-05 Seiko Epson Corporation High performance, superscalar-based computer system with out-of-order instruction execution
US5493687A (en) 1991-07-08 1996-02-20 Seiko Epson Corporation RISC microprocessor architecture implementing multiple typed register sets
US5539911A (en) * 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
GB2263565B (en) * 1992-01-23 1995-08-30 Intel Corp Microprocessor with apparatus for parallel execution of instructions
JP3547740B2 (ja) * 1992-03-25 2004-07-28 ザイログ,インコーポレイテッド 命令高速解読パイプラインプロセッサ
US5438668A (en) 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
JP3730252B2 (ja) 1992-03-31 2005-12-21 トランスメタ コーポレイション レジスタ名称変更方法及び名称変更システム
DE69308548T2 (de) 1992-05-01 1997-06-12 Seiko Epson Corp Vorrichtung und verfahren zum befehlsabschluss in einem superskalaren prozessor.
US5416913A (en) * 1992-07-27 1995-05-16 Intel Corporation Method and apparatus for dependency checking in a multi-pipelined microprocessor
US5590348A (en) * 1992-07-28 1996-12-31 International Business Machines Corporation Status predictor for combined shifter-rotate/merge unit
DE59301610D1 (de) * 1992-09-22 1996-03-21 Siemens Ag Verfahren zur bearbeitung eines anwenderprogramms auf einem parallelrechnersystem
US6735685B1 (en) 1992-09-29 2004-05-11 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
DE69329778T2 (de) 1992-09-29 2001-04-26 Seiko Epson Corp., Tokio/Tokyo System und verfahren zur handhabung von laden und/oder speichern in einem superskalar mikroprozessor
US5628021A (en) 1992-12-31 1997-05-06 Seiko Epson Corporation System and method for assigning tags to control instruction processing in a superscalar processor
KR100292300B1 (ko) 1992-12-31 2001-09-17 야스카와 히데아키 레지스터재명명시스템및방법
JP3182591B2 (ja) * 1993-01-20 2001-07-03 株式会社日立製作所 マイクロプロセッサ
US6154828A (en) * 1993-06-03 2000-11-28 Compaq Computer Corporation Method and apparatus for employing a cycle bit parallel executing instructions
US5504914A (en) * 1993-06-23 1996-04-02 National Science Council Multi-level instruction boosting method using plurality of ordinary registers forming plurality of conjugate register pairs that are shadow registers to each other with different only in MSB
EP1369775A1 (en) 1993-11-05 2003-12-10 Intergraph Hardware Technologies Company Instruction cache associative cross-bar switch
US6360313B1 (en) 1993-11-05 2002-03-19 Intergraph Corporation Instruction cache associative crossbar switch
US5509129A (en) * 1993-11-30 1996-04-16 Guttag; Karl M. Long instruction word controlling plural independent processor operations
US5598546A (en) * 1994-08-31 1997-01-28 Exponential Technology, Inc. Dual-architecture super-scalar pipeline
US5819059A (en) * 1995-04-12 1998-10-06 Advanced Micro Devices, Inc. Predecode unit adapted for variable byte-length instruction set processors and method of operating the same
US5991869A (en) * 1995-04-12 1999-11-23 Advanced Micro Devices, Inc. Superscalar microprocessor including a high speed instruction alignment unit
US5931941A (en) * 1995-04-28 1999-08-03 Lsi Logic Corporation Interface for a modularized computational unit to a CPU
US5848288A (en) * 1995-09-20 1998-12-08 Intel Corporation Method and apparatus for accommodating different issue width implementations of VLIW architectures
US5872947A (en) * 1995-10-24 1999-02-16 Advanced Micro Devices, Inc. Instruction classification circuit configured to classify instructions into a plurality of instruction types prior to decoding said instructions
US5826089A (en) * 1996-01-04 1998-10-20 Advanced Micro Devices, Inc. Instruction translation unit configured to translate from a first instruction set to a second instruction set
US5958042A (en) * 1996-06-11 1999-09-28 Sun Microsystems, Inc. Grouping logic circuit in a pipelined superscalar processor
US5924128A (en) * 1996-06-20 1999-07-13 International Business Machines Corporation Pseudo zero cycle address generator and fast memory access
US5845099A (en) * 1996-06-28 1998-12-01 Intel Corporation Length detecting unit for parallel processing of variable sequential instructions
US5867680A (en) * 1996-07-24 1999-02-02 Advanced Micro Devices, Inc. Microprocessor configured to simultaneously dispatch microcode and directly-decoded instructions
US6049863A (en) * 1996-07-24 2000-04-11 Advanced Micro Devices, Inc. Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor
US5941980A (en) * 1996-08-05 1999-08-24 Industrial Technology Research Institute Apparatus and method for parallel decoding of variable-length instructions in a superscalar pipelined data processing system
US5724422A (en) * 1996-08-05 1998-03-03 Industrial Technology Research Institute Encrypting and decrypting instruction boundaries of instructions in a superscalar data processing system
US5852727A (en) * 1997-03-10 1998-12-22 Advanced Micro Devices, Inc. Instruction scanning unit for locating instructions via parallel scanning of start and end byte information
US5913048A (en) * 1997-03-31 1999-06-15 International Business Machines Corporation Dispatching instructions in a processor supporting out-of-order execution
US5898885A (en) * 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native stack-based instruction within a computer system
US5875336A (en) * 1997-03-31 1999-02-23 International Business Machines Corporation Method and system for translating a non-native bytecode to a set of codes native to a processor within a computer system
US6098167A (en) * 1997-03-31 2000-08-01 International Business Machines Corporation Apparatus and method for fast unified interrupt recovery and branch recovery in processors supporting out-of-order execution
US5887161A (en) * 1997-03-31 1999-03-23 International Business Machines Corporation Issuing instructions in a processor supporting out-of-order execution
US5898850A (en) * 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native mode-sensitive instruction within a computer system
US5805849A (en) * 1997-03-31 1998-09-08 International Business Machines Corporation Data processing system and method for using an unique identifier to maintain an age relationship between executing instructions
US5870582A (en) * 1997-03-31 1999-02-09 International Business Machines Corporation Method and apparatus for completion of non-interruptible instructions before the instruction is dispatched
US5940602A (en) * 1997-06-11 1999-08-17 Advanced Micro Devices, Inc. Method and apparatus for predecoding variable byte length instructions for scanning of a number of RISC operations
US5922065A (en) * 1997-10-13 1999-07-13 Institute For The Development Of Emerging Architectures, L.L.C. Processor utilizing a template field for encoding instruction sequences in a wide-word format
US6167506A (en) * 1997-11-17 2000-12-26 Advanced Micro Devices, Inc. Replacing displacement in control transfer instruction with encoding indicative of target address, including offset and target cache line location
US6134649A (en) * 1997-11-17 2000-10-17 Advanced Micro Devices, Inc. Control transfer indication in predecode which identifies control transfer instruction and an alternate feature of an instruction
US6118940A (en) * 1997-11-25 2000-09-12 International Business Machines Corp. Method and apparatus for benchmarking byte code sequences
US6314493B1 (en) 1998-02-03 2001-11-06 International Business Machines Corporation Branch history cache
US6061786A (en) * 1998-04-23 2000-05-09 Advanced Micro Devices, Inc. Processor configured to select a next fetch address by partially decoding a byte of a control transfer instruction
US6175908B1 (en) 1998-04-30 2001-01-16 Advanced Micro Devices, Inc. Variable byte-length instructions using state of function bit of second byte of plurality of instructions bytes as indicative of whether first byte is a prefix byte
US6141745A (en) * 1998-04-30 2000-10-31 Advanced Micro Devices, Inc. Functional bit identifying a prefix byte via a particular state regardless of type of instruction
RU2146389C1 (ru) * 1998-07-07 2000-03-10 Научно-исследовательский институт системных исследований РАН Перепрограммируемый вычислитель для систем обработки информации
US6230260B1 (en) 1998-09-01 2001-05-08 International Business Machines Corporation Circuit arrangement and method of speculative instruction execution utilizing instruction history caching
US6658552B1 (en) * 1998-10-23 2003-12-02 Micron Technology, Inc. Processing system with separate general purpose execution unit and data string manipulation unit
US6332215B1 (en) 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US7225436B1 (en) 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US6826749B2 (en) 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
JP2000284970A (ja) * 1999-03-29 2000-10-13 Matsushita Electric Ind Co Ltd プログラム変換装置及びプロセッサ
GB2352066B (en) * 1999-07-14 2003-11-05 Element 14 Ltd An instruction set for a computer
US6711670B1 (en) * 1999-10-14 2004-03-23 Hewlett-Packard Development Company, L.P. System and method for detecting data hazards within an instruction group of a compiled computer program
US6438664B1 (en) 1999-10-27 2002-08-20 Advanced Micro Devices, Inc. Microcode patch device and method for patching microcode using match registers and patch routines
US7039790B1 (en) 1999-11-15 2006-05-02 Texas Instruments Incorporated Very long instruction word microprocessor with execution packet spanning two or more fetch packets with pre-dispatch instruction selection from two latches according to instruction bit
EP1102165A1 (en) * 1999-11-15 2001-05-23 Texas Instruments Incorporated Microprocessor with execution packet spanning two or more fetch packets
US6618801B1 (en) * 2000-02-02 2003-09-09 Hewlett-Packard Development Company, L.P. Method and apparatus for implementing two architectures in a chip using bundles that contain microinstructions and template information
DE10043003A1 (de) * 2000-09-01 2002-03-14 Infineon Technologies Ag Programmgesteuerte Einheit
EP1197847A3 (en) 2000-10-10 2003-05-21 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US7149878B1 (en) 2000-10-30 2006-12-12 Mips Technologies, Inc. Changing instruction set architecture mode by comparison of current instruction execution address with boundary address register values
US7711926B2 (en) * 2001-04-18 2010-05-04 Mips Technologies, Inc. Mapping system and method for instruction set processing
US6826681B2 (en) * 2001-06-18 2004-11-30 Mips Technologies, Inc. Instruction specified register value saving in allocated caller stack or not yet allocated callee stack
US7107439B2 (en) * 2001-08-10 2006-09-12 Mips Technologies, Inc. System and method of controlling software decompression through exceptions
US8769508B2 (en) 2001-08-24 2014-07-01 Nazomi Communications Inc. Virtual machine hardware for RISC and CISC processors
JP3564445B2 (ja) 2001-09-20 2004-09-08 松下電器産業株式会社 プロセッサ、コンパイル装置及びコンパイル方法
US7395408B2 (en) * 2002-10-16 2008-07-01 Matsushita Electric Industrial Co., Ltd. Parallel execution processor and instruction assigning making use of group number in processing elements
US7917734B2 (en) * 2003-06-30 2011-03-29 Intel Corporation Determining length of instruction with multiple byte escape code based on information from other than opcode byte
US7475223B2 (en) * 2005-02-03 2009-01-06 International Business Machines Corporation Fetch-side instruction dispatch group formation
US7269715B2 (en) * 2005-02-03 2007-09-11 International Business Machines Corporation Instruction grouping history on fetch-side dispatch group formation
US7376815B2 (en) * 2005-02-25 2008-05-20 Qualcomm Incorporated Methods and apparatus to insure correct predecode
US7664765B2 (en) * 2005-07-12 2010-02-16 Cipherflux, Llc Method for accelerating the computational speed of a computer algorithm
US7562206B2 (en) * 2005-12-30 2009-07-14 Intel Corporation Multilevel scheme for dynamically and statically predicting instruction resource utilization to generate execution cluster partitions
JP2007272353A (ja) * 2006-03-30 2007-10-18 Nec Electronics Corp プロセッサ装置及び複合条件処理方法
GR1006531B (el) * 2008-08-04 2009-09-10 Διαμορφωση εντυπου πολλαπλων επιλογων αναγνωσιμου με ηλεκτρονικο μεσο και συστημα και μεθοδος για την ερμηνεια κατ' ελαχιστον μιας επιλογης του χρηστη
US9354888B2 (en) * 2012-03-28 2016-05-31 International Business Machines Corporation Performing predecode-time optimized instructions in conjunction with predecode time optimized instruction sequence caching
US9348596B2 (en) * 2013-06-28 2016-05-24 International Business Machines Corporation Forming instruction groups based on decode time instruction optimization
RU2620731C1 (ru) * 2016-07-20 2017-05-29 федеральное государственное казенное военное образовательное учреждение высшего образования "Военная академия связи имени Маршала Советского Союза С.М. Буденного" Способ совместного арифметического и помехоустойчивого кодирования и декодирования
CN115757476A (zh) * 2021-09-06 2023-03-07 财付通支付科技有限公司 一种数据处理方法、智能合约处理方法及相关设备

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3401376A (en) * 1965-11-26 1968-09-10 Burroughs Corp Central processor
US4025771A (en) * 1974-03-25 1977-05-24 Hughes Aircraft Company Pipe line high speed signal processor
JPS53108254A (en) * 1977-03-02 1978-09-20 Nec Corp Information processor
US4200927A (en) * 1978-01-03 1980-04-29 International Business Machines Corporation Multi-instruction stream branch processing mechanism
US4295193A (en) * 1979-06-29 1981-10-13 International Business Machines Corporation Machine for multiple instruction execution
US4439828A (en) * 1981-07-27 1984-03-27 International Business Machines Corp. Instruction substitution mechanism in an instruction handling unit of a data processing system
US4591972A (en) * 1982-11-15 1986-05-27 Data General Corp. Data processing system with unique microcode control
US4594655A (en) * 1983-03-14 1986-06-10 International Business Machines Corporation (k)-Instructions-at-a-time pipelined processor for parallel execution of inherently sequential instructions
US4873629A (en) * 1984-06-20 1989-10-10 Convex Computer Corporation Instruction processing unit for computer
SU1295410A1 (ru) * 1985-07-08 1987-03-07 Институт кибернетики им.В.М.Глушкова Процессор дл мультипроцессорной системы
US4847755A (en) * 1985-10-31 1989-07-11 Mcc Development, Ltd. Parallel processing method and apparatus for increasing processing throughout by parallel processing low level instructions having natural concurrencies
US5021945A (en) * 1985-10-31 1991-06-04 Mcc Development, Ltd. Parallel processor system for processing natural concurrencies and method therefor
SU1517035A1 (ru) * 1987-10-30 1989-10-23 Институт кибернетики им.В.М.Глушкова Процессор дл мультипроцессорной системы
JPH0769824B2 (ja) * 1988-11-11 1995-07-31 株式会社日立製作所 複数命令同時処理方式

Also Published As

Publication number Publication date
SK93491A3 (en) 1995-09-13
HU911101D0 (en) 1991-10-28
BR9102128A (pt) 1991-12-24
CA2038264C (en) 1995-06-27
JPH04232532A (ja) 1992-08-20
RU2109333C1 (ru) 1998-04-20
JPH0778738B2 (ja) 1995-08-23
CZ93491A3 (en) 1995-07-12
PL289724A1 (en) 1992-04-21
US5355460A (en) 1994-10-11
US5459844A (en) 1995-10-17
CZ280269B6 (cs) 1995-12-13
EP0463296A2 (en) 1992-01-02
EP0463296A3 (pl) 1994-03-23
HUT57920A (en) 1991-12-30

Similar Documents

Publication Publication Date Title
PL165585B1 (pl) Uklad do równoleglego przetwarzania instrukcji w komputerze jednoprocesorowym PL
US5475853A (en) Cache store of instruction pairs with tags to indicate parallel execution
Sakai et al. An architecture of a dataflow single chip processor
US5659722A (en) Multiple condition code branching system in a multi-processor environment
US7383421B2 (en) Cellular engine for a data processing system
US4297743A (en) Call and stack mechanism for procedures executing in different rings
US5321823A (en) Digital processor with bit mask for counting registers for fast register saves
US5448746A (en) System for comounding instructions in a byte stream prior to fetching and identifying the instructions for execution
US4868735A (en) Interruptible structured microprogrammed sixteen-bit address sequence controller
US6029240A (en) Method for processing instructions for parallel execution including storing instruction sequences along with compounding information in cache
EP2480979B1 (en) Unanimous branch instructions in a parallel thread processor
US5701430A (en) Cross-cache-line compounding algorithm for scism processors
JPH04233034A (ja) コンピュータ・システム
JPH04309131A (ja) 命令群用マイクロコード生成装置及びコンピュータにおける組合せ装置
US6023751A (en) Computer system and method for evaluating predicates and Boolean expressions
US20040236929A1 (en) Logic circuit and program for executing thereon
Gwennap VLIW: The wave of the future?
PL166513B1 (pl) Uklad komputerowy do przetwarzania rozkazów PL
DE69031232T2 (de) Verfahren und Vorrichtung zur Vorverarbeitung mehrerer Befehle in einem Pipeline-Prozessor
CN121614185A (zh) 指令发射方法、装置、处理单元及系统
Richardson The Fred VHDL Model
Craig et al. PIPE: A High Performance VLSI Processor Implementation
WO1986000435A1 (en) Three word instruction pipeline
WO1998006039A1 (en) Disambiguation memory circuit and operating method
Katz et al. PIPE: A HIGH PERFORMANCE VLSI PROCESSOR IMPLEMENTATION GL Craig JR Goodman