DE102020112961A1 - Techniken zum dynamischen partitionieren von aufgaben - Google Patents
Techniken zum dynamischen partitionieren von aufgaben Download PDFInfo
- Publication number
- DE102020112961A1 DE102020112961A1 DE102020112961.0A DE102020112961A DE102020112961A1 DE 102020112961 A1 DE102020112961 A1 DE 102020112961A1 DE 102020112961 A DE102020112961 A DE 102020112961A DE 102020112961 A1 DE102020112961 A1 DE 102020112961A1
- Authority
- DE
- Germany
- Prior art keywords
- task
- estimate
- block size
- processor
- measurement signal
- Prior art date
- Legal status (The legal status 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 status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
Verschiedene Ausführungsformen richten sich allgemein auf Techniken zum Partitionieren von parallelisierbaren Aufgaben in Unteraufgaben zur Verarbeitung. Einige Ausführungsformen richten sich insbesondere auf ein dynamisches Bestimmen von Blockgrößen (244), die beim Partitionieren von Aufgaben, wie Parallelschleifen oder Teilen-und-Herrschen-Algorithmus-Aufgaben, in Unteraufgaben basierend auf der Wahrscheinlichkeit, dass eine Prioritätsaufgabenquelle (102) eine Aufgabe mit hoher Priorität einführt, zu verwenden sind. Zum Beispiel kann ein von einer Sonde (104) empfangenes Messsignal, das eine Betriebseigenschaft in Verbindung mit einer Prioritätsaufgabenquelle (102) angibt, verwendet werden, um eine Schätzung der Wahrscheinlichkeit, dass eine Prioritätsaufgabenquelle (102) eine Aufgabe mit hoher Priorität einführt, zu erzeugen. In solchen Beispielen kann die Schätzung verwendet werden, um eine Blockgröße für eine parallelisierbare Aufgabe zu bestimmen, und kann die parallelisierbare Aufgabe basierend auf der Blockgröße in eine Vielzahl von Unteraufgaben partitioniert werden und können die Unteraufgaben, zur Ausführung, zumindest einer Aufgabenwarteschlange in einem Aufgaben-Pool (116) zugewiesen werden.
Description
- Allgemein bezieht sich Parallelrechnen auf einen Typ des Rechnens, bei dem viele Berechnungen oder die Ausführung von Prozessen gleichzeitig ausgeführt werden. Zum Beispiel können große Operationen in eine Anzahl von kleineren Operationen geteilt werden, die gleichzeitig durchgeführt werden können. Parallelrechnen schließt eine Vielfalt von Typen von Parallelität ein, wie Parallelität auf Bit-Ebene, Parallelität auf Anweisungsebene und Aufgabenparallelität. Aufgabenparallelität kann die Zerlegung einer Aufgabe in Unteraufgaben und das anschließende Zuordnen jeder Unteraufgabe zu einem Prozessor zur Ausführung einschließen. Zum Beispiel kann eine Schleife in Aufgaben geteilt werden, von denen jede einen Teilbereich der verfügbaren Schleifeniterationen ausführt. Manchmal können die Unteraufgaben vor einer Zuordnung zu einem Prozessor zur Ausführung weiter partitioniert werden. In jedem Fall kann dann eine Vielzahl von Prozessoren die geteilten Abschnitte der Aufgabe gleichzeitig ausführen.
-
-
1 veranschaulicht eine beispielhafte Betriebsumgebung für ein dynamisches Partitionieren von Aufgaben gemäß einer oder mehreren hierin beschriebenen Ausführungsformen. -
2 veranschaulicht beispielhafte Aspekte eines Prozessablaufs für ein dynamisches Partitionieren von Aufgaben gemäß einer oder mehreren hierin beschriebenen Ausführungsformen. -
3 veranschaulicht einen beispielhaften Prozessablauf zum dynamischen Partitionieren von Aufgaben gemäß einer oder mehreren hierin beschriebenen Ausführungsformen. -
4A-4C veranschaulichen beispielhafte Techniken zum Partitionieren von Aufgaben gemäß einer oder mehreren hierin beschriebenen Ausführungsformen. -
5 veranschaulicht beispielhafte Aspekte eines dynamischen Partitionierens von Aufgaben gemäß einer oder mehreren hier beschriebenen Ausführungsformen. -
6 veranschaulicht eine Ausführungsform eines Logikflusses gemäß einer oder mehreren hierin beschriebenen Ausführungsformen. -
7 veranschaulicht eine Ausführungsform eines Speichermediums gemäß einer oder mehreren hierin beschriebenen Ausführungsformen. -
8 veranschaulicht eine Ausführungsform einer Rechenarchitektur gemäß einer oder mehreren hierin beschriebenen Ausführungsformen. -
9 veranschaulicht eine Ausführungsform einer Kommunikationsarchitektur gemäß einer oder mehreren hierin beschriebenen Ausführungsformen. - Verschiedene Ausführungsformen richten sich allgemein auf Techniken zum Partitionieren von parallelisierbaren Aufgaben in Unteraufgaben zur Verarbeitung. Einige Ausführungsformen richten sich insbesondere auf ein dynamisches Bestimmen von Blockgrößen, die beim Partitionieren von Aufgaben, wie Parallelschleifen oder Teilen-und-Herrschen-Algorithmus-Aufgaben, in Unteraufgaben basierend auf der Wahrscheinlichkeit, dass eine Prioritätsaufgabenquelle eine Aufgabe mit hoher Priorität einführt, zu verwenden sind. In einer Ausführungsform kann eine Einrichtung zum Beispiel einen Prozessor und Speicher umfassen, der Anweisungen umfasst, die bei Ausführung durch den Prozessor den Prozessor dazu veranlassen, eine oder mehrere der folgenden Techniken durchzuführen, um die Wahrscheinlichkeit zu bewerten, dass Aufgaben mit hoher Priorität erstellt werden, und/oder um Aufgaben basierend auf der Wahrscheinlichkeit, dass Aufgaben mit hoher Priorität erstellt werden, zur Parallelverarbeitung dynamisch zu partitionieren. In einigen Ausführungsformen kann der Prozessor ein von einer Sonde empfangenes Messsignal identifizieren. In einigen solchen Ausführungsformen kann das Messsignal eine Betriebseigenschaft in Verbindung mit einer Prioritätsaufgabenquelle angeben. In verschiedenen Ausführungsformen kann der Prozessor eine Schätzung basierend auf dem von der Sonde empfangenen Messsignal erzeugen. In verschiedenen solchen Ausführungsformen kann die Schätzung eine Wahrscheinlichkeit dafür angeben, dass die Prioritätsaufgabenquelle eine Aufgabe mit hoher Priorität erzeugt. In vielen Ausführungsformen kann der Prozessor eine Blockgröße für eine parallelisierbare Aufgabe basierend auf der Schätzung bestimmen. In einigen Ausführungsformen kann der Prozessor die parallelisierbare Aufgabe basierend auf der Blockgröße in eine Vielzahl von Unteraufgaben partitionieren. In verschiedenen Ausführungsformen kann der Prozessor eine oder mehrere der Vielzahl von Unteraufgaben zur Ausführung zu zumindest einer Aufgabenwarteschlange in einem Aufgaben-Pool zuweisen.
- Einige Herausforderungen bei der Parallelverarbeitung schließen das Bereitstellen eines vorhersehbaren und responsiven Diensts für Aufgaben mit hoher Priorität ein. Zum Beispiel kann eine Aufgabe durch ein Worker-Thread vollständig verarbeitet werden müssen, bevor eine andere Aufgabe auf dem Worker-Thread geplant werden kann. Außerdem können Aufgaben mit niedriger Priorität, die eine Vielzahl von Iterationen erfordern, in eine Anzahl von Unteraufgaben zur Parallelverarbeitung durch die Worker-Threads geteilt werden. Entsprechend kann eine Aufgabe mit hoher Priorität verzögert werden, bis eine der Aufgaben mit niedriger Priorität abgeschlossen wird und ein Worker-Thread verfügbar wird. Die vorliegende Offenbarung unterstützt ein dynamisches Partitionieren von Aufgaben basierend auf einer Wahrscheinlichkeit, dass Prioritätsaufgaben eingeführt werden, was die Wahrscheinlichkeit reduzieren kann, dass das Verarbeiten von Prioritätsaufgaben verzögert wird.
- Durch das Hinzufügen weiterer Komplexität versuchen viele Aufgabenpartitionierungsstrategien, einschließlich Parallelschleifenpartitionierungsstrategien, die Unteraufgabengröße zu maximieren, wodurch das System für Aufgaben mit hoher Priorität noch weniger reaktiv gemacht wird. Dies kann daraus resultieren, dass Aufgabenpartitionierungsstrategien zu sehr versuchen, die Durchführung der Aufgabe selbst zu verbessern. Große Blockgrößen können die beste Leistung bei ausgeglichenen Arbeitslasten bereitstellen, ermöglichen es Worker-Threads jedoch nicht, schnell auf das Auftreten von Arbeit mit höherer Priorität zu reagieren. Dagegen können es kleine Blockgrößen Worker-Threads ermöglichen, schnell auf das Auftreten von Arbeit mit hoher Priorität und/oder einer asynchronen Kommunikation zu reagieren, bringen jedoch größere Planungs-Overheads mit sich. Bei Nichtvorhandensein von Arbeit mit einer höheren Priorität resultiert das Verwenden von Blockgrößen, die kleiner sind als für einen effektiven Lastausgleich erforderlich, in einem unnötigen Leistungsverlust. Diese und andere Faktoren können in einer Parallelverarbeitung mit einem zu hohen Overhead, beschränkter Anwendbarkeit und schlechter Anpassbarkeit resultieren. Solche Beschränkungen können die Nutzbarkeit und Leistung einer Parallelverarbeitung drastisch reduzieren, was zu ineffizienten Systemen, Vorrichtungen und Techniken beiträgt.
- Viele Aufgabenzuteilungsbibliotheken auf Benutzerebene verwenden nicht-präemptive Planer, die Aufgaben oder Unteraufgaben auf einen Pool von Worker-Threads planen. Üblicherweise enthalten die Thread-Pools einen Software-Thread je logischem Kern. Diese Planer können als nicht-präemptiv bezeichnet werden, weil jede Aufgabe oder Unteraufgabe durch ihren zugewiesenen Worker-Thread vollständig ausgeführt werden muss, bevor eine andere Aufgabe oder Unteraufgabe durch diesen Thread ausgeführt werden kann. Häufig führen die Aufgabenzuteilungsbibliotheken auf Benutzerebene eine Aufgabe, wie eine Schleife, aus, indem sie Unteraufgaben erstellen, die auf den Worker-Threads geplant sind. Zum Beispiel kann die folgende Schleife:
for (int i = 0; i < N; ++i) f(a[i]);als eine Parallelschleife in der Intel ® Threading Building Blocks-Bibliothek (TBB-Bibliothek) ausgedrückt werden als:
tbb: :parallel_for (0, N, [&] (int i) { f(a[i]); });
Die TBB-Bibliothek kann die Schleife ausführen, indem sie Unteraufgaben erstellt, die auf den Worker-Threads geplant sind. Jede Unteraufgabe wendet den Körper (z. B. den C++-Lambda-Ausdruck in dem obigen Ausschnitt) auf einen Block von Iterationen aus dem Bereich an. Wenn alle Iterationen in einer Parallelschleife gleiche Arbeit aufweisen, besteht die beste Bereichspartitionierungsstrategie darin, einen Block von Iterationen je Worker-Thread zu erstellen, wobei N die Anzahl von Iterationen ist und P die Anzahl von Threads ist. Dies resultiert in ungefähr N/P Iterationen je Worker-Thread. Diese großen Blöcke minimieren Planungs-Overheads, ohne ein Lastungleichgewicht zu schaffen. Wenn jedoch die Arbeit je Iteration variiert, dann ist es besser, viel mehr Aufgaben als Worker-Threads zu erstellen, wobei jede Aufgabe jeweils einen sehr kleinen Block des Bereichs ausführt. Das Verwenden von kleineren Blöcken gibt dem Planer mehr Flexibilität, um die durch jeden Worker-Thread durchgeführte Arbeit auszugleichen - durch Senden von weniger Aufgaben an Threads, die diese zeitaufwendigeren Iterationen ausführen müssen. Wenn nur die Ausführung auf einem System mit CPU-Kernen berücksichtigt wird, wird die beste Leistung üblicherweise erhalten, indem die größten Aufgaben erstellt werden, die einen guten Lastausgleich ermöglichen.
Verschiedene hierin beschriebene Ausführungsformen schließen die Fähigkeit ein, Aufgaben basierend auf einer Wahrscheinlichkeit, dass Prioritätsaufgaben eingeführt werden, dynamisch zu partitionieren. Viele Ausführungsformen schließen einen Dynamikbereichspartitionierer ein, der eine schleifenoptimale Partitionierungsstrategie (z. B. Verwenden von großen Blöcken) verwendet, wenn die Wahrscheinlichkeit, dass Aufgaben mit hoher Priorität eingeführt werden, klein ist, und eine reaktive Partitionierungsstrategie (z. B. Verwenden von kleineren Blöcken) während Programmphasen verwendet, wenn die Einführung von Aufgaben mit hoher Priorität wahrscheinlich ist. Dies kann es Ausführungsformen ermöglichen, reaktiv auf Aufgaben mit hoher Priorität zu sein, während Overhead in Verbindung damit, reaktiv zu sein, minimiert wird. Solche Phasen können üblicherweise in Anwendungen auftreten, die Arbeit auf Hardwarebeschleuniger abladen. Entsprechend, wenn Arbeit nur auf dem Host verarbeitet wird, können Schleifen optimal für den Host partitioniert werden; wenn jedoch sowohl der Host als auch ein Beschleuniger gleichzeitig verwendet werden, kann der Host auf Ergebnisse mit hoher Priorität reagieren, die asynchron von dem Beschleuniger zurückgegeben werden. Dies kann in einer verbesserten Leistung resultieren, indem die Zeit reduziert wird, die der Beschleuniger warten muss, bevor ein Host-Thread ihn bedienen kann.
In verschiedenen Ausführungsformen kann die Wahrscheinlichkeit, dass Aufgaben mit hoher Priorität eingeführt werden, basierend auf Sondenmessungen geschätzt werden. In verschiedenen solchen Ausführungsformen kann die geschätzte Wahrscheinlichkeit, dass Aufgaben mit hoher Priorität eingeführt werden, durch den Dynamikbereichspartitionierer verwendet werden, um eine optimale Partitionierungsstrategie auszuwählen. Auf diese und andere Weisen können hier beschriebene Komponenten Verfahren identifizieren, um die Effizienz zu steigern, Leistungskosten zu verringern, Rechenkosten zu verringern und/oder Ressourcenanforderungen zu reduzieren, um eine Parallelverarbeitung auf eine genaue, reaktive, effiziente, dynamische und skalierbare Weise zu implementieren, was in verschiedenen technischen Wirkungen und Vorteilen im Vergleich zu herkömmlicher Computertechnologie, einschließlich gesteigerter Funktionen und verbesserter Anpassbarkeit, resultiert. In verschiedenen Ausführungsformen können ein(e) oder mehrere der hierin beschriebenen Aspekte, Techniken und/oder Komponenten in einer praktischen Anwendung über eine oder mehrere Rechenvorrichtungen implementiert werden und dadurch zusätzliche und nützliche Funktionalität an die eine oder mehrere Rechenvorrichtungen bereitstellen, was in leistungsfähigeren, besser funktionierenden und verbesserten Rechenvorrichtungen resultiert. Außerdem können ein(e) oder mehrere der hierin beschriebenen Aspekte, Techniken und/oder Komponenten genutzt werden, um das technische Gebiet der Parallelverarbeitung und/oder Beschleunigerintegration zu verbessern.
In verschiedenen Ausführungsformen können hierin beschriebene Komponenten spezifische und bestimmte Weisen des automatischen Einstellens von Partitionierungsstrategien bereitstellen, um die Leistung und/oder Reaktionsfähigkeit zu optimieren. In verschiedenen solchen Ausführungsformen können die spezifischen und bestimmten Weisen des automatischen Einstellens von Partitionierungsstrategien ein Schätzen einer Wahrscheinlichkeit, dass Aufgaben mit hoher Priorität eingeführt werden, basierend auf einer oder mehreren Sondenmessungen einschließen. In vielen Ausführungsformen können eine oder mehrere der hierin beschriebenen Komponenten als ein Satz von Regeln implementiert werden, die eine computerbezogene Technologie verbessern, indem sie eine zuvor nicht durch einen Computer durchführbare Funktion ermöglichen, die es ermöglicht, ein verbessertes technologisches Ergebnis zu erreichen. Zum Beispiel kann die ermöglichte Funktion ein automatisches Einstellen von Partitionierungsstrategien basierend auf einer Wahrscheinlichkeit, dass Aufgaben mit hoher Priorität eingeführt werden, einschließen.
Allgemein Bezug nehmend auf hierin verwendete Notationen und Nomenklatur, können ein oder mehrere Abschnitte der folgenden detaillierten Beschreibung in Bezug auf Programmprozeduren, die auf einem Computer oder Netzwerk von Computern ausgeführt werden, dargestellt sein. Diese prozeduralen Beschreibungen und Darstellungen werden von Fachleuten verwendet, um anderen Fachleuten das Wesentliche ihrer Arbeit wirkungsvoll zu vermitteln. Eine Prozedur wird hier und allgemein als eine selbstkonsistente Folge von Operationen betrachtet, die zu einem gewünschten Ergebnis führen. Bei diesen Operationen handelt es sich um diejenigen, die physische Bearbeitungen von physikalischen Größen erfordern. Üblicherweise, aber nicht notwendigerweise, nehmen diese Größen die Form elektronischer, magnetischer oder optischer Signale an, die dazu in der Lage sind, gespeichert, übertragen, kombiniert, verglichen und anderweitig bearbeitet zu werden. Es erweist sich manchmal als praktisch, diese Signale hauptsächlich aus Gründen der allgemeinen Verwendung als Bits, Werte, Elemente, Symbole, Zeichen, Ausdrücke, Zahlen oder dergleichen zu bezeichnen. Es sei jedoch darauf hingewiesen, dass alle von diesen und ähnlichen Ausdrücken den geeigneten physikalischen Größen zuzuordnen sind und lediglich praktische Kennzeichnungen darstellen, die auf diese Größen angewendet werden.
Ferner wird auf diese Bearbeitungen häufig in Begriffen, wie Hinzufügen oder Vergleichen, Bezug genommen, die üblicherweise mit mentalen Operationen, die durch einen menschlichen Bediener durchgeführt werden, verbunden sind. Jedoch ist eine solche Fähigkeit eines menschlichen Bedieners in allen der hierin beschriebenen Operationen, die einen Teil von einer oder mehreren Ausführungsformen bilden, in den meisten Fällen nicht erforderlich oder wünschenswert. Stattdessen sind diese Operationen Maschinenoperationen. Nützliche Maschinen zum Durchführen von Operationen von verschiedenen Ausführungsformen schließen Universaldigitalcomputer ein, wie selektiv aktiviert oder konfiguriert durch ein darin gespeichertes Computerprogramm, das gemäß den Lehren hierin geschrieben ist, und/oder schließen Einrichtungen ein, die speziell für den erforderlichen Zweck ausgebildet sind. Verschiedene Ausführungsformen beziehen sich auch auf Einrichtungen oder Systeme zum Durchführen dieser Operationen. Diese Einrichtungen können speziell für den erforderlichen Zweck ausgebildet sein oder können einen Universalcomputer einschließen. Die erforderliche Struktur für eine Vielfalt dieser Maschinen wird anhand der gegebenen Beschreibung ersichtlich.
Es wird jetzt auf die Zeichnungen Bezug genommen, wobei durchgehend gleiche Bezugszeichen verwendet werden, um gleiche Elemente zu bezeichnen. In der nachfolgenden Beschreibung werden zu Erklärungszwecken zahlreiche konkrete Details dargelegt, um ein gründliches Verständnis davon zu schaffen. Es kann jedoch offensichtlich sein, dass die neuartigen Ausführungsformen ohne diese konkreten Details umgesetzt werden können. In anderen Fällen sind hinlänglich bekannte Strukturen und Vorrichtungen in Blockdiagrammform gezeigt, um eine Beschreibung davon zu erleichtern. Es sollen alle Modifikationen, Äquivalente und Alternativen innerhalb des Schutzumfangs der Ansprüche abgedeckt werden.
Allgemeiner können in einer oder mehreren Ausführungsformen Aufgaben durch entweder die Prioritätsaufgabenquelle 102 oder die Hauptaufgabenquelle 108 für die Durchführung einer Operation durch den Thread-Pool 120 bereitgestellt werden. In einigen Ausführungsformen werden Aufgaben und/oder Unteraufgaben zum Planen an den Aufgabenplaner 110 bereitgestellt. Um eine Aufgabe zu planen, kann der Aufgabenplaner 110 die Aufgabe einer von einer Vielzahl von Aufgabenwarteschlangen 118-1 , 118-2 , 118-n (oder Aufgabenwarteschlangen 118 ) in dem Aufgaben-Pool 116 zuweisen. In verschiedenen Ausführungsformen kann der Aufgabenplaner 110 ein nicht-präemptiver Aufgabenplaner sein. Sobald eine Aufgabe einer der Aufgabenwarteschlangen 118 zugewiesen ist, wird sie wiederum durch einen verbundenen aus einer Vielzahl von Worker-Threads 122-1 , 122-2 , 122-n (oder Worker-Threads 122 ) in dem Thread-Pool 120 durchgeführt. In vielen Ausführungsformen können Aufgaben 112 von der Hauptaufgabenquelle 108 in eine Anzahl von Unteraufgaben geteilt werden, die durch zwei oder mehrere der Worker-Threads 122 in dem Thread-Pool 120 parallel verarbeitet werden können. Zum Beispiel kann eine Aufgabe, die eine Parallelschleife darstellt, in Unteraufgaben geteilt werden, die jeweils einen Block des ursprünglichen Iterationsraums ausführen. In verschiedenen Ausführungsformen, um zu verhindern, dass das Verarbeiten von Aufgaben das Verarbeiten einer Aufgabe mit hoher Priorität von der Prioritätsaufgabenquelle 102 blockiert oder verzögert, können ein oder mehrere der Dynamikbereichspartitionierer 114 Partitionierungsgrößen oder Blockgrößen einstellen, um ein schnelleres Verarbeiten von Aufgaben mit hoher Priorität von der Prioritätsaufgabenquelle 102 zu ermöglichen.
In der veranschaulichten Ausführungsform schließt jede von der einen oder den mehreren Aufgaben 112 einen Dynamikbereichspartitionierer 114-A , 114-B , 114-Z (oder Dynamikbereichspartitionierer 114 ) ein. In solchen Ausführungsformen kann jeder der Dynamikbereichspartitionierer für das Partitionieren seiner jeweiligen Aufgaben und das Bereitstellen der partitionierten Aufgaben (d. h. Unteraufgaben) an den Aufgabenplaner 110 zuständig sein. In anderen Ausführungsformen kann ein Dynamikbereichspartitionierer ein Partitionieren bestimmen und partitionierte Aufgaben an den Aufgabenplaner 110 für eine Vielzahl von Aufgaben bereitstellen. In jedem Fall kann der Aufgabenplaner 110 dann die partitionierten Aufgaben zu einer oder mehreren der Aufgabenwarteschlangen 118 in dem Aufgaben-Pool 116 zur Ausführung durch einen entsprechenden der Worker-Threads 122 in dem Thread-Pool 120 zuweisen. Es versteht sich, dass eine Übereinstimmung zwischen der Anzahl von einem oder mehreren von den Sonden 104 , Aufgaben 112 , Dynamikbereichspartitionierern 114 , Aufgabenwarteschlangen 118 und Worker-Threads 122 bestehen kann oder nicht. Stattdessen kann in verschiedenen Ausführungsformen die Anzahl von einer oder mehreren hierin beschriebenen Komponenten wie erforderlich eingestellt werden, ohne vom Schutzumfang dieser Offenbarung abzuweichen. Zum Beispiel kann eine einzelne Sonde in Verbindung mit der Prioritätsaufgabenquelle 102 genutzt werden. In einem anderen Fall können mehrere Worker-Threads eine einzelne Aufgabenwarteschlange nutzen.
Viele hierin beschriebene Ausführungsformen können ein Softwaresystem einschließen, das die Gesamtanwendungsleistung für Anwendungen verbessert, die nicht-präemptive Planer verwenden, um sowohl Aufgaben von der Hauptaufgabenquelle 108 auszuführen als auch um Aufgaben mit hoher Priorität von der Prioritätsaufgabenquelle 102 auszuführen, die während der Ausführung von Aufgaben von der Hauptaufgabenquelle 108 auftreten können. In vielen Ausführungsformen können Aufgaben von der Hauptaufgabenquelle 108 parallelisierbare Aufgaben, wie Parallelschleifen und/oder Teilen-und-Herrschen-Algorithmus-Aufgaben, einschließen. Verschiedene Ausführungsformen nutzen eine schleifenoptimale Partitionierungsstrategie, wenn die Wahrscheinlichkeit, dass Aufgaben mit hoher Priorität eingeführt werden, klein ist, und eine responsive Partitionierungsstrategie während Programmphasen, wenn die Einführung von Aufgaben mit hoher Priorität wahrscheinlich ist (z. B. im Fall einer gleichzeitigen Abladung von Arbeit auf einen Beschleuniger). Vorteilhafte hierin beschriebene Ausführungsformen können eine oder mehrere der folgenden drei Komponenten einschließen: (1) eine oder mehrere Sonden 104 , die den System- und/oder Softwarezustand messen; (2) einen Schätzungsmanager 106 , der basierend auf durch die Sonden vorgenommene Messungen bestimmt, wie wahrscheinlich die Einführung von Aufgaben mit hoher Priorität ist; und (3) einen oder mehrere Dynamikbereichspartitionierer 114 , der als Reaktion auf die Wahrscheinlichkeit der Einfügung einer Aufgabe mit hoher Priorität eine Partitionierungsstrategie implementiert.
In verschiedenen Ausführungsformen kann die Prioritätsaufgabenquelle 102 einen Beschleuniger, wie einen Hardwarebeschleuniger, einschließen. In einigen Ausführungsformen kann der Beschleuniger eines oder mehrere von einer Grafikverarbeitungseinheit (Graphics Processing Unit, GPU), einem Hardwarebeschleuniger, einer feldprogrammierbaren Gatteranordnung (Field Programmable Gate Array, FPGA), einem Maschinenlernbeschleuniger, einem Verschlüsselungsbeschleuniger und dergleichen einschließen. In einer oder mehreren Ausführungsformen kann die Prioritätsaufgabenquelle 102 bestimmt werden, wie basierend auf einer Benutzereingabe. In einer oder mehreren solchen Ausführungsformen kann die Prioritätsaufgabenquelle als ein Teilsatz eines Satzes von Prozessorkernen bestimmt werden.
hierin beschriebenen Ausführungsformen. Der Prozessablauf 200 kann die Prioritätsaufgabenquelle 102 , die Sonde 104-1 , den Schätzungsmanager 106 , die Aufgabe 112-A und den Dynamikbereichspartitionierer 114-A einschließen. In einer oder mehreren hierin beschriebenen Ausführungsformen kann der Schätzungsmanager 106 die Schätzung 232 basierend auf dem Messsignal 230 erzeugen. In einer oder mehreren solchen Ausführungsformen kann der Dynamikbereichspartitionierer 114-A die Schätzung 232 nutzen, um eine Blockgröße 244 für Partitionierungsaufgaben, wie Parallelschleifen oder Teilen-und-Herrschen-Algorithmus-Aufgaben, zu bestimmen. In der veranschaulichten Ausführungsform kann der Schätzungsmanager 106 die Schätzung 232 , einen Schätzer 234 mit einer Wahrscheinlichkeitsfunktion 242 , Sondeneinstellungen 236 , Schätzungseinstellungen 238 und historische Daten 240 einschließen. Außerdem kann der Dynamikbereichspartitionierer 114-A die Blockgröße 244 , einen Blockmanager 246 , einen Schätzungsschwellwert 248 , eine Thread-Anzahl (P) 250, eine Iterationsanzahl (N) 252 und Partitionierereinstellungen 254 einschließen. Es versteht sich, dass alle Operationen, Techniken und/oder Komponenten, die in Bezug auf eine oder mehrere Komponenten in dem Prozessablauf 200 beschrieben sind, in Verbindung mit anderen hier beschriebenen Komponenten genutzt werden können. Zum Beispiel kann die Sonde 104-1 durch eine oder mehrere andere Sonden ersetzt werden und/oder kann der Dynamikbereichspartitionierer 114-A durch einen oder mehrere andere Dynamikbereichspartitionierer ersetzt werden. Ausführungsformen sind nicht auf diesen Kontext beschränkt.
In verschiedenen Ausführungsformen kann der Schätzer 234 eines oder mehrere von der Wahrscheinlichkeitsfunktion 242 , den Sondeneinstellungen 236 , den Schätzungseinstellungen 238 und den historischen Daten 240 nutzen, um die Schätzung 232 basierend auf dem Messsignal 230 zu erzeugen. In vielen Ausführungsformen kann die Schätzung 232 eine Wahrscheinlichkeit, dass Aufgaben mit hoher Priorität durch die Prioritätsaufgabenquelle 102 eingeführt werden, angeben. In verschiedenen Ausführungsformen kann die Schätzung 232 zu dem Blockmanager 246 des Dynamikbereichspartitionierers 114-A weitergeleitet werden. In einer oder mehreren Ausführungsformen kann der Blockmanager 246 eines oder mehrere von dem Schätzungsschwellwert 248 , der Thread-Anzahl (P) 250 , der Iterationsanzahl (N) 252 und den Partitionierereinstellungen 254 nutzen, um die Blockgröße 244 zu bestimmen. In einigen Ausführungsformen kann der Blockmanager 246 eines oder mehrere von dem Schätzungsschwellwert 248 , der Thread-Anzahl (P) 250 , der Iterationsanzahl (N) 252 und den Partitionierereinstellungen 254 nutzen, um eine Partitionierungsstrategie zu bestimmen, und die Partitionierungsstrategie kann durch den Blockmanager 246 genutzt werden, um die Blockgröße 244 zu bestimmen. In einer oder mehreren solchen Ausführungsformen kann die Blockgröße 244 die Größe von Aufgaben angeben, die dem Aufgabenplaner durch den Dynamikbereichspartitionierer 114-A bereitgestellt werden.
In der veranschaulichten Ausführungsform kann der Schätzer 234 das Messsignal 230 von der Sonde 104-1 empfangen. In einigen Ausführungsformen kann der Schätzer 234 Messsignale von einer Vielzahl von Sonden empfangen. In vielen Ausführungsformen kann der Schätzer 234 eines oder mehrere von den Sondeneinstellungen 236 , den Schätzungseinstellungen 238 und den historischen Daten 240 nutzen, um die Wahrscheinlichkeitsfunktion 242 zu erzeugen. Zum Beispiel können die historischen Daten 240 in Verbindung mit maschinellem Lernen verwendet werden, um die Wahrscheinlichkeitsfunktion 242 zu bestimmen. In verschiedenen Ausführungsformen kann die Wahrscheinlichkeitsfunktion 242 auf das Messsignal 230 angewendet werden, um die Schätzung 232 zu bestimmen.
In vielen Ausführungsformen kann das Messsignal 230 eine Betriebseigenschaft in Verbindung mit der Prioritätsaufgabenquelle angeben. Zum Beispiel können die Betriebseigenschaften eines oder mehrere von einem Softwarezustand oder einem Vorrichtungszustand angeben. In einigen Ausführungsformen kann der Softwarezustand eines oder mehrere von einem Warteschlangenzustand in einem Treiber für die Prioritätsaufgabenquelle, einer Angabe, dass Ergebnisse von einer Berechnung ausstehen, die auf die Prioritätsaufgabenquelle abgeladen wurde, einem Flag, einem Zustands-Bit, einem Registerwert und dergleichen einschließen. In verschiedenen Ausführungsformen kann der Vorrichtungszustand eines oder mehrere von einem Stromverbrauch, einem Energiezustand, einem Ruhezustand, einer Temperatur, einer Frequenz und dergleichen einschließen.
In verschiedenen Ausführungsformen können die Sondeneinstellungen 236 eine oder mehrere Eigenschaften der Sonde 104-1 und/oder der durch die Sonde 104-1 überwachten Prioritätsaufgabenquelle 102 angeben. Zum Beispiel können die Sondeneinstellungen 236 einen Sondentyp, einen Prioritätsaufgabenquellentyp oder ein Datenraten- oder Kommunikationsschema der Sonde angeben. In einigen Ausführungsformen können die Sondeneinstellungen 236 Sondenmetriken, wie was die Sonde misst, angeben. In verschiedenen Ausführungsformen können die Schätzungseinstellungen 238 eine oder mehrere Einstellungen in Verbindung mit der Erzeugung der Schätzung 232 und/oder der Wahrscheinlichkeitsfunktion 242 einschließen. Zum Beispiel können die Schätzungseinstellungen 238 den Schätzer 234 dazu veranlassen, vorsichtige Schätzungen (z. B. durch Abrunden) zu erzeugen. In einem anderen Fall können die Schätzungseinstellungen 238 bewirken, dass die Wahrscheinlichkeitsfunktion Messsignalen von bestimmten Sonden oder Messsignalen, die bestimmte Eigenschaften anzeigen, beim Bestimmen der Schätzung 232 mehr Gewicht gibt.
In verschiedenen Ausführungsformen kann die Schätzung 232 dem Dynamikbereichspartitionierer 114-A für die Bestimmung der Blockgröße 244 bereitgestellt werden. In vielen Ausführungsformen kann der Dynamikbereichspartitionierer 114-A periodisch Schätzungen von dem Schätzungsmanager 106 empfangen. In einigen Ausführungsformen können Schätzungen durch den Schätzungsmanager 106 auf Anforderung von dem Dynamikbereichspartitionierer 114-A bereitgestellt werden. In einer oder mehreren Ausführungsformen können Schätzungen durch den Schätzungsmanager 106 als Reaktion auf eine Angabe einer Wahrscheinlichkeit, dass eine Aufgabe mit hoher Priorität eingeführt wird, bereitgestellt werden. In einer oder mehreren solchen Ausführungsformen kann der Blockmanager 246 bei Nichtvorhandensein einer Schätzung von dem Schätzungsmanager 106 von einer niedrigen Wahrscheinlichkeit, dass eine Aufgabe mit hoher Priorität eingeführt wird, ausgehen.
In verschiedenen Ausführungsformen kann der Blockmanager 246 eines oder mehrere von dem Schätzungsschwellwert 248 , der Thread-Anzahl 250 , der Iterationsanzahl 252 und den Partitionierereinstellungen 254 nutzen, um die Blockgröße 244 basierend auf der Schätzung 232 zu bestimmen. Zum Beispiel kann der Blockmanager 246 eine erste Blockgröße, wenn die Schätzung 232 unterhalb des Schätzungsschwellwerts 248 ist, und eine zweite Blockgröße, wenn die Schätzung 232 oberhalb des Schätzungsschwellwerts 248 ist, auswählen. In solchen Beispielen kann die erste Blockgröße die Iterationsanzahl 252 geteilt durch die Thread-Anzahl 250 sein. In einigen Ausführungsformen kann die Thread-Anzahl 250 gleich der Anzahl von Worker-Threads 122 in dem Thread-Pool 120 sein, während die Iterationsanzahl 252 gleich der Anzahl der Male sein kann, die eine Schleife durchgeführt wird, wie in einer Zählschleife oder While-Schleife. In verschiedenen Ausführungsformen können die Partitionierereinstellungen 254 eine oder mehrere Einstellungen in Verbindung mit dem Bestimmen der Blockgröße 244 einschließen. In verschiedenen solchen Ausführungsformen können die Partitionierereinstellungen 254 basierend auf der Schätzung 232 angeben, welche Partitionierungsstrategie verwendet werden soll. Zum Beispiel können die Partitionierereinstellungen 254 angeben, dass die Blockgröße 244 N/P sein sollte, wenn die Schätzung 232 unterhalb des Schätzungsschwellwerts 248 ist. Dieses Beispiel wird in Bezug auf 3 weiter ausgeführt.
In dem Prozessablauf 300 kann die Sonde 304-1 überwachen, ob eine Laufzeitbibliothek in einer Laufzeit eine Berechnung von dem Host auf eine GPU (d. h. die Prioritätsaufgabenquelle 302 ) abgeladen hat und auf ein Ergebnis wartet. Entsprechend kann der Schätzungsmanager 306 das Messsignal 330 empfangen und in Block 360 bestimmen, ob die Laufzeit auf ein Ergebnis wartet. Wenn das System auf ein Ergebnis wartet, erzeugt der Schätzungsmanager 306 in Block 362 eine Schätzung von 1,0. Wenn jedoch das System nicht auf ein Ergebnis wartet, erzeugt der Schätzungsmanager 306 in Block 364 eine Schätzung von 0,0. In einigen Ausführungsformen können hierin beschriebene Merkmale und/oder Techniken in einer Laufzeitbibliothek enthalten sein. In einigen solchen Ausführungsformen können die Merkmale und/oder Techniken, die hierin beschrieben und in der Laufzeitbibliothek enthalten sind, optionale Merkmale sein, die selektiv aktiviert oder deaktiviert werden können.
In dem Prozessablauf 300 kann davon ausgegangen werden, dass die Anwendung eine einzelne Parallelschleife und einen einzelnen Dynamikbereichspartitionierer aufweist. Jedes Mal, wenn die Schleife ausgeführt wird, sieht sie sich die aktuelle Schätzung an und wählt eine Blockgröße von 1 aus, wenn die Wahrscheinlichkeit größer als 0,5 ist, was in einem maximal responsiven System resultiert, oder wählt ansonsten eine Blockgröße von N/P aus, was optimal performant für den Host ist. Entsprechend, wenn in Block 366 die Schätzung den Schwellwert (d. h. 0,5) überschreitet, wird in Block 368 eine Blockgröße von 1 bestimmt. Wenn jedoch in Block 366 die Schätzung unterhalb des Schwellwerts ist, wird in Block 370 eine Blockgröße von N/P bestimmt.
In anderen Ausführungsformen können andere Sondenmetriken genutzt werden. Zum Beispiel können die Sondenmetriken eines oder mehrere von einem Stromverbrauch von Beschleunigern, Warteschlangenlängen in Beschleunigertreibern oder dergleichen einschließen. In einigen Ausführungsformen können einige Schätzer wie weiter oben angegeben historische Daten verwenden. In einigen solchen Ausführungsformen können die historischen Daten verwendet werden, um eine Wahrscheinlichkeitsfunktion zu erzeugen, die eine Wahrscheinlichkeit im Laufe der Zeit angibt. Zum Beispiel kann es weniger wahrscheinlich sein, dass eine Aufgabe mit hoher Priorität eingefügt wird, unmittelbar nachdem Arbeit auf einen Beschleuniger abgeladen wird, aber die Wahrscheinlichkeit steigt über einen gewissen Zeitraum auf 1,0 an. In verschiedenen Ausführungsformen können Dynamikbereichspartitionierer eine große Vielfalt von Blockgrößen verwenden oder können kleinere Blöcke für nur einen Teilsatz von Threads erstellen, sodass sie reaktiv bleiben, während andere Threads weniger Overhead mit sich bringen. Einige dieser Alternativen sind in Bezug auf 4A-4C ausführlicher beschrieben.
Bezug nehmend auf 4A zeigt die Umgebung 400A ein beispielhaftes Partitionieren eines Bereichs [0, 100) für vier Threads, wenn der Schätzer eine niedrige Wahrscheinlichkeit für eine Aufgabe mit hoher Priorität bestimmt. In dieser Ausführungsform, wenn der Schätzer eine Wahrscheinlichkeit von 0,0 zurückgibt, verwendet der Dynamikbereichspartitionierer eine Blockgröße von N/P oder 100/4, was 25 entspricht. Deshalb schließt 4A vier Blätter in dem Baum ein, und jedes Blatt in diesem Baum stellt einen Unterbereich dar, der als eine Unteraufgabe ausgeführt wird. Mit anderen Worten ist der Bereich von [0, 100) in vier Unteraufgaben geteilt, wobei die erste Unteraufgabe [0, 25) einschließt, die zweite Unteraufgabe [25, 50) einschließt, die dritte Unteraufgabe [50, 75) einschließt und die vierte Unteraufgabe [75, 100) einschließt. Jede von diesen Unteraufgaben wird dann zur Ausführung geplant.
Bezug nehmend auf 4B zeigt die Umgebung 400B ein beispielhaftes Partitionieren eines Bereichs [0, 100) für vier Threads, wenn der Schätzer eine hohe Wahrscheinlichkeit für eine Aufgabe mit hoher Priorität bestimmt. In dieser Ausführungsform, wenn der Schätzer eine Wahrscheinlichkeit von 1,0 zurückgibt, verwendet der Dynamikbereichspartitionierer eine Blockgröße von 1. Deshalb schließt 4B 100 Blätter in dem Baum ein, und jedes Blatt in diesem Baum stellt einen Unterbereich dar, der als eine Unteraufgabe ausgeführt wird. Mit anderen Worten ist der Bereich von [0, 100) in 100 Unteraufgaben geteilt, wobei die erste Unteraufgabe [0, 1) einschließt, die zweite Unteraufgabe [1, 2) einschließt, die dritte Unteraufgabe [2, 3) einschließt und so weiter, wobei die 100. Unteraufgabe [99, 100) einschließt. Jede von diesen Unteraufgaben wird dann zur Ausführung geplant.
Bezug nehmend auf 4C zeigt die Umgebung 400C ein adaptiveres Schema für eine Arbeitspartitionierung. Die feingranuläre Arbeitsteilung der Umgebung 400B kann exzessiv sein, wenn eine Kommunikation mit der Prioritätsaufgabenquelle selten ist, wie wenn jeder Thread die zusätzlichen Planungs-Overheads mit sich bringt, selbst wenn nur ein Thread benötigt wird, um zu antworten, wenn eine asynchrone Kommunikation stattfindet. Entsprechend veranschaulicht die Umgebung 400C eine hybride Partitionierungsstrategie, die genutzt werden kann. Die hybride Partitionierungsstrategie kann P-1-große Blätter für P-1 des Worker-Threads erstellen, während kleinere Unteraufgaben für einen der Threads erstellt werden. In verschiedenen Ausführungsformen kann es dies dem Thread mit kleineren Unteraufgaben ermöglichen, reaktiv auf Aufgaben mit hoher Priorität zu bleiben.
In einigen hierin beschriebenen Ausführungsformen wird angenommen, dass die Blockgröße zu dem Zeitpunkt, zu dem eine Schleifenausführung gestartet wird, fest ist. In anderen Ausführungsformen kann die Größe des Unterbereichs dynamisch eingestellt werden, wenn die Schleife ausgeführt wird. Dies kann darin resultieren, dass kleinere oder größere Unteraufgabengrößeneinstellungen vorgenommen werden müssen, selbst während die Schleife ausgeführt wird. Ein Hauptunterscheidungsmerkmal in verschiedenen hierin beschriebenen Ausführungsformen kann die Auswahl eines Partitionierungsschemas und/oder einer Blockgröße basierend auf einer vorhergesagten Wahrscheinlichkeit einschließen, dass der Aufgabenplaner Aufgaben mit hoher Priorität, die ankommen, während eine Aufgabe ausgeführt wird, schnell bedienen muss. Jedoch kann aus einem breiten Spektrum von Partitionierungsstrategien ausgewählt werden.
Zum Beispiel kann eine der Partitionierungsstrategien einen dynamischen Planungsansatz einschließen, der auf eine Anforderung von Arbeit reagiert, indem er den Bereich einer Schleife weiter teilt, kann genutzt werden. Entsprechend kann ein Anforderungs-Flag verwendet werden, um zu detektieren, wann zusätzliche Threads einen Teil des Bereichs einer Schleife ausführen. Wenn keine Anforderung von Arbeit besteht, wird der Bereich nicht so fein geteilt. Dieser Ansatz kann auf ein aktuelles Systemverhalten reagieren, wobei die Anforderung der Arbeit, die durch die Schleife erzeugt wird, geplant wird. In einem anderen Beispiel kann eine Partitionierungsstrategie verwendet werden, die präemptive Aufgaben nutzt, die es Aufgaben mit hoher Priorität ermöglicht, Aufgaben mit niedrigerer Priorität präemptiv zu unterbrechen. In solchen Beispielen kann ein Softwaresystem verwendet werden, in dem Aufgaben zur vollständigen Ausführung dynamisch zu unterbrechbaren Aufgaben höhergestuft werden können. Ein solches System kann verwendet werden, um die höheren Kosten durch ein ständiges Verwenden von präemptiven Aufgaben dadurch zu mindern, dass nur Aufgaben zur vollständigen Ausführung auf einen unterbrechbaren Modus höhergestuft werden, wenn vorhergesagt wird, dass Aufgaben mit höherer Priorität in das System eintreten.
In der Mikro-Benchmark ist ein Atomzähler vorhanden, der eine number_of_items, die zu verarbeiten sind, verfolgt. Ein Beschleuniger und ein Host teilen diesen Zähler, und beide konkurrieren, um Arbeitselemente auszuführen. Arbeitselemente führen num_iterations_per_item Iterationen aus, die jeweils eine Zeit TIteration dauern, um auf einer Host-CPU ausgeführt zu werden, und α * TIteration, um auf dem Beschleuniger ausgeführt zu werden, wobei α für einen Beschleunigungsfaktor steht. Zum Beispiel gibt ein Beschleunigungsfaktor von 0,1 an, dass der Beschleuniger ein Element 10x schneller als ein CPU-Kern verarbeitet.
Der Beschleuniger in dem Pseudocode führt eine While-Schleife aus, wodurch der number_of_items-Zähler unter Verwendung eines fetch_and_decrement in jeder Iteration atomar verringert wird. Wenn der abgerufene Wert größer als 1 ist, „verarbeitet der Beschleuniger ein Element“. Das Verarbeiten wird durch eine Schleife simuliert, die num_iterations_per_item Iterationen ausführt, wobei sie sich für α * TIteration in jeder Iteration dreht. Nach dem Verarbeiten des Elements fügt der Beschleuniger eine Aufgabe mit hoher Priorität für den Host ein. Erst nachdem der Host die Aufgabe mit hoher Priorität ausgeführt hat, kann der Beschleuniger ein neues Element zum Ausführen erhalten. Dieses Verhalten versucht, eine hybride Anwendung nachzuahmen, die Arbeit zwischen der CPU und dem Beschleuniger verteilt, aber die Arbeit koordinieren muss.
Der Host in dem Pseudocode führt ebenfalls eine While-Schleife aus. Wenn er ein Arbeitselement erhält, verarbeitet er das Arbeitselement, indem er eine TBB parallel_for-Schleife über den Bereich des Elements ausführt. In dem durchgeführten Test werden vier Gesamt-Host-Threads verwendet, der Haupt-Host-Thread plus drei Worker-Threads. Die für die Mikro-Benchmark erfassten Ergebnisse unter Verwendung von Arbeitselementen, die 1 Sekunde CPU-Arbeit enthalten, sodass Titem = 1 Sekunde. Die gesamte Wanduhrzeit bei Ausführung auf einem einzelnen CPU-Kern wäre deshalb Ttotal = number_of_items * Titem und Titem = num_iterations_per_item * Titeration.
Zum Vergleich wurde num_iterations_per_item variiert und wurde die Ausführungszeit der Mikro-Benchmark beim Verwenden eines tbb::static_partitioner gemessen (N/P Iterationen je Block, was für diese ausgeglichene Arbeitslast optimal ist, wenn nur der Host verwendet wird). Der statische Partitionierer beschränkt das Teilen der Arbeit. Somit kann die Anzahl von Unterbereichen durch die Anzahl beteiligter CPU-Threads beschränkt werden und sind die Worker-Threads nicht dazu in der Lage, auf die Handshake-Aufgabe mit hoher Priorität zu reagieren, bis eine von diesen den großen Block CPU-Arbeit beendet, der ihnen zugewiesen wurde. Entsprechend zeigt das Diagramm 502 die Verbesserung für die Mikro-Benchmark, wenn die offenbarten Techniken anstelle eines schleifenoptimalen statischen Partitionierers verwendet werden.
In dem Diagramm 502 , wenn nur wenige Iterationen je Arbeitselement vorhanden sind (d. h. in Richtung der linken Seite des Diagramms 502 ), bleibt die Zeit je Iteration hoch und ist N/P ungefähr gleich 1, was eine mäßige Verbesserung angibt. Wenn die Anzahl von Iterationen je Arbeitselement sehr hoch ist (d. h. in Richtung der rechten Seite des Diagramms 502 ), ist die Zeit für eine einzelne Iteration sehr niedrig und beginnen Planungs-Overheads zu dominieren, wenn die Blockgröße auf eins gesetzt ist, was eine mäßige Verbesserung angibt. Wenn jedoch N/P » 1 und Planungs-Overheads für Aufgaben mit einer Blockgröße von eins angemessen ist (d. h. in der Mitte des Diagramms 502 ), ist die Leistung deutlich verbessert. Wenn der Beschleuniger 10x oder 100x schneller als ein einzelner CPU-Kern ist, kann eine Abladung auf den Beschleuniger wichtig sein, um eine gute Leistung zu erhalten, und die hierin offenbarten Techniken können es dem Host ermöglichen, auf die Handshake-Aufgaben von dem Beschleuniger zu reagieren und damit fortzufahren, ihm mehr Arbeit zuzuführen. Ohne die hierin offenbarten Techniken kann der Host nur auf den Beschleuniger reagieren, nachdem er seine eigene Arbeit beendet hat, wodurch die nächste Abladung auf den Beschleuniger verzögert wird.
In den veranschaulichten Beispielen kann der Logikfluss 600 in Block 602 beginnen. In Block 602 „Identifizieren eines von einer Sonde empfangenen Messsignals, wobei das Messsignal eine Betriebseigenschaft in Verbindung mit einer Prioritätsaufgabenquelle angeben soll“ kann ein Messsignal identifiziert werden, dass eine Betriebseigenschaft in Verbindung mit einer Prioritätsaufgabenquelle angibt. Zum Beispiel kann der Schätzungsmanager 106 das Messsignal 230 identifizieren, das von der Sonde 104-1 empfangen wird. In solchen Beispielen kann das Messsignal 230 eine Betriebseigenschaft in Verbindung mit der Prioritätsaufgabenquelle 102 angeben. Fortfahrend zu Block 604 „Erzeugen einer Schätzung basierend auf dem von der Sonde empfangenen Messsignal, wobei die Schätzung eine Wahrscheinlichkeit, dass die Prioritätsaufgabenquelle eine Aufgabe mit hoher Priorität erzeugt, angeben soll“ kann eine Schätzung, die eine Wahrscheinlichkeit, dass die Prioritätsaufgabenquelle eine Aufgabe mit hoher Priorität erzeugt, angibt, basierend auf dem Messsignal erzeugt werden. Zum Beispiel kann der Schätzer 234 eines oder mehrere von der Wahrscheinlichkeitsfunktion 242 , den Sondeneinstellungen 236 , den Schätzungseinstellungen 238 und den historischen Daten 240 nutzen, um die Schätzung 232 basierend auf dem Messsignal 230 zu erzeugen.
Fortfahrend zu Block 606 „Bestimmen einer Blockgröße für eine parallelisierbare Aufgabe basierend auf der Schätzung“ kann eine Blockgröße für eine parallelisierbare Aufgabe basierend auf der Schätzung bestimmt werden. Zum Beispiel kann der Blockmanager 246 die Blockgröße 244 für die Aufgabe 112-A basierend auf der Schätzung 232 bestimmen. In einigen solchen Beispielen kann der Blockmanager 246 die Blockgröße 244 für die Aufgabe 112-A basierend auf der Schätzung 232 und einem oder mehreren von dem Schätzungsschwellwert 248 , der Thread-Anzahl 250 , der Iterationsanzahl 252 und den Partitionierereinstellungen 254 bestimmen. In Block 608 „Partitionieren der parallelisierbaren Aufgabe in eine Vielzahl von Unteraufgaben basierend auf der Blockgröße“ kann die parallelisierbare Aufgabe basierend auf der Blockgröße in eine Vielzahl von Unteraufgaben partitioniert werden. Zum Beispiel kann der Dynamikbereichspartitionierer 114-A die Aufgabe 112-A basierend auf der Blockgröße 244 in eine Vielzahl von Unteraufgaben partitionieren. Fortfahrend zu Block 610 „Zuweisen, zur Ausführung, von einer oder mehreren der Vielzahl von Unteraufgaben zu zumindest einer Aufgabenwarteschlange in einem Aufgaben-Pool“ können eine oder mehrere der Vielzahl von Unteraufgaben zu zumindest einer Aufgabenwarteschlange in einem Aufgaben-Pool zur Ausführung zugewiesen werden. Zum Beispiel kann ein Aufgabenplaner 110 eine oder mehrere von einer Vielzahl von Unteraufgaben, die durch den dynamischen Partitionierer 114-B basierend auf der Aufgabe 112-B erzeugt werden, der Aufgabenwarteschlange 118-2 des Aufgaben-Pools 116 zuweisen. In solchen Beispielen können die eine oder die mehreren der Vielzahl von Unteraufgaben der Aufgabenwarteschlange 118-2 zur Ausführung durch den Worker-Thread 112-2 des Thread-Pools 120 zugewiesen werden.
Wie in dieser Anmeldung verwendet, sollen sich die Begriffe „System“ und „Komponente“ und „Modul“ auf eine computerbezogene Entität, entweder Hardware, eine Kombination von Hardware und Software, Software oder Software in Ausführung, beziehen, wofür Beispiele durch die beispielhafte Rechenarchitektur 800 bereitgestellt werden. Zum Beispiel kann eine Komponente ein Prozess, der auf einem Prozessor ausgeführt wird, ein Prozessor, ein Festplattenlaufwerk, mehrere Speicherlaufwerke (eines optischen und/oder magnetischen Speichermediums), ein Objekt, eine ausführbare Datei, ein Ausführungs-Thread, ein Programm und/oder ein Computer sein, ist aber nicht hierauf beschränkt. Zur Veranschaulichung können sowohl eine Anwendung, die auf einem Server ausgeführt wird, als auch der Server eine Komponente sein. Eine oder mehrere Komponenten können sich in einem Prozess und/oder Ausführungs-Thread befinden, und eine Komponente kann auf einem Computer lokalisiert und/oder zwischen zwei oder mehreren Computern verteilt sein. Ferner können Komponenten durch verschiedene Typen von Kommunikationsmedien kommunikativ aneinander gekoppelt sein, um Operationen zu koordinieren. Die Koordination kann den unidirektionalen oder bidirektionalen Austausch von Informationen beinhalten. Zum Beispiel können die Komponenten Informationen in Form von Signalen kommunizieren, die über die Kommunikationsmedien kommuniziert werden. Die Informationen können als Signale implementiert werden, die verschiedenen Signalleitungen zugeordnet sind. In solchen Zuordnungen ist jede Nachricht ein Signal. In weiteren Ausführungsformen können jedoch alternativ dazu Datennachrichten eingesetzt werden. Solche Datennachrichten können über verschiedene Verbindungen hinweg gesendet werden. Beispielhafte Verbindungen schließen parallele Schnittstellen, serielle Schnittstellen und Busschnittstellen ein.
Die Rechenarchitektur 800 schließt verschiedene gebräuchliche Rechenelemente, wie einen oder mehrere Prozessoren, Mehrkernprozessoren, Co-Prozessoren, Speichereinheiten, Chipsätze, Controller, Peripheriegeräte, Schnittstellen, Oszillatoren, Zeitsteuerungsvorrichtungen, Videokarten, Audiokarten, Multimedia-Eingabe/Ausgabe-Komponenten (Multimedia-E/A-Komponenten), Stromversorgungen und dergleichen, ein. Die Ausführungsformen sind jedoch nicht auf eine Implementierung durch die Rechenarchitektur 800 beschränkt.
Wie in 8 gezeigt, umfasst die Rechenarchitektur 800 eine Verarbeitungseinheit 804 , einen Systemspeicher 806 und einen Systembus 808 . Die Verarbeitungseinheit 804 kann ein beliebiger von verschiedenen im Handel erhältlichen Prozessoren sein, unter anderem AMD® Athlon®-, Duron®- und Opteron®-Prozessoren; eingebettete und sichere ARM®-Anwendungsprozessoren; IBM®- und Motorola® DragonBall®- und PowerPC®-Prozessoren; IBM- und Sony® Cell-Prozessoren; Intel® Celeron®-, Core (2) Duo®-, Itanium®-, Pentium®-, Xeon®- und XScale®-Prozessoren und ähnliche Prozessoren. Duale Mikroprozessoren, Mehrkernprozessoren und andere Multiprozessorarchitekturen können ebenfalls als die Verarbeitungseinheit 804 eingesetzt werden.
Der Systembus 808 stellt eine Schnittstelle für Systemkomponenten, einschließlich, aber nicht beschränkt auf den Systemspeicher 806 , an die Verarbeitungseinheit 804 bereit. Der Systembus 808 kann ein beliebiger von verschiedenen Typen einer Busstruktur sein, die weiter mit einem Speicherbus (mit oder ohne einem Speicher-Controller), einem Peripheriebus und einem lokalen Bus unter Verwendung einer beliebigen von einer Vielfalt von im Handel erhältlichen Busarchitekturen verbunden werden können. Schnittstellenadapter können über eine Steckplatzarchitektur mit dem Systembus 808 verbunden werden. Beispielhafte Steckplatzarchitekturen können unter anderem Accelerated Graphics Port (AGP), Card Bus, (Extended) Industry Standard Architecture ((E)ISA), Micro Channel Architecture (MCA), NuBus, Peripheral Component Interconnect (Extended) (PCI(X)), PCI Express, Personal Computer Memory Card International Association (PCMCIA) und dergleichen einschließen.
Der Systemspeicher 806 kann verschiedene Typen von computerlesbaren Speichermedien in Form von einer oder mehreren Speichereinheiten mit höheren Geschwindigkeiten, wie Festwertspeicher (Read-Only Memory, ROM), Arbeitsspeicher (Random-Access Memory, RAM), dynamischen RAM (DRAM), DRAM mit doppelter Datenrate (Double-Data-Rate DRAM, DDRAM), synchronen DRAM (SDRAM), statischen RAM (SRAM), programmierbaren ROM (PROM), löschbaren programmierbaren ROM (Erasable Programmable ROM, EPROM), elektrisch löschbaren programmierbaren ROM (Electrically Erasable Programmable ROM, EEPROM), Flash-Speicher (z. B. ein oder mehrere Flash-Arrays), Polymerspeicher, wie ferroelektrischen Polymerspeicher, Ovonic-Speicher, Phasenwechsel- oder ferroelektrischen Speicher, Silizium-Oxid-Nitrid-Oxid-Silizium(SONOS)-Speicher, Magnetkarten oder optische Karten, ein Array von Vorrichtungen, wie Laufwerke mit einer redundanten Anordnung unabhängiger Festplatten (Redundant Array of Independent Disks, RAID), Halbleiterspeichervorrichtungen (z. B. USB-Speicher, Festkörperlaufwerke (Solid State Drives, SSDs) und einen beliebigen anderen Typ von Speichermedien, der zum Speichern von Informationen geeignet ist, einschließen. In der veranschaulichten Ausführungsform, die in 8 gezeigt ist, kann der Systemspeicher 806 den nicht-flüchtigen Speicher 810 und/oder den flüchtigen Speicher 812 einschließen. In einigen Ausführungsformen kann der Systemspeicher 806 Hauptspeicher einschließen. Ein Basic Input Output System (BIOS) kann in dem nicht-flüchtigen Speicher 810 gespeichert sein.
Der Computer 802 kann verschiedene Typen von computerlesbaren Speichermedien in Form von einer oder mehreren Speichereinheiten niedrigerer Geschwindigkeit, einschließlich eines internen (oder externen) Festplattenlaufwerks (Hard Disk Drive, HDD) 814 , eines magnetisches Diskettenlaufwerks (Magnetic Floppy Disk Drive, FDD) 816 zum Lesen von einer oder Schreiben auf eine Wechselmagnetplatte 818 und eines optischen Plattenlaufwerks 820 zum Lesen von einer oder Schreiben auf eine optische(n) Wechselplatte 822 (z. B. eine CD-ROM oder DVD), einschließen. Das HDD 814 , das FDD 816 und das optische Plattenlaufwerk 820 können über eine HDD-Schnittstelle 824 , eine FDD-Schnittstelle 826 bzw. eine Schnittstelle für ein optisches Laufwerk 828 mit dem Systembus 808 verbunden werden. Die HDD-Schnittstelle 824 für Implementierungen eines externen Laufwerks kann zumindest eines oder beides von Schnittstellentechnologien für Universal Serial Bus (USB) und Institute of Electrical and Electronics Engineers (IEEE) 994 einschließen. In verschiedenen Ausführungsformen können diese Typen von Speicher nicht in Hauptspeicher oder Systemspeicher enthalten sein.
Die Laufwerke und zugehörigen computerlesbaren Medien stellen eine flüchtige und/oder nicht-flüchtige Speicherung von Daten, Datenstrukturen, computerausführbaren Anweisungen und dergleichen bereit. Zum Beispiel kann eine Anzahl von Programmmodulen in den Laufwerken und Speichereinheiten 810 , 812 gespeichert werden, einschließlich eines Betriebssystems 830 , eines oder mehrerer Anwendungsprogramme 832 , anderer Programmmodule 834 und Programmdaten 836 . In einer Ausführungsform können die eine oder die mehreren Anwendungsprogramme 832 , anderen Programmmodule 834 und Programmdaten 836 zum Beispiel die verschiedenen hierin beschriebenen Techniken, Anwendungen und/oder Komponenten einschließen oder implementieren.
Ein Benutzer kann durch eine oder mehrere drahtverbundene/drahtlose Eingabevorrichtungen, zum Beispiel eine Tastatur 838 und eine Zeigevorrichtung, wie eine Maus 840 , Befehle und Informationen in den Computer 802 eingeben. Andere Eingabevorrichtungen können Mikrofone, Infrarot-Fernbedienungen (IR-Fernbedienungen), Funkfrequenz-Fernbedienungen (RF-Fernbedienungen), Gamepads, Eingabestifte, Kartenleser, Dongles, Fingerabdruckleser, Handschuhe, Grafik-Tablets, Joysticks, Tastaturen, Netzhautleser, Touchscreens (z. B. kapazitiv, resistiv usw.), Trackballs, Trackpads, Sensoren und dergleichen einschließen. Diese und andere Eingabevorrichtungen werden häufig durch eine Eingabevorrichtungsschnittstelle 842 , die an den Systembus 808 gekoppelt ist, mit der Verarbeitungseinheit 804 verbunden, können aber durch andere Schnittstellen, wie einen parallelen Port, einen seriellen IEEE 994-Port, einen Gameport, einen USB-Port, eine IR-Schnittstelle und dergleichen, verbunden werden.
Ein Monitor 844 oder anderer Typ von Anzeigevorrichtung wird ebenfalls über eine Schnittstelle, wie einen Videoadapter 846 , mit dem Systembus 808 verbunden. Der Monitor 844 kann innerhalb oder außerhalb des Computers 802 sein. Zusätzlich zu dem Monitor 844 schließt ein Computer üblicherweise andere periphere Ausgabevorrichtungen, wie Lautsprecher, Drucker und dergleichen, ein.
Der Computer 802 kann in einer vernetzten Umgebung unter Verwendung von logischen Verbindungen über drahtverbundene und/oder drahtlose Kommunikationen zu einem oder mehreren Remote-Computern, wie einem Remote-Computer 848 , betrieben werden. In verschiedenen Ausführungsformen können eine oder mehrere hierin beschriebene Interaktionen über die vernetzte Umgebung erfolgen. Der Remote-Computer 848 kann eine Arbeitsstation, ein Servercomputer, ein Router, ein Personal Computer, ein tragbarer Computer, ein mikroprozessorbasiertes Unterhaltungsgerät, eine Peer-Vorrichtung oder ein anderen Knoten eines gemeinsamen Netzwerks sein und schließt üblicherweise viele oder alle der bezogen auf den Computer 802 beschriebenen Elemente ein, wenngleich, der Kürze halber, nur eine Arbeitsspeicher-/Speichervorrichtung 850 veranschaulicht ist. Die dargestellten logischen Verbindungen schließen drahtverbundene/drahtlose Konnektivität zu einem lokalen Netzwerk (Local Area Network, LAN) 852 und/oder größeren Netzwerken, zum Beispiel einem Weitverkehrsnetzwerk (Wide Area Network, WAN) 854 , ein. Solche LAN- und WAN-Netzwerkumgebungen sind in Büros und Unternehmen weitverbreitet und unterstützen unternehmensweite Computernetzwerke, wie Intranets, die alle mit einem globalen Kommunikationsnetzwerk, zum Beispiel dem Internet, verbunden werden können.
Bei Verwendung in einer LAN-Netzwerkumgebung wird der Computer 802 durch eine drahtverbundene und/oder drahtlose Kommunikationsnetzwerkschnittstelle oder einen Adapter 856 mit dem LAN 852 verbunden. Der Adapter 856 kann drahtverbundene und/oder drahtlose Kommunikationen zu dem LAN 852 unterstützen, was auch einen darauf angeordneten drahtlosen Zugangspunkt zum Kommunizieren mit der drahtlosen Funktionalität des Adapters 856 einschließen kann.
Bei Verwendung in einer WAN-Netzwerkumgebung kann der Computer 802 ein Modem 858 einschließen oder ist mit einem Kommunikationsserver auf dem WAN 854 verbunden oder weist ein anderes Mittel zum Herstellen von Kommunikationen über das WAN 854 , wie mittels des Internets, auf. Das Modem 858 , das intern oder extern und eine drahtverbundene und/oder drahtlose Vorrichtung sein kann, wird über die Eingabevorrichtungsschnittstelle 842 mit dem Systembus 808 verbunden. In einer vernetzten Umgebung können Programmmodule, die bezogen auf den Computer 802 dargestellt sind, oder Abschnitte davon, in der Remote-Arbeitsspeicher-/Speichervorrichtung 850 gespeichert werden. Es versteht sich, dass die gezeigten Netzwerkverbindungen beispielhaft sind und andere Mittel zum Herstellen einer Kommunikationsverbindung zwischen den Computern verwendet werden können.
Der Computer 802 ist betreibbar zum Kommunizieren mit drahtverbundenen und drahtlosen Vorrichtungen oder Entitäten unter Verwendung der IEEE 802-Standardfamilie, wie drahtlosen Vorrichtungen, die in einer drahtlosen Kommunikation (z. B. IEEE 802.16-Over-The-Air-Modulationstechniken) betreibbar angeordnet sind. Dies schließt unter anderem zumindest drahtlose Technologien für Wi-Fi (oder Wireless Fidelity), WiMax und Bluetooth™ ein. Somit kann die Kommunikation eine vordefinierte Struktur, wie bei einem herkömmlichen Netzwerk, oder lediglich eine Ad-hoc-Kommunikation zwischen zumindest zwei Vorrichtungen sein. Wi-Fi-Netzwerke verwenden Funktechnologien, die IEEE 802.11x (a, b, g, n usw.) genannt werden, um eine sichere, zuverlässige, schnelle drahtlose Konnektivität bereitzustellen. Ein Wi-Fi-Netzwerk kann verwendet werden, um Computer miteinander, mit dem Internet und mit drahtverbundenen Netzwerken (die IEEE 802.3-bezogene Medien und Funktionen verwenden) zu verbinden.
Wie in 9 gezeigt, umfasst die Kommunikationsarchitektur 900 einen oder mehrere Clients 902 und Server 904 . In einigen Ausführungsformen kann die Kommunikationsarchitektur einen oder mehrere Abschnitte von hierin beschriebenen Komponenten, Anwendungen und/oder Techniken einschließen oder implementieren. Die Clients 902 und die Server 904 sind operativ mit einem oder mehreren jeweiligen Client-Datenspeichern 908 und Server-Datenspeichern 910 verbunden, die eingesetzt werden können, um Informationen, wie Cookies und/oder zugehörige kontextbezogene Informationen, lokal auf den jeweiligen Clients 902 und Servern 904 zu speichern. In verschiedenen Ausführungsformen kann ein beliebiger der Server 904 eines oder mehrere von hierin beschriebenen Logikflüssen oder Operationen und das Speichermedium 700 von 7 in Verbindung mit der Speicherung von Daten, die von einem beliebigen der Clients 902 auf einem beliebigen der Server-Datenspeicher 910 empfangen werden, implementieren. In einer oder mehreren Ausführungsformen können ein oder mehrere der Client-Datenspeicher 908 oder Server-Datenspeicher 910 Speicher einschließen, der für einen oder mehrere Abschnitte von hierin beschriebenen Komponenten, Anwendungen und/oder Techniken zugänglich ist.
Die Clients 902 und die Server 904 können Informationen untereinander unter Verwendung eines Kommunikationsrahmenwerks 906 kommunizieren. Das Kommunikationsrahmenwerk 906 kann alle hinlänglich bekannten Kommunikationstechniken und -protokolle implementieren. Das Kommunikationsrahmenwerk 906 kann als ein paketvermitteltes Netzwerk (z. B. öffentliche Netzwerke, wie das Internet, private Netzwerke, wie ein Unternehmensintranet, und dergleichen), ein leitungsvermitteltes Netzwerk (z. B. das öffentliche Telefonnetz) oder eine Kombination von einem paketvermittelten Netzwerk und einem leitungsvermittelten Netzwerk (mit geeigneten Gateways und Translatoren) implementiert werden.
Das Kommunikationsrahmenwerk 906 kann verschiedene Netzwerkschnittstellen implementieren, die angeordnet sind, um ein Kommunikationsnetzwerk zu akzeptieren, damit zu kommunizieren und eine Verbindung damit herzustellen. Eine Netzwerkschnittstelle kann als eine spezialisierte Form einer Eingabe-Ausgabe-Schnittstelle betrachtet werden. Netzwerkschnittstellen können Verbindungsprotokolle, einschließlich unter anderem eine Direktverbindung, Ethernet (z. B. Thick, Thin, Twisted Pair 10/100/1900 Base T und dergleichen), Token Ring, drahtlose Netzwerkschnittstellen, Mobilfunknetzwerkschnittstellen, IEEE 802.11a-x-Netzwerkschnittstellen, IEEE 802.16-Netzwerkschnittstellen, IEEE 802.20-Netzwerkschnittstellen und dergleichen, einsetzen. Ferner können mehrere Netzwerkschnittstellen verwendet werden, um mit verschiedenen Kommunikationsnetzwerktypen zusammenzuwirken. Zum Beispiel können mehrere Netzwerkschnittstellen eingesetzt werden, um die Kommunikation über Broadcast-, Multicast- und Unicast-Netzwerke zu ermöglichen. Falls Verarbeitungsanforderungen ein höheres Maß an Geschwindigkeit und Kapazität verlangen, können verteilte Netzwerk-Controller-Architekturen auf ähnliche Weise eingesetzt werden, um die durch die Clients 902 und die Server 904 geforderte Kommunikationsbandbreite zu bündeln, einen Lastausgleich hierfür durchzuführen und diese auf andere Weise zu erhöhen. Ein Kommunikationsnetzwerk kann ein beliebiges und die Kombination von drahtverbundenen und/oder drahtlosen Netzwerken, einschließlich unter anderem eine direkte Verschaltung, eine gesicherte benutzerdefinierte Verbindung, ein privates Netzwerk (z. B. ein Unternehmensintranet), ein öffentliches Netzwerk (z. B. das Internet), ein persönliches Netzwerk (Personal Area Network, PAN), ein lokales Netzwerk (Local Area Network, LAN), ein Stadtnetzwerk (Metropolitan Area Network, MAN), ein Operating Missions as Nodes on the Internet (OMNI), ein Weitverkehrsnetzwerk (Wide Area Network, WAN), ein drahtloses Netzwerk, ein Mobilfunknetz und andere Kommunikationsnetzwerke, sein.
Verschiedene Ausführungsformen können unter Verwendung von Hardwareelementen, Softwareelementen oder einer Kombination von beiden implementiert werden. Beispiele für Hardwareelemente können Prozessoren, Mikroprozessoren, Schaltungen, Schaltungselemente (z. B. Transistoren, Widerstände, Kondensatoren, Induktoren und dergleichen), integrierte Schaltungen, anwendungsspezifische integrierte Schaltungen (Application-Specific Integrated Circuits, ASIC), programmierbare Logikvorrichtungen (Programmable Logic Devices, PLD), Digitalsignalprozessoren (DSP), eine anwenderprogrammierbare Gatteranordnung (Field Programmable Gate Array, FPGA), Logikgatter, Register, eine Halbleitervorrichtung, Chips, Mikrochips, Chipsätze und dergleichen einschließen. Beispiele für Softwareelemente können Softwarekomponenten, Programme, Anwendungen, Computerprogramme, Anwendungsprogramme, Systemprogramme, Maschinenprogramme, Betriebssystemsoftware, Middleware, Firmware, Softwaremodule, Routinen, Subroutinen, Funktionen, Verfahren, Prozeduren, Softwareschnittstellen, Anwendungsprogrammierschnittstellen (Application Programming Interfaces, API), Anweisungssätze, Rechencode, Computercode, Codesegmente, Computercodesegmente, Wörter, Werte, Symbole oder eine beliebige Kombination davon einschließen. Das Bestimmen, ob eine Ausführungsform unter Verwendung von Hardwareelementen und/oder Softwareelementen implementiert wird, kann gemäß einer beliebigen Anzahl von Faktoren variieren, wie der gewünschten Rechenrate, den Leistungsniveaus, den Wärmetoleranzen, dem Verarbeitungszyklusbudget, den Eingangsdatenraten, den Ausgangsdatenraten, den Speicherressourcen, den Datenbusgeschwindigkeiten und anderen Design- oder Leistungsbeschränkungen.
Ein oder mehrere Aspekte von zumindest einer Ausführungsform können durch typische Anweisungen implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logik in dem Prozessor darstellt, die, wenn sie durch eine Maschine gelesen wird, die Maschine dazu veranlasst, Logik zum Durchführen der hierin beschriebenen Techniken herzustellen. Diese Darstellungen, bekannt als „IP-Kerne“, können auf einem greifbaren, maschinenlesbaren Medium gespeichert und für verschiedene Kunden oder Herstellungseinrichtungen bereitgestellt werden, um in die Herstellungsmaschinen geladen zu werden, die die Logik oder den Prozessor tatsächlich herstellen. Einige Ausführungsformen können zum Beispiel unter Verwendung eines maschinenlesbaren Mediums oder Elements implementiert werden, das eine Anweisung oder einen Anweisungssatz speichern kann, die/der bei Ausführung durch eine Maschine die Maschine dazu veranlassen kann, ein Verfahren und/oder Operationen gemäß den Ausführungsformen durchzuführen. Eine solche Maschine kann zum Beispiel jede/n/s geeignete/n Verarbeitungsplattform, Rechenplattform, Rechenvorrichtung, Verarbeitungsvorrichtung, Rechensystem, Verarbeitungssystem, Computer, Prozessor oder dergleichen einschließen und kann unter Verwendung von jeder geeigneten Kombination von Hardware und/oder Software implementiert werden. Das maschinenlesbare Medium oder Element kann zum Beispiel jeden geeigneten Typ von Arbeitsspeichereinheit, Arbeitsspeichervorrichtung, Arbeitsspeicherelement, Arbeitsspeichermedium, Speichervorrichtung, Speicherelement, Speichermedium und/oder Speichereinheit, zum Beispiel Speicher, Wechsel- oder Nichtwechselmedien, löschbare oder nicht löschbare Medien, beschreibbare oder wiederbeschreibbare Medien, digitale oder analoge Medien, eine Festplatte, eine Diskette, Compact Disk Read Only Memory (CD-ROM), Compact Disk Recordable (CD-R), Compact Disk Rewriteable (CD-RW), eine optische Platte, magnetische Medien, magnetooptische Medien, Wechselspeicherkarten oder -platten, verschiedene Typen von Digital Versatile Disk (DVD), ein Band, eine Kassette oder dergleichen, einschließen. Die Anweisungen können jeden geeigneten Typ von Code, wie Quellcode, kompilierten Code, interpretierten Code, ausführbaren Code, statischen Code, dynamischen Code, verschlüsselten Code und dergleichen, einschließen, der unter Verwendung einer beliebigen geeigneten High-Level-, Low-Level-, objektorientierten, visuellen, kompilierten und/oder interpretierten Programmiersprache implementiert wird.
Die folgenden Beispiele gehören zu weiteren Ausführungsformen, ausgehend von denen zahlreiche Umsetzungen und Konfigurationen ersichtlich sind.
Beispiel 1 ist eine Einrichtung, die Einrichtung umfassend: einen Prozessor und Speicher, umfassend Anweisungen, die bei Ausführung durch den Prozessor den Prozessor veranlassen zum: Identifizieren eines von einer Sonde empfangenen Messsignals, wobei das Messsignal eine Betriebseigenschaft in Verbindung mit einer Prioritätsaufgabenquelle angeben soll; Erzeugen einer Schätzung basierend auf dem von der Sonde empfangenen Messsignal, wobei die Schätzung eine Wahrscheinlichkeit, dass die Prioritätsaufgabenquelle eine Aufgabe mit hoher Priorität erzeugt, angeben soll; Bestimmen einer Blockgröße für eine parallelisierbare Aufgabe basierend auf der Schätzung; Partitionieren der parallelisierbaren Aufgabe in eine Vielzahl von Unteraufgaben basierend auf der Blockgröße und Zuweisen, zur Ausführung, von einer oder mehreren der Vielzahl von Unteraufgaben zu zumindest einer Aufgabenwarteschlange in einem Aufgaben-Pool.
Beispiel 2 schließt den Gegenstand von Beispiel 1 ein, wobei der Speicher Anweisungen umfasst, die bei Ausführung durch den Prozessor den Prozessor dazu veranlassen, eine erste Blockgröße zu bestimmen, wenn die Schätzung eine hohe Wahrscheinlichkeit der Erzeugung einer Aufgabe mit hoher Priorität angibt, und eine zweite Blockgröße zu bestimmen, wenn die Schätzung eine niedrige Wahrscheinlichkeit der Erzeugung einer Aufgabe mit hoher Priorität angibt, wobei die erste Blockgröße kleiner als die zweite Blockgröße ist.
Beispiel 3 schließt den Gegenstand von einem der Beispiele 1 oder 2 ein, wobei der Speicher Anweisungen umfasst, die bei Ausführung durch den Prozessor den Prozessor dazu veranlassen, die Schätzung basierend auf dem Messsignal, historischen Messdaten und einer Wahrscheinlichkeitsfunktion zu erzeugen.
Beispiel 4 schließt den Gegenstand von einem der Beispiele 1 bis 3 ein, wobei der Speicher Anweisungen umfasst, die bei Ausführung durch den Prozessor den Prozessor dazu veranlassen, die Blockgröße basierend auf der Schätzung, einer Thread-Anzahl und einer Iterationsanzahl zu bestimmen.
Beispiel 5 schließt den Gegenstand von einem der Beispiele 1 bis 4 ein, wobei die parallelisierbare Aufgabe eine Parallelschleife oder eine Teilen-und-Herrschen-Algorithmus-Aufgabe umfasst.
Beispiel 6 schließt den Gegenstand von einem der Beispiele 1 bis 5 ein, wobei die Betriebseigenschaft, die in Verbindung mit der Prioritätsaufgabenquelle steht und durch das Messsignal angezeigt wird, einen Vorrichtungszustand umfasst.
Beispiel 7 schließt den Gegenstand von Beispiel 6 ein, wobei der Vorrichtungszustand eines oder mehrere von einem Stromverbrauch, einem Energiezustand, einem Ruhezustand, einer Temperatur und einer Frequenz umfasst.
Beispiel 8 schließt den Gegenstand von einem der Beispiele 1 bis 7 ein, wobei die Betriebseigenschaft, die in Verbindung mit der Prioritätsaufgabenquelle steht und durch das Messsignal angezeigt wird, einen Softwarezustand umfasst.
Beispiel 9 schließt den Gegenstand von Beispiel 8 ein, wobei der Softwarezustand eines oder mehrere von einem Warteschlangenzustand in einem Treiber für die Prioritätsaufgabenquelle, einer Angabe, dass Ergebnisse von einer Berechnung ausstehen, die auf die Prioritätsaufgabenquelle abgeladen wurde, einem Flag, einem Zustands-Bit und einem Registerwert umfasst.
Beispiel 10 schließt den Gegenstand von einem der Beispiele 1 bis 9 ein, wobei die Prioritätsaufgabenquelle einen Hardwarebeschleuniger umfasst.
Beispiel 11 schließt den Gegenstand von Beispiel 10 ein, wobei der Hardwarebeschleuniger eines oder mehrere von einer Grafikverarbeitungseinheit (Graphics Processing Unit, GPU), einer feldprogrammierbaren Gatteranordnung (Field Programmable Gate Array, FPGA), einem Maschinenlernbeschleuniger und einem Verschlüsselungsbeschleuniger umfasst.
Beispiel 12 schließt den Gegenstand von einem der Beispiele 1 bis 11 ein, wobei der Speicher Anweisungen umfasst, die bei Ausführung durch den Prozessor den Prozessor dazu veranlassen, die Schätzung basierend auf dem Messsignal zu erzeugen.
Beispiel 13 schließt den Gegenstand von einem der Beispiele 1 bis 12 ein, wobei der Speicher Anweisungen umfasst, die bei Ausführung durch den Prozessor den Prozessor dazu veranlassen, die Schätzung basierend auf dem Messsignal als Reaktion auf eine Anforderung von einem Dynamikbereichspartitionierer, der die Blockgröße bestimmt, zu erzeugen.
Beispiel 14 schließt den Gegenstand von einem der Beispiele 1 bis 13 ein, wobei die Sonde eines oder mehrere von einem Temperatursensor, einem Spannungssensor, einem Stromsensor, einer Softwarekomponente, einem computerlesbaren Speicher und einem Register umfasst.
Beispiel 15 schließt den Gegenstand von einem der Beispiele 1 bis 14 ein, wobei der Speicher Anweisungen umfasst, die bei Ausführung durch den Prozessor den Prozessor veranlassen zum: Vergleichen der Schätzung mit einem Schätzungsschwellwert; Bestimmen einer ersten Blockgröße für die parallelisierbare Aufgabe, wenn die Schätzung oberhalb des Schätzungsschwellwerts ist; und Bestimmen einer zweiten Blockgröße für die parallelisierbare Aufgabe, wenn die Schätzung unterhalb des Schätzungsschwellwerts ist, wobei die erste Blockgröße und die zweite Blockgröße verschieden sind.
Beispiel 16 schließt den Gegenstand von einem der Beispiele 1 bis 15 ein, wobei jede Aufgabenwarteschlange in dem Aufgaben-Pool mit einem Worker-Thread in einem Thread-Pool verbunden ist und jeder Worker-Thread in dem Thread-Pool mit einem logischen Kern des Prozessors verbunden ist.
Beispiel 17 ist zumindest ein nicht-flüchtiges computerlesbares Medium, umfassend einen Anweisungssatz, der als Reaktion auf eine Ausführung durch eine Prozessorschaltung die Prozessorschaltung veranlasst zum: Identifizieren eines von einer Sonde empfangenen Messsignals, wobei das Messsignal eine Betriebseigenschaft in Verbindung mit einer Prioritätsaufgabenquelle angeben soll; Erzeugen einer Schätzung basierend auf dem von der Sonde empfangenen Messsignal, wobei die Schätzung eine Wahrscheinlichkeit, dass die Prioritätsaufgabenquelle eine Aufgabe mit hoher Priorität erzeugt, angeben soll; Bestimmen einer Blockgröße für eine parallelisierbare Aufgabe basierend auf der Schätzung; Partitionieren der parallelisierbaren Aufgabe in eine Vielzahl von Unteraufgaben basierend auf der Blockgröße und Zuweisen, zur Ausführung, von einer oder mehreren der Vielzahl von Unteraufgaben zu zumindest einer Aufgabenwarteschlange in einem Aufgaben-Pool.
Beispiel 18 schließt den Gegenstand von Beispiel 17 ein, umfassend Anweisungen, die als Reaktion auf eine Ausführung durch die Prozessorschaltung die Prozessorschaltung dazu veranlassen, eine erste Blockgröße zu bestimmen, wenn die Schätzung eine hohe Wahrscheinlichkeit der Erzeugung einer Aufgabe mit hoher Priorität angibt, und eine zweite Blockgröße zu bestimmen, wenn die Schätzung eine niedrige Wahrscheinlichkeit der Erzeugung einer Aufgabe mit hoher Priorität angibt, wobei die erste Blockgröße kleiner als die zweite Blockgröße ist.
Beispiel 19 schließt den Gegenstand von einem der Beispiele 17 oder 18 ein, umfassend Anweisungen, die als Reaktion auf eine Ausführung durch die Prozessorschaltung die Prozessorschaltung dazu veranlassen, die Schätzung basierend auf dem Messsignal, historischen Messdaten und einer Wahrscheinlichkeitsfunktion zu erzeugen.
Beispiel 20 schließt den Gegenstand von einem der Beispiele 17 bis 19 ein, umfassend Anweisungen, die als Reaktion auf eine Ausführung durch die Prozessorschaltung die Prozessorschaltung dazu veranlassen, die Blockgröße basierend auf der Schätzung, einer Thread-Anzahl und einer Iterationsanzahl zu bestimmen.
Beispiel 21 schließt den Gegenstand von einem der Beispiele 17 bis 20 ein, wobei die parallelisierbare Aufgabe eine Parallelschleife oder eine Teilen-und-Herrschen-Algorithmus-Aufgabe umfasst.
Beispiel 22 schließt den Gegenstand von einem der Beispiele 17 bis 21 ein, wobei die Betriebseigenschaft, die in Verbindung mit der Prioritätsaufgabenquelle steht und durch das Messsignal angezeigt wird, einen Vorrichtungszustand umfasst.
Beispiel 23 schließt den Gegenstand von Beispiel 22 ein, wobei der Vorrichtungszustand eines oder mehrere von einem Stromverbrauch, einem Energiezustand, einem Ruhezustand, einer Temperatur und einer Frequenz umfasst.
Beispiel 24 schließt den Gegenstand von einem der Beispiele 17 bis 23 ein, wobei die Betriebseigenschaft, die in Verbindung mit der Prioritätsaufgabenquelle steht und durch das Messsignal angezeigt wird, einen Softwarezustand umfasst.
Beispiel 25 schließt den Gegenstand von Beispiel 24 ein, wobei der Softwarezustand eines oder mehrere von einem Warteschlangenzustand in einem Treiber für die Prioritätsaufgabenquelle, einer Angabe, dass Ergebnisse von einer Berechnung ausstehen, die auf die Prioritätsaufgabenquelle abgeladen wurde, einem Flag, einem Zustands-Bit und einem Registerwert umfasst.
Beispiel 26 schließt den Gegenstand von einem der Beispiele 17 bis 25 ein, wobei die Prioritätsaufgabenquelle einen Hardwarebeschleuniger umfasst.
Beispiel 27 schließt den Gegenstand von Beispiel 26 ein, wobei der Hardwarebeschleuniger eines oder mehrere von einer Grafikverarbeitungseinheit (Graphics Processing Unit, GPU), einer feldprogrammierbaren Gatteranordnung (Field Programmable Gate Array, FPGA), einem Maschinenlernbeschleuniger und einem Verschlüsselungsbeschleuniger umfasst.
Beispiel 28 schließt den Gegenstand von einem der Beispiele 17 bis 27 ein, umfassend Anweisungen, die als Reaktion auf eine Ausführung durch die Prozessorschaltung die Prozessorschaltung dazu veranlassen, Schätzungen periodisch basierend auf periodischen Messsignalen zu erzeugen.
Beispiel 29 schließt den Gegenstand von einem der Beispiele 17 bis 28 ein, umfassend Anweisungen, die als Reaktion auf eine Ausführung durch die Prozessorschaltung die Prozessorschaltung dazu veranlassen, die Schätzung basierend auf dem Messsignal als Reaktion auf eine Anforderung von einem Dynamikbereichspartitionierer, der die Blockgröße bestimmt, zu erzeugen.
Beispiel 30 schließt den Gegenstand von einem der Beispiele 17 bis 29 ein, wobei die Sonde eines oder mehrere von einem Temperatursensor, einem Spannungssensor, einem Stromsensor, einer Softwarekomponente, einem computerlesbaren Speicher und einem Register umfasst.
Beispiel 31 schließt den Gegenstand von einem der Beispiele 17 bis 30 ein, umfassend Anweisungen, die als Reaktion auf eine Ausführung durch die Prozessorschaltung die Prozessorschaltung veranlassen zum: Vergleichen der Schätzung mit einem Schätzungsschwellwert; Bestimmen einer ersten Blockgröße für die parallelisierbare Aufgabe, wenn die Schätzung oberhalb des Schätzungsschwellwerts ist; und Bestimmen einer zweiten Blockgröße für die parallelisierbare Aufgabe, wenn die Schätzung unterhalb des Schätzungsschwellwerts ist, wobei die erste Blockgröße und die zweite Blockgröße verschieden sind.
Beispiel 32 schließt den Gegenstand von einem der Beispiele 17 bis 31 ein, wobei jede Aufgabenwarteschlange in dem Aufgaben-Pool mit einem Worker-Thread in einem Thread-Pool verbunden ist und jeder Worker-Thread in dem Thread-Pool mit einem logischen Kern des Prozessors verbunden ist.
Beispiel 33 ist ein computerimplementiertes Verfahren, umfassend: Identifizieren eines von einer Sonde empfangenen Messsignals, wobei das Messsignal eine Betriebseigenschaft in Verbindung mit einer Prioritätsaufgabenquelle angeben soll; Erzeugen einer Schätzung basierend auf dem von der Sonde empfangenen Messsignal, wobei die Schätzung eine Wahrscheinlichkeit, dass die Prioritätsaufgabenquelle eine Aufgabe mit hoher Priorität erzeugt, angeben soll; Bestimmen einer Blockgröße für eine parallelisierbare Aufgabe basierend auf der Schätzung; Partitionieren der parallelisierbaren Aufgabe in eine Vielzahl von Unteraufgaben basierend auf der Blockgröße und Zuweisen, zur Ausführung, von einer oder mehreren der Vielzahl von Unteraufgaben zu zumindest einer Aufgabenwarteschlange in einem Aufgaben-Pool.
Beispiel 34 schließt den Gegenstand von Beispiel 33 ein, umfassend ein Bestimmen einer ersten Blockgröße, wenn die Schätzung eine hohe Wahrscheinlichkeit der Erzeugung einer Aufgabe mit hoher Priorität angibt, und ein Bestimmen einer zweiten Blockgröße, wenn die Schätzung eine niedrige Wahrscheinlichkeit der Erzeugung einer Aufgabe mit hoher Priorität angibt, wobei die erste Blockgröße kleiner als die zweite Blockgröße ist.
Beispiel 35 schließt den Gegenstand von einem der Beispiele 33 oder 34 ein, umfassend ein Erzeugen der Schätzung basierend auf dem Messsignal, historischen Messdaten und einer Wahrscheinlichkeitsfunktion.
Beispiel 36 schließt den Gegenstand von einem der Beispiele 33 bis 35 ein, umfassend ein Bestimmen der Blockgröße basierend auf der Schätzung, einer Thread-Anzahl und einer Iterationsanzahl.
Beispiel 37 schließt den Gegenstand von einem der Beispiele 33 bis 36 ein, wobei die parallelisierbare Aufgabe eine Parallelschleife oder eine Teilen-und-Herrschen-Algorithmus-Aufgabe umfasst.
Beispiel 38 schließt den Gegenstand von einem der Beispiele 33 bis 37 ein, wobei die Betriebseigenschaft, die in Verbindung mit der Prioritätsaufgabenquelle steht und durch das Messsignal angezeigt wird, einen Vorrichtungszustand umfasst.
Beispiel 39 schließt den Gegenstand von Beispiel 38 ein, wobei der Vorrichtungszustand eines oder mehrere von einem Stromverbrauch, einem Energiezustand, einem Ruhezustand, einer Temperatur und einer Frequenz umfasst.
Beispiel 40 schließt den Gegenstand von einem der Beispiele 33 bis 39 ein, wobei die Betriebseigenschaft, die in Verbindung mit der Prioritätsaufgabenquelle steht und durch das Messsignal angezeigt wird, einen Softwarezustand umfasst.
Beispiel 41 schließt den Gegenstand von Beispiel 40 ein, wobei der Softwarezustand eines oder mehrere von einem Warteschlangenzustand in einem Treiber für die Prioritätsaufgabenquelle, einer Angabe, dass Ergebnisse von einer Berechnung ausstehen, die auf die Prioritätsaufgabenquelle abgeladen wurde, einem Flag, einem Zustands-Bit und einem Registerwert umfasst.
Beispiel 42 schließt den Gegenstand von einem der Beispiele 33 bis 41 ein, wobei die Prioritätsaufgabenquelle einen Hardwarebeschleuniger umfasst.
Beispiel 43 schließt den Gegenstand von Beispiel 42 ein, wobei der Hardwarebeschleuniger eines oder mehrere von einer Grafikverarbeitungseinheit (Graphics Processing Unit, GPU), einer feldprogrammierbaren Gatteranordnung (Field Programmable Gate Array, FPGA), einem Maschinenlernbeschleuniger und einem Verschlüsselungsbeschleuniger umfasst.
Beispiel 44 schließt den Gegenstand von einem der Beispiele 33 bis 43 ein, umfassend ein periodisches Erzeugen der Schätzung basierend auf dem Messsignal.
Beispiel 45 schließt den Gegenstand von einem der Beispiele 33 bis 44 ein, umfassend ein Erzeugen der Schätzung basierend auf dem Messsignal als Reaktion auf eine Anforderung von einem Dynamikbereichspartitionierer, der die Blockgröße bestimmt.
Beispiel 46 schließt den Gegenstand von einem der Beispiele 33 bis 45 ein, wobei die Sonde eines oder mehrere von einem Temperatursensor, einem Spannungssensor, einem Stromsensor, einer Softwarekomponente, einem computerlesbaren Speicher und einem Register umfasst.
Beispiel 47 schließt den Gegenstand von einem der Beispiele 33 bis 46 ein, umfassend: Vergleichen der Schätzung mit einem Schätzungsschwellwert; Bestimmen einer ersten Blockgröße für die parallelisierbare Aufgabe, wenn die Schätzung den Schätzungsschwellwert erreicht oder überschreitet; und Bestimmen einer zweiten Blockgröße für die parallelisierbare Aufgabe, wenn die Schätzung unterhalb des Schätzungsschwellwerts ist, wobei die erste Blockgröße und die zweite Blockgröße verschieden sind.
Beispiel 48 schließt den Gegenstand von einem der Beispiele 33 bis 47 ein, wobei jede Aufgabenwarteschlange in dem Aufgaben-Pool mit einem Worker-Thread in einem Thread-Pool verbunden ist und jeder Worker-Thread in dem Thread-Pool mit einem logischen Kern des Prozessors verbunden ist.
Beispiel 49 ist eine Einrichtung, umfassend: ein Mittel zum Identifizieren eines von einer Sonde empfangenen Messsignals, wobei das Messsignal eine Betriebseigenschaft in Verbindung mit einer Prioritätsaufgabenquelle angeben soll; ein Mittel zum Erzeugen einer Schätzung basierend auf dem von der Sonde empfangenen Messsignal, wobei die Schätzung eine Wahrscheinlichkeit, dass die Prioritätsaufgabenquelle eine Aufgabe mit hoher Priorität erzeugt, angeben soll; ein Mittel zum Bestimmen einer Blockgröße für eine parallelisierbare Aufgabe basierend auf der Schätzung; ein Mittel zum Partitionieren der parallelisierbaren Aufgabe in eine Vielzahl von Unteraufgaben basierend auf der Blockgröße und ein Mittel zum Zuweisen, zur Ausführung, von einer oder mehreren der Vielzahl von Unteraufgaben zu zumindest einer Aufgabenwarteschlange in einem Aufgaben-Pool.
Beispiel 50 schließt den Gegenstand von Beispiel 49 ein, umfassend ein Mittel zum Bestimmen einer ersten Blockgröße, wenn die Schätzung eine hohe Wahrscheinlichkeit der Erzeugung einer Aufgabe mit hoher Priorität angibt, und zum Bestimmen einer zweiten Blockgröße, wenn die Schätzung eine niedrige Wahrscheinlichkeit der Erzeugung einer Aufgabe mit hoher Priorität angibt, wobei die erste Blockgröße kleiner als die zweite Blockgröße ist.
Beispiel 51 schließt den Gegenstand von einem der Beispiele 49 oder 50 ein, umfassend ein Mittel zum Erzeugen der Schätzung basierend auf dem Messsignal, historischen Messdaten und einer Wahrscheinlichkeitsfunktion.
Beispiel 52 schließt den Gegenstand von einem der Beispiele 49 bis 51 ein, umfassend ein Mittel zum Bestimmen der Blockgröße basierend auf der Schätzung, einer Thread-Anzahl und einer Iterationsanzahl.
Beispiel 53 schließt den Gegenstand von einem der Beispiele 49 bis 52 ein, wobei die parallelisierbare Aufgabe eine Parallelschleife oder eine Teilen-und-Herrschen-Algorithmus-Aufgabe umfasst.
Beispiel 54 schließt den Gegenstand von einem der Beispiele 49 bis 53 ein, wobei die Betriebseigenschaft, die in Verbindung mit der Prioritätsaufgabenquelle steht und durch das Messsignal angezeigt wird, einen Vorrichtungszustand umfasst.
Beispiel 55 schließt den Gegenstand von Beispiel 54 ein, wobei der Vorrichtungszustand eines oder mehrere von einem Stromverbrauch, einem Energiezustand, einem Ruhezustand, einer Temperatur und einer Frequenz umfasst.
Beispiel 56 schließt den Gegenstand von einem der Beispiele 49 bis 55 ein, wobei die Betriebseigenschaft, die in Verbindung mit der Prioritätsaufgabenquelle steht und durch das Messsignal angezeigt wird, einen Softwarezustand umfasst.
Beispiel 57 schließt den Gegenstand von Beispiel 56 ein, wobei der Softwarezustand eines oder mehrere von einem Warteschlangenzustand in einem Treiber für die Prioritätsaufgabenquelle, einer Angabe, dass Ergebnisse von einer Berechnung ausstehen, die auf die Prioritätsaufgabenquelle abgeladen wurde, einem Flag, einem Zustands-Bit und einem Registerwert umfasst.
Beispiel 58 schließt den Gegenstand von einem der Beispiele 49 bis 57 ein, wobei die Prioritätsaufgabenquelle einen Hardwarebeschleuniger umfasst.
Beispiel 59 schließt den Gegenstand von Beispiel 58 ein, wobei der Hardwarebeschleuniger eines oder mehrere von einer Grafikverarbeitungseinheit (Graphics Processing Unit, GPU), einer feldprogrammierbaren Gatteranordnung (Field Programmable Gate Array, FPGA), einem Maschinenlernbeschleuniger und einem Verschlüsselungsbeschleuniger umfasst.
Beispiel 60 schließt den Gegenstand von einem der Beispiele 49 bis 59 ein, umfassend ein Mittel zum periodischen Erzeugen der Schätzung basierend auf dem Messsignal.
Beispiel 61 schließt den Gegenstand von einem der Beispiele 49 bis 60 ein, umfassend ein Mittel zum Erzeugen der Schätzung basierend auf dem Messsignal als Reaktion auf eine Anforderung von einem Dynamikbereichspartitionierer, der die Blockgröße bestimmt.
Beispiel 62 schließt den Gegenstand von einem der Beispiele 49 bis 61 ein, wobei die Sonde eines oder mehrere von einem Temperatursensor, einem Spannungssensor, einem Stromsensor, einer Softwarekomponente, einem computerlesbaren Speicher und einem Register umfasst.
Beispiel 63 schließt den Gegenstand von einem der Beispiele 49 bis 62 ein, umfassend: ein Mittel zum Vergleichen der Schätzung mit einem Schätzungsschwellwert; ein Mittel zum Bestimmen einer ersten Blockgröße für die parallelisierbare Aufgabe, wenn die Schätzung den Schätzungsschwellwert überschreitet; und ein Mittel zum Bestimmen einer zweiten Blockgröße für die parallelisierbare Aufgabe, wenn die Schätzung unterhalb des Schätzungsschwellwerts ist, wobei die erste Blockgröße und die zweite Blockgröße verschieden sind.
Beispiel 64 schließt den Gegenstand von einem der Beispiele 49 bis 63 ein, wobei jede Aufgabenwarteschlange in dem Aufgaben-Pool mit einem Worker-Thread in einem Thread-Pool verbunden ist und jeder Worker-Thread in dem Thread-Pool mit einem logischen Kern des Prozessors verbunden ist.
Die vorstehende Beschreibung von beispielhaften Ausführungsformen wurde zu Zwecken der Veranschaulichung und Beschreibung dargestellt. Sie soll nicht erschöpfend sein oder die vorliegende Offenbarung auf die genauen offenbarten Formen beschränken. Viele Modifikationen und Variationen sind angesichts dieser Offenbarung möglich. Es ist beabsichtigt, dass der Umfang der vorliegenden Offenbarung nicht durch diese detaillierte Beschreibung, sondern stattdessen durch die hierzu beigefügten Ansprüche beschränkt ist. Künftig eingereichte Anmeldungen, die die Priorität dieser Anmeldung in Anspruch nehmen, können den offenbarten Gegenstand auf eine andere Weise beanspruchen und können allgemein jeden beliebigen Satz von einer oder mehreren Beschränkungen, wie hierin verschiedentlich offenbart oder auf andere Weise gezeigt, einschließen.
Claims (15)
- Einrichtung, die Einrichtung umfassend: einen Prozessor; und Speicher, umfassend Anweisungen, die bei Ausführung durch den Prozessor den Prozessor veranlassen zum: Identifizieren eines von einer Sonde (104) empfangenen Messsignals, wobei das Messsignal eine Betriebseigenschaft in Verbindung mit einer Prioritätsaufgabenquelle (102) angeben soll; Erzeugen einer Schätzung basierend auf dem von der Sonde (104) empfangenen Messsignal, wobei die Schätzung eine Wahrscheinlichkeit, dass die Prioritätsaufgabenquelle (102) eine Aufgabe mit hoher Priorität erzeugt, angeben soll; Bestimmen einer Blockgröße (244) für eine parallelisierbare Aufgabe basierend auf der Schätzung; Partitionieren der parallelisierbaren Aufgabe (112A, 112-B, ..., 112-Z) in eine Vielzahl von Unteraufgaben basierend auf der Blockgröße (244); und Zuweisen, zur Ausführung, von einer oder mehreren der Vielzahl von Unteraufgaben zu zumindest einer Aufgabenwarteschlange (118-1, 118-2, ..., 118-n) in einem Aufgaben-Pool (116).
- Einrichtung nach
Anspruch 1 , wobei der Speicher Anweisungen umfasst, die bei Ausführung durch den Prozessor den Prozessor dazu veranlassen, eine erste Blockgröße (244) zu bestimmen, wenn die Schätzung eine hohe Wahrscheinlichkeit der Erzeugung einer Aufgabe mit hoher Priorität angibt, und eine zweite Blockgröße (244) zu bestimmen, wenn die Schätzung eine niedrige Wahrscheinlichkeit der Erzeugung einer Aufgabe mit hoher Priorität angibt, wobei die erste Blockgröße (244) kleiner als die zweite Blockgröße (244) ist. - Einrichtung nach einem der
Ansprüche 1 oder2 , wobei der Speicher Anweisungen umfasst, die bei Ausführung durch den Prozessor den Prozessor dazu veranlassen, die Schätzung basierend auf dem Messsignal, historischen Messdaten und einer Wahrscheinlichkeitsfunktion zu erzeugen. - Einrichtung nach einem der
Ansprüche 1 bis3 , wobei der Speicher Anweisungen umfasst, die bei Ausführung durch den Prozessor den Prozessor dazu veranlassen, die Blockgröße (244) basierend auf der Schätzung, einer Thread-Anzahl und einer Iterationsanzahl zu bestimmen. - Einrichtung nach einem der
Ansprüche 1 bis4 , wobei die parallelisierbare Aufgabe eine Parallelschleife oder eine Teilen-und-Herrschen-Algorithmus-Aufgabe umfasst. - Einrichtung nach einem der
Ansprüche 1 bis5 , wobei die Betriebseigenschaft, die in Verbindung mit der Prioritätsaufgabenquelle (102) steht und durch das Messsignal angezeigt wird, einen Vorrichtungszustand umfasst, wobei der Vorrichtungszustand eines oder mehrere von einem Stromverbrauch, einem Energiezustand, einem Ruhezustand, einer Temperatur und einer Frequenz umfasst. - Einrichtung nach einem der
Ansprüche 1 bis6 , wobei die Betriebseigenschaft, die in Verbindung mit der Prioritätsaufgabenquelle (102) steht und durch das Messsignal angezeigt wird, einen Softwarezustand umfasst, wobei der Softwarezustand eines oder mehrere von einem Warteschlangenzustand in einem Treiber für die Prioritätsaufgabenquelle (102), einer Angabe, dass Ergebnisse von einer Berechnung ausstehen, die auf die Prioritätsaufgabenquelle (102) abgeladen wurde, einem Flag, einem Zustands-Bit und einem Registerwert umfasst. - Einrichtung nach einem der
Ansprüche 1 bis7 , wobei die Prioritätsaufgabenquelle (102) eines oder mehrere von einer Grafikverarbeitungseinheit (Graphics Processing Unit, GPU), einer feldprogrammierbaren Gatteranordnung (Field Programmable Gate Array, FPGA), einem Maschinenlernbeschleuniger und einem Verschlüsselungsbeschleuniger umfasst. - Einrichtung nach einem der
Ansprüche 1 bis8 , wobei die Sonde (104) eines oder mehrere von einem Temperatursensor, einem Spannungssensor, einem Stromsensor, einer Softwarekomponente, einem computerlesbaren Speicher und einem Register umfasst. - Einrichtung nach einem der
Ansprüche 1 bis9 , wobei der Speicher Anweisungen umfasst, die bei Ausführung durch den Prozessor den Prozessor veranlassen zum: Vergleichen der Schätzung mit einem Schätzungsschwellwert; Bestimmen einer ersten Blockgröße (244) für die parallelisierbare Aufgabe, wenn die Schätzung den Schätzungsschwellwert erreicht oder überschreitet; und Bestimmen einer zweiten Blockgröße (244) für die parallelisierbare Aufgabe, wenn die Schätzung unterhalb des Schätzungsschwellwerts ist, wobei die erste Blockgröße (244) und die zweite Blockgröße (244) verschieden sind. - Computerimplementiertes Verfahren, umfassend: Identifizieren eines von einer Sonde (104) empfangenen Messsignals, wobei das Messsignal eine Betriebseigenschaft in Verbindung mit einer Prioritätsaufgabenquelle (102) angeben soll; Erzeugen einer Schätzung basierend auf dem von der Sonde (104) empfangenen Messsignal, wobei die Schätzung eine Wahrscheinlichkeit, dass die Prioritätsaufgabenquelle (102) eine Aufgabe mit hoher Priorität erzeugt, angeben soll; Bestimmen einer Blockgröße (244) für eine parallelisierbare Aufgabe basierend auf der Schätzung; Partitionieren der parallelisierbaren Aufgabe in eine Vielzahl von Unteraufgaben basierend auf der Blockgröße (244); und Zuweisen, zur Ausführung, von einer oder mehreren der Vielzahl von Unteraufgaben zu zumindest einer Aufgabenwarteschlange in einem Aufgaben-Pool (116).
- Computerimplementiertes Verfahren nach
Anspruch 11 , umfassend ein Bestimmen einer ersten Blockgröße (244), wenn die Schätzung eine hohe Wahrscheinlichkeit der Erzeugung einer Aufgabe mit hoher Priorität angibt, und ein Bestimmen einer zweiten Blockgröße (244), wenn die Schätzung eine niedrige Wahrscheinlichkeit der Erzeugung einer Aufgabe mit hoher Priorität angibt, wobei die erste Blockgröße (244) kleiner als die zweite Blockgröße (244) ist. - Computerimplementiertes Verfahren nach einem der
Ansprüche 11 oder12 , umfassend ein Erzeugen der Schätzung basierend auf dem Messsignal, historischen Messdaten und einer Wahrscheinlichkeitsfunktion. - Computerimplementiertes Verfahren nach einem der
Ansprüche 11 bis13 , umfassend ein Bestimmen der Blockgröße (244) basierend auf der Schätzung, einer Thread-Anzahl und einer Iterationsanzahl. - Zumindest ein nicht-flüchtiges computerlesbares Medium, umfassend einen Anweisungssatz, der als Reaktion auf eine Ausführung durch eine Prozessorschaltung die Prozessorschaltung dazu veranlasst, ein Verfahren nach einem der
Ansprüche 11 bis14 zu implementieren.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/440,024 | 2019-06-13 | ||
US16/440,024 US11106495B2 (en) | 2019-06-13 | 2019-06-13 | Techniques to dynamically partition tasks |
Publications (1)
Publication Number | Publication Date |
---|---|
DE102020112961A1 true DE102020112961A1 (de) | 2020-12-17 |
Family
ID=67985070
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE102020112961.0A Pending DE102020112961A1 (de) | 2019-06-13 | 2020-05-13 | Techniken zum dynamischen partitionieren von aufgaben |
Country Status (2)
Country | Link |
---|---|
US (1) | US11106495B2 (de) |
DE (1) | DE102020112961A1 (de) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10650046B2 (en) | 2016-02-05 | 2020-05-12 | Sas Institute Inc. | Many task computing with distributed file system |
US10642896B2 (en) | 2016-02-05 | 2020-05-05 | Sas Institute Inc. | Handling of data sets during execution of task routines of multiple languages |
US10650045B2 (en) | 2016-02-05 | 2020-05-12 | Sas Institute Inc. | Staged training of neural networks for improved time series prediction performance |
US10795935B2 (en) | 2016-02-05 | 2020-10-06 | Sas Institute Inc. | Automated generation of job flow definitions |
USD898059S1 (en) | 2017-02-06 | 2020-10-06 | Sas Institute Inc. | Display screen or portion thereof with graphical user interface |
USD898060S1 (en) | 2017-06-05 | 2020-10-06 | Sas Institute Inc. | Display screen or portion thereof with graphical user interface |
WO2019238128A1 (en) * | 2018-06-14 | 2019-12-19 | Shanghai United Imaging Healthcare Co., Ltd. | Methods and systems for image processing |
CN109325494B (zh) * | 2018-08-27 | 2021-09-17 | 腾讯科技(深圳)有限公司 | 图片处理方法、任务数据处理方法和装置 |
US11327793B2 (en) * | 2020-02-18 | 2022-05-10 | International Business Machines Corporation | Garbage collection work stealing mechanism |
CN111488913A (zh) * | 2020-03-17 | 2020-08-04 | 华为技术有限公司 | 基于多分析任务的数据分析方法及电子设备 |
CN113821311A (zh) * | 2020-06-19 | 2021-12-21 | 华为技术有限公司 | 任务执行方法及存储设备 |
CN111813554A (zh) * | 2020-07-17 | 2020-10-23 | 济南浪潮数据技术有限公司 | 一种任务调度处理方法、装置及电子设备和存储介质 |
CN112685158B (zh) * | 2020-12-29 | 2023-08-04 | 杭州海康威视数字技术股份有限公司 | 一种任务调度方法、装置、电子设备及存储介质 |
US11741127B2 (en) * | 2021-10-27 | 2023-08-29 | Sap Se | Dynamic range partitioning of database table |
CN114168354B (zh) * | 2022-02-11 | 2022-05-03 | 北京易源兴华软件有限公司 | 基于数据驱动的数据集群并行计算的调配方法和装置 |
CN114995996B (zh) * | 2022-04-26 | 2024-09-03 | 支付宝(杭州)信息技术有限公司 | 用于生成线程池的配置信息的方法、任务处理方法和装置 |
US20230412855A1 (en) * | 2022-06-17 | 2023-12-21 | Microsoft Technology Licensing, Llc | Processing of video operations as subtasks for video fragments |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8185899B2 (en) * | 2007-03-07 | 2012-05-22 | International Business Machines Corporation | Prediction based priority scheduling |
US10095526B2 (en) * | 2012-10-12 | 2018-10-09 | Nvidia Corporation | Technique for improving performance in multi-threaded processing units |
US9959142B2 (en) * | 2014-06-17 | 2018-05-01 | Mediatek Inc. | Dynamic task scheduling method for dispatching sub-tasks to computing devices of heterogeneous computing system and related computer readable medium |
-
2019
- 2019-06-13 US US16/440,024 patent/US11106495B2/en active Active
-
2020
- 2020-05-13 DE DE102020112961.0A patent/DE102020112961A1/de active Pending
Also Published As
Publication number | Publication date |
---|---|
US20190294469A1 (en) | 2019-09-26 |
US11106495B2 (en) | 2021-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE102020112961A1 (de) | Techniken zum dynamischen partitionieren von aufgaben | |
WO2021139438A1 (zh) | 大数据资源处理方法、装置、终端及存储介质 | |
Le et al. | Allox: compute allocation in hybrid clusters | |
CN109783224B (zh) | 基于负载调配的任务分配方法、装置及终端设备 | |
DE102016118210A1 (de) | Granulare Dienstqualität für Computer-Ressourcen | |
DE102013104328B4 (de) | Aufgabenzuteilung in großen und kleinen Kernen | |
DE60027298T2 (de) | Verfahren und system zum regeln von hintergrundprozessen mit leistungsmessdaten | |
DE102017213160B4 (de) | Kompilierung für knotenvorrichtungs-GPU-basierte Parallelverarbeitung | |
DE112020006967T5 (de) | Performanceüberwachung für kurzlebige funktionen | |
US7493249B2 (en) | Method and system for dynamic performance modeling of computer application services | |
DE102018132781A1 (de) | Heterogenes Rechensystem, welches konfiguriert ist, um eine Cachekohärenz adaptiv zu steuern | |
DE102007041212A1 (de) | Latenzabdeckung und Anwendung auf die Erzeugung von Multiprozessor-Testgeneratorvorlagen | |
US11321136B2 (en) | Techniques for collective operations in distributed systems | |
DE112013006241T5 (de) | Techniken für Plattform-Arbeitszyklus-Wechsel | |
DE102020119519A1 (de) | Verfahren und einrichtungen zum ermöglichen einer "out-of-order"-pipeline-ausführung der statischen abbildung einer arbeitslast | |
CN112379935B (zh) | Spark性能优化控制方法、装置、设备及存储介质 | |
DE102012204167A1 (de) | Vorauslaufende genäherte Berechnungen | |
CN104182278A (zh) | 一种判定计算机硬件资源繁忙程度的方法和装置 | |
DE102020130910A1 (de) | System, vorrichtung und verfahren für dynamische energiezustandsskalierung eines spannungsreglers für einen prozessor | |
DE102019103932A1 (de) | Technologien für optimierte Dienstgütebeschleunigung | |
EP2386949A1 (de) | Verfahren und Vorrichtung zum zuweisen einer Mehrzahl von Teilaufgaben einer Aufgabe zu einer Mehrzahl von Recheneinheiten einer vorgegebenen Prozessorarchitektur | |
Wildstrom et al. | Machine Learning for On-Line Hardware Reconfiguration. | |
CN116684420A (zh) | 集群资源调度方法、装置、集群系统和可读存储介质 | |
CN107370783B (zh) | 一种云计算集群资源的调度方法及装置 | |
CN111651866B (zh) | 一种基于动态负载迁移及时间同步的仿真执行方法及系统 |