PL165524B1 - Sposób przetwarzania strumienia impulsów elektrycznych PL - Google Patents

Sposób przetwarzania strumienia impulsów elektrycznych PL

Info

Publication number
PL165524B1
PL165524B1 PL91289722A PL28972291A PL165524B1 PL 165524 B1 PL165524 B1 PL 165524B1 PL 91289722 A PL91289722 A PL 91289722A PL 28972291 A PL28972291 A PL 28972291A PL 165524 B1 PL165524 B1 PL 165524B1
Authority
PL
Poland
Prior art keywords
instructions
instruction
conjugate
execution
compound
Prior art date
Application number
PL91289722A
Other languages
English (en)
Other versions
PL289722A1 (en
Inventor
Bartholomew Blaner
Stamatis Vassiliadis
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 PL289722A1 publication Critical patent/PL289722A1/xx
Publication of PL165524B1 publication Critical patent/PL165524B1/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/3017Runtime instruction translation, e.g. macros
    • 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/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • 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/3842Speculative instruction execution
    • 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)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Numerical Control (AREA)

Abstract

1. Sposób przetwarzania strumienia impul- sów elektrycznych, powiazanego ze strumie- niem instrukcji w ukladzie komputera, w któ- rym strumien impulsów elektrycznych sklada sie z kolejnych sekwencji impulsów elektry- cznych, powiazanych z kolejnymi instrukcjami strumienia instrukcji, a kazda z sekwencji impulsów elektrycznych wyznacza instrukcje polaczona z jedna z wielu instrukcji o róznych kategoriach, znamienny tym, ze bada sie kolejne sekwencje impulsów elektrycznych i okresla sie zdolnosc kategorii instrukcji z przy- leglych, polaczonych kolejno instrukcji do wykonywania równoleglego, oraz generuje sie dodatkowe impulsy elektryczne, z kolejnych sekwencji impulsów elektrycznych, zaleznie od wyniku etapu badania. FIG .1 PL

Description

