PL193285B1 - Sposób i urządzenie do sterowania przełączaniem wątku w procesorze wielowątkowym - Google Patents

Sposób i urządzenie do sterowania przełączaniem wątku w procesorze wielowątkowym

Info

Publication number
PL193285B1
PL193285B1 PL340095A PL34009598A PL193285B1 PL 193285 B1 PL193285 B1 PL 193285B1 PL 340095 A PL340095 A PL 340095A PL 34009598 A PL34009598 A PL 34009598A PL 193285 B1 PL193285 B1 PL 193285B1
Authority
PL
Poland
Prior art keywords
thread
thread switch
processor
switch control
register
Prior art date
Application number
PL340095A
Other languages
English (en)
Other versions
PL340095A1 (en
Inventor
John Michael Borkenhagen
Richard James Eickemeyer
William Thomas Flynn
Andrew Henry Wottreng
Original Assignee
Ibm
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ibm filed Critical Ibm
Publication of PL340095A1 publication Critical patent/PL340095A1/xx
Publication of PL193285B1 publication Critical patent/PL193285B1/pl

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Debugging And Monitoring (AREA)

Abstract

1. Sposób sterowania przelaczaniem watku w procesie wielowatkowym, znamienny tym, ze zlicza sie pierwsza liczbe cykli procesora, w których procesor wielowatkowy wstrzymuje sie przez zdarzenie powodujace opóznienie procesora, zlicza sie druga liczbe cykli proceso- ra, wymaganych do przelaczenia przetwarzania przez procesor wielowatkowy z pierwszego watku rozkazów na inny watek rozkazów i oznacza sie to zdarzenie powodujace opóz- nienie procesora jako zdarzenie sterowania przelaczaniem watku poprzez ustawienie bitu wlaczenia w programowalnym rejestrze stero- wania przelaczaniem watków, jezeli pierwsza liczba jest wieksza od drugiej liczby. PL PL PL PL

Description

Opis wynalazku
Przedmiotem wynalazku jest sposób i urządzenie do sterowania przełączaniem wątku w procesorze wielowątkowym.
Znane jest ze zgłoszenia patentowego USA nr 08/957 002 sterowanie przełączaniem wątków w systemie procesora wielowątkowego, a ze zgłoszenia USA nr 08/956 875 urządzenie i sposób zapewniające postęp w procesorze wielowątkowym. Natomiast zgłoszenie patentowe USA nr 08/958 718 opisuje modyfikację priorytetów wątków w procesorze wielowątkowym, a zgłoszenie USA nr 08/956 577 sposób i urządzenie do wymuszania przełączenia wątku w procesorze wielowątkowym. Ze zgłoszenia patentowego USA nr 773 572 jest znane wykonanie w tle instrukcji i związanego z nią żądania pobrania w procesorze wielowątkowym, a ze zgłoszenia USA nr 761 378 jest znana wielowejściowa, w pełni asocjacyjna, przejściowa pamięć podręczna. Zgłoszenie patentowe USA nr 761 380 ujawnia sposób i urządzenie do nadawania priorytetów i trasowania rozkazów ze źródła do ujścia, a zgłoszenie USA nr 761 379 ujawnia sposób i urządzenie do przetwarzania trasującego rozkazów. Natomiast ze zgłoszenia patentowego USA nr 473 692 są znane sposób i urządzenie do zwiększenia wydajności działania wielowątkowego w systemie przetwarzania danych poprzez redukcję opóźnień związanych z dostępem do pamięci, a opis patentowy USA nr 5 778 243 ujawnia komórkę wielowątkową pamięci.
Podstawowa znana struktura współczesnego komputera zawiera urządzenia peryferyjne do przekazywania informacji do świata zewnętrznego i z niego, na przykład klawiaturę, monitory, napędy taśmowe, linie komunikacyjne sprzężone z siecią i inne. Do podstawowej struktury komputera zalicza się sprzęt niezbędny do odbierania, przetwarzania i dostarczania informacji do świata zewnętrznego, włączając w to magistrale, jednostki pamięci, sterowniki wejścia-wyjścia, urządzenia pamięciowe i przynajmniej jedną jednostkę centralną CPU i inne. Jednostka CPU stanowi mózg systemu i wykonuje instrukcje, które zawiera program komputerowy, oraz zarządza działaniem elementów systemu.
Z punktu widzenia sprzętu komputerowego większość systemów działa zasadniczo w ten sam sposób. Procesory wykonują z dużą szybkością bardzo proste operacje, takie jak arytmetyka, porównania logiczne i przesyłanie danych z jednego miejsca w drugie. Programy, które nakazują komputerowi wykonanie olbrzymich ilości prostych operacji, stwarzają iluzję, że komputer robi coś zaawansowanego. Tym, co jest postrzegane przez użytkownika jako nowa lub ulepszona wydajność systemu komputerowego, może być wykonywanie przez maszynę tych samych prostych operacji, ale znacznie szybciej. Z tego względu kontynuacja udoskonaleń systemów komputerowych wymaga, aby systemy te były coraz szybsze.
Znany jest pomiar całkowitej szybkości systemu komputerowego, nazywany również przepustowością, mierzony jako liczba operacji wykonywanych w jednostce czasu. Koncepcyjnie najprostszym ze wszystkich możliwych udoskonaleń szybkości systemu jest zwiększenie szybkości taktowania różnych elementów, w szczególności szybkości zegara procesora. W ten sposób, jeżeli wszystko działa dwa razy szybciej, ale poza tym pracuje dokładnie w ten sam sposób, system wykonuje określone zadanie w znacznie krótszym czasie. Procesory komputerowe, które dawniej były konstruowane z elementów dyskretnych, działały znacznie szybciej dzięki ograniczaniu wymiarów i redukcji liczby elementów. W końcu cały procesor zostaje upakowany jako układ scalony na pojedynczym chipie. Zmniejszony wymiar umożliwia zwiększenie szybkości zegara procesora oraz zwiększenie szybkości systemu.
Pomimo znacznego zwiększenia szybkości działania uzyskanego dzięki technologii układów scalonych, w dalszym ciągu wymaga się coraz szybszych systemów komputerowych. Dotychczas projektanci sprzętu zdolni byli do uzyskania coraz większej poprawy szybkości poprzez zwiększenie stopnia integracji, zmniejszenie wymiarów układów i inne techniki. Według projektanta jednak zmniejszenie wymiarów fizycznych nie może następować w nieskończoność, gdyż istnieją granice zwiększania szybkości zegara procesora. Skierowano więc uwagę na inne sposoby rozwiązania dalszego zwiększania całkowitej szybkości systemu komputerowego.
Bez zmiany szybkości zegara można poprawić szybkość systemu poprzez użycie wielu procesorów upakowanych w postaci chipu z układem scalonym. Użycie podporządkowanych procesorów poprawia znacznie szybkość systemu przez odciążenie głównego procesora jednostki CPU na rzecz procesora podrzędnego. Dla przykładu, procesory podrzędne wykonują standardowo powtarzalne oraz jednokrotne programy specjalnego przeznaczenia, takie jak obsługa urządzeń wejścia-wyjścia
PL 193 285 B1 oraz sterowanie. Możliwe jest także umieszczenie w jednym systemie komputerowym wielu jednostek CPU, zwykle w systemie typu serwer, który obsługuje wielu użytkowników jednocześnie.
Każda z różnych jednostek CPU wykonuje oddzielnie różne zadania na rzecz użytkowników, zwiększając tym samym całkowitą szybkość systemu przy wykonywaniu wielu zadań jednocześnie. Jest jednak znacznie trudniej zwiększyć szybkość, z jaką jest wykonywane pojedyncze zadanie, takie jak program aplikacji. Koordynacja wykonywaniem i dostarczaniem wyników różnych funkcji pomiędzy wieloma jednostkami CPU stanowi ważne zadanie. Dla procesorów podrzędnych typu we-wy nie jest to zbyt trudne, ponieważ ich funkcje są określane wstępnie i ograniczane, ale dla wielu procesorów jednostki CPU, wykonujących programy aplikacji ogólnego użytku koordynacja funkcji jest o wiele trudniejsza, częściowo z tego powodu, że projektanci systemu nie znają z wyprzedzeniem szczegółów programów. Większość programów aplikacji podąża za pojedynczą ścieżką lub przepływem kroków wykonywanych przez procesor. Czasami możliwe jest rozbicie jednej ścieżki na wiele równoległych ścieżek, poszukuje się w dalszym ciągu uniwersalnej aplikacji, która działa w ten sposób. W ogóle rozbicie długiego zadania na mniejsze zadania do równoległego przetworzenia przez wiele procesorów jest wykonywane przez inżyniera oprogramowania piszącego kod w oparciu o zasadę od przypadku do przypadku. Takie rozwiązanie jest szczególnie problematyczne w przypadku obsługi transakcji komercyjnych, które niekoniecznie są powtarzalne lub przewidywalne.
Z tego względu, chociaż procesory wielokrotne usprawniają całkowite działanie systemu, to w dalszym ciągu istnieje wiele powodów, aby zwiększyć szybkość pojedynczej jednostki CPU. Przy danym zegarze jest możliwe dalsze zwiększenie szybkości jednostki CPU, tj. liczby operacji wykonywanych na sekundę poprzez zwiększenie średniej liczby operacji wykonywanych w jednym cyklu zegara. Popularną architekturą wydajnych jednochipowych mikroprocesorów jest architektura komputerów o zredukowanym zestawie instrukcji RISC, charakteryzująca się małym, uproszczonym zestawem często wykonywanych instrukcji przeznaczonych do szybkiego wykonania. Wraz ze stopniem zaawansowania technologii półprzewodnikowej, celem architektury typu RISC stał się rozwój procesorów zdolnych do wykonywania jednej lub więcej instrukcji w każdym cyklu zegara maszyny. Innym rozwiązaniem, służącym do zwiększenia średniej liczby operacji wykonywanych na sekundę, jest modyfikacja sprzętowa samej jednostki CPU. Taki pomiar przepustowości, liczby cykli na instrukcję, jest używany powszechnie w celu określenia architektur procesorów wydajnych. Przetwarzanie potokowe i pamięci podręczne są cechami architektury komputerowej, które umożliwiają takie osiągnięcia. Wykonywanie instrukcji w trybie przetwarzania potokowego umożliwia następującym po sobie instrukcjom rozpoczęcie ich wykonywania, zanim poprzednio wydane instrukcje zostaną zakończone. Pamięci podręczne przechowują dane często używane oraz inne bliżej procesora i umożliwiają kontynuację wykonywania instrukcji, w większości przypadków bez oczekiwania przez pełny czas dostępu do pamięci operacyjnej. Znane jest również udoskonalone rozwiązanie z jednostkami wielofunkcyjnymi i ze sprzętem wyszukującym instrukcje przeznaczone do wykonania równoległego.
Działanie znanego procesora RISC jest przyspieszane w komputerze superskalarnym oraz w komputerze o bardzo długim słowie rozkazowym VLIW, z których obydwa wykonują równolegle więcej niż jedną instrukcję w cyklu procesora. W architekturach tych stosuje się wielokrotne jednostki funkcjonalne lub wykonawcze, aby prowadzić równolegle wiele potoków. W architekturze superskalarnej instrukcje są kończone w sposób uporządkowany lub nieuporządkowany.
Wypełnianie uporządkowane oznacza, że żadna instrukcja nie może zakończyć się, zanim nie zakończą się wszystkie instrukcje wydane wcześniej. Wypełnianie nieuporządkowane oznacza, że zezwala się na zakończenie instrukcji przed zakończeniem wszystkich poprzednich instrukcji tak długo, jak są spełnione określone wstępnie reguły.
Dla obydwu trybów wykonywania, uporządkowanego i nieuporządkowanego, w systemach superskalarnych potoki wygasają w pewnych okolicznościach. Instrukcja zależna od rezultatów wcześniej wydanej, niezakończonej jeszcze instrukcji, może spowodować zatrzymanie się potoku. Dla przykładu, instrukcje zależne od instrukcji ładowania/przechowywania, dla których brak jest w pamięci podręcznej niezbędnych danych, nie mogą zostać wykonane, dopóki dane te nie będą dostępne w tej pamięci. Utrzymywanie w pamięci podręcznej danych niezbędnych do kontynuacji działania oraz do utrzymania dużego współczynnika trafienia, tj. liczby żądań dostępu do danych w stosunku do liczby razy, gdy dane te były rzeczywiście dostępne w pamięci, jest zagadnieniem istotnej wagi, szczególnie przy obliczeniach wykorzystujących duże struktury danych. Brak danych w pamięci podręcznej może spowodować zatrzymanie potoku na kilka cykli, a całkowite opóźnienie pamięci będzie bardzo poważne, jeżeli dane nie będą dostępne w większości przypadków. Chociaż urządzenia pamięciowe używa4
PL 193 285 B1 ne jako pamięć operacyjna stają się coraz szybsze, to różnica w szybkości działania pomiędzy tymi chipami pamięci i nowoczesnymi procesorami rośnie w coraz szybszym tempie. Zgodnie z tym, znaczna część czasu działania w najnowszych rozwiązaniach procesorów jest spędzana w oczekiwaniu na rozwiązanie braku danych w pamięci podręcznej, a opóźnienia w dostępie do pamięci stanowią coraz większy udział w czasie działania procesora.
Znana jest technika zwiększenia wydajności sprzętu w jednostce CPU, która polega na podzieleniu zadania na niezależnie wykonywane sekwencje instrukcji, nazywane wątkami. Technika ta jest związana z podziałem większego zadania na mniejsze zadania wcelu ich niezależnego wykonania przez różne procesory, z wyjątkiem tych wątków, które mają być wykonane przez ten sam procesor. Gdy jednostka CPU z jakiegokolwiek powodu nie może kontynuować wykonywania któregoś z tych wątków, wtedy przełącza się i wykonuje inny wątek.
Sprzętowa wielowątkowość służy tolerancji opóźnień pamięci. Termin wielowątkowość, zdefiniowany przez projektantów architektury komputerów, nie jest tym samym, co użycie tego słowa, związane z oprogramowaniem, które oznacza jedno zadanie podzielone na wiele podproblemów. W definicji architektury wątki mogą być niezależne. Z tego względu, w celu rozróżnienia dwóch sposobów użycia tego terminu, stosowane jest często pojęcie wielowątkowości sprzętowej. Wynalazek stosuje pojęcie wielowątkowości wcelu oznaczenia wielowątkowości sprzętowej.
Wielowątkowość umożliwia potokom procesorowym wykonanie użytecznej pracy na różnych wątkach, gdy dla bieżącego wątku zostaje wykryty warunek wstrzymania potoku. Wielowątkowość umożliwia również procesorom realizującym architektury niepotokowe wykonanie użytecznej pracy dla oddzielnego wątku, gdy zostaje wykryty warunek wstrzymania dla bieżącego wątku. Istnieją dwie podstawowe formy wielowątkowości. Znane rozwiązanie polega na przechowywaniu N wątków lub stanów w procesorze i przeplataniu tych wątków w trybie cykl za cyklem. Eliminuje to wszystkie uzależnienia potokowe, ponieważ instrukcje w pojedynczym wątku są niezależne. Drugi sposób realizacji wielowątkowości, uwzględniany w wynalazku, polega na przeplataniu wątków pod wpływem zdarzenia o dużym opóźnieniu.
Znane postacie wielowątkowości wymagają powielania rejestrów procesora dla każdego wątku. Dla przykładu, procesor w architekturze sprzedawanej pod znakiem handlowym Power PC™, służącej do realizacji wielowątkowości, musi utrzymać N stanów, aby uruchomić N wątków. Zgodnie z tym powiela się N razy następujące rejestry uniwersalne, rejestry zmiennoprzecinkowe, rejestry warunkowe, rejestr stanu zmiennoprzecinkowy, rejestr sterowania, rejestr zliczający, rejestr powiązania, rejestr wyjątków, rejestry zapisujące/przywracające oraz rejestry specjalnego przeznaczenia. Dodatkowo są powielane specjalne bufory, takie jak segmentowy bufor tablic stron lub każde wejście może być znakowane numerem wątku, a jeśli nie, musi być opróżniane przy każdym przełączeniu wątku. Również pewne mechanizmy przewidywania rozgałęzienia na przykład rejestr korelacji i stos zwrotny powinny być powielane. Na szczęście nie ma potrzeby powielania większych funkcji procesora, takich jak funkcja pamięci podręcznej rozkazów poziomu pierwszego L1 I, pamięci podręcznej danych poziomu pierwszego L1 D, bufora rozkazów, kolejki pamięci, dyspozytora rozkazów, jednostek funkcyjnych lub wykonawczych, potoków, bufora translacji adresów stron TLB, tablicy historii rozgałęzień. Gdy jeden wątek napotyka opóźnienie, procesor przełącza się szybko na inny wątek. Wykonywanie tego wątku nakłada się na opóźnienie pamięci pierwszego wątku.
Znane techniki wielowątkowości opisują przełączanie wątków w przypadku braku danych w pamięci podręcznej lub odwołania do pamięci. Przegląd pierwotnego przykładu tej techniki znajduje się w publikacji Sparcle: An Evolutionary Design for Large-Scale Multiprocesors, Agarwal iin., IEEE Micro Volume 13, nr 3, strony 48-60, czerwiec 1993. Tak, jak to jest realizowane w architekturze typu RISC, zestawy wielu rejestrów, wykorzystywane normalnie w celu wsparcia wywołań funkcji, są modyfikowane tak, aby obsłużyć wiele wątków. Osiem nakładających się okien rejestrów zmodyfikowano tak, aby stały się czterema nienakładającymi się zestawami rejestrów, przy czym każdy zestaw rejestrów stanowi rezerwę służącą do obsługi pułapek i wiadomości. System ten prezentuje przełączanie wątków, które pojawia się przy każdym braku w pamięci podręcznej pierwszego poziomu, skutkującym w dalekim odwołaniu do pamięci. Podczas, gdy ten system stanowi postęp w technice, projekty nowoczesnych procesorów często wykorzystują pamięć podręczną o wielu poziomach lub pamięć o dużych szybkościach, która jest dołączona do procesora. System procesorowy wykorzystuje znany algorytm, aby zdecydować, która porcja zawartości jego pamięci operacyjnej zostanie załadowana przy każdym poziomie pamięci podręcznej i w taki sposób za każdym razem, gdy występuje odwołanie do danych
PL 193 285 B1 pamięci, które nie są dostępne przy pierwszym poziomie pamięci podręcznej, procesor musi próbować uzyskać to odwołanie do pamięci z drugiego lub wyższego poziomu pamięci podręcznej.
Znana jest z opisu patentowego USA nr 5 524 250 jednostka centralna do przetwarzania wielu wątków przy użyciu dedykowanych rejestrów ogólnego przeznaczenia i rejestrów maskujących dla dostępu do rejestrów, związana ze strumieniami danych i przetwarzaniem protokołów. Opis ten przedstawia wiele zestawów rejestrów uniwersalnych i specjalnego przeznaczenia, służących do poprawy szybkości jednostki CPU przy przełączaniu między środowiskami, a także sterownik potokowy, program planujący, system zdarzeń oraz rejestry maskujące, które ułatwiają skuteczne planowanie wątków, opóźnień rozgałęzień oraz eliminację szczelin opóźnień po zapisaniu w pamięci dla zwiększenia wydajności i szerokości pasma.
Sposób według wynalazku charakteryzuje się tym, że zlicza się pierwszą liczbę cykli procesora, w których procesor wielowątkowy wstrzymuje się przez zdarzenie powodujące opóźnienie procesora, zlicza się drugą liczbę cykli procesora, wymaganych do przełączenia przetwarzania przez procesor wielowątkowy z pierwszego wątku rozkazów na inny wątek rozkazów i oznacza się to zdarzenie powodujące opóźnienie procesora jako zdarzenie sterowania przełączaniem wątku poprzez ustawienie bitu włączenia w programowalnym rejestrze sterowania przełączaniem wątków, jeżeli pierwsza liczba jest większa od drugiej liczby.
Korzystnie wysyła się sygnał do przełączenia wątków, gdy przez procesor wielowątkowy wykrywa się zdarzenie sterowania przełączaniem wątków, jeżeli bit włączenia jest włączony.
Urządzenie według wynalazku charakteryzuje się tym, że zawiera co najmniej jeden procesor wielowątkowy do przełączania pomiędzy wieloma wątkami rozkazów, dołączony do co najmniej jednego programowalnego rejestru sterowania przełączaniem wątków, posiadającego wiele bitów, z których każdy bit jest związany unikalnie z jednym z wielu zdarzeń sterowania przełączaniem wątków.
Korzystnie przy uaktywnieniu jednego z bitów, co najmniej jeden procesor wielowątkowy przełącza się z jednego z wielu wątków na inny z wielu wątków.
Korzystnie w programowalnym rejestrze sterowania przełączaniem wątków, co najmniej jeden z bitów jest wyłączalny przez co najmniej jeden rozkaz.
Korzystnie urządzenie zawiera więcej niż jeden programowalny rejestr sterowania przełączaniem wątków.
Korzystnie wartości bitów jednego programowalnego rejestru sterowania przełączaniem wątków różnią się od wartości bitów innego z programowalnych rejestrów sterowania przełączaniem wątków.
Korzystnie wiele zdarzeń sterowania przełączaniem wątków zawiera brak danych w co najmniej jednym z następujących: pamięci podręcznej danych L1, pamięci podręcznej L2 i buforze translacji adresów tablic stron.
Korzystnie wiele zdarzeń sterowania przełączaniem wątków zawiera brak rozkazów w co najmniej jednym z następujących: pamięci podręcznej rozkazów L1 i buforze translacji adresów tablic stron.
Korzystnie wiele zdarzeń sterowania przełączaniem wątków zawiera błąd w translacji adresu danych i/lub rozkazów.
Korzystnie wiele zdarzeń sterowania przełączaniem wątków zawiera dostęp do urządzenia wejścia-wyjścia zewnętrznego względem procesora wielowątkowego.
Korzystnie wiele zdarzeń sterowania przełączaniem wątków zawiera dostęp do innego procesora wielowątkowego.
Korzystnie wiele zdarzeń sterowania przełączaniem wątków zawiera rejestr naliczania postępu związanego z liczbą przypadków, gdy jeden z wielu wątków został przełączony z co najmniej jednego procesora wielowątkowego bez żadnego rozkazu z tego jednego spośród wielu wątków.
Korzystnie wiele zdarzeń sterowania przełączaniem wątków zawiera okres czasu zwłoki.
Zaletą wynalazku jest zapewnienie ulepszonego sposobu i urządzenia dla systemu przetwarzania informacji komputerowej, w szczególności z wielotorowym, wydajnym systemem przetwarzania informacji komputerowej i sposobem zrealizowanym sprzętowo w procesorze. Dzięki wynalazkowi jest zapewniony ulepszony system przetwarzania danych, który redukuje opóźnienia związane z czasem oczekiwania na pamięć w systemie wielopoziomowej pamięci podręcznej, wykorzystując funkcje logiczne realizowane sprzętowo oraz rejestry wbudowane w systemie wielowątkowego przetwarzania danych.
PL 193 285 B1
Przedmiot wynalazku jest pokazany w przykładach wykonania na rysunku, na którym fig.1 przedstawia schemat blokowy systemu komputerowego do realizacji wynalazku, fig. 2 - schemat blokowy systemu wysokiego poziomu wielowątkowego przetwarzania danych według wynalazku, fig. 3 schemat blokowy jednostki sterowania pamięcią z fig. 2, fig. 4 - schemat blokowy układu logicznego przełączania wątków, jednostki sterowania pamięcią i jednostki rozkazowej z fig. 2, fig. 5 - zmiany stanu wątku pod wpływem różnych zdarzeń przełączania wątku z fig. 4 i fig. 6 - schemat przepływu naliczania postępu według wynalazku.
Figura 1 przedstawia schemat blokowy komputerowego systemu przetwarzania danych 10 wysokiego poziomu, który jest wykorzystywany do realizacji sposobu i systemu według wynalazku. Na fig. 1 przedstawiono główne elementy sprzętowe i połączenia komputerowego systemu przetwarzania danych 10 do wykorzystania wynalazku. Jednostka centralna CPU 100 do przetwarzania rozkazów jest połączona z pamięciami podręcznymi 120, 130 i 150. Pamięć podręczna 150 rozkazów przechowuje instrukcje do wykonania przez jednostkę CPU 100. Pamięci podręczne 120 i 130 danych przechowują dane do wykorzystania przez jednostkę CPU 100. Pamięci podręczne komunikują się z pamięcią o swobodnym dostępie w pamięci operacyjnej 140. Jednostka CPU 100 i pamięć operacyjna 140 komunikują się również poprzez interfejs 152 magistrali z szyną systemową 155. Do szyny systemowej 155 są dołączone różne procesory wejścia-wyjścia IOP 160-168, które wspierają komunikację z różnymi urządzeniami pamięciowymi i wejścia-wyjścia I/O, takimi jak urządzenia pamięciowe bezpośredniego dostępu DASD 170, napędy taśmowe 172, linie komunikacji zdalnej 174, stacje robocze 176 i drukarki 178. Figura 1 przedstawia przykładowe elementy komputerowego systemu przetwarzania danych 10 wysokiego poziomu, a liczba i rodzaje takich elementów ulegają zmianie.
W jednostce CPU 100 rdzeń procesora 110 zawiera specjalizowane jednostki funkcyjne, z których każda wykonuje proste operacje, takie jak instrukcje porządkowania, wykonywanie operacji na liczbach całkowitych, wykonywanie operacji na liczbach rzeczywistych, przesyłanie wartości pomiędzy adresowalnymi tablicami pamięci i rejestrów logicznych.
Figura 2 przedstawia rdzeń procesora 100, który jest na przykład pojedynczym układem scalonym czy potokowym mikroprocesorem superskalarnym, który jest realizowany przy użyciu architektury komputerowej, takiej jak rodzina procesorów RISC.
System przetwarzania danych 10 zawiera różne jednostki, rejestry, bufory pamięci i inne części, z których wszystkie są wykonane z układów scalonych. Na figurach różne ścieżki danych zostały uproszczone, gdyż w rzeczywistości istnieje wiele oddzielnych i równoległych ścieżek danych dla różnych elementów. W dodatku różne elementy niezwiązane z wynalazkiem zostały pominięte, a procesory zawierają jednostki spełniające dodatkowe funkcje. System przetwarzania danych 10 pracuje na przykład według techniki komputerowej o zredukowanym zestawie rozkazów RISC lub według innych technik komputerowych.
Na figurze 2 rdzeń procesora 100 systemu przetwarzania danych 10 zawiera pierwszy poziom L1D pamięci podręcznej danych 120, drugi poziom L2 pamięci podręcznej 130, pamięć operacyjną 140 oraz pierwszy poziom L1 I pamięci podręcznej rozkazów 150, które wszystkie są dołączone operacyjnie do jednostki sterowania 200 pamięcią. Na fig. 2 jednostka sterowania 200 pamięcią zawiera przejściową pamięć podręczną 210 do połączenia pamięci podręcznej L1D 120 i pamięci podręcznej L2 130, pamięci operacyjnej 140 oraz różnych jednostek wykonawczych. Pamięci podręczne L1D 120 oraz L1I 150 są zastosowane w układzie scalonym jako część procesora 100, podczas gdy pamięć operacyjna 140 i pamięć podręczna L2 130 znajdują się poza tym układem. Pamięć operacyjna 140 ma przedstawiać pamięć operacyjną o dostępie bezpośrednim, która znajduje się lub nie znajduje się w rdzeniu procesora 100 oraz inne bufory danych i pamięci podręczne zewnętrzne, jeżeli są takowe, względem rdzenia procesora 100 i inne pamięci zewnętrzne, na przykład DASD 170, napędy taśmowe 172 i stacje robocze 176, pokazane na fig. 1. Pamięć podręczna L2 130 jest urządzeniem pamięciowym o większej szybkości niż pamięć operacyjna 140 i dzięki przechowywaniu danych w pamięci podręcznej L2 130 opóźnienie pamięciowe, które mogą wystąpić poprzez odwołanie do pamięci operacyjnej 140, są minimalizowane. Na fig. 2 pamięć podręczna L2 130 i pamięć operacyjna 140 są dołączone bezpośrednio do pamięci podręcznej L1I 150 oraz jednostki rozkazowej 220 poprzez jednostkę sterowania 200 pamięcią.
Rozkazy z pamięci L1I150 stanowią wyjście jednostki rozkazowej 220, która steruje wykonywaniem różnych wątków przez różne podjednostki procesora, na przykład jednostki rozgałęzień 260, jednostki stałoprzecinkowe 270, jednostki sterowania 200 pamięcią, jednostki zmiennoprzecinkowe 280 i inne jednostki określone przez architekturę systemu przetwarzania danych 10. Poza tymi różnyPL 193 285 B1 mi jednostkami wykonawczymi, przedstawionymi na fig. 2 mikroprocesorowe systemy superskalarne często zawierają dodatkowo różne wersje każdej z takich jednostek wykonawczych. Większość tych jednostek ma jako wejściowe źródło dane operacyjne pochodzące z różnych rejestrów, takich jak rejestry uniwersalne GPR 272 i rejestry zmiennoprzecinkowe FPR 282. Dodatkowo są wykorzystywane rejestry specjalnego przeznaczenia SPR 274. Na fig. 2 jednostka sterowania 200 pamięcią oraz przejściowa pamięć podręczna 210 są połączone bezpośrednio z rejestrami uniwersalnymi 272 oraz rejestrami zmiennoprzecinkowymi 282. Rejestry uniwersalne 272 są połączone z rejestrami specjalnego przeznaczenia 274.
Spośród sprzętowych jednostek funkcjonalnych, unikalnymi dla procesora wielowątkowego 100 są układ logiczny 400 przełączania wątków i przejściowa pamięć podręczna 210. Układ logiczny 400 przełączania wątków zawiera różne rejestry określające, który wątek pozostanie aktywny lub będzie wykonywany. Układ logiczny 400 przełączania wątków jest połączony operacyjnie z jednostką sterowania 200 pamięcią, jednostkami wykonawczymi 260, 270, 280 i z jednostką rozkazową 220. Przejściowa pamięć podręczna 210 w jednostce sterowania 200 pamięcią musi być zdolna do realizacji wielowątkowości. Korzystnie jednostka sterowania 200 pamięcią i przejściowa pamięć operacyjna 210 zezwalają na wystąpienie przynajmniej jednego niezaspokojonego zgłoszenia danych w jednym wątku. W ten sposób, gdy pierwszy wątek pozostaje wstrzymany w odpowiedzi na przykład na wystąpienie braku danych w pamięci podręcznej L1 D, drugi wątek mógłby być zdolny do uzyskania dostępu do pamięci podręcznej L1 D 120 w celu pobrania danych znajdujących się tam. Jeżeli drugi wątek również skutkuje brakiem danych w L1D, zostanie wydane jeszcze inne zgłoszenie pobrania danych iw ten sposób wielokrotne zgłoszenia pobrania danych muszą zostać obsłużone w jednostce sterowania 200 pamięcią i przejściowej pamięci podręcznej 210. Jednostka sterowania 200 pamięcią, jednostki wykonawcze 260, 270, 280 i jednostka rozkazowa 220 są połączone operacyjnie z układem logicznym 400 przełączania wątków, określającym, który wątek będzie wykonywany.
Na figurze 2 pomiędzy jednostką sterowania 200 pamięcią i jednostką rozkazową 220 poprowadzono szynę 205 w celu umożliwienia komunikacji, na przykład dla przesyłania zgłoszeń dostępu do danych do jednostki sterowania 200 pamięcią i sygnału braku danych w pamięci podręcznej L2 130 do jednostki rozkazowej 220. Zastosowano następnie bufor 250 translacji adresów tablic stron TLB, który zawiera odwzorowanie adresów z wirtualnych na rzeczywiste. Zastosowano różne dodatkowe bufory odwzorowania pamięci wysokiego poziomu, takie jak segmentowy bufor adresów tablic stron, który działa w podobny sposób, jak bufor 250 translacji adresów tablic stron.
Figura 3 przedstawia bardziej szczegółowo jednostkę sterowania 200 pamięcią, która steruje wejściem i wyjściem danych i instrukcji z różnych jednostek pamięciowych, które zawierają różnego rodzaju pamięci podręczne, bufory i pamięć operacyjną. Na fig. 3 jednostka sterowania 200 pamięcią zawiera przejściową pamięć podręczną 210 połączoną funkcjonalnie z pamięcią podręczną L1D 120, multiplekserem 360, pamięcią podręczną L2 130 i pamięcią operacyjną 140. Ponadto przejściowa pamięć podręczna 210 odbiera sygnały sterujące z układów sekwencyjnych 350. Układy sekwencyjne 350 składają się z wielu elementów sekwencyjnych, na przykład trzech, służących do obsługi 0 zgłoszeń ładowanych do pamięci rozkazów i/lub danych. Układy sekwencyjne 350 wysyłają również wyjściowe sygnały sterujące do przejściowej pamięci podręcznej 210, pamięci podręcznej L2 130, jak również odbierają i przekazują sygnały sterujące do pamięci operacyjnej 140.
Multiplekser 360 w jednostce sterowania 200 pamięcią na fig. 3 odbiera dane z pamięci podręcznej L1 D 120, przejściowej pamięci podręcznej 210, pamięci podręcznej L2 130, pamięci operacyjnej 140 i jeżeli dane mają być przechowywane w pamięci, z jednostek wykonawczych 270 i 280. Dane z jednego z tych źródeł są wybierane przez multiplekser 360 i wysyłane do pamięci podręcznej L1 D 120 lub do jednostek wykonawczych w odpowiedzi na sygnał sterujący wyboru, odbierany z układów sekwencyjnych 350. Następnie na fig. 3 układy sekwencyjne 350 wysyłają sygnał wyboru, sterujący drugim multiplekserem 370. Na podstawie tego sygnału wyboru z układów sekwencyjnych 350, multiplekser 370 przesyła dane z pamięci podręcznej L2 130 lub pamięci operacyjnej 140 do pamięci podręcznej L1 I 150 lub jednostki rozkazowej 220. Przy wytwarzaniu sygnałów sterujących i wyboru, układy sekwencyjne zwracają się i aktualizują katalog L1320 pamięci podręcznej L1 D 120 i katalog L2 330 pamięci podręcznej L2 130.
Mając na uwadze zdolność procesora do pracy wielowątkowej, układy sekwencyjne 350 jednostki sterowania 200 pamięcią wysyłają również sygnały przeznaczone dla układu logicznego 400 przełączania wątków, które wskazują stan zgłoszeń danych i rozkazów. Tak więc sprzężenie z pamięci podręcznych 120, 130 i 150, pamięci operacyjnej 140 i bufora 250 translacji adresów tablic
PL 193 285 B1 stron jest poprowadzone do układów sekwencyjnych 350 i następnie do układu logicznego 400 przełączania wątków, z czego wynika przełączenie wątku, co będzie opisane poniżej. Każde urządzenie, w którym może wystąpić zdarzenie przeznaczone do przełączenia wątku w procesorze wielowątkowym, jest dołączone do układów sekwencyjnych 350.
Figura 4 przedstawia schemat logiczny i schemat blokowy sprzętowego układu logicznego 400 przełączania wątku, który określa, czy jakiś wątek zostanie przełączony i jeżeli tak, to który wątek. Jednostka sterowania 200 pamięcią i jednostka rozkazowa 220 są połączone z układem logicznym 400 przełączania wątku. Układ logiczny 400 przełączania wątku jest włączony do jednostki rozkazowej 220, ale jeżeli istnieje wiele wątków, to złożoność układu logicznego 400 przełączania wątków może wzrosnąć, więc układ logiczny pozostaje na zewnątrz wobec jednostki rozkazowej 220. Dla uproszczenia układ logiczny 400 przełączania wątków jest przedstawiony jako zewnętrzny wobec jednostki rozkazowej 220.
Pewne zdarzenia, które skutkują przełączeniem wątku, są przesyłane liniami 470, 472, 474, 476, 478, 480, 482, 484 i 486 z układów sekwencyjnych 350 jednostki sterowania 200 pamięcią do układu logicznego 400 przełączania wątku. Pozostałe zdarzenia dotyczące opóźnienia mogą powodować przełączenie wątku, a lista ta nie jest zamknięta, raczej ma tylko pokazać, w jaki sposób może zostać zrealizowane przełączanie wątku. Żądanie pobrania instrukcji przez wątek T0 lub wątek T1, który nie znajduje się w jednostce rozkazowej 220, stanowi zdarzenie mogące spowodować przełączenie wątku, oznaczone jako 470 i 472 na fig. 4. Linia 474 wskazuje, kiedy aktywny wątek T0lub T1 napotyka na brak danych w pamięci podręcznej L1D 120, co jest odnotowywane na liniach 476 i 478. Linie 480 i 482 są uaktywniane w momencie powrotu danych w celu kontynuacji wykonywania wątku T0 lub wątku T1. W buforze 250 translacji adresów tablic stron występuje błąd, a uzupełnienia procesów tablicowych są wskazywane przez linie 484 i 486.
Wszystkie te zdarzenia są doprowadzane do układu logicznego 400 przełączania wątków, a dokładniej do rejestrów 440 stanu wątków i do sterownika 450 przełączania wątków. Układ logiczny 400 przełączania wątków ma jeden rejestr stanu wątku dla każdego wątku. Tutaj są przedstawione dwa wątki, tak więc będzie opisywany rejestr 442 stanu T0 dla pierwszego wątku T0 i rejestr stanu T1 444 dla drugiego wątku T1. Układ logiczny 400 przełączania wątków zawiera rejestr 410 sterowania przełączaniem wątków, który decyduje, które zdarzenia spowodują przełączenie wątku. Dla przykładu, rejestr 410 sterowania przełączaniem wątków może zablokować zdarzenia powodujące zmianę stanów -nie będą one widoczne dla sterownika 450 przełączania wątków tak, że wątek nie będzie mógł zostać przełączony w wyniku zablokowanego zdarzenia. Rejestr 420 naliczania postępu jest użyty w celu zapobiegania przeładowaniu i może być włączony do rejestru 410 sterowania przełączaniem wątków. Rejestr 420 naliczania postępu dokonuje alokacji neutralnych i zależnych wyników. Również priorytety wątków mogą być zmieniane przy użyciu oprogramowania 460. Ostatecznie, ale nie w sensie ograniczającym, sterownik 450 przełączania wątków zawiera mnóstwo bramek logicznych, co stanowi kulminację wszystkich układów logicznych, które w rzeczywistości określają, czy wątek będzie przełączony i który wątek oraz w jakich okolicznościach. Każdy z tych elementów logicznych i ich funkcje są przedstawione dalej bardziej szczegółowo.
Rejestry 440 stanu wątków zawierają rejestr stanu dla każdego wątku oraz przechowują stan wątku. W tym przypadku są to rejestr 442 stanu wątku T0 i rejestr 444 stanu wątku T1. Liczba bitów i alokacja poszczególnych bitów w celu opisania stanu każdego wątku jest dostosowywana do poszczególnej architektury i schematu priorytetów przełączania wątków. Przykładem alokacji bitów w rejestrach 442, 444 stanu wątków dla procesora wielowątkowego, mającego dwa wątki, jest zestaw podany poniżej.
Alokacja bitów rejestru stanu wątku (0) Rozkaz/Dane 0 = Rozkaz 1 = Dane (1:2) Układ sekwencyjny typu braku 00 = Żaden = Brak w buforze translacji adresów tablic stron (sprawdź bit 0dla I/D) = brak w pamięci podręcznej L1 11 = brak w pamięci podręcznej L2
PL 193 285 B1 (3) Przejście = Przejście do bieżącego stanu nie powoduje przełączenia wątku 1 = Przejście do bieżącego stanu powoduje przełączenia wątku (4:7) Zarezerwowane (8) 0= Ładuj 1= Pamiętaj (9:14) Zarezerwowane (15:17) Licznik postępu
111 = Reset (rozkaz został wypełniony w trakcie tego wątku)
000 = Pierwsze wykonanie tego wątku bez wypełnienia rozkazu
001 = Drugie wykonanie tego wątku bez wypełnienia rozkazu
010 = Trzecie wykonanie tego wątku bez wypełnienia rozkazu
011 = Czwarte wykonanie tego wątku bez wypełnienia rozkazu
100 = Piąte wykonanie tego wątku bez wypełnienia rozkazu (18:19) Priorytet (może być ustawiony programowo) = Średni = Niski = Wysoki = <niedozwolony>
(20:31) Zarezerwowane (32:63) Zarezerwowane przy realizacji 64 bitowej W opisywanym tutaj przykładzie wykonania bit 0 wskazuje, czy brak albo przyczyna, dla której procesor wstrzymał działanie, jest wynikiem żądania pobrania rozkazu czy danych. Bity 1 i 2 wskazują, czy wymagana informacja była niedostępna i jeżeli tak, to z którego urządzenia, tj. czy przetłumaczony adres danych lub rozkazu znajdował się w buforze 250 translacji adresów tablic stron albo dane lub rozkaz nie znajdowały się w pamięci podręcznej L1 D 120 lub L2 130, jak będzie to dalej wyjaśnione przy opisie fig. 5. Bit 3 wskazuje, czy zmiana stanu wątku powoduje przełączenie wątku. Wątek może zmienić stan bez powodowania przełączenia wątku. Dla przykładu, jeżeli przełączenie wątku występuje, gdy wątek T1 napotyka brak danych w pamięci podręcznej L1, wtedy, jeżeli wątek T1 napotyka na brak danych w pamięci L2, nie będzie przełączenia wątku, ponieważ ten wątek został już przełączony pod wpływem braku danych w pamięci L1. Stan wątku T1 ulega jednak zmianie. Odmiennie, jeżeli zostanie tak wybrane, że układ logiczny 400 przełączania wątków może być skonfigurowany lub zaprogramowany tak, aby nie powodował przełączenia w przypadku braku w pamięci L1, wtedy, jeżeli wątek napotka brak danych w pamięci L1, nie nastąpi przełączenie wątku, nawet mimo tego, że wątek zmienia swój stan. Bit 8 rejestrów 442 i 444 stanu wątku jest przeznaczony do określenia, czy informacja wymagana przez poszczególny wątek ma być załadowana do rdzenia procesora czy przekazana z rdzenia procesora do pamięci podręcznej lub operacyjnej. Bity od 15 do 17 są alokowane w celu zapobiegania przeładowaniu, co będzie omówione później, wraz z odniesieniem do rejestru 420 naliczania postępu. Bity 18 i 19 są ustawiane sprzętowo lub programowo, aby wskazywać priorytet danego wątku.
Figura 5 przedstawia cztery stany wątku przetwarzanego przez system przetwarzania danych 10 i stany te są przechowywane w rejestrach 440 stanu wątków w pozycjach bitów 1:2. Stan 00 reprezentuje stan gotowości, tj. wątek jest przygotowany do przetwarzania, ponieważ wszystkie dane i wymagane rozkazy są dostępne. Stan 10 reprezentuje stan wątku, w którym wykonanie wątku w procesorze jest wstrzymane, ponieważ wątek oczekuje na powrót danych do pamięci podręcznej L1 D 120 lub na powrót rozkazu do pamięci podręcznej L1 I 150. Stan 11 wskazuje, że wątek oczekuje na powrót danych do pamięci L2 130. Stan 01 wskazuje, że występuje brak danych w buforze 250 translacji adresów tablic stron, tj. adres wirtualny był błędny lub nie był dostępny. Na fig. 5 pokazano również hierarchię stanów wątków, przy czym stan 00 wskazuje, że wątek gotowy do wykonania ma najwyższy priorytet. Zdarzeniom o krótkim opóźnieniu przyporządkowuje się na przykład wyższy priorytet.
Figura 5 przedstawia również zmianę stanów, gdy dane są wyszukiwane z różnych źródeł. Normalne, nieprzerwane wykonywanie wątku T0 jest przedstawione w bloku 510 jako stan 00. Jeżeli występują błędy pamięci podręcznych L1 D lub I, wątek przechodzi do stanu 10, jak pokazano w bloku 512, podążając za sygnałem przesyłanym linią 474 na fig. 4 z jednostki sterowania 200 pamięcią lub linią 470 na fig. 4 z jednostki rozkazowej 220. Jeżeli żądane dane lub rozkazy znajdują
PL 193 285 B1 się w pamięci L2 130 i zostały pozyskane, wtedy jest podejmowane na nowo normalne wykonywanie wątku T0w bloku 510. Podobnie blok 514 z fig. 5 przedstawia brak danych w pamięci podręcznej L2, co zmienia stan wątku T0lub T1 na stan 11, gdy jednostka sterowania 200 pamięcią sygnalizuje brak na liniach 476 lub 478 na fig. 4. Gdy rozkazy lub dane w pamięci podręcznej L2 zostają pozyskane z pamięci operacyjnej 140 oraz załadowane do rdzenia procesora 100, jak pokazano na liniach 480 i482 na fig. 4, stan ulega zmianie z powrotem do stanu 00 w bloku 510. Jednostka sterowania 200 pamięcią komunikuje rejestrom 440 stanu wątków na linii 484 na fig. 4, kiedy adres wirtualny żądanej informacji nie jest dostępny w buforze 250 translacji adresów tablic stron, co wskazano w bloku 516 jako brak TLB lub stan 01. Gdy adres ten staje się dostępny lub występuje rozkaz przerwania pamięci danych jako zasygnalizowany przez jednostkę sterowania 200 pamięcią na linii 486 na fig. 4, stan wątku powraca wtedy do stanu 00, oznaczając gotowość do wykonania.
Liczba stanów oraz to, co każdy stan reprezentuje, jest dowolnie obieralne, przez architekta komputera. Dla przykładu, jeżeli wątek ma liczne braki w pamięci L1, takie jak brak L1Ioraz brak L1D, każdemu z tych typów braków pamięci podręcznej jest przyporządkowywany oddzielny stan. Alternatywnie stan pojedynczego wątku może być przeznaczony do reprezentowania więcej niż jednego zdarzenia lub wystąpienia. Podany jest przykład algorytmu przełączania wątków dla dwóch wątków o równym priorytecie, który określa czy przełączać wątki. Algorytm może być rozszerzony i zmodyfikowany odpowiednio do większej ilości wątków i warunków przełączania wątków zgodnie ze wskazówkami wynalazku. Interakcje pomiędzy stanem każdego wątku, przechowywanym w rejestrach 440 stanu wątków na fig. 4 i priorytetem każdego wątku, określanym przez algorytm przełączania wątków, są badane dynamicznie w każdym cyklu. Jeżeli aktywny wątek T0ma brak L1, algorytm powoduje przełączenie wątku na nieaktywny wątek T1, chyba że nieaktywny wątek T1 oczekuje na rozwiązanie braku w L2. Jeżeli nie wystąpiło przełączenie i brak danych w pamięci L1 aktywnego wątku T0 przechodzi w brak pamięci L2, algorytm nakazuje procesorowi przełączenie na nieaktywny wątek T1, niezależnie od stanu tego wątku. Jeżeli obydwa wątki oczekują na rozwiązanie braku pamięci podręcznej L2, aktywnym zostaje ten wątek, którego brak w pamięci będzie rozwiązany jako pierwszy. W każdej chwili podejmowania decyzji przełączania, przeprowadzana akcja jest optymalizowana dla najbardziej prawdopodobnego przypadku, z czego wynika najbardziej skuteczne działanie. Przełączenia wątków, wynikające z braków pamięci L2, są uzależnione od stanu drugiego wątku, w przeciwnym razie wystąpiłyby dodatkowe przełączenia skutkujące zmniejszeniem wydajności działania.
W każdym procesorze wielowątkowym występują opóźnienia i zakłócenia działania związane z przełączanymi wątkami. Opóźnienia te obejmują na przykład czas niezbędny do wykonania bieżącego wątku do punktu, w którym może on zostać przerwany i poprawnie wyzerowany, gdy jest wywoływany następnym razem, czas niezbędny do przełączenia specyficznych dla wątków urządzeń ze stanu bieżącego wątku do nowego stanu wątku oraz czas niezbędny do ponownego uruchomienia nowego wątku i rozpoczęcia jego wykonywania. Urządzenia specyficzne dla wątków według wynalazku obejmują rejestry stanu wątków opisane powyżej oraz komórki pamięci. W celu uzyskania optymalnej wydajności w gruboziarnistym systemie przetwarzania danych wielowątkowych, zwłoka powodowana przez zdarzenie wywołujące przełączenie wątku musi być większe niż koszt związany z przełączaniem wątków w trybie wielowątkowym, w przeciwieństwie do zwykłego trybu jednowątkowego.
Zwłoka powodowana przez zdarzenie wykorzystywane do przełączenia wątku zależy zarówno od platformy sprzętowej, jak i programowej. Dla przykładu, specyficzne zagadnienia sprzętowe w procesorze wielowątkowym obejmują szybkość zewnętrznych układów SRAM użytych do realizacji pamięci podręcznej L2, zewnętrznej względem układu procesora. Szybsze pamięci SRAM w pamięci podręcznej L2 redukują średnie opóźnienie braku danych pamięci podręcznej L1, podczas gdy wolniejsze powodują jego wzrost. W ten sposób uzyskuje się zwiększenie wydajności, gdy jedno ze zdarzeń przełączenia wątku jest określone jako brak danych w pamięci L1w sprzęcie, którego opóźnienia związane z czasem dostępu do zewnętrznej pamięci podręcznej L2 są większe niż koszty czasowe przełączenia wątku. Jako przykład tego, jak specyficzne cechy kodu programu oddziałują na opóźnienia zdarzeń przełączenia wątku, uwzględnia się związany z pamięcią podręczną L2 współczynnik trafień w stosunku do braków kodu, tj. liczbę razy, gdy dane są rzeczywiście dostępne w pamięci L2 w porównaniu do liczby razy, gdy dane muszą być przywołane z pamięci operacyjnej, ponieważ brakuje ich w pamięci podręcznej L2. Duży współczynnik trafień redukuje średnie opóźnienie pamięci L1 braku danych, ponieważ brak danych pamięci L1 rzadko powoduje większą zwłokę braku danych pamięci L2. Mały współczynnik trafień pamięci L2 zwiększa średnie opóźnienie pamięci L1, ponieważ
PL 193 285 B1 więcej braków pamięci L1 powoduje dłużej trwające opóźnienia braków pamięci L2. Wten sposób brak w pamięci podręcznej L1 jest wykreślany jako zdarzenie przełączenia wątku, jeżeli działający kod ma duży współczynnik trafień pamięci L2, ponieważ opóźnienie dostępu do danych w pamięci podręcznej L2 jest mniejsze niż koszt przełączenia wątku. Brak danych w pamięci podręcznej L1 zostałby określony jako zdarzenie przełączenia wątku w przypadku działającego kodu programu o małym współczynniku trafień pamięci L2, ponieważ brakw pamięci L1 prawdopodobnie spowoduje dłuższe opóźnienie braku w pamięci podręcznej L2.
Pewne rodzaje zdarzeń opóźnienia nie są łatwo wykrywalne. Dla przykładu, w pewnych systemach, gdy pojawia się brak danych w pamięci podręcznej L2, pamięć podręczna wysyła sygnał do jednostki rozkazowej. Inne pamięci podręczne L2 nie wysyłają jednak takiego sygnału, jeżeli na przykład sterownik pamięci L2 jest na innym chipie niż procesor i wtedy zgodnie z tym procesor nie może łatwo wykryć zmiany stanu. Wtych architekturach procesor zawiera licznik cykli dla każdego nierozwiązanego braku w pamięci podręcznej. Jeżeli brakujące dane nie zostały zwrócone z pamięci L2 po upływie określonej wcześniej liczby cykli, procesor działa, jak gdyby wystąpił brak danych w pamięci L2 i zgodnie z tym zmienia stan wątku. Algorytm może być stosowany również do innych przypadków, w których występuje więcej niż jeden rodzaj różnych opóźnień. Na przykład przy braku w pamięci podręcznej L2, w multiprocesorze opóźnienie danych z pamięci operacyjnej może różnić się znacznie od opóźnienia danych z innego procesora. Tym dwóm zdarzeniom są przyporządkowywane różne stany w rejestrze stanu wątku. Jeżeli nie istnieje żaden sygnał służący do rozróżnienia tych stanów, to wtedy do oceny, w którym stanie powinien znajdować się wątek, może zostać użyty licznik, po tym, jak odliczy on brak danych w pamięci L2.
Rejestr 410 sterowania przełączaniem wątków jest programowalnym rejestrem, który wybiera zdarzenia do przełączenia wątku oraz ma oddzielny bit aktywności dla każdego określonego zdarzenia sterującego przełączaniem wątku. Chociaż opisany przykład nie realizuje oddzielnego dla każdego wątku rejestru 410 sterowania przełączaniem wątku, to jednak można zrealizować oddzielne rejestry 410 sterowania przełączaniem wątku dla każdego wątku w celu zwiększenia elastyczności i wydajności systemu kosztem większej ilości sprzętu i jego złożoności. Ponadto, zdarzenia sterujące przełączaniem wątków w pojedynczym rejestrze sterującym przełączaniem wątku nie muszą być identyczne ze zdarzeniami sterującymi przełączaniem wątku w innym rejestrze sterującym przełączaniem wątku.
Rejestr 410 sterowania przełączaniem wątków jest zapisywany na przykład przez procesor obsługujący z oprogramowaniem takim, jak interfejs komunikacyjny z dynamicznym skanowaniem lub sam procesor z kodem oprogramowania systemowego. Zawartość rejestru 410 sterowania przełączaniem wątków jest wykorzystywana przez sterownik 450 przełączania wątków do uaktywnienia lub wyłączenia operacji przełączenia wątku. Wartość jeden w rejestrze 410 uaktywnia zdarzenie sterujące przełączaniem wątku, związane z bitem w celu spowodowania przełączenia wątku. Wartość zero w rejestrze 410 sterowania przełączaniem wątków uniemożliwia zdarzeniu sterującemu przełączaniem wątków, związanemu z bitem, spowodowanie przełączenia wątku. Rozkaz w wykonywanym wątku mógłby wyłączyć dowolny lub wszystkie warunki przełączania wątków dla tego szczególnego lub innych wątków. Dalej są pokazane powiązania pomiędzy zdarzeniami przełączania wątku i ich bitami uaktywniającymi w rejestrze 410.
Przyporządkowanie bitów rejestru sterowania przełączaniem wątków (0) Przełącz przy braku pobrania z pamięci podr. danych L1 (1) Przełącz przy braku przechowania pamięci podr. danych L1 (2) Przełącz przy braku w pamięci podręcznej rozkazów L1 (3) Przełącz przy braku rozkazu bufora TLB (4) Przełącz przy braku pobrania z pamięci podr. danych L2 (5) Przełącz przy braku przechowania pamięci podr. danych L2 (6) Przełącz przy braku w pamięci podręcznej rozkazów L2 (7) Przełącz przy braku danych bufora TLB/segmentowego tablic stron (8) Przełącz przy braku w pamięci L2 i nie braku w pamięci L2 wątku nieaktywnego (9) Przełącz, gdy jest osiągnięta wartość czasu zwłoki przełączania wątku (10) Przełącz, gdy są zwrócone dane pamięci podręcznej L2 (11) Przełącz przy zewnętrznych zgłoszeniach wejścia-wyjścia (12) Przełącz przy przechowywaniu podwójnego-X: braku pierwszego z dwóch* (13) Przełącz przy przechowywaniu podwójnego-X: braku drugiego z dwóch*
PL 193 285 B1 (14) Przełącz przy przechowywaniu krotności/łańcucha: braku przy jakimkolwiek dostępie (15) Przełącz przy ładowaniu krotności/łańcucha: braku przy jakimkolwiek dostępie (16) Zarezerwowane (17) Przełącz przy ładowaniu podwójnego-X: braku pierwszego z dwóch* (18) Przełącz przy ładowaniu podwójnego-X: braku drugiego z dwóch* (19) Przełącz, gdy rozkaz albo 1,1,1, jeżeli bit (stan problemu) rejestru stanu maszyny msr(pr)=1. Zezwala na zmianę priorytetu programowego niezależnie od msr(pr). Jeżeli bit 19 wynosi jeden rozkaz lub 1,1,1 ustawia niski priorytet. Jeżeli bit 19 wynosi zero, priorytet ustawiony jest na niski, tylko jeżeli msr(pr)=0, gdy rozkaz lub 1,1,1 jest wykonywany. Patrz: zmiana priorytetu przy użyciu oprogramowania, co będzie omawiane później.
(20) Zarezerwowane (21) Włącz priorytet przełączania wątku (22:29) Zarezerwowane (30:31) Naliczanie postępu (32:63) Zarezerwowane w 64 bitowej realizacji rejestru
Ładowanie/przechowywanie podwójnego-X odnosi się do ładowania lub przechowywania elementarnej połowy słowa, słowa lub podwójnego słowa, które przekracza granice dwóch słów. Ładowanie/przechowywanie podwójnego-X w tym kontekście nie jest ładowaniem lub przechowywaniem wielu słów lub łańcucha słów.
Gruboziarniste procesory wielowątkowe są oparte na przełączaniu wątków wyzwalanym przez zdarzenia o długich opóźnieniach. Czasami podczas wykonywania procesor w środowisku wieloprocesorowym lub będący w tle wątek w architekturze wielowątkowej posiada wyłączność do zasobu, który może mieć tylko jednego właściciela, a inny procesor lub aktywny wątek żąda dostępu do tego zasobu przed dalszym rozwojem. Przykłady zawierają uaktualnianie tablicy stron pamięci lub odbieranie zadania od dyspozytora zadania. Niemożliwość uzyskania własności danego zasobu przez aktywny wątek nie stanowi zdarzenia przełączenia wątku, niemniej jednak wątek kręci się w pętli bez możliwości wykonania użytecznej pracy. W tym przypadku ów wątek będący w tle, który ma dany zasób, nie otrzymuje dostępu do procesora, tak że może zwolnić ten zasób, ponieważ nigdy nie napotka na zdarzenie przełączania wątku i nie stanie się aktywnym wątkiem.
Alokacja cykli przetwarzania pomiędzy wątkami stanowi odrębne zagadnienie. Jeżeli kod programu działającego w danym wątku rzadko napotyka na zdarzenia przełączenia o długich opóźnieniach w porównaniu z kodem programu działającego na innych wątkach w tym samym procesorze, wątek ten otrzyma więcej cykli przetwarzania niż jest to jego typowym udziałem. Jeszcze innym nadmiernym opóźnieniem, które może przekraczać maksymalny dopuszczalny czas, jest czas zwłoki nieaktywnego wątku czekającego, aby obsłużyć zewnętrzne przerwanie w ograniczonym odcinku czasu lub inne zdarzenie poza procesorem. W ten sposób staje się korzystne wymuszenie przełączenia wątku na wątek nieaktywny po pewnym czasie, jeżeli nie został zastosowany żaden użyteczny proces do zabezpieczenia systemu przed zawieszeniem się.
Układem logicznym, służącym do wymuszenia przełączenia wątku po upływie pewnego czasu, jest rejestr 430 czasu zwłoki przełączenia wątku z fig. 4, który jest układem dekrementacji, oraz rejestr dekrementacji do przechowywania zmniejszonej wartości. Rejestr 430 czasu zwłoki przełączenia wątku przechowuje wartość czasu zwłoki przełączenia wątku, a realizacja rejestru 430 czasu zwłoki przełączenia wątku, użyta w tym wykonaniu, jest przedstawiona poniżej:
Bity rejestru czasu zwłoki przełączenia wątku (0:21) Zarezerwowane (22:31) Wartość czasu zwłoki przełączenia wątku
Przykład wykonania wynalazku opisany tutaj nie realizuje oddzielnego rejestru 430 czasu zwłoki przełączenia wątku dla każdego wątku, chociaż może to być zrealizowane w celu uzyskania większej elastyczności. Podobnie, jeżeli istnieje wiele wątków, żaden wątek nie musi mieć tej samej wartości czasu zwłoki przełączenia wątku. Za każdym razem, gdy następuje przełączenie wątku, wartość czasu zwłoki przełączenia wątku jest ładowana przez sprzęt z rejestru czasu zwłoki do rejestru dekrementacji. Wartość rejestru dekrementacji jest zmniejszana jeden raz w każdym cyklu, aż do osiągnięcia przez rejestr dekrementacji wartości zero, a wtedy do sterownika 450 przełączania wątków jest wysyłany sygnał, który wymusza przełączenie wątku, chyba że żaden inny wątek nie jest gotowy do przetwarzania rozkazu. Dla przykładu, jeżeli wszystkie inne wątki w systemie oczekują na brak w pamięci podręcznej i nie są gotowe do wykonywania rozkazu, sterownik 450 przełączania wątków nie wymuPL 193 285 B1 sza przełączenia wątku. Jeżeli żaden inny wątek nie jest przygotowany do przetwarzania rozkazu, gdy wartość w rejestrze dekrementacji osiąga zero, to wtedy zmniejszana wartość jest zamrażana w punkcie zero, aż do momentu, gdy inny wątek jest gotowy do przetwarzania rozkazu, w którym to punkcie następuje przełączenie wątku, a do rejestru dekrementacji jest ładowana ponownie wartość czasu zwłoki przełączenia wątku dla tego wątku. Podobnie rejestr dekrementacji może być rejestrem inkrementacji, który podczas wykonywania wątku zwiększa swą wartość do określonego wstępnie poziomu, gdy jest wymuszane przełączenie wątku.
Rejestr 430 czasu zwłoki przełączania wątku jest zapisywany na przykład przez procesor obsługujący, jak opisano to powyżej, lub samodzielnie przez procesor z wykorzystaniem kodu programu. Wartość czasu zwłoki przełączania wątku, ładowana do rejestru 430 czasu zwłoki przełączania wątku, jest dostosowywana do określonej konfiguracji sprzętowej i/lub określonego kodu programu tak, aby minimalizować liczbę straconych cykli, wynikającą z niezbędnego przełączania wątków. Zbyt duża wartość w rejestrze 430 czasu zwłoki przełączania wątku może powodować zmniejszenie wydajności, gdy aktywny wątek oczekuje na dostęp do jakiegoś zasobu posiadanego przez inny wątek lub jeżeli opóźnienie odpowiedzi na przerwanie zewnętrzne lub inne zdarzenie poza procesorem jest zbyt długie. Zbyt duża wartość może również zaburzyć równowagę, jeżeli jeden wątek napotyka na dużą liczbę zdarzeń przełączenia wątku, a inny nie. Zaleca się taką wartość czasu zwłoki przełączenia wątku, która jest dwa do kilku razy większa niż najczęściej występujące zdarzenie o najdłuższym opóźnieniu, które powoduje przełączenie wątku, to jest dostęp do pamięci operacyjnej. Wymuszenie przełączenia wątku po odczekaniu danej liczby cykli, określonej w rejestrze 430 czasu zwłoki przełączenia wątku, zapobiega zawieszeniom systemu wynikającym ze spornego podziału zasobów, wymusza równouprawnienie alokacji cykli procesora pomiędzy wątkami i ogranicza maksymalne opóźnienie odpowiedzi na przerwania zewnętrzne i inne zdarzenia zewnętrzne wobec procesora.
Nakaz, aby przynajmniej jeden rozkaz musiał być wykonany za każdym razem, gdy następuje przełączenie wątku i uaktywnia się nowy wątek, jest w pewnych okolicznościach zbyt rygorystyczny, tak jak wtedy, gdy pojedynczy rozkaz generuje wiele żądań dostępu do pamięci podręcznej i/lub wiele braków w tej pamięci. Dla przykładu, rozkaz pobrania może spowodować brak w pamięci podręcznej L1 I 150, jeżeli brak jest w niej żądanego rozkazu, ale przy powrocie tego rozkazu w pamięci L1 D 120 może brakować wymaganych danych. Analogicznie, brak danych w buforze 250 translacji adresów tablic stron również może powodować brak danych w pamięci podręcznej. W ten sposób, jeżeli postęp jest wymuszany rygorystycznie, braki danych w wynikających kolejno dostępach nie powodują przełączeń wątku. Innym problemem jest to, że pewne braki danych w pamięci podręcznej mogą wymagać do uzupełnienia dużej liczby cykli, w którym to czasie inny wątek może napotkać na brak danych na tym samym poziomie pamięci podręcznej, który może zostać uzupełniony w dużo krótszym czasie. Wracając do pierwszego wątku, jeżeli postęp wymuszany jest rygorystycznie, procesor jest niezdolny do przełączenia się na wątek z brakiem danych o krótszym czasie uzupełnienia. W celu rozwiązania problemu przepełnienia, w którym każdy wątek jest zablokowany w powtarzającym się cyklu przełączania wątków bez wykonania żadnego rozkazu, stosuje się rejestr 420 naliczania postępu z fig. 4, który zezwala na wystąpienie przełączeń wątków w pewnej maksymalnej programowalnej liczbie, zwanej wartością progową postępu. Po tej maksymalnej liczbie przełączeń wątków, rozkaz musi zostać wykonany, zanim ponownie nastąpi przełączenie. W ten sposób zapobiega się przepełnieniu. Rejestr 420 naliczania postępu może być utworzony przez bity 30:31 w rejestrze 410 sterowania przełączaniem wątków lub programowany rejestr progowy postępu dla procesora. Układ logiczny licznika postępu wykorzystuje bity 15:17 rejestrów 442, 444 stanu wątków, które wskazują na stan wątków i są przyporządkowane liczbie przełączeń wątku, których doznał wątek bez wykonania rozkazu. Korzystnie jest zatem, aby bity te obejmowały licznik postępu.
Gdy wątek zmienia stan, przywołując algorytm przełączania wątków, jeżeli przynajmniej jeden rozkaz został zakończony w aktywnym wątku, licznik postępu dla aktywnego wątku zostaje wyzerowany, a algorytm przełączania wątków kontynuuje porównywanie stanów wątków pomiędzy wątkami w procesorze. Jeżeli nie zakończył się żądany rozkaz, wartość aktywnego wątku licznika postępu w rejestrze stanu wątku jest porównywana z wartością progową postępu. Jeżeli wartość licznika różni się od wartości progowej, algorytm przełączania wątków kontynuuje wyznaczanie stanów wątków w procesorze. Wtedy, jeśli następuje przełączenie wątku, licznik postępu ma zmniejszaną wartość. Jeżeli jednak wartość licznika równa jest wartości progowej, wtedy nie nastąpi przełączenie wątku dopóki nie będzie mógł zostać wykonany rozkaz, tj. dopóki nie dokona się postęp. Należy zauważyć, że jeśli rejestr progowy ma wartość równą zero, przed przełączeniem do innego wątku musi zostać
PL 193 285 B1 wykonany przynajmniej jeden rozkaz w aktywnym wątku. Jeżeli każde przełączenie wątku wymaga trzech cykli procesora i jeżeli istnieją dwa wątki oraz jeżeli układ logiczny przełączania wątków zaprogramowany jest tak, aby zaprzestał usiłowań przełączenia wątków po pięciu próbach, wtedy maksymalna liczba cykli, które zmarnuje procesor, wynosi trzydzieści cykli. Istnieje więc potencjalny konflikt pomiędzy zakazem przełączenia wątku z powodu braku dokonanego postępu z jednej strony i wymuszeniem przełączenia wątku z powodu przekroczenia rachunku czasu zwłoki z drugiej strony. Konflikt taki można łatwo rozwiązać na platformie architektury i oprogramowania.
Figura 6 przedstawia wykres przepływu właściwości naliczania postępu układu logicznego 400 przełączania wątków, która zapobiega przepełnieniu. W bloku 610 bity 15:17 w rejestrze 442 stanu wątku należącego do wątku T0 są zerowane do stanu 111. Wykonanie tego wątku jest realizowane w bloku 620 i jego stan przyjmuje wartość 000. Jeżeli w wątku T0 zostaje wykonany pomyślnie rozkaz, to wątek T0 powraca do stanu 111 i pozostaje w nim. Jeżeli jednak wątek T0 nie może wykonać rozkazu, następuje przełączenie do wątku T1 lub innego wątku będącego wtle, jeżeli architektura procesora zezwala na więcej niż dwa wątki. Gdy następuje wyłączenie wątku T1 lub innego wątku drugoplanowego, procedura powraca do wątku T0, następuje druga próba wykonania wątku T0 i wątek T0 przechodzi do stanu 001, tak jak w bloku 630. Ponownie, jeżeli wątek T0 napotyka zdarzenie przełączenia wątku, kontrola procesora jest przełączana z wątku T0 na inny wątek. Podobnie, gdy wystąpi zdarzenie przełączenia wątku z drugiego wątku, na przykład wątku T1, z powrotem do wątku T0, wątek T0 przechodzi do stanu 010 przy tej trzeciej próbie wykonania wątku T0 w bloku 640, do stanu 011 przy czwartej próbie wykonania wątku T0 w bloku 650 i do stanu 100 przy piątej próbie w bloku 660.
W tej realizacji następuje pięć prób przełączenia na wątek T0. Po piątej próbie lub jeśli wartość bitów 15:17 w rejestrze 442 stanu wątku TSR jest równa wartości bitów 30:31 plus jeden w rejestrze 410 sterowania przełączaniem wątków TSC, tj. gdy TSC(30:31)+1=TSR(15:17), nie nastąpi przełączenie z wątku T0. Ważne jest, że pięć prób jest dowolnie wybraną liczbą. Maksymalna liczba dopuszczalnych przełączeń przy nieskutecznym wykonaniu, tj. wartość progowa postępu jest programowalna i może okazać się, że w pewnych architekturach pięć prób jest to zbyt dużo, a w innych architekturach zbyt mało. Przy okazji każdego zdarzenia ilość prób przełączenia na dany wątek bez wykonania żadnego rozkazu musi zostać porównana z wartością progową i gdy ta wartość zostanie osiągnięta, nie nastąpi już żadne przełączenie z tego wątku, a procesor będzie czekał, aż opóźnienie związane z wątkiem zostanie rozwiązane. W tym przykładzie stan wątku opisany przez bity 15:17 rejestru 442 stanu wątku jest porównywany jest z bitami 30:31 w rejestrze 410 sterowania przełączaniem wątków. Specjalne potraktowanie szczególnych zdarzeń o wyjątkowo długim czasie opóźnienia, takich jak interakcje z urządzeniami wejścia-wyjścia, w celu zapobiegania przedwczesnemu zablokowaniu przełączania wątków przez układ logiczny postępu, zwiększa wydajność procesora. Jednym ze sposobów potraktowania tych wyjątkowo opóźniających zdarzeń jest zablokowanie zwiększania wartości licznika postępu lub ignorowanie sygnału wyjściowego porównania pomiędzy licznikiem postępu, a wartością progową, jeżeli nie nastąpił powrót danych albo też użycie odrębnego większego licznika postępu dla zdarzeń.
Korzystne jest, aby stan wątku dla wszystkich wątków programowych, rozdysponowanych dla procesora, był zachowywany w rejestrach 442 i 444 stanu wątków z fig. 4, jak to zostało opisane. W pojedynczym procesorze w danym czasie jeden wątek wykonuje swoje rozkazy, a inne wątki pozostają nieaktywne. Procedura jest przełączana z aktywnego wątku na wątek nieaktywny, gdy aktywny wątek napotyka zdarzenie o długim opóźnieniu, jak omówiono to powyżej w odniesieniu do rejestru 420 naliczania postępu, rejestru 410 sterowania przełączaniem wątków lub rejestru 430 czasu zwłoki przełączenia wątku. Niezależnie od tego, który wątek jest aktywny, rejestry sprzętowe korzystają z warunków, które nie są zmieniane w trakcie działania.
Elastyczność w zmianie warunków przełączania wątków przez program zarządzający zwiększa całkowitą wydajność systemu. Program zarządzający przełączaniem wątków może zmienić częstotliwość przełączania wątków, zwiększyć liczbę cykli wykonania, dostępnych dla krytycznego zadania i zmniejszyć całkowite straty cykli, spowodowane opóźnieniami przełączania. Program zarządzający przełączaniem wątków może zostać zaprogramowany albo w czasie kompilacji albo podczas działania systemu operacyjnego, na przykład pętla blokująca może zmienić częstotliwość przełączeń lub zadanie systemu operacyjnego może zostać rozdysponowane, ponieważ jakiś wątek nieaktywny oczekuje na przerwanie zewnętrzne lub znajduje się w stanie gotowości. Może być korzystne zabronienie lub zmniejszenie częstotliwości przełączania wątku z wątku aktywnego, tak że wykonywanie bieżącego strumienia rozkazów nie ucierpi z powodu opóźnień wynikających z przełączania. Alternatywnie, wąPL 193 285 B1 tek może zrzec się pewnych lub wszystkich cykli przez istotne obniżenie jego priorytetu i w rezultacie obniżenie częstotliwości przełączeń dokonywanych na niego lub zwiększenie częstotliwości jego wyłączeń, aby zwiększyć całkowitą wydajność systemu. Program zarządzający przełączaniem wątków może także bezwarunkowo wymusić lub wstrzymać przełączenie wątku lub wpłynąć na to, który wątek zostanie wybrany jako następny do wykonywania.
Wielowątkowy schemat przełączania wątków przyporządkowuje każdemu wątkowi pewna wartość priorytetu w celu określenia warunków, które spowodują przełączenie. W pewnych przypadkach może być również pożądane, aby to sprzęt zmienił priorytet wątku. Dla przykładu, wątek o niskim priorytecie może oczekiwać na pewne zdarzenie, którego wystąpienie spowoduje, że sprzęt podniesie priorytet wątku w celu wpłynięcia na czas odpowiedzi wątku na zdarzenie. Względne priorytety pomiędzy wątkami lub priorytet wątku będzie wpływał na sposób potraktowania zdarzenia. Priorytety wątków są dostosowywane przez program zarządzający przełączaniem wątków poprzez wykorzystanie jednego lub więcej rozkazów lub przez sprzęt w odpowiedzi na zdarzenie. Program zarządzający przełączaniem wątków zmienia działania podejmowane przez sprzętowy układ logiczny przełączania wątków w celu dokonania skutecznej zmiany względnych priorytetów wątków.
W tym przykładzie wykorzystuje się trzy priorytety dwóch wątków i wprowadza się wystarczające rozróżnienie pomiędzy wątkami w celu umożliwienia dostosowywania działania bez niekorzystnego wpływu na wydajność systemu. Przy wykorzystaniu trzech priorytetów, dwa wątki mogą posiadać równy status średniego priorytetu. Wybór trzech priorytetów dla dwóch wątków nie ma na celu stanowić ograniczenia. W pewnych architekturach stan normalny może oznaczać, że jeden wątek ma zawsze wyższy priorytet niż inne wątki. Wynalazek ma na celu objęcie więcej niż dwóch wątków posiadających jeden lub kilka priorytetów, które są ustawiane sprzętowo lub programowane.
Trzy priorytety każdego wątku są to wysoki, średni i niski. Gdy priorytet wątku T0 jest taki sam, jak wątku T1, nie ma to wpływu na układ logiczny przełączania wątków. Obydwa wątki mają równy priorytet, toteż żaden nie ma przewagi pod względem czasu wykonywania. Gdy priorytet wątku T0 jest większy niż priorytet wątku T1, przełączenie z wątku T0 na wątek T1 jest uniemożliwione dla wszystkich braków w pamięci podręcznej L1, to jest ładowania danych, przechowywania danych i pobierania rozkazu, ponieważ braki w pamięci L1 są rozwiązywane dużo szybciej niż inne warunki, takie jak braki L2 i translacje. Wątkowi T0 jest dana większa szansa otrzymania większej liczby cykli niż wątkowi T1, co pozwala wątkowi T0 na kontynuację wykonywania tak długo, aż nie zmarnuje on nadmiarowej liczby cykli. Proces jednak w dalszym ciągu będzie przekazywał sterowanie wątkowi T1, jeżeli wątek T0 napotka na względnie długie opóźnienie. Przełączenie z wątku T1 na wątek T0 pozostanie niezaburzone, z wyjątkiem przełączenia, gdy nieaktywny wątek T0 jest w stanie gotowości, w którym to przypadku wątek T0 dominuje nad wątkiem T1. Wystąpienie tego przypadku jest oczekiwane, gdy wątek T0 zostaje wyłączony z powodu braku w pamięci podręcznej L2 lub żądania translacji, a warunek ten jest rozwiązywany w tle, podczas gdy jest wykonywany wątek T0. Przypadek wątku T0 mającego mniejszy priorytet niż wątek T1 jest analogiczny do przykładu powyższego z przeciwnym oznaczeniem wątków.
Istnieją różne możliwe rozwiązania zarządzania przełączaniem wątków poprzez zmianę priorytetu wątku. Do architektury procesora są dodawane nowe rozkazy. Można również wykorzystać istniejące rozkazy procesora, których skutki uboczne mają pożądane działanie. Na wybór metod sterowania programowego ma wpływ kilka czynników, a mianowicie łatwość ponownego określania architektury wcelu włączenia nowych rozkazów i wpływ zmian architektury na istniejące procesory, wymaganie wykonywalności identycznego oprogramowania w różnych wersjach procesorów, bilans wydajności pomiędzy użyciem nowych rozkazów specjalnego przeznaczenia wobec ponownego użycia istniejących rozkazów i wynikających z tego skutków ubocznych, wymagany poziom kontroli programowej, na przykład, czy skutek może być spowodowany przez każde wykonanie istniejącego rozkazu, takiego jak specyficzny rodzaj ładowania lub przechowywania, lub czy wymaga się więcej kontroli poprzez dodanie rozkazu do strumienia, żeby skutek był spowodowany ze specjalnym zamiarem.
Architektura wykorzystuje zalety nieużywanego rozkazu, którego wartości nie zmieniają rejestrów ogólnego przeznaczenia procesora. Cecha ta jest krytyczna dla modernizacji zdolności wielowątkowych w architekturze procesora. W przeciwnym przypadku można zakodować specjalne rozkazy, na przykład rozkaz „korzystny nop albo 0,0,0. Inne rozkazy mogą jednak skutecznie pełnić rolę rozkazu nop. Używając różnych wersji rozkazu albo 0,0,0 lub 1,1,1 itd. W celu zmiany priorytetu wątku, ten sam strumień rozkazów może działać w procesorze bez niekorzystnych skutków, takich jak przerwania niedozwolonych rozkazów. Rozszerzenie wykorzystuje stan rejestru stanu maszyny wcelu
PL 193 285 B1 zmiany znaczenia tych rozkazów. Dla przykładu, może być niewskazane, aby zezwolić użytkownikowi na kodowanie pewnych lub wszystkich rozkazów priorytetu wątków i dostęp do funkcji, które one dostarczają. Specjalne dostarczane funkcje są określane w taki sposób, aby występowały tylko w specjalnych trybach działania, przy czym nie będą one miały wpływu w innych trybach i będą wykonywane normalnie jako nop.
Jedna możliwa realizacja, przy użyciu dwuwątkowego procesora wielowątkowego, wykorzystuje trzy rozkazy, które same stają się częścią wykonywanego programu w celu zmiany jego własnego priorytetu:
tsop 1albo 1,1,1 - Przełącz na wątek nieaktywny tsop 2 albo 1,1,1 - Ustaw priorytet aktywnego wątku na niski
- Przełącz na wątek nieaktywny - Uwaga: Ważne tylko w trybie uprzywilejowanym, chyba, że TSC[19]=1 tsop 3 albo 2,2,2 - Ustaw priorytet aktywnego wątku na średni tsop 4 albo 3,3,3 - Ustaw priorytet aktywnego wątku na wysoki
- Uwaga: Ważne tylko w trybie uprzywilejowanym
Rozkazy tsop 1 i tsop 2 mogą być tym samym rozkazem, jak zostało to zrealizowane jako albo 1,1,1, lecz mogą one również być odrębnymi rozkazami. Rozkazy te współdziałają z bitami 19 i 21 rejestru 410 sterowania przełączaniem wątków oraz bitem problemu/przywileju rejestru stanu maszyny, jak omówiono to tutaj. Jeżeli bit 21 rejestru 410 sterowania przełączaniem wątków ma wartość 1, układ zarządzania przełączaniem wątków może ustawić priorytet wątku na jedną z trzech wartości reprezentowanych w rejestrze stanu wątku przez bity 18:19. Jeżeli bit 19 rejestru 410 sterowania przełączaniem wątków ma wartość zero, wtedy rozkaz tsop 2 przełączenia wątku i ustawienie priorytetu wątku są kontrolowane przez bit problemu/przywileju rejestru stanu maszyny. Z drugiej strony, jeżeli bit 19 rejestru 410 sterowania przełączaniem wątków ma wartość jeden lub jeżeli bit problemu/przywileju rejestru stanu maszyny ma wartość zero, a rozkaz albo 1,1,1 jest obecny w kodzie, aktywnemu wątkowi jest nadawany niski priorytet, a wykonywanie jest natychmiast przełączane na nieaktywny lub drugoplanowy wątek, jeżeli nieaktywny wątek jest uaktywniony. Rozkaz albo 2,2,2 nadaje aktywnemu wątkowi średni priorytet, nie zważając na wartość bitu problemu/przywileju rejestru stanu maszyny. Rozkaz albo 3,3,3, gdy bit problemu/przywileju rejestru stanu maszyny ma wartość zero, ustawia wysoki priorytet aktywnego wątku. Jeżeli bit 21 rejestru 410 sterowania przełączaniem wątków ma wartość zero, obydwu wątkom jest nadawany priorytet średni i skutek rozkazów priorytetu albo x, x, x jest blokowany. Jeżeli zgłoszenie przerwania zewnętrznego jest aktywne i jeżeli odpowiedni wątek ma niski priorytet, wtedy temu wątkowi nadaje się priorytet średni.
Zdarzeniami zmienianymi przez priorytety wątków są przełączenie w przypadku braku w pamięci podręcznej L1 D w celu załadowania danych, przełączenie w przypadku braku w pamięci podręcznej L1 D w celu przechowania danych, przełączenie w przypadku braku w pamięci podręcznej L1 I wcelu pobrania rozkazu oraz przełączenie, jeżeli wątek nieaktywny jest w stanie gotowości. W dodatku, priorytet wątku może zmienić aktywacja zewnętrznego przerwania. Następująca tabela pokazuje zależność priorytetu od warunków, które powodują przełączenie wątku. Prosty wpis TSC w kolumnach trzeciej i czwartej oznacza użycie warunków ustanowionych w rejestrze 410 sterowania przełączaniem wątków TSC w celu inicjacji przełączenia wątku. Wpis TSC[0:2] traktowany jako 0 oznacza, że bity rejestru 410 sterowania przełączaniem wątków są traktowane tak, jak gdyby wartość tych bitów wynosiła zero dla wątku, a inne bity w rejestrze 410 sterowania przełączaniem wątków są użyte, tak jak przy określaniu warunków, które powodują przełączenie wątku. Wyrażenie, „gdy gotowy wątek T0 w kolumnie czwartej oznacza, że przełączenie na wątek T0 nastąpi tak szybko, jak tylko wątek T0 nie będzie dłużej oczekiwał na zdarzenie braku, które spowodowało jego wyłączenie. Wyrażenie, „gdy gotowy wątek T1” w kolumnie trzeciej oznacza, że przełączenie na wątek T1 wystąpi tak szybko, jak tylko wątek T1 nie będzie dłużej oczekiwał na zdarzenie braku, który spowodował jego wyłączenie. Jeżeli zdarzenie braku jest czasem zwłoki przełączenia wątku, nie ma gwarancji, że wątek o niższym priorytecie wypełni rozkaz, zanim zostanie włączony z powrotem wątek o wyższym priorytecie.
PL 193 285 B1
Priorytet T0 Priorytet T1 Warunki przełączenia wątku T0 Warunki przełączenia wątku T1
Wysoki Wysoki TSC TSC
Wysoki Średni TSC [0:2] traktowany jako 0 TSC lub jeśli T0 gotowy
Wysoki Niski TSC [0:2] traktowany jako 0 TSC lub jeśli T0 gotowy
Średni Wysoki TSC lub jeśli T1 gotowy TSC [0:2] traktowany jako 0
Średni Średni TSC TSC
Średni Niski TSC [0:2] TSC lub jeśli T0
traktowany jako 0 gotowy
Niski Wysoki TSC lub jeśli T1 gotowy TSC [0:2] traktowany jako 0
Niski Średni TSC lub jeśli T1 TSC [0:2]
gotowy traktowany jako 0
Niski Niski TSC TSC
Zaleca się, aby wątkowi niewykonującemu użytecznej pracy nadać niski priorytet w celu uniknięcia strat wydajności, nawet jeżeli każdy rozkaz w jałowej pętli powoduje przełączenie wątku. Jest ponadto w dalszym ciągu istotne, aby zezwolić sprzętowi na zmianę priorytetu wątku, jeżeli do wątku o niższym priorytecie zgłasza się zewnętrzne przerwanie. W tym przypadku nadaje się temu wątkowi priorytet średni, aby umożliwić mu szybszą odpowiedź na to przerwanie. Umożliwia to wątkowi oczekującemu na zewnętrzne zdarzenie samodzielne ustawienie dla siebie niskiego priorytetu, w którym będzie on trwał, aż do zasygnalizowania zdarzenia.

Claims (14)

  1. Zastrzeżenia patentowe
    1. Sposób sterowania przełączaniem wątku w procesie wielowątkowym, znamienny tym, że zlicza się pierwszą liczbę cykli procesora, w których procesor wielowątkowy wstrzymuje się przez zdarzenie powodujące opóźnienie procesora, zlicza się drugą liczbę cykli procesora, wymaganych do przełączenia przetwarzania przez procesor wielowątkowy z pierwszego wątku rozkazów na inny wątek rozkazów i oznacza się to zdarzenie powodujące opóźnienie procesora jako zdarzenie sterowania przełączaniem wątku poprzez ustawienie bitu włączenia w programowalnym rejestrze sterowania przełączaniem wątków, jeżeli pierwsza liczba jest większa od drugiej liczby.
  2. 2. Sposób według zastrz. 1, znamienny tym, że wysyła się sygnał do przełączenia wątków, gdy przez procesor wielowątkowy wykrywa się zdarzenie sterowania przełączaniem wątków, jeżeli bit włączenia jest włączony.
  3. 3. Urządzenie do sterowania przełączaniem wątku, znamienne tym, że zawiera co najmniej jeden procesor wielowątkowy (100) do przełączania pomiędzy wieloma wątkami rozkazów, dołączony do co najmniej jednego programowalnego rejestru (410) sterowania przełączaniem wątków, posiadającego wiele bitów, z których każdy bit jest związany unikalnie z jednym z wielu zdarzeń sterowania przełączaniem wątków.
  4. 4. Urządzenie według zastrz. 3, znamienne tym, że przy uaktywnieniu jednego z bitów, co najmniej jeden procesor wielowątkowy (100) przełącza się z jednego z wielu wątków na inny z wielu wątków.
  5. 5. Urządzenie według zastrz. 3 albo 4, znamienne tym, że w programowalnym rejestrze (410) sterowania przełączaniem wątków co najmniej jeden z bitów jest wyłączalny przez co najmniej jeden rozkaz.
    PL 193 285 B1
  6. 6. Urządzenie według zastrz. 5, znamienne tym, że zawiera więcej niż jeden programowalny rejestr (410) sterowania przełączaniem wątków.
  7. 7. Urządzenie według zastrz. 6, znamienne tym, że wartości bitów jednego programowalnego rejestru (410) sterowania przełączaniem wątków różnią się od wartości bitów innego z programowalnych rejestrów (410) sterowania przełączaniem wątków.
  8. 8. Urządzenie według zastrz. 6 albo 7, znamienne tym, że wiele zdarzeń sterowania przełączaniem wątków zawiera brak danych w co najmniej jednym z następujących: pamięci podręcznej danych L1, pamięci podręcznej L2 i buforze translacji adresów tablic stron.
  9. 9. Urządzenie według zastrz. 8, znamienne tym, że wiele zdarzeń sterowania przełączaniem wątków zawiera brak rozkazów w co najmniej jednym z następujących: pamięci podręcznej rozkazów L1 i buforze translacji adresów tablic stron.
  10. 10. Urządzenie według zastrz. 9, znamienne tym, że wiele zdarzeń sterowania przełączaniem wątków zawiera błąd w translacji adresu danych i/lub rozkazów.
  11. 11. Urządzenie według zastrz. 10, znamienne tym, że wiele zdarzeń sterowania przełączaniem wątków zawiera dostęp do urządzenia wejścia-wyjścia zewnętrznego względem procesora wielowątkowego (100).
  12. 12. Urządzenie według zastrz. 11, znamienne tym, że wiele zdarzeń sterowania przełączaniem wątków zawiera dostęp do innego procesora wielowątkowego (100).
  13. 13. Urządzenie według zastrz. 12, znamienne tym, że wiele zdarzeń sterowania przełączaniem wątków zawiera rejestr naliczania postępu związanego z liczbą przypadków, gdy jeden z wielu wątków został przełączony z co najmniej jednego procesora wielowątkowego (100) bez żadnego rozkazu z tego jednego spośród wielu wątków.
  14. 14. Urządzenie według zastrz. 12 albo 13, znamienne tym, że wiele zdarzeń sterowania przełączaniem wątków zawiera okres czasu zwłoki.
PL340095A 1997-10-23 1998-10-14 Sposób i urządzenie do sterowania przełączaniem wątku w procesorze wielowątkowym PL193285B1 (pl)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/958,716 US6697935B1 (en) 1997-10-23 1997-10-23 Method and apparatus for selecting thread switch events in a multithreaded processor
PCT/US1998/021716 WO1999021081A1 (en) 1997-10-23 1998-10-14 Method and apparatus for selecting thread switch events in a multithreaded processor

Publications (2)

Publication Number Publication Date
PL340095A1 PL340095A1 (en) 2001-01-15
PL193285B1 true PL193285B1 (pl) 2007-01-31

Family

ID=25501230

Family Applications (1)

Application Number Title Priority Date Filing Date
PL340095A PL193285B1 (pl) 1997-10-23 1998-10-14 Sposób i urządzenie do sterowania przełączaniem wątku w procesorze wielowątkowym

Country Status (11)

Country Link
US (1) US6697935B1 (pl)
EP (1) EP1029269B1 (pl)
JP (1) JP4006180B2 (pl)
KR (1) KR100403658B1 (pl)
CN (1) CN1112636C (pl)
CA (1) CA2299348C (pl)
HU (1) HUP0100013A3 (pl)
IL (1) IL134823A (pl)
PL (1) PL193285B1 (pl)
TW (1) TW409227B (pl)
WO (1) WO1999021081A1 (pl)

Families Citing this family (161)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000010800A (ja) * 1998-06-19 2000-01-14 Toshiba Corp 計算機システムに於けるスレッド制御装置、及び同システムに於けるスレッド制御方法
US6952827B1 (en) * 1998-11-13 2005-10-04 Cray Inc. User program and operating system interface in a multithreaded environment
US7370325B1 (en) * 1999-02-19 2008-05-06 Lucent Technologies Inc. Eager evaluation of tasks in a workflow system
US7546444B1 (en) 1999-09-01 2009-06-09 Intel Corporation Register set used in multithreaded parallel processor architecture
US6889319B1 (en) * 1999-12-09 2005-05-03 Intel Corporation Method and apparatus for entering and exiting multiple threads within a multithreaded processor
US6357016B1 (en) * 1999-12-09 2002-03-12 Intel Corporation Method and apparatus for disabling a clock signal within a multithreaded processor
JP4693326B2 (ja) * 1999-12-22 2011-06-01 ウビコム インコーポレイテッド 組込み型プロセッサにおいてゼロタイムコンテクストスイッチを用いて命令レベルをマルチスレッド化するシステムおよび方法
US7856633B1 (en) 2000-03-24 2010-12-21 Intel Corporation LRU cache replacement for a partitioned set associative cache
US6748556B1 (en) * 2000-08-15 2004-06-08 International Business Machines Corporation Changing the thread capacity of a multithreaded computer processor
US7681018B2 (en) * 2000-08-31 2010-03-16 Intel Corporation Method and apparatus for providing large register address space while maximizing cycletime performance for a multi-threaded register file set
US7478394B1 (en) * 2001-06-04 2009-01-13 Hewlett-Packard Development Company, L.P. Context-corrupting context switching
US6944736B2 (en) * 2001-06-28 2005-09-13 Hewlett-Packard Development Company, L.P. Managing latencies in accessing memory of computer systems
JP3632635B2 (ja) * 2001-07-18 2005-03-23 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
US7159216B2 (en) * 2001-11-07 2007-01-02 International Business Machines Corporation Method and apparatus for dispatching tasks in a non-uniform memory access (NUMA) computer system
US6892331B2 (en) * 2002-01-17 2005-05-10 International Business Machines Corporation Method and system for error detection in a managed application environment
CA2474477C (en) * 2002-01-30 2011-04-12 Real Enterprise Solutions Development B.V. Method of setting priority levels in a multiprogramming computer system with priority scheduling, multiprogramming computer system and program therefor
JP2003271551A (ja) * 2002-03-18 2003-09-26 Fujitsu Ltd マイクロコンピュータ、バス制御回路およびマイクロコンピュータにおけるデータアクセス方法
US7523455B2 (en) * 2002-05-03 2009-04-21 Hewlett-Packard Development Company, L.P. Method and system for application managed context switching
US8024735B2 (en) * 2002-06-14 2011-09-20 Intel Corporation Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution
US7096470B2 (en) * 2002-09-19 2006-08-22 International Business Machines Corporation Method and apparatus for implementing thread replacement for optimal performance in a two-tiered multithreading structure
US6971103B2 (en) * 2002-10-15 2005-11-29 Sandbridge Technologies, Inc. Inter-thread communications using shared interrupt register
JP3864250B2 (ja) * 2002-10-31 2006-12-27 インターナショナル・ビジネス・マシーンズ・コーポレーション 排他制御装置、排他制御方法、プログラム、及び記録媒体
US20040128488A1 (en) * 2002-12-26 2004-07-01 Thimmannagari Chandra M. R. Strand switching algorithm to avoid strand starvation
US20040128476A1 (en) * 2002-12-26 2004-07-01 Robert Nuckolls Scheme to simplify instruction buffer logic supporting multiple strands
US7216346B2 (en) * 2002-12-31 2007-05-08 International Business Machines Corporation Method and apparatus for managing thread execution in a multithread application
US7822950B1 (en) 2003-01-22 2010-10-26 Ubicom, Inc. Thread cancellation and recirculation in a computer processor for avoiding pipeline stalls
US7181741B2 (en) * 2003-01-30 2007-02-20 Hewlett-Packard Development Company, L.P. Apparatus and method to minimize blocking overhead in upcall based MxN threads
US7487502B2 (en) 2003-02-19 2009-02-03 Intel Corporation Programmable event driven yield mechanism which may activate other threads
US7013400B2 (en) * 2003-04-24 2006-03-14 International Business Machines Corporation Method for managing power in a simultaneous multithread processor by loading instructions into pipeline circuit during select times based on clock signal frequency and selected power mode
US20040268093A1 (en) * 2003-06-26 2004-12-30 Samra Nicholas G Cross-thread register sharing technique
US7130986B2 (en) * 2003-06-30 2006-10-31 Intel Corporation Determining if a register is ready to exchange data with a processing element
US7711931B2 (en) * 2003-08-28 2010-05-04 Mips Technologies, Inc. Synchronized storage providing multiple synchronization semantics
US7418585B2 (en) * 2003-08-28 2008-08-26 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7870553B2 (en) * 2003-08-28 2011-01-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7594089B2 (en) * 2003-08-28 2009-09-22 Mips Technologies, Inc. Smart memory based synchronization controller for a multi-threaded multiprocessor SoC
US9032404B2 (en) * 2003-08-28 2015-05-12 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
US20050050305A1 (en) * 2003-08-28 2005-03-03 Kissell Kevin D. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US7376954B2 (en) * 2003-08-28 2008-05-20 Mips Technologies, Inc. Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US7849297B2 (en) 2003-08-28 2010-12-07 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
US7424599B2 (en) * 2003-08-28 2008-09-09 Mips Technologies, Inc. Apparatus, method, and instruction for software management of multiple computational contexts in a multithreaded microprocessor
US7836450B2 (en) * 2003-08-28 2010-11-16 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US20050060517A1 (en) * 2003-09-12 2005-03-17 Morrow Michael W. Switching processor threads during long latencies
CN100340976C (zh) * 2003-10-10 2007-10-03 华为技术有限公司 一种实现计算机多线程控制的方法及装置
US7631307B2 (en) * 2003-12-05 2009-12-08 Intel Corporation User-programmable low-overhead multithreading
US20060212874A1 (en) * 2003-12-12 2006-09-21 Johnson Erik J Inserting instructions
US7617499B2 (en) * 2003-12-18 2009-11-10 International Business Machines Corporation Context switch instruction prefetching in multithreaded computer
US7493621B2 (en) * 2003-12-18 2009-02-17 International Business Machines Corporation Context switch data prefetching in multithreaded computer
US7669203B2 (en) * 2003-12-19 2010-02-23 Intel Corporation Virtual multithreading translation mechanism including retrofit capability
US8694976B2 (en) * 2003-12-19 2014-04-08 Intel Corporation Sleep state mechanism for virtual multithreading
JP4728581B2 (ja) * 2004-02-03 2011-07-20 日本電気株式会社 アレイ型プロセッサ
JP4502650B2 (ja) * 2004-02-03 2010-07-14 日本電気株式会社 アレイ型プロセッサ
US8074051B2 (en) * 2004-04-07 2011-12-06 Aspen Acquisition Corporation Multithreaded processor with multiple concurrent pipelines per thread
JP4327008B2 (ja) 2004-04-21 2009-09-09 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US20050246461A1 (en) * 2004-04-29 2005-11-03 International Business Machines Corporation Scheduling threads in a multi-processor computer
US7216223B2 (en) 2004-04-30 2007-05-08 Hewlett-Packard Development Company, L.P. Configuring multi-thread status
US7185178B1 (en) 2004-06-30 2007-02-27 Sun Microsystems, Inc. Fetch speculation in a multithreaded processor
US7774393B1 (en) 2004-06-30 2010-08-10 Oracle America, Inc. Apparatus and method for integer to floating-point format conversion
US7676655B2 (en) * 2004-06-30 2010-03-09 Sun Microsystems, Inc. Single bit control of threads in a multithreaded multicore processor
US7941642B1 (en) 2004-06-30 2011-05-10 Oracle America, Inc. Method for selecting between divide instructions associated with respective threads in a multi-threaded processor
US7861063B1 (en) 2004-06-30 2010-12-28 Oracle America, Inc. Delay slot handling in a processor
US7523330B2 (en) * 2004-06-30 2009-04-21 Sun Microsystems, Inc. Thread-based clock enabling in a multi-threaded processor
US7373489B1 (en) 2004-06-30 2008-05-13 Sun Microsystems, Inc. Apparatus and method for floating-point exception prediction and recovery
US7343474B1 (en) 2004-06-30 2008-03-11 Sun Microsystems, Inc. Minimal address state in a fine grain multithreaded processor
US7353364B1 (en) 2004-06-30 2008-04-01 Sun Microsystems, Inc. Apparatus and method for sharing a functional unit execution resource among a plurality of functional units
US7216216B1 (en) 2004-06-30 2007-05-08 Sun Microsystems, Inc. Register window management using first pipeline to change current window and second pipeline to read operand from old window and write operand to new window
US7370243B1 (en) 2004-06-30 2008-05-06 Sun Microsystems, Inc. Precise error handling in a fine grain multithreaded multicore processor
US8095778B1 (en) 2004-06-30 2012-01-10 Open Computing Trust I & II Method and system for sharing functional units of a multithreaded processor
US7702887B1 (en) 2004-06-30 2010-04-20 Sun Microsystems, Inc. Performance instrumentation in a fine grain multithreaded multicore processor
US7401206B2 (en) * 2004-06-30 2008-07-15 Sun Microsystems, Inc. Apparatus and method for fine-grained multithreading in a multipipelined processor core
US7890734B2 (en) 2004-06-30 2011-02-15 Open Computing Trust I & II Mechanism for selecting instructions for execution in a multithreaded processor
US8225034B1 (en) 2004-06-30 2012-07-17 Oracle America, Inc. Hybrid instruction buffer
US7434000B1 (en) 2004-06-30 2008-10-07 Sun Microsystems, Inc. Handling duplicate cache misses in a multithreaded/multi-core processor
US7747771B1 (en) 2004-06-30 2010-06-29 Oracle America, Inc. Register access protocol in a multihreaded multi-core processor
US7426630B1 (en) 2004-06-30 2008-09-16 Sun Microsystems, Inc. Arbitration of window swap operations
US7383403B1 (en) 2004-06-30 2008-06-03 Sun Microsystems, Inc. Concurrent bypass to instruction buffers in a fine grain multithreaded processor
US7330988B2 (en) * 2004-06-30 2008-02-12 Sun Microsystems, Inc. Method and apparatus for power throttling in a multi-thread processor
US7178005B1 (en) 2004-06-30 2007-02-13 Sun Microsystems, Inc. Efficient implementation of timers in a multithreaded processor
US7437538B1 (en) 2004-06-30 2008-10-14 Sun Microsystems, Inc. Apparatus and method for reducing execution latency of floating point operations having special case operands
US7478225B1 (en) 2004-06-30 2009-01-13 Sun Microsystems, Inc. Apparatus and method to support pipelining of differing-latency instructions in a multithreaded processor
US7533248B1 (en) * 2004-06-30 2009-05-12 Sun Microsystems, Inc. Multithreaded processor including a functional unit shared between multiple requestors and arbitration therefor
JP4956891B2 (ja) * 2004-07-26 2012-06-20 富士通株式会社 演算処理装置,情報処理装置および演算処理装置の制御方法
US7487503B2 (en) 2004-08-12 2009-02-03 International Business Machines Corporation Scheduling threads in a multiprocessor computer
US7890735B2 (en) * 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
US7634774B2 (en) * 2004-09-13 2009-12-15 Integrated Device Technology, Inc. System and method of scheduling computing threads
US7827555B2 (en) * 2004-09-13 2010-11-02 Integrated Device Technology, Inc. Scheduler for a multiprocessing computing system
EP1811375B1 (en) * 2004-09-17 2010-05-12 Panasonic Corporation Processor
US7188346B2 (en) * 2004-11-29 2007-03-06 International Business Machines Corporation Method, system and program product for correlating data between operating environments
US8037250B1 (en) 2004-12-09 2011-10-11 Oracle America, Inc. Arbitrating cache misses in a multithreaded/multi-core processor
DE102004059972B4 (de) * 2004-12-13 2010-07-01 Infineon Technologies Ag Thread-Scheduling-Verfahren, und Thread-List-Scheduler-Vorrichtung
JP4609070B2 (ja) * 2004-12-28 2011-01-12 沖電気工業株式会社 マルチ呼処理スレッド処理方法
US7921365B2 (en) 2005-02-15 2011-04-05 Microsoft Corporation System and method for browsing tabbed-heterogeneous windows
US20060206902A1 (en) * 2005-03-14 2006-09-14 Sujat Jamil Variable interleaved multithreaded processor method and system
US8195922B2 (en) * 2005-03-18 2012-06-05 Marvell World Trade, Ltd. System for dynamically allocating processing time to multiple threads
US7917907B2 (en) * 2005-03-23 2011-03-29 Qualcomm Incorporated Method and system for variable thread allocation and switching in a multithreaded processor
US7823158B2 (en) * 2005-08-18 2010-10-26 International Business Machines Corporation Adaptive scheduling and management of work processing in a target context in resource contention
US7617380B2 (en) * 2005-08-25 2009-11-10 Broadcom Corporation System and method for synchronizing translation lookaside buffer access in a multithread processor
US7631125B2 (en) * 2005-09-30 2009-12-08 Intel Corporation Dynamically migrating channels
US20070079294A1 (en) * 2005-09-30 2007-04-05 Robert Knight Profiling using a user-level control mechanism
US20070088680A1 (en) * 2005-10-14 2007-04-19 Microsoft Corporation Simultaneously spawning multiple searches across multiple providers
US8079031B2 (en) * 2005-10-21 2011-12-13 Intel Corporation Method, apparatus, and a system for dynamically configuring a prefetcher based on a thread specific latency metric
US7870307B2 (en) * 2006-01-30 2011-01-11 Sony Computer Entertainment Inc. DMA and graphics interface emulation
US20080177979A1 (en) * 2006-03-01 2008-07-24 Gheorghe Stefan Hardware multi-core processor optimized for object oriented computing
US20070226454A1 (en) * 2006-03-01 2007-09-27 Marius Stoian Highly scalable MIMD machine for java and .net processing
US7434033B2 (en) 2006-04-14 2008-10-07 International Business Machines Corporation Placing a processor into a gradual slow mode of operation in response to a detected livelock condition within a processor pipeline
US7437539B2 (en) * 2006-04-14 2008-10-14 International Business Machines Corporation Issue unit for placing a processor into a gradual slow mode of operation in response to a detected livelock condition within a processor pipeline
US8001549B2 (en) * 2006-04-27 2011-08-16 Panasonic Corporation Multithreaded computer system and multithread execution control method
US8533530B2 (en) * 2006-11-15 2013-09-10 Qualcomm Incorporated Method and system for trusted/untrusted digital signal processor debugging operations
US8370806B2 (en) 2006-11-15 2013-02-05 Qualcomm Incorporated Non-intrusive, thread-selective, debugging method and system for a multi-thread digital signal processor
US8341604B2 (en) * 2006-11-15 2012-12-25 Qualcomm Incorporated Embedded trace macrocell for enhanced digital signal processor debugging operations
US8380966B2 (en) * 2006-11-15 2013-02-19 Qualcomm Incorporated Method and system for instruction stuffing operations during non-intrusive digital signal processor debugging
US8521993B2 (en) * 2007-04-09 2013-08-27 Intel Corporation Providing thread fairness by biasing selection away from a stalling thread using a stall-cycle counter in a hyper-threaded microprocessor
US8484516B2 (en) * 2007-04-11 2013-07-09 Qualcomm Incorporated Inter-thread trace alignment method and system for a multi-threaded processor
US7926035B2 (en) * 2007-04-24 2011-04-12 Microsoft Corporation Testing multi-thread software using prioritized context switch limits
US20080313652A1 (en) * 2007-06-15 2008-12-18 Microsoft Corporation Notifying user mode scheduler of blocking events
US8627030B2 (en) * 2007-11-07 2014-01-07 Intel Corporation Late lock acquire mechanism for hardware lock elision (HLE)
US7904623B2 (en) * 2007-11-21 2011-03-08 Microchip Technology Incorporated Ethernet controller
US7559061B1 (en) 2008-03-16 2009-07-07 International Business Machines Corporation Simultaneous multi-threading control monitor
US9418005B2 (en) 2008-07-15 2016-08-16 International Business Machines Corporation Managing garbage collection in a data processing system
US20100017583A1 (en) * 2008-07-15 2010-01-21 International Business Machines Corporation Call Stack Sampling for a Multi-Processor System
US8285973B2 (en) 2008-08-04 2012-10-09 International Business Machines Corporation Thread completion rate controlled scheduling
US20100115494A1 (en) * 2008-11-03 2010-05-06 Gorton Jr Richard C System for dynamic program profiling
US8024719B2 (en) 2008-11-03 2011-09-20 Advanced Micro Devices, Inc. Bounded hash table sorting in a dynamic program profiling system
US7873816B2 (en) * 2008-11-20 2011-01-18 International Business Machines Corporation Pre-loading context states by inactive hardware thread in advance of context switch
US8478948B2 (en) * 2008-12-04 2013-07-02 Oracle America, Inc. Method and system for efficient tracing and profiling of memory accesses during program execution
US8560814B2 (en) * 2010-05-04 2013-10-15 Oracle International Corporation Thread fairness on a multi-threaded processor with multi-cycle cryptographic operations
US9176783B2 (en) 2010-05-24 2015-11-03 International Business Machines Corporation Idle transitions sampling with execution context
US8843684B2 (en) 2010-06-11 2014-09-23 International Business Machines Corporation Performing call stack sampling by setting affinity of target thread to a current process to prevent target thread migration
US8799872B2 (en) 2010-06-27 2014-08-05 International Business Machines Corporation Sampling with sample pacing
US8799904B2 (en) 2011-01-21 2014-08-05 International Business Machines Corporation Scalable system call stack sampling
KR102013582B1 (ko) 2012-09-07 2019-08-23 삼성전자 주식회사 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법
US9817693B2 (en) * 2014-03-14 2017-11-14 International Business Machines Corporation Coherence protocol augmentation to indicate transaction status
US9921848B2 (en) 2014-03-27 2018-03-20 International Business Machines Corporation Address expansion and contraction in a multithreading computer system
US9417876B2 (en) 2014-03-27 2016-08-16 International Business Machines Corporation Thread context restoration in a multithreading computer system
US9594660B2 (en) 2014-03-27 2017-03-14 International Business Machines Corporation Multithreading computer system and program product for executing a query instruction for idle time accumulation among cores
US9354883B2 (en) 2014-03-27 2016-05-31 International Business Machines Corporation Dynamic enablement of multithreading
US10102004B2 (en) 2014-03-27 2018-10-16 International Business Machines Corporation Hardware counters to track utilization in a multithreading computer system
US9218185B2 (en) 2014-03-27 2015-12-22 International Business Machines Corporation Multithreading capability information retrieval
US9804846B2 (en) 2014-03-27 2017-10-31 International Business Machines Corporation Thread context preservation in a multithreading computer system
US9983880B2 (en) * 2014-09-26 2018-05-29 Intel Corporation Method and apparatus for improved thread selection
US9348644B2 (en) 2014-10-08 2016-05-24 International Business Machines Corporation Application-level dispatcher control of application-level pseudo threads and operating system threads
US9396018B2 (en) * 2014-10-10 2016-07-19 Salesforce.Com, Inc. Low latency architecture with directory service for integration of transactional data system with analytical data structures
US9449188B2 (en) 2014-10-10 2016-09-20 Salesforce.Com, Inc. Integration user for analytical access to read only data stores generated from transactional systems
US10101889B2 (en) 2014-10-10 2018-10-16 Salesforce.Com, Inc. Dashboard builder with live data updating without exiting an edit mode
US9600548B2 (en) 2014-10-10 2017-03-21 Salesforce.Com Row level security integration of analytical data store with cloud architecture
US10049141B2 (en) 2014-10-10 2018-08-14 salesforce.com,inc. Declarative specification of visualization queries, display formats and bindings
GB2537115B (en) 2015-04-02 2021-08-25 Advanced Risc Mach Ltd Event monitoring in a multi-threaded data processing apparatus
JP6477216B2 (ja) 2015-05-08 2019-03-06 富士通株式会社 演算装置、スレッド切替方法、及びマルチスレッドプログラム
US10115213B2 (en) 2015-09-15 2018-10-30 Salesforce, Inc. Recursive cell-based hierarchy for data visualizations
US10089368B2 (en) 2015-09-18 2018-10-02 Salesforce, Inc. Systems and methods for making visual data representations actionable
US10706101B2 (en) 2016-04-14 2020-07-07 Advanced Micro Devices, Inc. Bucketized hash tables with remap entries
US10311047B2 (en) 2016-10-19 2019-06-04 Salesforce.Com, Inc. Streamlined creation and updating of OLAP analytic databases
WO2018152551A1 (en) * 2017-02-20 2018-08-23 Intensivate Inc. Super-thread processor
KR101865332B1 (ko) 2017-03-27 2018-06-07 송성범 난방코일 일체형 가습기를 구비한 공기조화기
US10452586B2 (en) * 2017-04-17 2019-10-22 Intel Corporation Avoid thread switching in cache management
US11068308B2 (en) * 2018-03-14 2021-07-20 Texas Instruments Incorporated Thread scheduling for multithreaded data processing environments
US11586443B2 (en) * 2020-10-20 2023-02-21 Micron Technology, Inc. Thread-based processor halting
CN112306657A (zh) * 2020-10-30 2021-02-02 上海二三四五网络科技有限公司 一种基于优先级排序实现多个事件的线性倒计时的控制方法及装置
CN112437074B (zh) * 2020-11-17 2022-11-22 北京金山云网络技术有限公司 计数处理方法、装置、电子设备及存储介质
CN112463723A (zh) * 2020-12-17 2021-03-09 王志平 一种微内核阵列的实现方法
US11755361B2 (en) 2021-10-15 2023-09-12 Nxp B.V. Freedom from interference for aggregated communication channel handling using event-based processor extensions
CN116627857B (zh) * 2023-05-25 2023-11-24 合芯科技有限公司 一种处理器核外缓存模型及模拟方法

Family Cites Families (68)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3373408A (en) 1965-04-16 1968-03-12 Rca Corp Computer capable of switching between programs without storage and retrieval of the contents of operation registers
US3566357A (en) 1966-07-05 1971-02-23 Rca Corp Multi-processor multi-programed computer system
DE1549531A1 (de) 1966-08-16 1971-04-01 Scient Data Systems Inc Digitale Rechenanlage
US3568173A (en) 1968-08-19 1971-03-02 Scient Data Systems Inc Memory stroage element drive circuit
US3771138A (en) 1971-08-31 1973-11-06 Ibm Apparatus and method for serializing instructions from two independent instruction streams
US3728692A (en) 1971-08-31 1973-04-17 Ibm Instruction selection in a two-program counter instruction unit
US3916383A (en) 1973-02-20 1975-10-28 Memorex Corp Multi-processor data processing system
FR2253428A5 (pl) 1973-11-30 1975-06-27 Honeywell Bull Soc Ind
IT1000638B (it) 1973-12-28 1976-04-10 Olivetti & Co Spa Calcolatore elettronico con dispo sitivo di deviazione dei micropro grammi
US3980992A (en) 1974-11-26 1976-09-14 Burroughs Corporation Multi-microprocessing unit on a single semiconductor chip
US4047161A (en) * 1976-04-30 1977-09-06 International Business Machines Corporation Task management apparatus
US4229790A (en) 1978-10-16 1980-10-21 Denelcor, Inc. Concurrent task and instruction processor and method
US4320453A (en) 1978-11-02 1982-03-16 Digital House, Ltd. Dual sequencer microprocessor
FR2471631B1 (fr) 1979-12-11 1986-02-21 Cii Honeywell Bull Dispositif de synchronisation et d'affectation de processus entre plusieurs processeurs dans un systeme de traitement de l'information
US4384324A (en) 1980-05-06 1983-05-17 Burroughs Corporation Microprogrammed digital data processing system employing tasking at a microinstruction level
US4493020A (en) 1980-05-06 1985-01-08 Burroughs Corporation Microprogrammed digital data processor employing microinstruction tasking and dynamic register allocation
US4532587A (en) 1981-08-26 1985-07-30 Texas Instruments Incorporated Single chip processor connected to an external memory chip
US5694603A (en) * 1982-09-28 1997-12-02 Reiffin; Martin G. Computer memory product with preemptive multithreading software
US4680698A (en) 1982-11-26 1987-07-14 Inmos Limited High density ROM in separate isolation well on single with chip
GB8309770D0 (en) 1983-04-11 1983-05-18 Inmos Ltd Microcomputer
US5103394A (en) 1984-04-30 1992-04-07 Hewlett-Packard Company Software performance analyzer
US4829425A (en) 1986-10-21 1989-05-09 Intel Corporation Memory-based interagent communication mechanism
JPS63123218A (ja) 1986-11-12 1988-05-27 Nec Corp タイマ/カウンタ回路
US4853849A (en) 1986-12-17 1989-08-01 Intel Corporation Multi-tasking register set mapping system which changes a register set pointer block bit during access instruction
US5050070A (en) 1988-02-29 1991-09-17 Convex Computer Corporation Multi-processor computer system having self-allocating processors
US5159686A (en) 1988-02-29 1992-10-27 Convex Computer Corporation Multi-processor computer system having process-independent communication register addressing
US5148536A (en) 1988-07-25 1992-09-15 Digital Equipment Corporation Pipeline having an integral cache which processes cache misses and loads data in parallel
US5353418A (en) 1989-05-26 1994-10-04 Massachusetts Institute Of Technology System storing thread descriptor identifying one of plural threads of computation in storage only when all data for operating on thread is ready and independently of resultant imperative processing of thread
EP0473714A1 (en) 1989-05-26 1992-03-11 Massachusetts Institute Of Technology Parallel multithreaded data processing system
GB2234613B (en) 1989-08-03 1993-07-07 Sun Microsystems Inc Method and apparatus for switching context of state elements in a microprocessor
US5079725A (en) 1989-11-17 1992-01-07 Ibm Corporation Chip identification method for use with scan design systems and scan testing techniques
US5471593A (en) 1989-12-11 1995-11-28 Branigin; Michael H. Computer processor with an efficient means of executing many instructions simultaneously
US5197138A (en) 1989-12-26 1993-03-23 Digital Equipment Corporation Reporting delayed coprocessor exceptions to code threads having caused the exceptions by saving and restoring exception state during code thread switching
US5179702A (en) 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
US5339415A (en) 1990-06-11 1994-08-16 Cray Research, Inc. Dual level scheduling of processes to multiple parallel regions of a multi-threaded program on a tightly coupled multiprocessor computer system
EP0474297B1 (en) 1990-09-05 1998-06-10 Koninklijke Philips Electronics N.V. Very long instruction word machine for efficient execution of programs with conditional branches
DE69130723T2 (de) 1990-10-05 1999-07-22 Koninkl Philips Electronics Nv Verarbeitungsgerät mit Speicherschaltung und eine Gruppe von Funktionseinheiten
JP2743608B2 (ja) 1991-03-27 1998-04-22 日本電気株式会社 共有レジスタ制御方式
US5430850A (en) 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
US5530866A (en) 1991-07-30 1996-06-25 Tera Computer Company Register allocation methods having upward pass for determining and propagating variable usage information and downward pass for binding; both passes utilizing interference graphs via coloring
US5630128A (en) 1991-08-09 1997-05-13 International Business Machines Corporation Controlled scheduling of program threads in a multitasking operating system
US5247675A (en) 1991-08-09 1993-09-21 International Business Machines Corporation Preemptive and non-preemptive scheduling and execution of program threads in a multitasking operating system
US5524250A (en) 1991-08-23 1996-06-04 Silicon Graphics, Inc. Central processing unit for processing a plurality of threads using dedicated general purpose registers and masque register for providing access to the registers
US5357617A (en) 1991-11-22 1994-10-18 International Business Machines Corporation Method and apparatus for substantially concurrent multiple instruction thread processing by a single pipeline processor
US5404469A (en) 1992-02-25 1995-04-04 Industrial Technology Research Institute Multi-threaded microprocessor architecture utilizing static interleaving
US5287508A (en) 1992-04-07 1994-02-15 Sun Microsystems, Inc. Method and apparatus for efficient scheduling in a multiprocessor system
US5553305A (en) 1992-04-14 1996-09-03 International Business Machines Corporation System for synchronizing execution by a processing element of threads within a process using a state indicator
JP3309425B2 (ja) 1992-05-22 2002-07-29 松下電器産業株式会社 キャッシュ制御装置
US5515538A (en) 1992-05-29 1996-05-07 Sun Microsystems, Inc. Apparatus and method for interrupt handling in a multi-threaded operating system kernel
US5423008A (en) 1992-08-03 1995-06-06 Silicon Graphics, Inc. Apparatus and method for detecting the activities of a plurality of processors on a shared bus
DK0627100T3 (da) * 1992-12-23 2000-06-26 Ebauchesfabrik Eta Ag Laveffekt-multitaskkontroller
EP0605927B1 (en) 1992-12-29 1999-07-28 Koninklijke Philips Electronics N.V. Improved very long instruction word processor architecture
EP0617361B1 (en) 1993-03-26 2001-11-28 Cabletron Systems, Inc. Scheduling method and apparatus for a communication network
WO1994027216A1 (en) 1993-05-14 1994-11-24 Massachusetts Institute Of Technology Multiprocessor coupling system with integrated compile and run time scheduling for parallelism
US5490272A (en) 1994-01-28 1996-02-06 International Business Machines Corporation Method and apparatus for creating multithreaded time slices in a multitasking operating system
US5613114A (en) 1994-04-15 1997-03-18 Apple Computer, Inc System and method for custom context switching
JPH096633A (ja) * 1995-06-07 1997-01-10 Internatl Business Mach Corp <Ibm> データ処理システムに於ける高性能多重論理経路の動作用の方法とシステム
US5630136A (en) 1995-06-09 1997-05-13 Sun Microsystems, Inc. Method and apparatus for serializing access to multithreading unsafe resources
US5826081A (en) 1996-05-06 1998-10-20 Sun Microsystems, Inc. Real time thread dispatcher for multiprocessor applications
US5933627A (en) 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US5996058A (en) * 1996-08-19 1999-11-30 Samsung Electronics Company, Ltd. System and method for handling software interrupts with argument passing
US5867644A (en) * 1996-09-10 1999-02-02 Hewlett Packard Company System and method for on-chip debug support and performance monitoring in a microprocessor
US6088788A (en) * 1996-12-27 2000-07-11 International Business Machines Corporation Background completion of instruction and associated fetch request in a multithread processor
US5864701A (en) * 1997-02-14 1999-01-26 Integrated Device Technology, Inc. Apparatus and method for managing interrupt delay associated with mask flag transition
US5809450A (en) * 1997-11-26 1998-09-15 Digital Equipment Corporation Method for estimating statistics of properties of instructions processed by a processor pipeline
US6016542A (en) * 1997-12-31 2000-01-18 Intel Corporation Detecting long latency pipeline stalls for thread switching
US6341347B1 (en) 1999-05-11 2002-01-22 Sun Microsystems, Inc. Thread switch logic in a multiple-thread processor
EP2234613A1 (en) * 2007-12-21 2010-10-06 Edward T. Wei P-menthawe-3-carboxylic acid esters to treat airways diseases

Also Published As

Publication number Publication date
KR100403658B1 (ko) 2003-10-30
TW409227B (en) 2000-10-21
WO1999021081A1 (en) 1999-04-29
JP4006180B2 (ja) 2007-11-14
CN1276888A (zh) 2000-12-13
IL134823A0 (en) 2001-05-20
IL134823A (en) 2004-01-04
CN1112636C (zh) 2003-06-25
EP1029269B1 (en) 2003-09-24
PL340095A1 (en) 2001-01-15
CA2299348C (en) 2004-10-19
HUP0100013A2 (hu) 2001-05-28
JP2001521215A (ja) 2001-11-06
CA2299348A1 (en) 1999-04-29
HUP0100013A3 (en) 2004-03-29
EP1029269A1 (en) 2000-08-23
US6697935B1 (en) 2004-02-24
KR20010031167A (ko) 2001-04-16

Similar Documents

Publication Publication Date Title
PL193285B1 (pl) Sposób i urządzenie do sterowania przełączaniem wątku w procesorze wielowątkowym
EP1027645B1 (en) Thread switch control in a multithreaded processor system
US6105051A (en) Apparatus and method to guarantee forward progress in execution of threads in a multithreaded processor
EP1027650B1 (en) Method and apparatus for altering thread priorities in a multithreaded processor
US6018759A (en) Thread switch tuning tool for optimal performance in a computer processor
Sethia et al. Mascar: Speeding up GPU warps by reducing memory pitstops
WO1999021082A1 (en) Method and apparatus to force a thread switch in a multithreaded processor
CA2320913C (en) Zero overhead computer interrupts with task switching
US20100050178A1 (en) Method and apparatus to implement software to hardware thread priority
US20100122064A1 (en) Method for increasing configuration runtime of time-sliced configurations
KR101462220B1 (ko) 마이크로프로세서용 구성가능한 캐시
US7516311B2 (en) Deterministic microcontroller context arrangement
CN108845969B (zh) 适用于不完全对称多处理微控制器的操作控制方法及操作系统
US6016531A (en) Apparatus for performing real time caching utilizing an execution quantization timer and an interrupt controller
US7562207B2 (en) Deterministic microcontroller with context manager
WO2002046887A2 (en) Concurrent-multitasking processor
CZ20001437A3 (cs) Způsob a zařízení pro výběr událostí přepínání vláken ve vícevláknovém procesoru
US20060168421A1 (en) Method of providing microcontroller cache memory

Legal Events

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

Effective date: 20111014