PL165524B1 - Sposób przetwarzania strumienia impulsów elektrycznych PL - Google Patents
Sposób przetwarzania strumienia impulsów elektrycznych PLInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent 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 | 2Γ | 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)
- Zastrzeżenia patentowe1. 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. 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.
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)
| 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)
| 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 |
-
1991
- 1991-03-20 AT AT91104323T patent/ATE146611T1/de not_active IP Right Cessation
- 1991-03-20 DE DE69123629T patent/DE69123629T2/de not_active Expired - Lifetime
- 1991-03-20 EP EP91104323A patent/EP0454985B1/en not_active Expired - Lifetime
- 1991-04-03 CA CA002039640A patent/CA2039640C/en not_active Expired - Fee Related
- 1991-04-03 JP JP3096090A patent/JP2500082B2/ja not_active Expired - Fee Related
- 1991-04-03 PL PL91289722A patent/PL165524B1/pl not_active IP Right Cessation
- 1991-04-04 CS CS91936A patent/CS93691A2/cs unknown
- 1991-04-04 HU HU911103A patent/HUT57455A/hu unknown
-
1994
- 1994-01-25 US US08/186,221 patent/US5502826A/en not_active Expired - Fee Related
-
1996
- 1996-08-15 US US08/699,689 patent/US5732234A/en not_active Expired - Lifetime
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 |