Przedmiotem wynalazku jest sposób przetwarzania strumienia impulsów elektrycznych powiązanego ze strumieniem instrukcji przetwarzanych w układzie komputera.
Znany jest sposób zwiększenia wydajności układów komputera poprzez równoległe wykonywanie rozkazów. Praca równoległa polega na istnieniu oddzielnych bloków funkcjonalnych zdolnych do jednoczesnego wykonywania dwóch lub więcej takich samych lub różnych rozkazów.
Innym znanym sposobem zwiększenia wydajności układu komputera jest tak zwane potokowanie. Potokowanie polega na rozdziale funkcji podanych do wykonania przez układ komputera na niezależne podfunkcje i przydziale oddzielnych części układowych i stopni do wykonania poszczególnych podfunkcji. Każdy stopień dostosowany jest do pracy w jednym podstawowym cyklu maszyny. Potokowanie zapewnia pewien rodzaj przetwarzania równoległego, gdyż umożliwia wykonywanie wielu funkcji niezależnie. W idealnym przypadku w potok wstawiony jest jeden nowy rozkaz w ciągu cyklu, a każdy z rozkazów znajdujących się w potoku jest na innym etapie wykonywania. Praca jest analogiczna do działania fabrycznej taśmy montażowej z wieloma stanowiskami, na których znajduje się produkt w różnych stadiach montażu.
Jednakże często nie udaje się osiągnąć korzyści z wykonywania równoległego lub potokowania z powodu opóźnień, spowodowanych na przykład uzależnieniem powodowanym przez dane i uzależnieniem powodowanym przez układy. Przykładem uzależnienia od danych jest tak zwane uzależnienie wejściowo-wyjściowe, przy którym pierwszy rozkaz musi zapisać swój wynik zanim drugi rozkaz będzie mógł je odczytać i następnie wykorzystać. Przykładem uzależnienia układowego jest sytuacja, kiedy jeden rozkaz wykorzystuje konkretny fragment układu a drugi rozkaz musi również skorzystać z tego samego fragmentu układu.
Jedna z metod wcześniej stosowanych w celu zapobieżenia uzależnieniu, zwanemu czasem hazardem potokowania, jest tak zwane szeregowanie dynamiczne. Szeregowanie dynamiczne opiera się na fakcie, że przy zastosowaniu układów wyspecjalizowanych możliwe jest przeorganizowanie sekwencji rozkazów po ich pobraniu do potoku w celu ich wykonania.
Były czynione również próby poprawienia wydajności przez stosowanie tak zwanego szeregowania statycznego, którego dokonuje się zanim strumień rozkazów zostanie pobrany do wykonania. Szeregowanie statyczne odbywa się przez przemieszczanie kodów i ponowne ustawienie ciągu rozkazów do wykonania. W wyniku tego ponownego ustawienia powstaje równoważny strumień rozkazów, pozwalający pełniej wykorzystać możliwości układowe przez przetwarzanie równoległe.
165 524
Takie szeregowanie statyczne odbywa się zwykle podczas komplikacji. Jednakże ustawiane -rozkazy pozostają w swojej pierwotnej postaci, i przetwarzanie równoległe wymaga jeszcze pewnej decyzji dynamicznej przed samym wykonaniem w celu określenia, czy następne dwa rozkazy powinny być wykonane sekwencyjnie czy równolegle.
Taki sposób szeregowania może poprawić ogólną wydajność układu komputera z potokowaniem, ale nie może sprostać ciągle rosnącym wymaganiom dotyczącym wydajności. Z tego względu wiele innych sposobów przetwarzania ogólnego przeznaczenia odnosi się do wykorzystania jednoczesności przetwarzania na poziomie rozkazowym, niezależnie od stosowania potokowania.' Na przykład, dalsze zwiększenie stopnia jednoczesności można osiągnąć wprost- przez wydawanie wielu rozkazów w jednym cyklu maszynowym w tak zwanych maszynach superskalamych, zamiast pośrednio, przez szeregowanie dynamiczne pojedynczych rozkazów, lub przez stosowanie maszyn wektorowych. Nazwą maszyny superskalarnej określa się maszynę wydającą wiele rozkazów w jednym cyklu maszynowym, w celu odróżnienia jej od maszyn skalarnych wydających jeden rozkaz na cykl.
W typowej maszynie superskalarnej kody maszynowe w pobieranym strumieniu rozkazów są dekodowane i analizowane dynamicznie przez logikę wydawania rozkazów w celu określenia, czy rozkazy mogą być wykonywane równolegle. Kryteria takiego pospiesznego szeregowania są specyficzne dla każdego rodzaju struktury zestawu rozkazów, jak również dla zastosowania tej struktury w danym procesorze. Jego efektywność jest zatem ograniczona złożonością logiki określającej, które kombinacje rozkazów mogą być wykonywane równolegle i jakie jest prawdopodobne zwiększenie czasu cyklu. Wzrost czasu cyklu i stopnia złożoności układowej występuje nawet w maszynach superskalamych o setkach różnych rozkazów.
Przy szeregowaniu dynamicznym, szeregowaniu statycznym, bądź przy kombinacji obu, występują jeszcze inne niedostatki. Na przykład niezbędne jest przejrzenie każdego rozkazu 'skalara na nowo przy każdym pobieraniu go do wykonania, w celu określenia możliwości jego przetwarzania równoległego. Nie ma możliwości zidentyfikowania i oznaczenia wcześniej tych rozkazów skalara, które mają możliwości wykonania równoległego.
Inną wadą szeregowania dynamicznego stosowanego w maszynach superskalamych jest sposób, w jaki rozkazy są sprawdzane na możliwość przetwarzania równoległego. Maszyny superskalarne sprawdzają rozkazy skalarów na podstawie opisu ich kodów maszynowych, i nie jest możliwe - uwzględnienie przy tym realizacji układowej. Ponieważ rozkazy są wydawane na zasadzie FIFO (pierwszy na wejściu - pierwszy na wyjściu), to tym samym niemożliwe jest ich selektywne grupowanie w celu eliminacji lub zmniejszenia uzależnienia. Istnieje kilka sposobów poszukiwania możliwości uwzględnienia wymagań układowych odnoszących się do przetwarzania równoległego. W jednym z takich układów pracujących z szeregowaniem statycznym, zwanym maszyną z bardzo długim słowem rozkazowym, stosowany jest kompilator o dużych możliwościach’, który ustawia rozkazy tak, że szeregowanie dynamiczne jest dużo prostsze. Przy tym podejściu kompilator musi być bardziej złożony od standardowych kompilatorów, tak aby do celów wyszukiwania możliwości jednoczesności w strumieniu rozkazów mogło być wykorzystane większe okno. Jednak rozkazy wynikowe nie muszą być kodami maszynowymi kompatybilnymi z zadaną strukturą maszyny, przez co rozwiązanie jednego problemu stwarza nowe dodatkowe problemy. Problemy istotnie rosną również z powodu częstego występowania skoków programowych ograniczających jednoczesność przetwarzania.
Zatem żaden ze znanych sposobów podejścia do przetwarzania równoległego nie jest zadowalająco wszechstronny dla minimalizacji wszystkich możliwych uzależnień, jednoczesnego uniknięcia zasadniczego przeprojektowywania zestawu rozkazów i stosowania złożonych obwodów logicznych do dynamicznego dekodowania pobieranych rozkazów.
Zatem potrzebne jest udoskonalenie procesu przetwarzania danych, które pozwoliłoby na wykonywanie istniejących rozkazów maszynowych równolegle, w celu zwiększenia wydajności procesora. Ponieważ liczba rozkazów wykonywanych w sekundzie zależy od podstawowego czasu cyklu procesora i przeciętnej liczby cykli potrzebnych do realizacji rozkazu, to występuje potrzeba znalezienia rozwiązania uwzględniającego obydwa te parametry. Dokładniej, potrzebny jest mechanizm zmniejszający liczbę cykli potrzebnych do wykonania rozkazu przy zadanej strukturze. Poza tym potrzebne jest usprawnienie pozwalające na zmniejszenie złożoności układu potrzebnego
165 524 do zapewnienia wykonywania rozkazów i minimalizujące wzrost czasu cyklu. Bardzo pożądane jest również dla proponowanego usprawnienia zapewnienie kompatybilności ze znanymi strukturami przy wprowadzeniu jednoczesności przetwarzania na poziomie rozkazu zarówno nowego jak i istniejącego kodu maszynowego.
Istotą proponowanego według wynalazku sposobu przetwarzania strumienia impulsów elektrycznych, powiązanego ze strumieniem instrukcji w układzie komputera, w którym strumień impulsów elektrycznych składa się z kolejnych sekwencji impulsów elektrycznych, powiązanych z kolejnymi instrukcjami strumienia instrukcji, a każda z sekwencji impulsów elektrycznych wyznacza instrukcję połączoną z jedną z wielu instrukcji o różnych kategoriach, jest to, że bada się kolejne sekwencje impulsów elektrycznych i określa się zdolność kategorii instrukcji z przyległych, połączonych kolejno instrukcji do wykonywania równoległego, oraz generuje się dodatkowe impulsy elektryczne, z kolejnych sekwencji impulsów elektrycznych, zależne od wyniku etapu badania. Korzystne jest, gdy zgodnie z wynalazkiem w etapie badania kolejnych sekwencji impulsów elektrycznych bada się sekwencję impulsów elektrycznych pierwszej instrukcji i sekwencję impulsów elektrycznych drugiej instrukcji na możliwość ich wykonywania równoległego i następnie bada się sekwencję impulsów elektrycznych drugiej instrukcji i sekwencję impulsów elektrycznych trzeciej instrukcji na możliwość ich wykonywania równoległego.
Zaletą rozwiązania według wynalazku jest zapewnienie analizowania statycznego, przed dekodowaniem rozkazów i ich wykonaniem, sekwencji istniejących rozkazów w celu generacji rozkazów sprzężonych tworzonych przez grupowanie przylegających do siebie rozkazów nadających się do wykonywania równoległego. Kolejną zaletą tego rozwiązania jest dodanie informacji sterującej do strumienia rozkazowego łącznie z informacją wskazującą, gdzie rozkaz sprzężony się rozpoczyna, jak również wskazującą liczbę istniejących rozkazów włączonych w każdy ze sprzężonych rozkazów. Ponadto sposób według wynalazku umożliwia wstępne przetwarzanie' strumienia w celu tworzenia rozkazów sprzężonych, tak aby mogły być one wykorzystane programowo lub układowo w wielu punktach układu komputerowego przed dekodowaniem i ich wykonywaniem. Tworzone rozkazy sprzężone nadają się do zastosowania w strukturach rozkazów złożonych o zmiennej długości i o rozkazach przemieszanych z danymi oraz nadaje się do wykorzystania w strukturach RISC, w których rozkazy mają zwykle stałą długość i nie są przemieszane z danymi.
Rozwiązanie według wynalazku zastosowane w Maszynie ze Skalowanym Zestawem Rozkazów Sprzężonych (Scalable Compound Instruction Set Machine - SCISM) umożliwia sprzęganie strumienia rozkazów skalarnych, czyli grupowanie razem przed momentem dekodowania rozkazu, tak że są one już zaopatrywane w znaczniki i identyfikowane dla selektywnego równoległego wykonania przez odpowiednie bloki wykonawcze. Ponieważ takie sprzęganie nie zmienia kodów maszynowych, to istniejące programy mogą być realizowane ze zwiększoną wydajnością przy utrzymaniu kompatybilności z już zrealizowanymi układami komputerowymi.
Wynalazek zostanie dokładniej objaśniony w przykładzie jego realizacji w oparciu o załączony rysunek, na którym fig. 1 przedstawia dotyczący wynalazku schemat wysokiego poziomu przetwarzania, fig. 2 - wykres czasowy realizacji jednoprocesorowej z przedstawieniem równoległego wykonania niektórych nie uzależnionych rozkazów, które mogą być grupowane selektywnie w sprzężony strumień rozkazów, fig. 3 - wykres czasowy realizacji mikroprocesorowej z przedstawieniem równoległego wykonywania rozkazów skalarnych i sprzężonych, nie powodujących uzależnienia, fig. 4A i fig. 4B - przykład możliwej selektywnej kategoryzacji części rozkazów wykonywanych przez znaną maszynę skalarną, fig. 5 - typową drogę obraną przez program od kodu źródłowego do rzeczywistego wykonania, fig. 6 - sieć działań ukazujących tworzenie zestawu rozkazów sprzężonych z programu w języku symbolicznym, fig. 7 - sieć działań ukazującą wykonanie programu zawartego w sprzężonym zestawie rozkazów, fig. 8 - mapę analityczną tekstów strumienia rozkazów z identyfikującymi rozkazy punktami odniesienia, fig. 9 - mapę analityczną tekstów strumienia rozkazów o różnej długości rozkazów bez punktów odniesienia, obrazującą rozmieszczenie względne możliwych bitów identyfikatora sprzężenia, fig. 10 - ilustrację realizacji logicznej umożliwiającej sprzęganie rozkazów dla operowania tekstem strumienia rozkazów z fig. 9, fig. 11 - sieć działania przy sprzęganiu strumienia rozkazów zaopatrzonych w znaczniki odniesienia dla identyfikacji punktów oznaczających granice rozkazów, fig. 12 - wzorcowe pole sterowania rozkazu sprzężonego, fig. 13 - sieć działań opracowywania i stosowania reguł sprzęgania stosowanych w konkretnej konfiguracji bloków układowych komputera będącą częściowo zestawionym zbiorem rozkazów, fig. 14 - sposób, w jaki różne zgrupowania nie uzależnionych par rozkazów tworzą wielokrotne rozkazy sprzężone do docelowego wykonania sekwencyjnego lub wykonania ze skokami, fig. 15 - sposób, w jaki różne zgrupowania ważnych nie uzależnionych wzajemnie trójek rozkazów tworzą wielokrotne rozkazy sprzężone przeznaczone do docelowego wykonania sekwencyjnego lub wykonania ze skokiem, fig. 16A i fig. 16B - mapę działań przy sprzęganiu strumienia rozkazów podobnego do przedstawionego na fig. 9, obejmującego rozkazy o różnej długości bez punktów odniesienia oznaczających granice, a fig. 17 - mapę działań grup rozkazów dla części zestawu rozkazów Systemu/370 przedstawionego na fig. 4.
Wynalazek dotyczy przetwarzania strumienia impulsów elektrycznych powiązanego ze strumieniem instrukcji przetwarzanych w układzie komputera, przy czym w dalszej treści opisu dla jego uproszczenia jest opisane przetwarzanie instrukcji. Wstępnie przetwarza się zestaw rozkazów, przeznaczonych do wykonania przez układ komputera w celu statycznego określenia, które nie uzależnione wzajemnie rozkazy mogą być zestawiane w rozkazy sprzężone, i dołączanie informacji sterującej służącej do identyfikacji takich rozkazów sprzężonych. Takie określanie opiera się na regułach sprzęgania, które opracowane są dla zestawu rozkazów o konkretnej konfiguracji. Istniejące rozkazy skalarne są grupowane na podstawie analizy ich operandów, wykorzystania układów maszyny i jej funkcji, tak że grupowanie rozkazów za pomocą sprzęgania w celu uniknięcia nieusuwalnych uzależnień opiera się na porównaniu grup rozkazów zamiast na porównaniu konkretnych rozkazów.
Jak przedstawiono ogólnie na figurze 1, zespół sprzęgania rozkazów 20 pobiera strumień binarnych rozkazów skalarnych 21, z zawartymi w nich danymi lub bez nich, i selektywnie grupuje niektóre z sąsiadujących rozkazów skalarnych tworząc zakodowane rozkazy sprzężone. Wynikowy strumień 22 rozkazów sprzężonych łączy zatem rozkazy skalarne nie nadające się do pracy równoległej i sprzężone rozkazy utworzone przez grupy rozkazów skalarnych nadających się do wykonania równoległego. Kiedy do jednostki przetwarzania rozkazów 24 podawany jest rozkaz skalarny, to przekazywany jest on do odpowiedniej jednostki funkcjonalnej do wykonania szeregowego. Kiedy do jednostki przetwarzającej 24 podawany jest rozkaz sprzężony, to każda z jego składowych skalarnych dociera do odpowiedniego bloku funkcjonalnego lub bloku usuwania uzależnień dla jednoczesnego wykonania równoległego. Typowe bloki funkcjonalne zawierają jednostkę arytmetyczno-logiczną (ALU) 26, 28, jednostkę arytmetyki zmiennoprzecinkowej (FP) 30 i jednostkę generacji adresów pamięci (AU) 32.
Jak to pokazano na figurze 2, wynalazek może być zrealizowany w środowisku jednoprocesorowym, w którym każda jednostka wykonawcza realizuje rozkaz skalarny (S) lub też sprzężony rozkaz skalarny (CS). Strumień rozkazów 33 zawierający sekwencję rozkazów skalarnych i sprzężonych rozkazów skalarnych zawiera znaczki sterujące (T) przyporządkowane do każdego rozkazu sprzężonego. Pierwszy rozkaz skalarny 4 może być wykonany pojedynczo przez jednostkę funkcjonalną A w cyklu 1, trzy sprzężone rozkazy skalarne zawarte w potrójnym sprzężonym rozkazie 36 identyfikowanym przez znacznik T3 mogą być wykonywane przez jednostki funkcjonalne A, C i B w cyklu 2, inny rozkaz sprzężony 38 identyfikowany przez znacznik T2 może zawierać parę rozkazów wykonywanych równolegle przez jednostki funkcjonalne A i B w cyklu 3, drugi rozkaz skalarny 40 może być wykonywany pojedynczo · przez jednostkę funkcjonalną C w cyklu 4, cztery sprzężone rozkazy skalarne dużego grupowego rozkazu sprzężonego 42 mogą być wykonywane przez jednostki funkcjonalne A-D w cyklu 5, a trzeci lozkaz skalarny 44 może być wykonywany przez jednostkę funkcjonalną A w cyklu 6.
Przy realizacji ważne jest to, że takie wielokrotne rozkazy sprzężone nadają się do równoległego wykonywania w niektórych konfiguracjach układów komputerowych. Wynalazek mógłby być potencjalnie zrealizowany w środowisku wieloprocesorowym, takim jak pokazano na figurze 3, gdzie rozkaz sprzężony traktowany jest jak blok do równoległego przetwarzania przez jedną z CPU (jednostek centralnych). Jak pokazano na rysunku, ten sam strumień rozkazów mógłby być przetwarzany tylko w dwóch cyklach w sposób następujący. W pierwszym cyklu jednostka CPU 1 1 wykonuje pierwszy rozkaz skalamy 34, jednostki funkcjonalne CPU # 2 wykonują potrójny rozkaz sprzężony 36, a jednostki funkcjonalne CPU 0 3 wykonują dwa sprzężone rozkazy skalarne w rozkazie sprzężonym 38. W drugim cyklu CPU # 1 wykonuje drugi rozkaz skalarny 40, jednostki funkcjonalne CPU # 2 wykonują cztery sprzężone rozkazy skalarne w rozkazie sprzężonym 42, a jednostka funkcjonalna CPU 3 wykonuje trzeci rozkaz skalarny 44.
Jednym z przykładów architektury komputerowej, która może być dostosowana do pracy z rozkazami sprzężonymi jest architektura poziomu rozkazowego systemu IBM/370, w której mogą być wydawane wielokrotne rozkazy skalarne do wykonywania w każdym cyklu maszynowym. W tym kontekście cykl maszynowy oznacza każdy z kroków, czyli etapów potokowania potrzebnych do wykonania rozkazu skalarnego. Rozkazy skalarne działają na operandach reprezentujących pojedyncze wartości. Kiedy strumień rozkazów jest sprzężony, sąsiednie rozkazy skalarne są pogrupowane selektywnie w celu jednoczesnego, czyli równoległego ich wykonania. Ogólnie biorąc umożliwienie sprzęgania rozkazów przewidziane jest dla klas rozkazów, które mogą być wykonywane równoległe i które zapewniają brak uzależnień między elementami występującego rozkazu sprzężonego, takich które uniemożliwiałyby wykonanie ich w strukturze układowej. Po znalezieniu kompatybilnych sekwencji rozkazów tworzony jest rozkaz sprzężony.
Dokładniej zestaw rozkazów Systemu/370 można podzielić na kategorie rozkazów, które mogą być wykonywane równolegle w konkretnej konfiguracji układu komputerowego. Rozkazy w niektórych z tych konfiguracji z tych kategorii mogą być łączone, czyli sprzęgane z rozkazami tej samej kategorii lub z rozkazami niektórych innych kategorii w celu zestawienia rozkazu sprzężonego. Na przykład część zestawu rozkazów Systemu/370 może być rozdzielona na kategorie przedstawione na figurze 4. Podstawą tej kategoryzacji są podstawowe wymagania dotyczące rozkazów Systemu/370 i ich układowego wykorzystania w typowej konfiguracji układu. Pozostałe rozkazy Systemu/370 nie są specjalnie ważne przy sprzęganiu w tym przykładowym wykonaniu. Nie wyklucza to możliwości ich sprzęgania sposobem według wynalazku. Należy zauważyć, że struktury układowe wymagają, aby wykonanie rozkazu sprzężonego mogło być sterowanie poziomym mikrokodem umożliwiającym, w celu zwiększenia wydajności, wykorzystywanie jednoczesności przetwarzania w odniesieniu do pozostałych rozkazów nie uwzględnionych przy sprzęganiu i nie włączonych w kategorie z fig. 4.
Jedną z najczęściej występujących w programach Systemu/370 sekwencji jest wykonywanie rozkazów COMPARES formatu TM lub RX (C, CH, Cl, C1.I, CLM), których rezultat wykorzystuje się do sterowania wykonaniem bezpośrednio po nich następujących rozkazów skoku warunkowego BRANCH (BC, BCR). Można poprawić wydajność przez równoległe wykorzystanie rozkazów COMPARE i BRANCH, i to w przypadku wysokowydajnych procesorów rozkazów jest czasem wykorzystywane dynamicznie. Pewne trudności dotyczą szybkiego identyfikowania wszystkich rozmaitych elementów klasy COMPARE i wszystkich elementów klasy rozkazów BRANCH, podczas procesu dekodowania rozkazu w typowej strukturze. Jest to jeden z powodów, dla których maszyny superskalarne uwzględniają zwykle tylko niewielką liczbę konkretnych rozkazów skalarnych nadających się do wykonania równoległego. W odróżnieniu od tego, takie ograniczone grupowanie oparte tylko na bieżącym porównywaniu dwóch konkretnych rozkazów w opisywanym przykładzie się pomija, gdyż analiza wszystkich elementów klas odbywa się z góry na pewien czas, w celu wyznaczenia odpowiednich reguł sprzęgania przy tworzeniu rozkazu sprzężonego gwarantującego pewną pracę.
Problem wynikający z grupowania dynamicznego pojedynczych rozkazów po ich pobraniu jest przedstawiony na przykładzie realizacji takiego dwudrożnego sprzęgania pięćdziesięciu siedmiu pojedynczych rozkazów z fig. 4, tworzących macierz 57 X 57 o ponad trzech tysiącach możliwych kombinacji. Pozostaje to w ostrym kontraście do macierzy 10 X 10 z fig. 17 dla takiej samej liczby rozkazów branych pod uwagę z punktu widzenia możliwych kombinacji kategorii, jak to się przewiduje według wynalazku. Wykonywanych równolegle może być wiele klas rozkazów, zależnie od tego, dla jakiej struktury układowej są one przeznaczone. Poza dającymi się sprzęgać opisanymi powyżej parami COMPARE i BRANCH do równoległego wykonania nadaje się wiele innych sprzęgalnych kombinacji (patrz fig. 17), takich jak LOADS (kategoria 7) sprzęgana z rozkazami formatu RR (kategoria 1), BRANCHES (kategoria 3-5) sprzęgana z LOAD ADDRESS (kategoria 8) i tym podobne.
165 524
W niektórych przypadkach porządek sekwencyjny może wpływać na możliwości wykonania równoległego i dlatego decyduje o tym, które dwa sąsiadujące rozkazy mogą być sprzęgane. Ze względu na to, nagłówek wiersza 45 identyfikuje kategorię pierwszego rozkazu w strumieniu bajtów, a nagłówek kolumny 47 określa kategorię następnego rozkazu. Na przykład BRANCHES (kategoria 3-5) jak zawsze sprzęgany 49 z występującym za nim dowolnym rozkazem SHIFTS (kategoria 2), podczas gdy SHIFTS (kategoria 2) występuje za BRANCHES (kategoria 3 - 5) są tylko „niekiedy sprzęgalne 51. Status „niekiedy oznaczony jako „S“ na mapie z fig. 17 można często zmienić na „zawsze, oznaczany na mapie przez „A“, przez dodanie nowych bloków układowych do konfiguracji układu komputerowego. Na-przykład można wziąć pod uwagę, konfigurację umożliwiającą sprzęganie dwudrożne, która nie ma jednostki przesuwającocumującej do redukcji uzależnień, a zamiast tego ma konwencjonalną jednostkę arytmetycznologiczną (ALU) i oddzielny blok przesunięć. Innymi słowy, przy operowaniu uzależnionymi rozkazami ADD i SHIFT nie stosuje się bloków układowych eliminujących uzależnienia. Weźmy pod uwagę następującą sekwencję rozkazów:
ARR1, R2 SRL R2 przez D2
Widać wyraźnie, że ta para rozkazów nadaje się do sprzężenia w celu równoległego ich wykonywania. W niektórych przypadkach rozkazy takie mogą nie być sprzęgalne wskutek ich nieusuwalnego uzależnienia, jak to pokazano na przykładzie następującej sekwencji rozkazów:
ARR1, R2 SRLR1 przez D2
Dlatego mapa wskazuje, że rozkazy kategorii 1 (AR) występujące po rozkazach kategorii 2 (SRL), są niekiedy sprzęgalne 53. Przez dołączenie jednostki ALU eliminującej niektóre uzależnienie, takie jak pokazane powyżej uzależnienie między sumowaniem i przesunięciem, oznaczenie na mapie z fig. 17 może się zmienić z S na A. Odpowiednio do tego w celu odzwierciedlenia zmian dokonanych w konkretnej konfiguracji układu komputerowego muszą zostać uaktualnione reguły sprzęgania.
Jako inny przykład weźmy pod uwagę rozkazy należące do kategorii 1 i sprzężone z rozkazami z tej samej kategorii w następującej sekwencji rozkazów:
ARR1, R2 SR R3, R4
Ta sekwencja jest pozbawiona uzależnienia od hazardów danych i daje następujący rezultat dwóch niezależnych rozkazów Systemu/370.
R1=R1 + R2 R3 = R3-R4
Wykonanie takiej sekwencji wymagałoby dwóch niezależnych i pracujących równolegle w systemie dwa-na-jeden jednostek ALU dostosowanych do struktury poziomu rozkazowego. Jest zrozumiałe, że w konfiguracji układu zaopatrzonej w dwie jednostki ALU te dwa rozkazy mogą być grupowane z utworzeniem rozkazu sprzężonego. Ten przykład sprzęgania rozkazów skalarnych można uogólnić na wszystkie, wolne od uzależnień pomiędzy danymi jak również od uzależnień układowych, pary rozkazów w sekwencji.
W dowolnym konkretnym procesorze rozkazowym wystąpi górna granica liczby pojedynczych rozkazów mogących być objętymi rozkazem sprzężonym. Ta górna granica jest specyficzna dla jednostki układowej lub programowej tworzącej rozkazy sprzężone, tak że rozkazy sprzężone nie będą zawierały większej liczby oddzielnych rozkazów, na przykład grup podwójnych, potrójnych, poczwórnych, niż wynosi maksymalna pojemność odpowiedniej struktury układowej. Ta górna granica jest ścisłą konsekwencją realizacji układowej w konkretnej konfiguracji układu komputerowego - nie ogranicza ona ani ogólnej liczby rozkazów branych pod uwagę w charakterze kandydatów do sprzęgania, ani długości okna grupowego w analizowanej przy sprzęganiu danej sekwencji kodowej.
Ogólnie biorąc, im większa jest długość okna grupowego analizowanego przy sprzęganiu, tym większy można osiągnąć wyniku korzystnych zestawień przy sprzęganiu stopień jednoczesności przetwarzania. Rozpatrzmy pod tym względem sekwencję rozkazów w poniższej tabeli 1.
165 524
Tabela 1
XI dowolny rozkaz nadający się do sprzęgania
X2 dowolny rozkaz nadający się do sprzęgania
LOADR1, (X) ładuj R1 z komórki pamięci X
ADDR3, R1 R3 = R3 + R2
SUB R1, R2 R1=R1-R2
COMPR1, R3 porównaj R1 z R3
X3 dowolny rozkaz nadający się do sprzęgania
X4 dowolny rozkaz nadający się do sprzęgania
Jeżeli struktura układowa narzuca górną granicę sprzęgania wynoszącą dwa, czyli najwyżej dwa rozkazy mogą być wykonywane równolegle w tym samym cyklu, to istnieje kilka sposobów sprzężenia tej sekwencji rozkazów, zależnie od zakresu działania oprogramowania sprzęgającego.
Jeżeli zakres działania wynosi cztery, to oprogramowanie sprzęgające rozpatruje razem (X1, X2, LOAD, ADD) i następnie przesuwa się, za każdym razem o jeden rozkaz i rozpatruje (X2, LOAD, ADD, SUB), potem (LOAD, ADD, SUB, COMP), następnie (ADD, SUB, COMP, X3) i (SUB, COMP, X3, X4), w celu dokonania następującego optymalnego połączenia w pary, w charakterze kandydatów do rozkazu sprzężonego:
[-X1] [X2 LOAD] [ADD SUB] [COMP X3] [X4-]
To optymalne połączenie w pary całkowicie uwalnia od uzależnień ,między LOAD i ADD oraz między SUB i COMP, i daje dodatkowe możliwości sprzężenia X1 z poprzedzającym go rozkazem oraz X4 - z rozkazem występującym po nim.
Z drugiej strony, maszyna superskalarna dynamicznie łącząca rozkazy w pary w swoich układach logicznych do wydawania rozkazów pracujących na zasadzie ścisłego FIFO, poda w charakterze kandydatów do wykonania równoległego tylko następujące pary:
[X1 X2] [LOAD ADD] [SUB COMP] [X3 X4]
To nieelastyczne łączenie w pary powoduje niekorzystne skutki ze strony niektórych rozkazów uzależnionych i osiąga się tylko częściowe korzyści przetwarzania równoległego.
Mapa z figury 13 przedstawia różne etapy występujące przy określaniu, które z istniejących sąsiadujących ze sobą rozkazów w strumieniu bajtów należą do kategorii bądź klas kwalifikujących się do grupowania z utworzeniem rozkazu sprzężonego dla konkretnej konfiguracji układu komputer owego.
Istnieje wiele możliwych miejsc w układzie komputerowym, w których może następować sprzęganie, zarówno w oprogramowaniu, jak i w strukturze układowej. Każde z nich charakteryzuje się indywidualnymi zaletami i wadami. Jak pokazano na figurze 5, istnieje kilka etapów, w których program przechodzi od kodu źródłowego do bieżącego wykonania. W fazie komplikacji program źródłowy jest tłumaczony na kod maszynowy i zapisywany w pamięci dyskowej 46. W fazie wykonania programu jest odczytywany z pamięci dyskowej 46 i ładowany do pamięci głównej 48 konkretnej konfiguracji układu komputerowego 50, gdzie rozkazy są wykonywane przez odpowiednie jednostki przetwarzania rozkazów 52, 54, 56. Sprzęganie może odbywać się w dowolnym miejscu tej ścieżki. Ogólnie biorąc, jeżeli zespół sprzęgający znajduje się bliżej jednostki przetwarzania rozkazów lub jednostki CPU, to przeważają względy czasowe. Jeżeli zespół sprzęgający znajduje się dalej od jednostki CPU, to więcej rozkazów może być przeglądanych w dużym oknie strumienia rozkazów, w celu grupowania przed sprzęganiem w celu osiągnięcia zwiększenia wydajności wykonania. Jednak takie wczesne sprzęganie powoduje zwiększenie wymagań w odniesieniu do budowy reszty układu wywołując konieczność jej dodatkowej rozbudowy i zwiększając koszty.
Zgodnie z wynalazkiem jest możliwe wykonywanie istniejących programów napisanych w istniejących językach wyższego poziomu lub istniejących programów w języku symbolicznym, przez środki programowe mogące identyfikować sekwencje sąsiadujące ze sobą rozkazów nadających się do równoległego wykonania przez poszczególne jednostki funkcjonalne.
Sieć działań z figury 6, przedstawia generację programu złożonego z zestawu rozkazów sprzężonych z uwzględnieniem zespołu dostosowanych do danego celu reguł sprzęgania 58 odzwierciedlającego strukturę układową. Ten program w języku symbolicznym doprowadzany jest w charakterze danych wejściowych do programowanego urządzenia sprzęgającego 59, które wytwa165 524 rza program z rozkazami sprzężonymi. Analizowane są przez programowe urządzenie sprzęgające kolejne bloki o zadanej z góry długości. Długość każdego bloku 60, 62, 64 w strumieniu bajtów zawierającym grupy rozpatrywanych wspólnie, przed sprzęganiem, rozkazów zależy do złożoności urządzenia sprzęgającego. Jak pokazano na fig. 6, to konkretne urządzenie sprzęgające jest przeznaczone do sterowania dwudrożnym sprzęgaczem dla liczby „m“ rozkazów o stałej długości w każdym bloku. Pierwszym głównym etapem jest sprawdzenie, czy rozkazy, pierwszy i drugi, tworzą parę sprzęgalną, a następnie, czy rozkazy, trzeci i czwarty tworzą parę sprzęgalną i tak aż do końca bloku.
Bardzo pożądane jest, aby po zidentyfikowaniu różnych możliwych par sprzęgalnych Cl -C5 następnym etapem było określenie optymalnego wyrobu przeznaczonych do wykonania równoległego rozkazów sprzężonych utworzonych przez sąsiednie rozkazy skalarne. W przedstawionym przykładzie możliwe są następujące różne sekwencje sprzężonych rozkazów (przy założeniu braku skoków):
II, C2, ICI,^,C3,Ci^,n(^;^l,<C2^,IC I5,I6,C4,I9,I10;C1,13,14,15,C3,C5,I10;C1,13,14,15, 16, C4, 09,110.
W oparciu o konkretną konfigurację układową, urządzenie sprzęgające może wybrać korzystną sekwencję rozkazów sprzężonych i zastosować znaczniki, czyli bity identyfikacyjne do oznaczenia optymalnej sekwencji rozkazów sprzężonych. Jeżeli nie ma sekwencji optymalnej, to mogą być oznaczone wszystkie sprzęgalne sąsiadujące ze sobą rozkazy skalarne, tak że może być wykorzystana dowolna z tych par sprzężonych przez skok do rozkazu wybranego spośród różnych rozkazów sprzężonych (patrz figura 14). Jeżeli do dyspozycji jest wiele jednostek sprzęgających, to w tym samym czasie może być sprzęganych wiele kolejnych bloków strumienia rozkazów.
Konkretna budowa programowego urządzenia sprzęgającego nie będzie tu omawiana ze względu na to, że szczegóły są specyficzne dla danej architektury zestawu rozkazów i rozpatrywanej realizacji. Chociaż konstrukcja takich programów sprzęgających jest w zasadzie nieco podobna do konstrukcji nowoczesnych kompilatorów dokonujących szeregowania rozkazów i innych optymalizacji bazujących na konkretnej strukturze maszyny, to kryteria do przeprowadzenia takiego sprzęgania są specyficzne dla niniejszego wynalazku, co najlepiej widać na mapie działań z figury 13. W obu przypadkach program wyjściowy jest wytwarzany na podstawie danego programu wejściowego i opisu zestawu rozkazów oraz architektury części układowej, to znaczy strukturalnych aspektów realizacji. W przypadku współczesnego kompilatora, produkt końcowy stanowi zoptymalizowaną nową sekwencję istniejących rozkazów.
W przypadku niniejszego wynalazku, produkt wyjściowy jest szeregiem rozkazów sprzężonych, z których każdy utworzony jest przez grupę sąsiadujących ze sobą rozkazów skalarnych nadających się do równoległego wykonania, z przemieszczaniem rozkazów sprzężonych z nie sprzężonymi rozkazami skalarnymi i stanowiącymi część produktu końcowego sterowania niezbędnego dla wykonania rozkazów sprzężonych. Przetwarzanie wstępnego strumienia rozkazów w celu utworzenia rozkazów sprzężonych jest łatwiejsze, jeśli znane punkty odniesienia już istnieją, wskazując gdzie rozkazy się rozpoczynają. Tutaj punkty odniesienia oznaczają pewne oznaczone pole lub inny wskaźnik dający informację o rozmieszczeniu granic rozkazów. W wielu układach komputerowych takie punkty odniesienia są dokładnie znane wyłącznie przez kompilator podczas komplikacji i tylko przez jednostkę CPU podczas pobierania rozkazów. Takie punkty odniesienia nie są znane między kompilacją i pobieraniem rozkazu, z wyjątkiem przypadków, kiedy układ jest dostosowany do używania specjalnych znaczników odniesienia.
Jeżeli sprzęganie odbywa się po kompilacji, to kompilator mógłby oznaczać znacznikami odniesienia (patrz figura 11), które bajty zawierają pierwsze bajty rozkazów, a które zawierają dane. Ta dodatkowa informacja powoduje zwiększanie sprawności urządzenia sprzęgającego dzięki dokładnej znajomości lokacji rozkazu. Oczywiście, kompilator mógłby w inny sposób oznaczać rozkoszy i odróżniać rozkazy do danych w celu zapewnienia urządzeniu sprzęgającemu szczegółowej informacji wskazującej położenie granic. Jeżeli taka informacja o granicach rozkazów jest znana, to generacja odpowiednich bitów identyfikatora sprzężenia odbywa się w zwykły sposób, w oparciu o reguły sprzęgania opracowane dla konkretnej architektury i konfiguracji układowej (patrz figura 8). Jeżeli brak takiej informacji o granicach rozkazów i rozkazy mają różną długość, to problem jest bardziej złożony (patrz fig. 9 i 16).
165 524
Przedstawione tu figury rysunku bazują na korzystnym schemacie kodowania, bardziej szczegółowo opisanym w zamieszczonej poniżej tabeli 2A, według której przy sprzęganiu dwudrożnym rozkaz zaopatrywany jest w bit znacznikowy „1“, jeżeli rozkaz jest sprzężony z następnym, i w bit znacznikowy „0“, jeżeli nie jest on sprzężony z rozkazem następnym. Bity sterujące w polu sterowania dodane przez urządzenie sprzęgające zawierają informację odnoszącą się do wykonania rozkazów sprzężonych i mogą zawierać minimum informacji, uznane za efektywne w danej konkretnej realizacji. Przykładowe 8-bitowe pole sterowania pokazano na figurze 12. Chociaż w najprostszym wykonaniu do wskazania początku rozkazu sprzężonego potrzebny jest tylko pierwszy bit sterujący, to pozostałe bity sterujące dają dodatkową opcjonalną informację dotyczącą wykonania rozkazów.
W innym schemacie kodowania, mogącym mieć zastosowanie zarówno do sprzęgania dwudrożnego, jak i do sprzęgania dużej grupy, pierwszy bit sterujący ustawia się na „1“ w celu wskazania, że odpowiedni rozkaz jest początkiem rozkazu sprzężonego. Wszystkie inne elementy rozkazu sprzężonego będą miały swoje pierwsze bity ustawione na „0“. Przy tym nie będzie możliwe skojarzenie danego rozkazu z innymi, tak że dany rozkaz będzie występował jako rozkaz sprzężony o długości jeden. To znaczy pierwszy bit sterując będzie ustawiony na „ 1“, ale pierwszy bit sterujący następnego rozkazu będzie również ustawiony na „1“. Zgodnie z tym alternatywnym schematem kodowania, układ będzie w stanie ustalić, ile rozkazów składa się na rozkaz sprzężony - przez monitorowanie wszystkich bitów identyfikacyjnych, zamiast przez monitorowanie samego bitu identyfikacyjnego początku rozkazu sprzężonego, jak to jest w przypadku korzystnego schematu kodowania pokazanego poniżej w tabelach 2A-2C.
Sieć działań z figury 7 przedstawia typową realizację dla wykonywania programu złożonego z zestawu rozkazów sprzężonych, wygenerowanego przez preprocesor układowy 66 lub preprocesor programowy 67. Strumień bajtów zawierających rozkazy sprzężone wpływa do bufora 68 rozkazów (CI), będącego szybkim buforem umożliwiającym szybki dostęp do rozkazów sprzężonych. Układy logiczne 69 pobierają rozkazy sprzężone z bufora CI i wydają ich poszczególne rozkazy sprzężone do odpowiednich jednostek funkcjonalnych w celu wykonania równoległego. Należy podkreślić, że jednostki wykonawcze rozkazów sprzężonych (CI, EU) 71 takie jak jednostki ALU w układzie komputerowym pracującym z rozkazami sprzężonymi są w stanie wykonywać na raz albo same po jednym rozkazie skalarnym, albo sprzężone rozkazy skalarne równolegle z innymi sprzężonymi rozkazami skalarnymi. Takie równoległe wykonanie może być również wykonywane w innych rodzajach jednostek wykonawczych, takie jak jednostki ALU, jednostki zmiennoprzecinkowe (FP) 73, jednostki zapamiętywania i generacji adresów (AU) 75 lub wiele jednostek tego samego typu (FP1, FP2, itp.), odpowiednio do architektury komputera i konkretnej konfiguracji układu komputerowego. Tak więc konfiguracje układowe nadające się do realizacji niniejszego wynalazku są skalowalne do praktycznie nieograniczonej liczby jednostek wykonawczych dla osiągnięcia maksymalnej wydajności przetwarzania równoległego. Łącząc kilka istniejących rozkazów w pojedynczy rozkaz sprzężony można zapewnić efektywne dekodowanie i wykonywanie tych rozkazów sprzężonych równolegle w jednej lub wielu jednostkach przetwarzających bez opóźnienia, które występuje w konwencjonalnych systemach komputerowych z przetwarzaniem równoległym.
W najprostszych przykładowych schematach kodowania do strumienia rozkazów dodawane jest minimum informacji dotyczącej sprzęgania wynoszące jeden bit na każde dwa bajty tekstu (rozkazów i danych). Ogólnie biorąc, do każdego rozkazu w strumieniu sprzężonym bajtów może być dodany znacznik zawierający informację sterującą, to znaczy, do każdego nie sprzężonego rozkazu skalarnego zawierającego parę, trójkę, lub większą grupę sprzężoną. Przez bity identyfikacyjne rozumie się te bity, które odnoszą się do części znacznika stosowanej specjalnie do identyfikacji i odróżnienia rozkazów skalarnych tworzących grupę sprzężoną od pozostałych nie sprzężonych rozkazów skalarnych. Takie nie sprzężone rozkazy skalarne pozostają w programie złożonym z rozkazów sprzężonych i po pobraniu wykonywane są pojedynczo. W układzie ze wszystkimi rozkazami 4-bajtowymi wyrównanymi do granic czterobajtowych, jeden znacznik przyporządkowany jest do każdych czterech bajtów tekstu.
W przedstawionym tu wykonaniu, wszystkie rozkazy Systemu/370 są wyrównane do granic półsłowa (dwóch bajtów) przy długości każdego z nich wynoszącej dwa albo cztery, albo sześć
165 524 bajtów i na każde półsłowo potrzebny jest jeden znacznik z bitami identyfikacyjnymi. W przykładzie tworzenia małych grup dla sprzęganych par i sąsiadujących z nimi rozkazów, bit identyfikacyjny - „1“ oznacza, że rozkaz rozpoczynający się w rozpatrywanym bajcie jest sprzężony z następnym rozkazem, podczas gdy „0“ oznacza, że rozkaz rozpoczynający się w rozpatrywanym bajcie nie jest sprzężony. Bit identyfikacyjny przyporządkowany półsłownie nie zawierającemu pierwszego bajtu rozkazu jest pomijany. Bit identyfikacyjny pierwszego bajtu drugiego rozkazu w parze sprzężonej jest również pomijany, przy czym w -niektórych sytuacjach skoków, te bity identyfikacyjne nie są pomijane. Wynika z tego, że przy tej procedurze kodowania bitów identyfikacyjnych w najprostszym przypadku sprzęgania dwudrożnego jednostka CPU przy wykonaniu potrzebuje tylko jednego bitu informacji dla zidentyfikowania rozkazu sprzężonego.
Przy grupowaniu więcej niż dwóch rozkazów skalarnych w rozkaz sprzężony, dla zapewnienia odpowiedniej informacji sterującej, mogą być potrzebne dodatkowe bity identyfikacyjne. Jednak istnieje jeszcze inny, służący redukcji minimalnej liczby bitów informacyjnych potrzebnych do sterowania, format ścieżki informacji o sprzęganiu. Na przykład, nawet w przypadku dużych grup możliwe jest osiągnięcie proporcji jednego bitu informacyjnego na jeden rozkaz, przy następującym kodowaniu: wartość „1“ oznacza sprzężenie z następnym rozkazem, a wartość „0“ oznacza brak sprzężenia z następnym rozkazem. Rozkaz sprzężony utworzony przez grupę czterech pojedynczych rozkazów mógłby mieć sekwencję bitów identyfikacyjnych sprzęgania (1,1, 1,0).
Jak to opisano przy wykonywaniu innych rozkazów sprzężonych, bity identyfikacyjne sprzęgania przyporządkowane półsłowom nie będącym rozkazami i w związku z tym nie mającym przypisanych kodów maszynowych są pomijane w czasie wykonania. W korzystnym schemacie kodowania opisanym szczegółowo poniżej, minimalna liczba bitów identyfikacyjnych potrzebnych do. zapewnienia dodatkowej informacji o aktualnej liczbie, rozkazów skalarnych rzeczywiście sprzężonych jest równa logarytmowi przy podstawie 2 (zaokrąglonemu w górę do najbliższej liczby całkowitej) z maksymalnej liczby rozkazów skalarnych mogących wchodzić w grupę przy tworzeniu rozkazu sprzężonego. Na przykład, jeśli maksimum wynosi dwa, to potrzebyn jest jeden bit identyfikacyjny na każdy rozkaz sprzężony. Jeżeli maksimum wynosi pięć, sześć, siedem lub osiem, to na każdy rozkaz sprzężony potrzebne są trzy bity identyfikacyjne. Ten schemat kodowania przedstawiono poniżej w tabelach 2A, 2B i 2C:
Tabela 2A (maksimum wynosi dwa)
Identyfikator Bity Znaczenia kodowe Liczba ogółem Sprzężonych
0 Ten rozkaz nie jest sprzężony z następnym rozkazem brak
1 Ten rozkaz jest sprzężony z jednym następnym rozkazem dwa
Tabela 2B (maksimum wynosi cztery)
Identyfikator Bity Znaczenia kodowe Liczba ogółem Sprzężonych
00 Ten rozkaz nie jest sprzężony z następnym rozkazem brak
01 Ten rozkaz jest sprzężony z jednym następnym rozkazem dwa
10 Ten rozkaz jest sprzężony z dwoma następnymi rozkazami trzy
11 Ten rozkaz jest sprzężony z trzema następnymi rozkazami cztery
T a b e l a 2C (maksimum wynosi osiem)
Identyfikator Bity Znaczenia kodowe Liczba ogółem Sprzężonych
000 Ten rozkaz nie jest sprzężony z następnym rozkazem brak
001 Ten rozkaz jest sprzężony z jednym następnym rozkazem dwa
010 Ten rozkaz jest sprzężony z dwoma następnymi rozkazami trzy
011 Ten rozkaz jest sprzężony z trzema następnymi rozkazami cztery
100 Ten rozkaz jest sprzężony z czterema następnymi rozkazami pięc
101 Ten rozkaz jest sprzężony z pięcioma następnymi rozkazami sześć
110 Ten rozkaz jest sprzężony z sześcioma następnymi rozkazami siedem
111 Ten rozkaz jest sprzężony z siedmioma następnymi rozkazami osiem
165 524
Jest oczywiste, że każde półsłowo wymaga znacznika, ale przy tym korzystnym schemacie kodowania jednostka CPU pomija wszystko poza znacznikiem pierwszego rozkazu w strumieniu rozkazów. Innymi słowy, bajt jest sprawdzany w celu stwierdzenia czy jest rozkazem sprzężonym, przez sprawdzenie jego bitów identyfikacyjnych. Jeżeli nie jest on początkiem rozkazu sprzężonego, to jego bity identyfikacyjne są zerami. Jeżeli bajt jest początkiem rozkazu sprzężonego zawierającego dwa rozkazy skalarne, to bit identyfikacyjny dla pierwszego rozkazu wynosi „1“, a „0“ dla drugiego rozkazu. Jeżeli bajt jest początkiem rozkazu sprzężonego zawierającego trzy rozkazy skalarne, to bity identyfikacyjne są „2“ dla pierwszego rozkazu, „ 1 “ dla drugiego rozkazu i „0“ dla trzeciego rozkazu. Inaczej mówiąc, bity identyfikacyjne dla każdego półsłowa określają, czy ten konkretny bajt jest czy nie jest początkiem rozkazu sprzężonego, jednocześnie określając liczbę rozkazów składających się na tę sprzężoną grupę.
Przy tych przykładowych sposobach kodowania rozkazów sprzężonych zakłada się, że jeżeli sprzężone są trzy rozkazy tworząc grupę potrójną, to rozkazy drugi i trzeci są również sprzężone tworząc parę. Inaczej mówiąc, jeśli wystąpi skok do drugiego rozkazu w grupie potrójnej, to bit identyfikacyjny „1“ dla drugiego rozkazu wskazuje, że drugi i trzeci rozkaz będą wykonywane równolegle jako para, nawet jeśli pierwszy rozkaz w trójce nie był wykonywany.
Jest oczywiste, że zgodnie z wynalazkiem potrzebne jest tylko jednokrotne sprzęganie strumienia rozkazów dla konkretnej konfiguracji układu komputera, i po tym dowolne pobranie rozkazów sprzężonych będzie powodowało również pobranie bitów identyfikacyjnych im przyporządkowanych. Uwalnia to od konieczności nieefektywnego bieżącego wyznaczenia i selekcji rozkazów skalarnych do równoległego wykonania powtarzanego zawsze, kiedy takie same lub różne rozkazy pobierane są do wykonania w tak zwanej maszynie superskalarnej.
Pomimo tych wszystkich zalet sprzęgania binarnego strumienia rozkazów, trudnym okazuje się dokonywanie go w niektórych strukturach komputerowych, jeżeli nie opracuje się techniki wyznaczania granic w strumieniu bajtów. To wyznaczanie jest trudne, jeżeli stosowane są różne długości rozkazów, tym bardziej jeśli przemieszczane są dane i rozkazy i jeśli dopuszczalne jest dokonywanie modyfikacji bezpośrednio na strumieniu rozkazów. Oczywiście, w czasie wykonania granice rozkazów muszą być znane w celu umożliwienia prawidłowego wykonania, ale ponieważ wskazane jest dokonywanie sprzęgania dostatecznie wcześniej przed wykonaniem rozkazu, to możliwe było opracowanie wyspecjalizowanej techniki sprzęgania rozkazów bez informacji o tym, które z nich stanowią dane. Ta technika jest ogólnie opisana poniżej i może być stosowana do tworzenia rozkazów złożonych kształtowanych z większych grup rozkazów skalarnych. Ta technika może mieć zastosowanie do wszystkich zestawów rozkazowych różnych konwencjonalnych rodzajów struktur, łącznie ze strukturami RISC (komputerami o zredukowanej liście rozkazów), w których rozkazy mają zwykle stałą długość i nie są przemieszczane z danymi.
Technika sprzęgania umożliwia sprzęganie dwóch lub więcej rozkazów skalarnych ze strumienia rozkazów bez potrzeby znajomości punktu początkowego i długości każdego oddzielnego rozkazu. Typowe rozkazy już z góry zawierają kody maszynowe na polach o określonych pozycjach określające rozkaz i jego długość. Sąsiednie rozkazy nadające się do wykonania równoległego w konkretnej konfiguracji komputera zaopatrzone są w odpowiednie znaczniki wskazujące na nie jako na kandydatów do sprzęgania. W architekturze Systemu/370, gdzie rozkazy są pod względem długości albo dwu-, albo cztero-, albo sześciobąjtowe, pozycje pola dla kodu maszynowego są wyznaczane wstępnie na podstawie kodu przewidywanej długości rozkazu. Wartość każdego znacznika określona na podstawie wstępnie wyznaczonego kodu maszynowego jest wykorzystywana do rozmieszczenia pełnej sekwencji możliwych rozkazów. Kiedy już określona zostanie rzeczywista granica rozkazu, to odpowiadające mu poprawne wartości znacznika wykorzystuje się do identyfikacji początku rozkazu sprzężonego a inne, wygenerowane niepoprawnie, znaczniki się pomija.
Ta technika sprzęgania jest zobrazowana przykładowo na rysunkach z figurami 8 - 9 i 14- 15, na których przedstawiono reguły przewidujące, że wszystkie rozkazy o długości 2 bajtów lub 4 bajtów są między sobą sprzęgalne, znaczy to że rozkaz dwubajtowy nadaje się do wykonania równoległego w tej konkretnej konfiguracji komputera wraz z innym rozkazem dwubajtowym lub z innym rozkazem czterobajtowym. Przykładowe reguły sprzęgania poza tym powodują, że wszystkie rozkazy o długości 6 bajtów nie są w ogóle sprzęgalne, znaczy to że rozkaz sześciobajtowy w tej
165 524 konkretnej konfiguracji komputera nadaje się wyłącznie do jego pojedynczego wykonania. Oczywiście, wynalazek nie ogranicza się do tych przykładowych reguł sprzęgania, ale ma zastosowanie do dowolnego zestawu reguł sprzęgania określających kryteria wykonania równoległego istniejących rozkazów w szczególnej konfiguracji danej struktury komputera.
Zestaw rozkazów stosowany w tym przykładzie zaczerpnięto z architektury Systemu/370. Przez analizowanie kodu maszynowego każdego rozkazu można określić typ i długość każdego rozkazu i następnie wygenerować dla tego rozkazu znacznik sterujący zawierający bity identyfikacyjne, jak to opisano szczegółowo poniżej. Oczywiście wynalazek nie jest ograniczony do jakiejś specyficznej struktury lub zestawu rozkazów, a wymienione powyżej, reguły sprzęgania są tylko przykładowe.
Schemat kodowania dla rozkazów sprzężonych w tych korzystnych wykonaniach przedstawiono powyżej w tabelach 2A - 2C: W pierwszym przypadku, przy rozkazach o stałej długości, nie przemieszczanych z danymi, i o znanym położeniu punktu odniesienia komórki dla kodu maszynowego, sprzężenie może się odbywać zgodnie z regułami nadającymi się do zastosowania w tej konkretnej konfiguracji komputera. Ponieważ pole zarezerwowane na kod maszynowy zawiera również długość rozkazu, to sekwencja rozkazów skalarnych jest z góry określona, a każdy rozkaz w sekwencji może być rozpatrywany jako potencjalny kandydat do wykonania równoległego razem z rozkazem następnym. Pierwsza zakodowana wartość w znaczniku sterującym wskazuje, że rozkaz nie nadaje się do sprzężenia z rozkazem następnym, natomiast druga zakodowana w znaczniku wartość wskazuje, że rozkaz może być sprzęgnięty w celu równoległego wykonania z rozkazem następnym.
W drugim przypadku, przy rozkazach o zmiennej długości, nie przemieszczanych z danymi i o znanym położeniu punktu odniesienia komórki dla kodu maszynowego i komórki dla kodu długości rozkazu, która w Systemie/370 stanowi część kodu maszynowego, sprzężenie może się odbywać w zwykły sposób. Jak to pokazano na fig. 8, kody maszynowe oznaczają sekwencję 70 w następujący sposób: pierwszy rozkaz ma długość 6 bajtów, drugi i trzeci mają długość po 2 bajty, czwarty ma długość 4 bajty, piąty 2 bajty, szósty 6 bajtów, a siódmy i ósmy mają długość po 2 bajty. Wektor C 72 na fig. 8 przedstawia wartości bitów identyfikacyjnych (na rysunku oznaczone jako bity sprzęgania) dla tej konkretnej sekwencji 70 rozkazów, przy czym znany jest punkt wskazujący początek pierwszego rozkazu. Na podstawie wartości takich bitów identyfikacyjnych, rozkazy drugi i trzeci tworzą parę sprzężoną, co oznaczono przez „1“ w bicie identyfikacyjnym drugiego rozkazu. Rozkazy czwarty i piąty tworzą inną parę sprzężoną, co oznaczono przez „1: w bicie identyfikacyjnym czwartego rozkazu. Rozkazy siódmy i ósmy również tworzą parę sprzężoną, co oznaczono przez „1“ w bicie identyfikacyjnym siódmego rozkazu. Wektor C 72 z fig. 8 jest stosunkowo łatwy do wygenerowania, jeżeli bajty rozkazów nie są przemieszane z bajtami danych, i jeżeli rozkazy mają tę samą długość i znane granice.
Inną sytuację przedstawiono w trzecim przypadku, gdzie rozkazy przemieszane są z nierózkazami, z punktem odniesienia podawanym na bieżąco w celu wskazywania początku rozkazu. Schemat z fig. 11 przedstawia jeden sposób wskazywania punktu odniesienia rozkazu, przy czym każde półsłowo oznaczone jest znacznikiem odniesienia w celu wskazania, czy zawiera ono, czy też nie zawiera pierwszego bajtu rozkazu. Może to zachodzić przy rozkazach o długości zarówno stałej jak i zmiennej. Przy stosowaniu punktu odniesienia, w celu umożliwienia sprzęgania, niezbędne jest określenie położenia danych w strumieniu bajtów. Odpowiednio do tego jednostka sprzęgająca może przeskakiwać i pomijać wszystkie bajty nie będące rozkazami.
Bardziej złożona sytuacja powstaje, jeśli strumień bajtów zawiera rozkazy o zmiennej długości (bez danych), ale wiadomo, gdzie rozpoczyna się pierwszy rozkaz. Ponieważ rozkaz o maksymalnej długości jest sześciobajtowy, a rozkazy są wyrównane do granic dwubajtowych, to możliwe są trzy punkty początkowe dla pierwszego rozkazu w strumieniu. Odpowiednio do tego sposób pozwala na uwzględnienie wszystkich możliwych punktów początkowych pierwszego rozkazu w tekście strumienia bajtów 79, jak to pokazano na fig. 9.
Sekwencja 1 zakłada, że pierwszy rozkaz zaczyna się na pierwszym bajcie, i dokonuje sprzęgania przy tym założeniu. W tym przykładowym wykonaniu, pole długości jest również - czynnikiem rozstrzygającym o wartości wektora C dla każdego możliwego rozkazu. Dlatego wektor C74 dla
165 524 sekwencji 1 ma wartość „1“ tylko dla pierwszego rozkazu możliwej pary sprzężonej utworzonej przez kombinacje rozkazów dwubajtowych i czterobajtowych.
Sekwencja 2 zakłada, że pierwszy rozkaz zaczyna się na trzecim bajcie (początek drugiego półsłowa) i dokonuje sprzęgania przy tym założeniu. Wartość pola długości dla trzeciego bajtu wynosi 2, wskazując, że następny rozkaz rozpoczyna się na piątym bajcie. Przechodząc przez każdy możliwy rozkaz na podstawie wartości pola długości w rozkazie poprzedzającym, generuje się wszystkie potencjalne rozkazy sekwencji 2 zgodnie z możliwymi bitami identyfikacyjnymi, jak to pokazano w wektorze C 76.
Sekwencja 3 zakłada, że pierwszy rozkaz zaczyna się na piątym bajcie (początek trzeciego półsłowa) i dokonuje sprzęgania przy tym założeniu. Wartość pola długości dla piątego bajtu wynosi 4 wskazując, że następny rozkaz rozpoczyna się na dziewiątym bajcie. Przechodząc przez każdy możliwy rozkaz na podstawie wartości pola długości w rozkazie poprzedzającym, generuje się wszystkie potencjalne rozkazy sekwencji 3 zgodnie z możliwymi bitami identyfikacyjnymi, jak to pokazano w wektorze C78.
W niektórych przypadkach te trzy różne Sekwencje potencjalnych rozkazów będą zbieżne do jednej sekwencji. Na fig. 9 zaznaczono, że te trzy Sekwencje zbiegają się na granicach rozkazów na końcu 80 ósmego bajtu. Sekwencje 2 i 3, przy zbieżności na granicy rozkazów na końcu 82 czwartego bajtu, nie są w fazie względem sprzęgania aż do końca szesnastego bajtu. Inaczej mówiąc, te dwie sekwencje uwzględniają różne pary rozkazów na podstawie tej samej sekwencji rozkazów. Ponieważ bajt szesnasty rozpoczyna rozkaz niesprzęgalny w 84, to zbieżność niefazowa się kończy.
Jeśli nie osiągnie się żadnej ważnej zbieżności, to występuje konieczność kontynuowania wszystkich trzech możliwych sekwencji rozkazów do końca okna. Jeżeli natomiast wystąpi ważna zbieżność i zostanie wykryta, to liczba sekwencji redukuje się z trzech do dwóch (jedna z identycznych sekwencji staje się nieoperatywna), i w niektórych przypadkach z dwóch do jednej.
Zatem przed doprowadzeniem do zbieżności określa się dla każdej możliwej sekwencji rozkazów tymczasowe granice i bity identyfikacyjne przypisane każdej z takich sekwencji wskazujące lokalizację potencjalnych rozkazów sprzężonych. Z fig. 9 widać że tym sposobem generowane są trzy oddzielne bity identyfikacyjne dla każdych dwóch bajtów tekstu. W celu zapewnienia zgodności z przetwarzaniem wstępnym wykonywanym we wspomnianych przypadkach, pierwszym, drugim i trzecim, pożądane jest zredukowanie tych trzech możliwych sekwencji do pojedynczej sekwencji bitów identyfikacyjnych, w której każdemu półsłowu przyporządkowany jest tylko jeden bit. Ponieważ potrzebna jest jedynie informacja o tym, czy bieżący rozkaz jest sprzężony z następnym, to trzy bity mogą być logicznie zsumowane w celu wytworzenia pojedynczej sekwencji w wektorze CC 86.
Dla celów wykonania równoległego, zestawione bity identyfikacyjne zestawionego wektora CC 86 są zrównoważone oddzielnym wektorem C poszczególnych trzech Sekwencji 1-3. Inaczej mówiąc, zestawione bity identyfikacyjne w wektorze CC umożliwiają prawidłowe wykonanie dowolnej z trzech możliwych sekwencji, równolegle dla rozkazów sprzężonych lub pojedyncze dla rozkazów nie sprzężonych. Zestawione bity identyfikacyjne pracują prawidłowo również przy skokach. Na przykład, jeżeli wystąpi skok do początku 88 dziewiątego bajtu, to bajt dziewiąty musi być początkiem rozkazu. W innym przypadku w programie jest błąd. Wykorzystany jest bit identyfikacyjny „1“ przyporządkowany do bajtu dziewiątego i następuje prawidłowe wykonanie danego rozkazu równolegle z rozkazem następnym.
Różne etapy przedstawionego na fig. 9 i powyżej opisanego sposobu sprzęgania zilustrowano na mapie działań na figurze 16.
Najlepszym momentem zapewnienia informacji o punktach odniesienia dotyczących granic rozkazów jest moment kompilacji. W celu identyfikacji początku każdego rozkazu podczas kompilacji mogą być wstawione znaczniki identyfikacyjne 101, jak to pokazano na fig. 11. Pozwala to urządzeniu sprzęgającemu na stosowanie uproszczonej procedury dla wymienionych wyżej przypadków, Pierwszego, Drugiego, i Trzeciego. Oczywiście, w celu uproszczenia pracy jednostki sprzęgającej i uniknięcia kompilacji sposobu, przedstawionego na fig. 9, kompilator może dokonywać identyfikacji granic rozkazów i odróżnienia rozkazów od danych dowolnym innym sposobem.
165 524
Figura 10 przedstawia sieć działań możliwej realizacji sprzęgacza do obróbki strumienia rozkazów, jak na fig. 9. Pokazano wiele jednostek sprzęgających 104,106,108 i w celu poprawienia wydajności ich liczba może być tak duża, jak liczba półsłów, które mogą być przetrzymywane w buforze tekstu. W tej wersji, te trzy jednostki sprzęgające rozpoczynałyby swoje sekwencje przetwarzania odpowiednio w pierwszym, trzecim i piątym bajcie. Na końcu możliwej sekwencji rozkazów każda jednostka sprzęgająca zaczyna wyszukiwanie następnej możliwej sekwencji z przesunięciem o sześć bajtów względem poprzedniej sekwencji. Każda jednostka sprzęgająca wytwarza bity identyfikacyjne sprzęgania (wartości wektora C) dla każdego półsłowa w tekście. Trzy sekwencje wychodzące z trzech jednostek sprzęgających są sumowane logicznie 110 i wynikowe bity identyfikacyjne są zapamiętywane w związku z odpowiadającymi im bitami tekstu.
Jedną z korzystnych właściwości złożonych bitów identyfikacyjnych w wektorze CC jest możliwość tworzenia wielu ważnych sekwencji bitów sprzęgania, na podstawie których rozkaz jest adresowany przez wyjście skoku. Jak to najlepiej widać na fig. 14- 15, z tego samego strumienia bajtów można otrzymać różnie ukształtowane rozkazy sprzężone.
Figura 14 przedstawia możliwe kombinacje rozkazów sprzężonych, kiedy konfiguracja komputera pozwala na równoległe wydawanie i wykonywanie nie więcej niż dwóch rozkazów. Jeżeli strumień rozkazów 90 zawierający rozkazy sprzężone jest przetworzony w normalnej sekwencji, to do wykonania równoległego polegającego na dekodowaniu bitu identyfikacyjnego dla pierwszego bajtu w wektorze CC 92 zostanie wydany Rozkaz Sprzężony I. Jednak, jeżeli wystąpi skok do piątego bajtu, to do wykonania równoległego polegającego na dekodowaniu bitu identyfikacyjnego dla piątego bajtu w wektorze CC 92 zostanie wydany Rozkaz Sprzężony II. Podobnie normalne sekwencyjne przetwarzanie innego sprzężonego strumienia bajtów 94 spowoduje sekwencyjne wykonanie Rozkazów sprzężonych IV, V i VIII (rozkazy składowe w każdym rozkazie sprzężonym wykonywane są równolegle). W odróżnieniu od tego, skok do trzeciego bajtu w sprzężonym strumieniu rozkazów na podstawie bitów identyfikacyjnych w wektorze CC 96 spowoduje sekwencyjne wykonanie Rozkazów sprzężonych V i VII, a rozkaz rozpoczynający się w piętnastym bajcie (tworzący drugą część Rozkazu Sprzężonego VII) zostanie wydany i wykonany pojedynczo. Skok do siódmego bajtu spowoduje sekwencyjne wykonanie Rozkazów Sprzężonych VII i VIII, a skok do bajtu jedenastego spowoduje wykonanie Rozkazu Sprzężonego VIII. W odróżnieniu od tego, skok do dziewiątego bajtu w sprzężonym strumieniu rozkazów spowoduje wykonanie Rozkazu Sprzężonego VII (jest on utworzony przez drugą część Rozkazu Sprzężonego VI i pierwszą Rozkazu Sprzężonego VIII). Tak więc, bity,, 1 “ w wektorze CC 96 dla
Rozkazów Sprzężonych IV, VI i VIII są pomijane kiedy wykonywany jest jeden z Rozkazów Sprzężonych V lub VII. W odróżnieniu od tego bity „1“ identyfikatora w wektorze CC 96 dla Rozkazów Sprzężonych V i VII są pomijane kiedy wykonywany jest jeden z Rozkazów Sprzężonych IV, VI lub VIII.
Figura 15 przedstawia możliwe kombinacje rozkazów sprzężonych, kiedy konfiguracja komputera umożliwia równoległe wydawanie i wykonywanie do trzech rozkazów. Jeżeli strumień rozkazów 98 zawierający rozkazy sprzężone jest przetwarzany w normalnej sekwencji, to wykonywane będą Rozkazy Sprzężone X (grupa potrójna) i XIII. W odróżnieniu od tego, skok do jedenastego bajtu spowoduje wykonanie Rozkazu Sprzężonego XI (grupa potrójna), a skok do bajtu trzynastego spowoduje wykonanie Rozkazu Sprzężonego XII (innej grupy potrójnej). Tak więc, bity „2“ identyfikatora w wektorze CC 99 dla Rozkazów Sprzężonych XI i XII są pomijane kiedy wykonywane są Rozkazy Sprzężone X i XIII. Z drugiej strony kiedy wykonywany jest Rozkaz Sprzężony XI to pomijane są bity identyfikacyjne dla pozostałych trzech Rozkazów Sprzężonych X, XII, XIII. Podobnie kiedy wykonywany jest Rozkaz Sprzężony XII to pomijane są bity identyfikacyjne dla pozostałych trzech Rozkazów Sprzężonych X, XI, XIII. Możliwych jest kilka rozwiązań jednostki sprzęgania rozkazów zależnie od jej umieszczenia i informacji o zawartości tekstu. W najprostszej sytuacji mogłoby być pożądane oznaczanie przez kompilator za pomocą znaczników odniesienia, które bajty zawierają pierwszy bajt rozkazu i które zawierają dane. Ta dodatkowa informacja powoduje zwiększenie wydajności urządzenia sprzęgającego, gdyż znane są dokładne lokalizacje rozkazów. Znaczy to, że sprzęganie zawsze mogłoby być wykonywane jak w sytuacji przypadków Pierwszego, Drugiego i Trzeciego w celu wygenerowania bitów identyfikacyjnych wektora C dla każdego rozkazu sprzężonego. Kompilator mógłby również dołączać inną informa16
165 524 cję, na przykład o przewidywanych skokach statycznych, lub nawet wstawiać dyrektywy dla jednostki sprzęgającej. ,
Inne sposoby mogłyby być stosowane do odróżnienia danych od rozkazów, w przypadku przechowywania strumienia rozkazów w pamięci. Na przykład, jeżeli fragmenty danych występują rzadko, to mniej miejsca niż znaczniki odniesienia zajęłaby zwykle lista adresów danych. Takie kombinacje układowe i programowe sprzęgacza stwarzają wiele opcji dla wydajnego tworzenia rozkazów sprzężonych.
1,2,3,4 5,6
CYKL CYKL CYKL CYKL CYKL CYKL |
Jednostka funkcjonalna A s CS CS CS s
Jednostka funkcjonalna B CS CS
Jednostka funkcjonalna C CS s CS
Jednostka funkcjonalna D CS CS
Strumień rozkazów sprzężonych
CS CS CS CS T4 S CS CS T2 CS CS CS T3 s
'38 '36
Rozkaz sprzężony = C Rozkaz skalarny =S Sprzężony rozkaz skalarny =CS
Znacznik rozkazu sprzężonego =T
IImplementacja jednoprocesorowa!
FIG. 2
CYKL 1
CYKL 2 Cykle rozkazowe
3mplementacja wieloprocesorowa
FIG.3
165 524
Numer kategorii Nazwa kategorii
1. RR-Format rozkazów ładowania .logicznych, arytmetycznych, porównań. •LCR-uzupełnienie rozkazu ładowania •LPR-ładuj (jeśli) dodatnie •LNR-ładuj (jeśli) ujemne •LR-ładuj rejestr •LTR-ładuj i testuj •NR-I •OR-LUB •XR-wyłączne LUB •AR-sumuj •SR-odejmuj •ALR-dodaj logicznie •SLR-odejmij logicznie •CLR-porównaj logicznie •CR -porównaj
2. RS-Format rozkazów: przesunięcia (brak dostępu do pamięci) •SLR-przesun logicznie w prawo •SLL-przesuń logicznie w lewo •SRA-przesuń arytmetycznie w prawo •SLA-przesuń arytmetycznie w lewo •SRDL-przesuń logicznie w prawo •SLDL-przesuń logicznie w lewo •SRDA-przesuń arytmetycznie w prawo •SLDA-przesuń arytmetycznie w lewo
3. SKOKI-przy osiągnięciu liczby i wskaźnika •BCT-skok przy osiągnięciu liczby (format RX) •BCTR-skok przy osiągnięciu liczby (format RR) •ΒΧΗ-skok przy osiągnięciu wskaźnika wysokiego (form F •BXLE-skok przy osiągnięciu wskaźnika niskiego (form RS
4. SKOKI WARUNKOWE eBC-skok warunkowy (format RX) •BCR-skok warunkowy (format RR)
FIG.
4A
FIG.4
FIG.
4B
FIG.4A
165 524
Numer kategorii Nazwa kategorii
5. SKOKI-1 POŁĄCZENIA •BAL-skocz i Tącz (format RX) •BALR-skocz i łącz (format RR) •BAS-skocz i zachowaj (format RX) •BASR-skocz i zachowaj (format RR)
6. ZAPAMIĘTYWANIA •STCM-zapamiętaj znaki pod maska •(zapamięfaj bajty 0-4, format RS ) •MVI-przenieś natychmiast (jeden bajt, format SI) •ST-zapamiętaj (4 bajty) •STC-zapamlętaj znak (jeden bajt) •STM-zapamiętaj poTowę (2 bajty)
7. ŁADOWANIA • LM-Taduj poTowę (2 bajty) •L-Taduj (4 bajty)
a. LA-Taduj adres
9. RX/SI/RS formaty rozkazów: arytmetycznych, logicznych, wprowadzania, porównania • A-dodaj •AH-dodaj połowę 0AL-dodaj logicznie •N - I •0 - LUB •S -odejmij • SM-odejmij poTowę • SL-odejmij logicznie • X-WYŁĄCZNE LUB •IC-wprowadź znak •ICM-wprowadź znak pod maska (0-4 bajtowy rozkaz FGTCM) •C- porównaj •CH-porównał poTowę •CL-porównaj logicznie •CLI-porównaj logicznie natychmiast •CLM-porównaj logicznie znak pod maskg
10. TM-Testuj pod masko
F1G.4B
FIG.5
165 524
Program w języku asemblera
FIG.7
165 524
Bajt ^-Sekwencja ^-Wektor C
Bajt = numeracja tekstu
Sekwencja = sekwencja o długości rozkazów programowych Wektor C= bity sprzęgające dla każdych dwóch bajtów
FIG. 8
FIG.11
165 524
Pole długości |ę |2 |4 |z |2 |4 |4 |2 |6 |4 |2 |2 [2 |
Pozycja bajtu 0 2 4 6 8 1012 14 16 18 20 22 24
Asie długosci = możliwy kod długości rozkazu dla każdych dwóch bajtów Bajt = numeracja tekstu
Sekwencja = potencjalna sekwencja długości rozkazów programowych Wektor C —możliwe bity sprzężenia dla każdych dwóch bajtów Wektor CC = złożone bity sprzęgania dla każdych dwóch bajtów
FIG.9
165 524
2 4 6 .......Ν-1 Ν
Pozycjo bojtu I I I I IΊ Ί Ί I I I I I l
FIG.10 10 Ι1 12 13 15 16 17
ΒΙΤ Funkcja
ιο Jeśli 1, to ten rozkaz oznacza początek rozkazu sprzęgania
Jeśli l, wykonaj dwa rozkazy równolegle
*2 Jeśli 1, ten rozkaz sprzężony ma więcej niż jeden cykl wykonania '
*3 Jeśli 1, zawieś potokowanie
*4 Jeśli rozkaz jest skokiem,to jeśli ten bit jest jedynkowy, przewiduje się wykonanie tego skoku
*5 Jeśli 1, ten rozkaz jest uzależniony pamięciowo od poprzedniego rozkazu sprzężonego
16 Jeśli 1, włącz dynamiczne wydawanie rozkazów
17 Jeśli 1,ten rozkaz wykorzystuje arytmetyczną jednostkę logiczną
F1G.12
165 524
FIGH
Pozycja bajt u
Pole długości
2 4 6 8 10 12 14
Rozkaz sprzężony—90 !4 i2l2J 6 I
Rozkaz sprzężony l i i !
1 J !
i Bit idęntyfikatpra I
92'
Wektor CC
1 0 1 o |o |o
^-Bit identyfikatora dla II
O 2 4 6 8 10 12 14 16 18 20 22 Pozycja bajtu
2 4 6 8 10 12 14 16 18 20 22 24 26 Pozycja bajtu TUT
31-98
2 6 2 2|2| 4 |2| 6
'—
0 0 0 0 2 2 2 1 0 0 0 0 0
- - - - 31 2H
Pole długości
Rozkaz sprzężony
FIG.15
165 524
KluCZ:
A-zawsze sprzęgalne F1G.17
S- niekiedy sprzęgalne N -niesprzęgalne
FIG.1
Departament Wydawnictw UP RP. Nakład 90 egz.
Cena 10 000 zł

Claims (2)

  1. Zastrzeżenia patentowe
    1. Sposób przetwarzania strumienia impulsów elektrycznych, powiązanego ze strumieniem instrukcji w układzie komputera, w którym strumień impulsów elektrycznych składa się z kolejnych sekwencji impulsów elektrycznych, powiązanych z kolejnymi instrukcjami strumienia instrukcji, a każda z sekwencji impulsów elektrycznych wyznacza instrukcję połączoną z jedną z wielu instrukcji o różnych kategoriach, znamienny tym, że bada się kolejne sekwencje impulsów elektrycznych i określa się zdolność kategorii instrukcji z przyległych, połączonych kolejno instrukcji do wykonywania równoległego, oraz generuje się dodatkowe impulsy elektryczne, z kolejnych sekwencji impulsów elektrycznych, zależnie od wyniku etapu badania.
  2. 2. Sposób według zastrz. 1, znamienny tym, że w etapie badania kolejnych sekwencji impulsów elektrycznych, bada się sekwencję impulsów elektrycznych pierwszej instrukcji i sekwencję impulsów elektrycznych drugiej instrukcji na możliwość ich wykonywania równoległego i następnie bada się sekwencję impulsów elektrycznych drugiej instrukcji i sekwencję impulsów elektrycznych trzeciej instrukcji na możliwość ich wykonywania równoległego.
PL91289722A 1990-05-04 1991-04-03 Sposób przetwarzania strumienia impulsów elektrycznych PL PL165524B1 (pl)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US51938490A 1990-05-04 1990-05-04

Publications (2)

Publication Number Publication Date
PL289722A1 PL289722A1 (en) 1992-04-21
PL165524B1 true PL165524B1 (pl) 1995-01-31

Family

ID=24068082

Family Applications (1)

Application Number Title Priority Date Filing Date
PL91289722A PL165524B1 (pl) 1990-05-04 1991-04-03 Sposób przetwarzania strumienia impulsów elektrycznych PL

Country Status (9)

Country Link
US (2) US5502826A (pl)
EP (1) EP0454985B1 (pl)
JP (1) JP2500082B2 (pl)
AT (1) ATE146611T1 (pl)
CA (1) CA2039640C (pl)
CS (1) CS93691A2 (pl)
DE (1) DE69123629T2 (pl)
HU (1) HUT57455A (pl)
PL (1) PL165524B1 (pl)

Families Citing this family (90)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5214763A (en) * 1990-05-10 1993-05-25 International Business Machines Corporation Digital computer system capable of processing two or more instructions in parallel and having a coche and instruction compounding mechanism
WO1992006426A1 (en) * 1990-10-09 1992-04-16 Nexgen Microsystems Method and apparatus for parallel decoding of instructions with branch prediction look-up
US6378061B1 (en) * 1990-12-20 2002-04-23 Intel Corporation Apparatus for issuing instructions and reissuing a previous instructions by recirculating using the delay circuit
GB9027853D0 (en) * 1990-12-21 1991-02-13 Inmos Ltd Multiple instruction issue
JP3547740B2 (ja) * 1992-03-25 2004-07-28 ザイログ,インコーポレイテッド 命令高速解読パイプラインプロセッサ
US6154828A (en) * 1993-06-03 2000-11-28 Compaq Computer Corporation Method and apparatus for employing a cycle bit parallel executing instructions
CA2123442A1 (en) * 1993-09-20 1995-03-21 David S. Ray Multiple execution unit dispatch with instruction dependency
EP0651324B1 (en) * 1993-10-29 2006-03-22 Advanced Micro Devices, Inc. Speculative instruction queue for variable byte length instructions
US5630082A (en) * 1993-10-29 1997-05-13 Advanced Micro Devices, Inc. Apparatus and method for instruction queue scanning
US5689672A (en) * 1993-10-29 1997-11-18 Advanced Micro Devices, Inc. Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions
EP0651320B1 (en) 1993-10-29 2001-05-23 Advanced Micro Devices, Inc. Superscalar instruction decoder
EP1369775A1 (en) * 1993-11-05 2003-12-10 Intergraph Hardware Technologies Company Instruction cache associative cross-bar switch
JPH07334372A (ja) * 1993-12-24 1995-12-22 Seiko Epson Corp エミュレートシステム及びエミュレート方法
JP3212213B2 (ja) * 1994-03-16 2001-09-25 株式会社日立製作所 データ処理装置
US5559975A (en) * 1994-06-01 1996-09-24 Advanced Micro Devices, Inc. Program counter update mechanism
US6006033A (en) * 1994-08-15 1999-12-21 International Business Machines Corporation Method and system for reordering the instructions of a computer program to optimize its execution
US5600810A (en) * 1994-12-09 1997-02-04 Mitsubishi Electric Information Technology Center America, Inc. Scaleable very long instruction word processor with parallelism matching
US5737550A (en) * 1995-03-28 1998-04-07 Advanced Micro Devices, Inc. Cache memory to processor bus interface and method thereof
GB2299422B (en) * 1995-03-30 2000-01-12 Sony Uk Ltd Object code allocation in multiple processor systems
US5699536A (en) * 1995-04-13 1997-12-16 International Business Machines Corporation Computer processing system employing dynamic instruction formatting
US5710939A (en) * 1995-05-26 1998-01-20 National Semiconductor Corporation Bidirectional parallel data port having multiple data transfer rates, master, and slave operation modes, and selective data transfer termination
US5768610A (en) * 1995-06-07 1998-06-16 Advanced Micro Devices, Inc. Lookahead register value generator and a superscalar microprocessor employing same
US5796974A (en) * 1995-11-07 1998-08-18 Advanced Micro Devices, Inc. Microcode patching apparatus and method
US5829031A (en) * 1996-02-23 1998-10-27 Advanced Micro Devices, Inc. Microprocessor configured to detect a group of instructions and to perform a specific function upon detection
KR100483212B1 (ko) * 1996-03-28 2005-10-19 코닌클리케 필립스 일렉트로닉스 엔.브이. 순차프로세서상에서데이터요소들의세트를처리하기위한방법및컴퓨터시스템
US5896519A (en) * 1996-06-10 1999-04-20 Lsi Logic Corporation Apparatus for detecting instructions from a variable-length compressed instruction set having extended and non-extended instructions
US5958042A (en) * 1996-06-11 1999-09-28 Sun Microsystems, Inc. Grouping logic circuit in a pipelined superscalar processor
US6108655A (en) * 1996-07-19 2000-08-22 Cisco Technology, Inc. Method and apparatus for transmitting images and other objects over a computer network system
WO1998006042A1 (en) * 1996-08-07 1998-02-12 Sun Microsystems, Inc. Wide instruction unpack method and apparatus
US5870576A (en) * 1996-12-16 1999-02-09 Hewlett-Packard Company Method and apparatus for storing and expanding variable-length program instructions upon detection of a miss condition within an instruction cache containing pointers to compressed instructions for wide instruction word processor architectures
US6047368A (en) * 1997-03-31 2000-04-04 Sun Microsystems, Inc. Processor architecture including grouping circuit
US6339840B1 (en) * 1997-06-02 2002-01-15 Iowa State University Research Foundation, Inc. Apparatus and method for parallelizing legacy computer code
US6134515A (en) * 1997-06-13 2000-10-17 Telefonaktiebolaget Lm Ericsson Controlling a first type telecommunications switch upon translating instructions for a second type telecommunications switch
US6142682A (en) * 1997-06-13 2000-11-07 Telefonaktiebolaget Lm Ericsson Simulation of computer processor
US5905880A (en) * 1997-09-29 1999-05-18 Microchip Technology Incorporated Robust multiple word instruction and method therefor
JPH11120040A (ja) * 1997-10-20 1999-04-30 Fujitsu Ltd 並列処理手続きの効果予測方法とそのための記録媒体
US6118940A (en) * 1997-11-25 2000-09-12 International Business Machines Corp. Method and apparatus for benchmarking byte code sequences
US6112299A (en) * 1997-12-31 2000-08-29 International Business Machines Corporation Method and apparatus to select the next instruction in a superscalar or a very long instruction word computer having N-way branching
US6460116B1 (en) * 1998-09-21 2002-10-01 Advanced Micro Devices, Inc. Using separate caches for variable and generated fixed-length instructions
US6990570B2 (en) 1998-10-06 2006-01-24 Texas Instruments Incorporated Processor with a computer repeat instruction
US6742110B2 (en) 1998-10-06 2004-05-25 Texas Instruments Incorporated Preventing the execution of a set of instructions in parallel based on an indication that the instructions were erroneously pre-coded for parallel execution
US6681319B1 (en) * 1998-10-06 2004-01-20 Texas Instruments Incorporated Dual access instruction and compound memory access instruction with compatible address fields
EP0992916A1 (en) 1998-10-06 2000-04-12 Texas Instruments Inc. Digital signal processor
EP0992892B1 (en) * 1998-10-06 2015-12-02 Texas Instruments Inc. Compound memory access instructions
EP0992893B1 (en) * 1998-10-06 2008-12-31 Texas Instruments Inc. Verifying instruction parallelism
US6418527B1 (en) * 1998-10-13 2002-07-09 Motorola, Inc. Data processor instruction system for grouping instructions with or without a common prefix and data processing system that uses two or more instruction grouping methods
US6366998B1 (en) * 1998-10-14 2002-04-02 Conexant Systems, Inc. Reconfigurable functional units for implementing a hybrid VLIW-SIMD programming model
US6490673B1 (en) * 1998-11-27 2002-12-03 Matsushita Electric Industrial Co., Ltd Processor, compiling apparatus, and compile program recorded on a recording medium
US6634019B1 (en) * 1999-07-16 2003-10-14 Lamarck, Inc. Toggling software characteristics in a fault tolerant and combinatorial software environment system, method and medium
US6973560B1 (en) 1999-07-16 2005-12-06 Lamarck, Inc. Fault tolerant and combinatorial software environment system, method and medium
US6654869B1 (en) * 1999-10-28 2003-11-25 International Business Machines Corporation Assigning a group tag to an instruction group wherein the group tag is recorded in the completion table along with a single instruction address for the group to facilitate in exception handling
US6631463B1 (en) * 1999-11-08 2003-10-07 International Business Machines Corporation Method and apparatus for patching problematic instructions in a microprocessor using software interrupts
US7418580B1 (en) * 1999-12-02 2008-08-26 International Business Machines Corporation Dynamic object-level code transaction for improved performance of a computer
US20010042138A1 (en) * 1999-12-23 2001-11-15 Reinhard Buendgen Method and system for parallel and procedural computing
US6697939B1 (en) * 2000-01-06 2004-02-24 International Business Machines Corporation Basic block cache microprocessor with instruction history information
US6647489B1 (en) * 2000-06-08 2003-11-11 Ip-First, Llc Compare branch instruction pairing within a single integer pipeline
US6633969B1 (en) 2000-08-11 2003-10-14 Lsi Logic Corporation Instruction translation system and method achieving single-cycle translation of variable-length MIPS16 instructions
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
DE10055175A1 (de) * 2000-11-08 2002-05-23 Infineon Technologies Ag Verfahren zum Transferieren von Daten zwischen einer ersten Einrichtung und einer zweiten Einrichtung
US7143268B2 (en) * 2000-12-29 2006-11-28 Stmicroelectronics, Inc. Circuit and method for instruction compression and dispersal in wide-issue processors
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
US7110525B1 (en) 2001-06-25 2006-09-19 Toby Heller Agent training sensitive call routing system
US7107439B2 (en) * 2001-08-10 2006-09-12 Mips Technologies, Inc. System and method of controlling software decompression through exceptions
US20030126414A1 (en) * 2002-01-02 2003-07-03 Grochowski Edward T. Processing partial register writes in an out-of order processor
US7305704B2 (en) * 2002-03-16 2007-12-04 Trustedflow Systems, Inc. Management of trusted flow system
US20040128483A1 (en) * 2002-12-31 2004-07-01 Intel Corporation Fuser renamer apparatus, systems, and methods
US7185322B2 (en) * 2003-07-11 2007-02-27 Computer Associates Think, Inc. Method and apparatus for parallel action processing
GB0323950D0 (en) * 2003-10-13 2003-11-12 Clearspeed Technology Ltd Unified simid processor
US7539974B2 (en) 2003-10-24 2009-05-26 Microsoft Corporation Scalable synchronous and asynchronous processing of monitoring rules
US7765540B2 (en) * 2003-10-23 2010-07-27 Microsoft Corporation Use of attribution to describe management information
US7676560B2 (en) * 2003-10-24 2010-03-09 Microsoft Corporation Using URI's to identify multiple instances with a common schema
US7103874B2 (en) * 2003-10-23 2006-09-05 Microsoft Corporation Model-based management of computer systems and distributed applications
US7506307B2 (en) * 2003-10-24 2009-03-17 Microsoft Corporation Rules definition language
US7467325B2 (en) * 2005-02-10 2008-12-16 International Business Machines Corporation Processor instruction retry recovery
US7478276B2 (en) * 2005-02-10 2009-01-13 International Business Machines Corporation Method for checkpointing instruction groups with out-of-order floating point instructions in a multi-threaded processor
US7590824B2 (en) * 2005-03-29 2009-09-15 Qualcomm Incorporated Mixed superscalar and VLIW instruction issuing and processing method and system
US7627735B2 (en) * 2005-10-21 2009-12-01 Intel Corporation Implementing vector memory operations
US7818550B2 (en) * 2007-07-23 2010-10-19 International Business Machines Corporation Method and apparatus for dynamically fusing instructions at execution time in a processor of an information handling system
TW200910195A (en) * 2007-08-20 2009-03-01 Sunplus Technology Co Ltd A device of using serial bits to determine instruction length at a multi-mode processor and the method thereof
US20090055636A1 (en) * 2007-08-22 2009-02-26 Heisig Stephen J Method for generating and applying a model to predict hardware performance hazards in a machine instruction sequence
US20110067015A1 (en) * 2008-02-15 2011-03-17 Masamichi Takagi Program parallelization apparatus, program parallelization method, and program parallelization program
US8751747B2 (en) * 2008-02-26 2014-06-10 International Business Machines Corporation Management of cache replacement status in cache memory
US8572569B2 (en) * 2009-12-09 2013-10-29 Oracle International Corporation Modified implementation of a debugger wire protocol and command packet
GB2486905A (en) 2010-12-30 2012-07-04 Cambridge Silicon Radio Ltd Amalgamating instructions by replacing unencoded space
US11042929B2 (en) 2014-09-09 2021-06-22 Oracle Financial Services Software Limited Generating instruction sets implementing business rules designed to update business objects of financial applications
US10157164B2 (en) * 2016-09-20 2018-12-18 Qualcomm Incorporated Hierarchical synthesis of computer machine instructions
CN112540795B (zh) * 2019-09-23 2025-02-14 阿里巴巴集团控股有限公司 指令处理装置和指令处理方法
US20230097390A1 (en) * 2021-09-29 2023-03-30 International Business Machines Corporation Tightly-coupled slice target file data
US11900116B1 (en) 2021-09-29 2024-02-13 International Business Machines Corporation Loosely-coupled slice target file data

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3293616A (en) * 1963-07-03 1966-12-20 Ibm Computer instruction sequencing and control system
US3346851A (en) * 1964-07-08 1967-10-10 Control Data Corp Simultaneous multiprocessing computer system
US3343135A (en) * 1964-08-13 1967-09-19 Ibm Compiling circuitry for a highly-parallel computing system
US3611306A (en) * 1969-02-05 1971-10-05 Burroughs Corp Mechanism to control the sequencing of partially ordered instructions in a parallel data processing system
US4295193A (en) * 1979-06-29 1981-10-13 International Business Machines Corporation Machine for multiple instruction execution
US4437149A (en) * 1980-11-17 1984-03-13 International Business Machines Corporation Cache memory architecture with decoding
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
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
US4574348A (en) * 1983-06-01 1986-03-04 The Boeing Company High speed digital signal processor architecture
US4807115A (en) * 1983-10-07 1989-02-21 Cornell Research Foundation, Inc. Instruction issuing mechanism for processors with multiple functional units
JPS60101644A (ja) * 1983-11-07 1985-06-05 Masahiro Sowa ノイマン型コンピュータプログラムを実行するコントロールフローコンピュータ
JPS61245239A (ja) * 1985-04-23 1986-10-31 Toshiba Corp 論理回路方式
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
EP0239081B1 (en) * 1986-03-26 1995-09-06 Hitachi, Ltd. Pipelined data processor capable of decoding and executing plural instructions in parallel
JPS63131230A (ja) * 1986-11-21 1988-06-03 Hitachi Ltd 情報処理装置
EP0312764A3 (en) * 1987-10-19 1991-04-10 International Business Machines Corporation A data processor having multiple execution units for processing plural classes of instructions in parallel
US5197137A (en) * 1989-07-28 1993-03-23 International Business Machines Corporation Computer architecture for the concurrent execution of sequential programs
US5506974A (en) * 1990-03-23 1996-04-09 Unisys Corporation Method and means for concatenating multiple instructions
JP2818249B2 (ja) * 1990-03-30 1998-10-30 株式会社東芝 電子計算機
US5163139A (en) * 1990-08-29 1992-11-10 Hitachi America, Ltd. Instruction preprocessor for conditionally combining short memory instructions into virtual long instructions

Also Published As

Publication number Publication date
JPH04229326A (ja) 1992-08-18
CA2039640A1 (en) 1991-11-05
EP0454985A2 (en) 1991-11-06
HUT57455A (en) 1991-11-28
JP2500082B2 (ja) 1996-05-29
EP0454985B1 (en) 1996-12-18
EP0454985A3 (en) 1994-03-30
CS93691A2 (en) 1991-12-17
DE69123629T2 (de) 1997-06-12
DE69123629D1 (de) 1997-01-30
US5732234A (en) 1998-03-24
PL289722A1 (en) 1992-04-21
HU911103D0 (en) 1991-10-28
CA2039640C (en) 2000-01-11
US5502826A (en) 1996-03-26
ATE146611T1 (de) 1997-01-15

Similar Documents

Publication Publication Date Title
PL165524B1 (pl) Sposób przetwarzania strumienia impulsów elektrycznych PL
CA2037708C (en) General purpose compound apparatus for instruction-level parallel processors
US6889318B1 (en) Instruction fusion for digital signal processor
US5303356A (en) System for issuing instructions for parallel execution subsequent to branch into a group of member instructions with compoundability in dictation tag
EP2569694B1 (en) Conditional compare instruction
CN1158597C (zh) 超标量或超长指令字计算机中选择下一指令的方法与装置
Bala et al. Efficient instruction scheduling using finite state automata
US20040103410A1 (en) Program conversion apparatus and method as well as recording medium
JPH0628185A (ja) 2つのコンピュータ命令を並列に実行できるコンピュータ装置
US6950926B1 (en) Use of a neutral instruction as a dependency indicator for a set of instructions
JPH0926878A (ja) データ処理装置
JPH0695312B2 (ja) コンピュータプログラムを処理する方法およびシステム
KR100259738B1 (ko) 병렬 연산 기능을 가지는 데이터 처리 장치
KR970007761B1 (ko) 문자열 복사 방법
US6324639B1 (en) Instruction converting apparatus using parallel execution code
US5890009A (en) VLIW architecture and method for expanding a parcel
US7120905B2 (en) System and method for transformation of assembly code for conditional execution
US20050091478A1 (en) Processor using less hardware and instruction conversion apparatus reducing the number of types of instructions
JP2828219B2 (ja) オブジェクト・コード互換性を与える方法、オブジェクト・コード互換性並びにスカラ・プロセッサ及びスーパスカラ・プロセッサとの互換性を与える方法、ツリー命令を実行するための方法、データ処理システム
PL166513B1 (pl) Uklad komputerowy do przetwarzania rozkazów PL
Arya et al. An architecture for high instruction level parallelism
EP0825529A2 (en) System for preparing instructions for instruction parallel processor and system with mechanism for branching in the middle of a compound instruction
Ramsey et al. Specifying instructions' semantics using CSDL (preliminary report)
Richards The BCPL Cintcode System Users’ Guide
Smotherman Historical background for EPIC instruction set architectures

Legal Events

Date Code Title Description
LAPS Decisions on the lapse of the protection rights

Effective date: 20060403