DE102020132469A1 - Warteschlangen mit benutzerdefiniert gemessener priorität - Google Patents

Warteschlangen mit benutzerdefiniert gemessener priorität Download PDF

Info

Publication number
DE102020132469A1
DE102020132469A1 DE102020132469.3A DE102020132469A DE102020132469A1 DE 102020132469 A1 DE102020132469 A1 DE 102020132469A1 DE 102020132469 A DE102020132469 A DE 102020132469A DE 102020132469 A1 DE102020132469 A1 DE 102020132469A1
Authority
DE
Germany
Prior art keywords
task
priority
queue
tasks
feeder
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
Application number
DE102020132469.3A
Other languages
English (en)
Inventor
Jonathon EVANS
Lacky Shah
Phil Johnson
Jonah Alben
Brian Pharris
Greg Palmer
Brian Fahs
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102020132469A1 publication Critical patent/DE102020132469A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • G06F9/4831Task transfer initiation or dispatching by interrupt, e.g. masked with variable priority
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/214Generating training patterns; Bootstrap methods, e.g. bagging or boosting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5021Priority

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Health & Medical Sciences (AREA)
  • Mathematical Physics (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Image Processing (AREA)
  • Power Sources (AREA)

Abstract

Vorrichtungen, Systeme und Techniken zur Optimierung von Prozessorressourcen auf einem benutzerdefinierten Niveau. In zumindest einer Ausführungsform werden Prioritäten einer oder mehrerer Tasks angepasst, um zu verhindern, dass eine oder mehrere andere abhängige Tasks aufgrund fehlender Ressourcen zum Verbrauchen in einen Leerlaufzustand eintreten.

Description

  • GEBIET
  • Die vorliegende Anmeldung bezieht sich allgemein auf die Optimierung der Arbeitseffizienz eines oder mehrerer Prozesse, die sich Verarbeitungsressourcen teilen. Zum Beispiel kann eine Anwendung oder eine Aufgabe bzw. ein Task einer Anwendung Arbeit verrichten, die dann von einem zweiten Task oder einer zweiten Anwendung verbraucht wird. Die von dem ersten Task oder der ersten Anwendung verrichtete Arbeit kann sich auf die Effizienz des zweiten Tasks oder der zweiten Anwendung auswirken, sodass ein Optimieren der von beiden Tasks oder Anwendungen ausgeführten Arbeit unnötigen und ineffizienten Verbrauch von Verarbeitungsressourcen reduzieren kann.
  • HINTERGRUND
  • Task-Pipelines sind in vielen Anwendungen üblich und erfordern oft, dass mehrere Komponenten zusammenarbeiten, um eine endgültige Ausgabe zu erstellen. In vielen Fällen kann ein erster Task (oder eine Gruppe von Tasks, die jeweils parallel arbeiten) eine Eingabe bzw. Input empfangen und den Input verarbeiten, um eine Zwischenausgabe zu erzeugen. Die Zwischenausgabe kann dann einem anderen Task (oder einer Gruppe von parallel arbeitenden Tasks) bereitgestellt werden, um eine endgültige Ausgabe zu erzeugen. Jedoch kann ein einziger Prozessor alle Tasks ausführen, wobei Prozessorzeit zwischen allen Tasks aufgeteilt wird. In manchen Fällen kann einer oder mehrere der abhängigen Tasks Input schneller aufzehren, als ein anderer Zubringer- bzw. Feeder-Task Input für diesen Task erzeugen kann.
  • Figurenliste
    • 1 veranschaulicht eine beispielhafte Task-Pipeline gemäß zumindest einer Ausführungsform;
    • 2 veranschaulicht eine beispielhafte Umgebung, in der hierin beschriebenen Ausführungsformen implementiert werden können;
    • 3 veranschaulicht ein Ablaufdiagramm einer oder mehrerer Ausführungsformen;
    • 4 veranschaulicht ein Ablaufdiagramm einer oder mehrerer Ausführungsformen;
    • 5 veranschaulicht ein Rechenzentrumssystem in Übereinstimmung mit zumindest einer Ausführungsform; und
    • 6 veranschaulicht ein Computersystem in Übereinstimmung mit zumindest einer Ausführungsform.
  • DETAILLIERTE BESCHREIBUNG
  • Wenn eine Anwendung ausgeführt wird, die mehrere abhängige Tasks beinhaltet, kann eine oder mehrere der Tasks mit einer schnelleren Rate bzw. Geschwindigkeit als andere ausgeführt werden. Zum Beispiel kann ein Task, zu verschiedenen Zeiten, Input verarbeiten, der weniger komplex ist als Input, der zu anderen Zeiten empfangen wird. Darüber hinaus kann ein oder mehrere Tasks aufgrund der Art der von diesen Tasks durchgeführten Verarbeitung immer mit einer schnelleren Rate ausgeführt werden. In einigen Fällen kann ein oder mehrere Tasks als Input eine Zwischenausgabe von einem oder mehreren anderen Tasks empfangen. Damit der abhängige Task seine Operationen ausführen kann, kann es erforderlich sein, dass ein oder mehrere andere Feeder-Tasks ihre Verarbeitung abschließen, um eine Zwischenausgabe zu erzeugen, die von dem abhängigen Task verbraucht wird. Falls der abhängige Task nicht über den notwendigen Input verfügt, um die Verarbeitung fortzusetzen, kann dieser im Leerlauf arbeiten, wodurch Verarbeitungs- und/oder Speicherressourcen verschwendet werden können. Daher kann es in Fällen, in denen ein Task Ausgaben von einem oder mehreren anderen Tasks verbraucht, vorteilhaft sein, einige Feeder-Tasks zumindest vorübergehend zu priorisieren, um sicherzustellen, dass einem abhängigen Task verfügbarer Input nicht ausgeht.
  • Als ein Beispiel beinhalten Bildverarbeitungs-Pipelines häufig mehrere Tasks, die eine Bildverarbeitung durchführen. Bilder können einer Vorverarbeitung unterzogen werden, bevor sie z. B. zum Trainieren eines tiefen neuronalen Netzwerks bzw. Deep Neural Network (DNN) bereitgestellt werden. Das Training und/oder die Inferenzierung eines DNN ist häufig eine ressourcenintensive Aufgabe, die einen erheblichen Teil der Prozessorzeit und der Ressourcen in Anspruch nehmen kann. Daher haben die Aufgaben bzw. Tasks, die Bilder vorverarbeiten, um sie einem DNN zur Verfügung zu stellen, möglicherweise eine niedrigere Priorität in einer Arbeitswarteschlange als das DNN, so dass weniger Ressourcen für die Vorverarbeitung von Bildern zur Verfügung stehen können. Dies wird jedoch zu einem Problem, wenn das DNN, dem möglicherweise eine höhere Priorität in einer Arbeitswarteschlange zugewiesen ist, keine vorverarbeiteten Bilder mehr zu verbrauchen hat. In diesem Fall kann es zu einem Hin- und Herschalten zwischen den Bildverarbeitungstasks, die eine niedrigere Priorität haben, und dem Training und/oder der Verwendung des DNN kommen, welches zwar eine höhere Priorität hat, aber nicht in der Lage ist, mehr Arbeit zu verrichten, weil es nicht genügend vorverarbeitete Bilder gibt, die das DNN benötigt, um weiterzuarbeiten. Das DNN wird auch dann noch erhebliche Speicherressourcen in Anspruch nehmen, wenn keine Arbeit abgeschlossen wird.
  • Um das unnötige Schalten zwischen den Feeder-Tasks mit niedrigerer Priorität (d. h. Tasks, die Input verbrauchen und Ausgaben produzieren, die von anderen Tasks mit höherer Priorität verwendet werden) und einem Task mit höherer Priorität zu mildern, kann die Priorität der Tasks so angepasst werden, dass mehr Input für den Task mit hoher Priorität zur Verfügung steht. Durch Überwachen der Menge an Arbeit für den Task mit höherer Priorität, die für den Verbrauch in einer Arbeitswarteschlange zur Verfügung steht, kann die für den Feeder-Tasks allozierte Verarbeitungszeit erhöht (wenn die Arbeitswarteschlange zur Neige geht) oder verringert (wenn der Task mit höherer Priorität genügend zu verbrauchenden Input in der Arbeitswarteschlange hat) werden.
  • In einigen Ausführungsformen können sowohl die Feeder-Tasks als auch die Tasks mit hoher Priorität Teil der gleichen Anwendung sein. Daher kann die Anwendung selbst den Fortschritt der Tasks überwachen und bestimmen, wie die Tasks an einen Prozessor gesendet werden, damit die Tasks ausgeführt werden können. Zum Beispiel kann eine Anwendung eine Vielzahl von Tasks beinhalten, von denen jeder einen Input empfängt und eine Operation an dem Input durchführt. Jeder der Tasks kann dann eine Ausgabe an eine Arbeitswarteschlange senden, wodurch ein anderer Task (oder eine Vielzahl von Tasks) die Ausgabe identifiziert und die Zwischenausgabe als Input verbraucht.
  • Bezug nehmend auf 1 wird ein Beispiel für eine Task-Pipeline 100 veranschaulicht. Die Feeder-Tasks 105, 110 und 115 empfangen Input von einer Inputquelle 120, der dann von den Feeder-Tasks zu einer Zwischenausgabe verarbeitet wird. Die Zwischenausgabe wird einer Arbeitswarteschlange 125 zugeführt, die die Ausgabe für den späteren Verbrauch durch den Task mit hoher Priorität 130 vorübergehend speichert. Folglich kann der Task mit hoher Priorität 130 nur ausgeführt werden, wenn eine Zwischenausgabe in der Arbeitswarteschlange wartet. Falls die Feeder-Tasks 105, 110, 115 zu einem bestimmten Zeitpunkt Input verarbeiten, aber noch keine Ausgaben an die Arbeitswarteschlange 125 geliefert haben, muss der Task 130 mit hoher Priorität möglicherweise untätig warten, bis zusätzliche Ausgaben von der Arbeitswarteschlange 125 empfangen werden.
  • In einigen Ausführungsformen kann der Task mit hoher Priorität weiterhin die gleiche Menge an Prozessorzeit verbrauchen. Beispielsweise kann ein Task mit hoher Priorität 80% der Verarbeitungszeit erhalten, während anderen Tasks die restlichen 20% zugewiesen werden. Falls der Task mit hoher Priorität im Leerlauf ist, weil kein Input in der Arbeitswarteschlange 125 verfügbar ist, kann dem Task mit hoher Priorität immer noch 80% der Verarbeitungszeit zugewiesen sein, auch wenn keine Verarbeitung stattfindet, wodurch Ressourcen verschwendet werden, die andernfalls den Feeder-Tasks zugewiesen werden könnten, um die Verfügbarkeit der Zwischenausgabe, die der Task mit hoher Priorität verbrauchen kann, zu beschleunigen.
  • In einigen Ausführungsformen kann die Priorität eines oder mehrerer Tasks mit hoher Priorität angepasst werden, damit andere Tasks einen größeren Anteil der Verarbeitungsleistung in Anspruch nehmen können. Zum Beispiel kann ein Task mit hoher Priorität untätig auf zusätzlichen Input warten, der noch von Feeder-Tasks verarbeitet wird. Durch Herabsetzen der Priorität des Tasks mit hoher Priorität und/oder Erhöhen der Priorität von Feeder-Tasks kann sich zusätzliche Arbeit ansammeln und können die Tasks mit hoher Priorität dann ihre zugewiesene Verarbeitungszeit effizienter nutzen. In Fortsetzung des vorherigen Beispiels kann dann, wenn die Arbeitswarteschlange 125 leer ist, der Prozentsatz der Verarbeitungsressourcen (z. B. Zeit), der dem Task mit hoher Priorität zugewiesen ist, für eine bestimmte Zeitspanne auf 30% angepasst werden, wodurch die Menge des für diese Zeit erforderlichen Inputs verringert wird (d. h. der Task mit hoher Priorität läuft langsamer, da ihm weniger Ressourcen zugewiesen sind, Input wird langsamer verbraucht). Die verbleibenden 70% der Verarbeitungsressourcen können dann den Feeder-Tasks zugewiesen werden, wodurch die Rate, mit der die Zwischenausgabe der Arbeitswarteschlange 125 bereitgestellt wird, beschleunigt wird. Die neue Zuweisung von Verarbeitungsressourcen kann unbegrenzt fortgesetzt werden, oder kann überwacht werden, um zu bestimmen, wann die angepassten Prioritäten unnötig sind. Ferner können die Prioritäten so lange angepasst werden, bis eine optimale Verarbeitungszuweisung bestimmt werden kann.
  • Auf 2 Bezug nehmend ist eine beispielhafte Umgebung bereitgestellt, in welcher hierin offenbarte Ausführungsformen implementiert sein können. Die Umgebung beinhaltet einen Prozessor 202, der Tasks verarbeitet, die von einer oder mehreren Anwendungen bereitgestellt werden. Die Tasks werden von der Prozessorwarteschlange 210 empfangen, in welcher temporär Tasks gespeichert werden, die von dem Prozessor zu erledigen sind. Der Prozessor kann Verarbeitungszeit auf der Grundlage von Prioritäten aufteilen, die den Tasks in der Prozessorwarteschlange 210 zugeordnet sind. Folglich kann für Tasks, die eine höhere Priorität haben (z. B. Tasks, die für eine oder mehrere Operationen kritisch sind), mehr Zeit für die Ausführung durch den Prozessor zugewiesen werden, oder können diese Tasks vor anderen Tasks mit niedrigerer Priorität abgeschlossen und/oder verarbeitet werden. In einigen Ausführungsformen kann ein Task teilweise abgeschlossen werden und dann zur Fertigstellung zu einem späteren Zeitpunkt an die Prozessorwarteschlange 210 zurückgegeben werden.
  • Die Umgebung beinhaltet ferner eine Anwendung 204. In einigen Ausführungsformen kann die Anwendung 204 auf dem Prozessor 202 ausgeführt werden, so dass die Anwendung als Ganzes eine Prioritätsfestlegung in der Prioritätswarteschlange hat. In einigen Ausführungsformen können mehrere Anwendungen über den Prozessor 202 ausgeführt werden, jede mit ihrer eigenen Priorität, und kann die Verarbeitungszeit zwischen den Anwendungen basierend auf den zugeordneten Prioritäten zugewiesen werden. In einigen Ausführungsformen kann die Anwendung 204 auf einem separaten Prozessor (oder mehreren parallel laufenden Prozessoren) ausgeführt werden, und können nur bestimmte Tasks, die eine Verarbeitung durch den Prozessor erfordern, der Prozessorwarteschlange 210 zugeführt werden. Beispielsweise kann die Anwendung 204 auf einem Prozessor ausgeführt werden und können eine oder mehrere Bildverarbeitungstasks separat dem Prozessor 202 zugewiesen werden, der für die Ausführung dieser Tasks besser geeignet sein kann, wie z. B. eine Grafikverarbeitungseinheit zur Verarbeitung von Bilddaten.
  • Eine Eingabe- bzw. Inputdatenbank 206 enthält Eingabe- bzw. Inputdaten, die von den Komponenten der Anwendung 204 zu konsumieren sind. Die Inputdatenbank kann ein Festplattenlaufwerk, ein Diskettenlaufwerk, ein CD-ROM-Gerät, ein Flash-Speicher-Gerät oder ein anderes Massenspeichergerät beinhalten. Als ein Beispiel kann die Inputdatenbank Bilddaten beinhalten, und können die Bilddaten der Anwendung 202 zur Verfügung gestellt werden. Die Anwendung beinhaltet einen Feeder-Task-Koordinator 208, welcher Inputdaten von der Inputdatenbank 206 empfängt und die Daten einem oder mehreren Tasks bereitstellen, die den Input verarbeiten und eine Zwischenausgabe bereitstellen.
  • Wie dargestellt ist, ist der Feeder-Task-Koordinator 208 zwei Feeder-Tasks 208a und 208b zugeordnet. In einigen Ausführungsformen kann der Feeder-Task-Koordinator 208 einem einzigen Feeder-Task oder mit mehr als zwei Feeder-Tasks zugeordnet sein. In einigen Ausführungsformen können die Feeder-Tasks 208a und 208b direkt auf die Inputdatenbank 206 zugreifen und kann die Koordination des Input, wie z. B. die Zuweisung bestimmter Daten an bestimmte Tasks, direkt von den Feeder-Tasks 208a und 208b durchgeführt werden.
  • Jeder der Feeder-Tasks 208a und 208b führt eine oder mehrere Operationen des von der Eingabedatenbank 206 empfangenen Inputs durch. Wenn ein Feeder-Task zu verarbeitende Inputdaten hat, wird der Task dem Aufgabenplaner bzw. Task-Scheduler bzw. Task-Scheduler 218 zur Verfügung gestellt, der den Task dann der Prozessorwarteschlange 210 bereitstellt. Bei der Verarbeitung von Tasks durch den Prozessor 202 wird eine Ausgabe erzeugt und zur weiteren Verarbeitung an den Feeder-Task-Koordinator gesendet. Zum Beispiel kann der Feeder-Task bzw. Zuführungsaufgabe 208a ein Task zur Durchführung einer Vorverarbeitung eines Bilds aus der Inputdatenbank 206 sein. Der Task wird an den Task-Scheduler 218 und dann an die Prozessorwarteschlange 210 gesendet. Der Prozessor 202 verarbeitet den Task basierend auf der Priorität der Anwendung 204, die den Task einreicht, und eine Ausgabe wird zurück an den Feeder-Task-Koordinator 208 gesendet.
  • Sobald ein Feeder-Task abgeschlossen ist, wird die Ausgabe des Feeder-Tasks einer Arbeitswarteschlange 212 zugeführt und für eine oder mehrere Tasks mit hoher Priorität 214 in eine Warteschlange gestellt. Die Arbeitswarteschlange 212 beinhaltet die Zwischenausgabe, die von den Feeder-Tasks verarbeitet wurde, aber noch immer von anderen Tasks in eine endgültige Ausgabe zu verbrauchen ist. Somit ist der Task 214 mit hoher Priorität abhängig von der Zwischenausgabe, die sich in der Arbeitswarteschlange 212 befindet, und demzufolge abhängig von den Feeder-Tasks, um die Verarbeitung abzuschließen. Wie die Feeder-Tasks 208a und 208b wird auch der Task 214 mit hoher Priorität, sobald sie Input hat, dem Task-Scheduler 218 und dann der Prozessorwarteschlange 210 zur Verarbeitung durch den Prozessor 202 zugeführt.
  • Der Task-Scheduler 218 koordiniert die verschiedenen Tasks der Anwendung 204, die von dem Prozessor 202 zu verarbeiten sind. In einigen Ausführungsformen kann jeder Task einer Priorität zugeordnet sein, und kann der Task-Scheduler 218 die Tasks basierend auf den Prioritäten der Tasks zur Erledigung bereitstellen. Beispielsweise kann der Task-Scheduler 218 Tasks von dem Feeder-Task-Koordinator 208 und von dem Task mit hoher Priorität 214 empfangen und auf der Grundlage der zugeordneten Prioritäten die Reihenfolge bestimmen, in der die Tasks der Prozessorwarteschlange 210 zur Verarbeitung durch den Prozessor 202 bereitzustellen sind. Daher fungiert der Task-Scheduler 218 als ein Gateway, um die Reihenfolge zu bestimmen, in der die Tasks verarbeitet werden. Somit kann die Reihenfolge, in der die Tasks der Prozessorwarteschlange 210 zur Verfügung gestellt werden, durch den Task-Scheduler 218 dazu angepasst werden, eine oder mehrere Tasks auf eine höhere Priorität zu befördern und/oder eine oder mehrere Tasks auf eine niedrigere Priorität zur Verarbeitung durch den Prozessor 202 herabzustufen.
  • In einigen Ausführungsformen kann die Reihenfolge oder Priorität, die Tasks von dem Task-Scheduler 218 zugewiesen wird, auf der Grundlage eines Zustands der Arbeitswarteschlange 212 bestimmt werden. In einigen Ausführungsformen kann der Task-Scheduler 218 die Arbeitswarteschlange 212 direkt überwachen. In einigen Ausführungsformen kann ein Warteschlangenmonitor 216 die Arbeitswarteschlange 212 überwachen und dem Task-Scheduler 218 einen Hinweis auf den Zustand der Arbeitswarteschlange 212 geben. Zum Beispiel kann der Warteschlangenmonitor 216 einen Synchronisationsmechanismus verwenden, der anzeigt, ob die Arbeitswarteschlange 212 leer oder voll ist, oder ob die Arbeitswarteschlange 212 die in der Warteschlange befindlichen Zwischenausgaben schneller leert, als die Zwischeneingaben in die Arbeitswarteschlange 212 eingespeist werden.
  • Ein Synchronisationsmechanismus oder Synchronisationsprimitiv ist eine Struktur, die verwendet werden kann, um den Status der Arbeitswarteschlange 212 zu überwachen und zu bestimmen, wann Tasks geplant oder angehalten werden können, so dass Tasks mit höherer Priorität an Tasks mit niedrigerer Priorität, wie z. B. Feeder-Tasks, abgeben können. Da Arbeit in der Arbeitswarteschlange 212 derart verarbeitet wird, dass ein Task höherer Priorität möglicherweise keine Zwischenausgabe zu verarbeiten hat, kann der Synchronisationsmechanismus verwendet werden, um zu entscheiden, Tasks von den Tasks höherer Priorität anzuhalten oder zu reduzieren, damit sich zusätzliche Zwischenausgabe in der Arbeitswarteschlange 212 ansammeln kann. In einigen Ausführungsformen kann der Synchronisationsmechanismus verwendet werden, um einen Fluss von Zwischenausgaben zu der Arbeitswarteschlange 212 zu erhöhen, indem Feeder-Tasks eine höhere Priorität erlaubt wird. Als eine Komponente des Warteschlangenmonitors 216 kann der Synchronisationsmechanismus dem Task-Scheduler 218 eine Indikation bereitstellen, die von dem Task-Scheduler 218 dazu verwendet werden kann, eine Reihenfolge oder einen Zeitplan für die eintreffenden Tasks mit hoher Priorität und die Feeder-Tasks zu bestimmen.
  • In einigen Ausführungsformen kann dann, wenn der Monitor 216 anzeigt, dass dem Task 214 mit hoher Priorität in der Arbeitswarteschlange 212 wahrscheinlich die Arbeit ausgeht, der Task-Scheduler 218 die Priorität des Tasks 214 mit hoher Priorität herabsetzen, damit den Feeder-Tasks 208a und 208b mehr Verarbeitungszeit zugewiesen werden kann. In einigen Ausführungsformen kann der Task-Scheduler 218 die Priorität der Feeder-Tasks 208a und 208b erhöhen, um das gleiche Ergebnis zu erzielen.
  • Bezug nehmend auf 3 wird ein Ablaufdiagramm dargestellt, das eine beispielhafte Ausführungsform wie hierin beschrieben veranschaulicht. In einigen Ausführungsformen können ein oder mehrere Schritte weggelassen werden und/oder ein oder mehrere zusätzliche Schritte hinzugefügt werden. In einigen Ausführungsformen können einer oder mehrere der Schritte des Ablaufdiagramms in 3 in einer anderen Reihenfolge ausgeführt werden.
  • In Schritt 305 wird eine Prioritätswarteschlange eines Prozessors bestimmt. Die Prioritätswarteschlange kann einen oder mehrere Tasks beinhalten, die von dem zugeordneten Prozessor zu verarbeiten sind. In einigen Ausführungsformen kann die Prioritätswarteschlange eine oder mehrere Eigenschaften mit der Prozessorwarteschlange 210 von 2 teilen. Beispielsweise kann die Prioritätswarteschlange Tasks von einer oder mehreren Anwendungen empfangen und anhand der den Tasks zugewiesenen Prioritäten bestimmen, welcher Task zu verarbeiten ist. Wenn mehr Tasks empfangen werden, kann die Prioritätswarteschlange die Reihenfolge der Tasks in der Warteschlange anpassen, um sicherzustellen, dass Tasks mit höherer Priorität vor anderen Tasks mit niedrigerer Priorität verarbeitet werden und/oder Tasks mit höherer Priorität während der Verarbeitung mit mehr Ressourcen ausgestattet werden als Tasks mit niedrigerer Priorität. Die Prioritätswarteschlange kann von einer Anwendung, wie z. B. der Anwendung 102, und/oder einer oder mehreren Komponenten einer Anwendung, die auf einem anderen Prozessor oder auf demselben Prozessor wie der mit der Prioritätswarteschlange verbundene Prozessor ausgeführt wird, bestimmt (z. B. festgelegt) werden.
  • In Schritt 310 wird ein Task mit hoher Priorität identifiziert. Der Task mit hoher Priorität kann eine oder mehrere Eigenschaften mit dem Task mit hoher Priorität 214 von 2 teilen bzw. gemeinsam haben. In einigen Ausführungsformen hat der Task mit hoher Priorität eine Prioritätsfestlegung, die auf eine höhere Priorität als eine oder mehrere andere Tasks hinweist. Durch eine höhere Priorität kann der Task mit hoher Priorität dem Prozessor vor anderen Tasks mit niedrigerer Priorität bereitgestellt werden und/oder können dem Task mit hoher Priorität mehr Verarbeitungsressourcen zugewiesen werden als anderen Tasks mit niedrigerer Priorität.
  • In Schritt 315 wird ein Feeder-Task identifiziert. Der Feeder-Task kann eine oder mehrere Eigenschaften mit den Feeder-Tasks 208a und/oder 208b von 2 teilen bzw. gemeinsam werden. In einigen Ausführungsformen kann mehr als ein Feeder-Task identifiziert werden. Die Feeder-Tasks erzeugen nach ihrer Verarbeitung durch den Prozessor eine Zwischenausgabe, die von dem Task mit hoher Priorität als Input verwendet werden kann. Der Feeder-Task kann beispielsweise ein Bildvorverarbeitungs-Task sein, der Bilddaten als Input erhält und vorverarbeitete Bilddaten zum Verbrauch durch einen Task mit hoher Priorität erzeugt.
  • In Schritt 320 wird festgestellt, dass der Task mit hoher Priorität die Zwischenausgabe schneller verbraucht als der Feeder-Task die Zwischenausgabe erzeugt. Daher wird dann, wenn die Tasks mit den gleichen Prioritäten fortgesetzt werden sollen, der Task mit hoher Priorität einen Punkt erreichen, an dem die Verarbeitung des Tasks mit hoher Priorität in Leerlauf gehen wird. In einigen Ausführungsformen wird die Zwischenausgabe einer Arbeitswarteschlange zugeführt, die überwacht werden kann, um zu bestimmen, ob die Feeder-Tasks mit dem Task mit hoher Priorität Schritt halten. Beispielsweise kann die Zwischenausgabe einer Warteschlange zugeführt werden, die eine oder mehrere Eigenschaften mit der Arbeitswarteschlange 212 teilt bzw. gemeinsam hat, und eine Überwachungseinrichtung, wie z. B. der Monitor 216, kann die Warteschlange überwachen, um zu bestimmen, ob der Zufluss von Arbeit geringer ist als der Abfluss von Arbeit. Ist dies der Fall, dann verbraucht der Task mit hoher Priorität die Zwischenausgabe schneller, als der Feeder-Task die Zwischenausgabe erzeugt.
  • In Schritt 325 wird Verarbeitungszeit in der Prioritätswarteschlange realloziert bzw. neu zugewiesen, um das Verhältnis zwischen dem Verbrauch der Zwischen-Tasks und der Produktion der Zwischen-Tasks zu verringern. Dies kann durch Erhöhen der Priorität einer oder mehrerer Feeder-Tasks, durch Verringern einer Priorität des Tasks mit hoher Priorität oder durch eine Kombination aus beidem erreicht werden. In einigen Ausführungsformen kann die Neupriorisierung der Tasks von einer Komponente durchgeführt werden, die eine oder mehrere Eigenschaften mit dem Task-Scheduler 218 teilt bzw. gemeinsam hat. Auf diese Weise kann die Neupriorisierung auf der Anwendungsebene durchgeführt werden, ohne dass eine Neupriorisierung auf der Hardwareebene durchgeführt werden muss.
  • In einigen Ausführungsformen kann der Task-Scheduler 218 beispielsweise Tasks so an die Prozessorwarteschlange 210 senden, dass 80% der Tasks Tasks mit hoher Priorität und 20% Feeder-Tasks sind. Falls der Task-Scheduler feststellt, dass sich die Arbeitswarteschlange 212 schneller von Zwischenausgaben leert, als sie der Warteschlange hinzugefügt werden, kann der Task-Scheduler 218 stattdessen Tasks mit einer Rate von 50% Feeder-Tasks und 50% Tasks mit hoher Priorität an die Prozessorwarteschlange 210 senden, um den Fluss von Zwischen-Tasks zu der Arbeitswarteschlange 212 zu erhöhen. Anschließend kann der Task-Scheduler 218 den Taskfluss neu priorisieren, um spätere Zustände der Arbeitswarteschlange 212 zu kompensieren, wie beispielsweise einen Zustand, in dem die Arbeitswarteschlange 212 eine Kapazität erreicht und mehr Ausgabe verbraucht werden muss, als verfügbar ist.
  • In 4 ist ein Ablaufdiagramm dargestellt, das eine weitere beispielhafte Ausführungsform wie hierin beschrieben veranschaulicht. In einigen Ausführungsformen können ein oder mehrere Schritte weggelassen werden und/oder ein oder mehrere zusätzliche Schritte hinzugefügt werden. In einigen Ausführungsformen können einer oder mehrere der Schritte des Ablaufdiagramms in 4 in einer anderen Reihenfolge ausgeführt werden.
  • In Schritt 405 wird ein erster Task identifiziert, der Input empfängt und Zwischenausgaben erzeugt, die in eine Arbeitswarteschlange gestellt werden. Der erste Task kann eine oder mehrere Eigenschaften mit dem Feeder-Task 208a und 208b von 2 teilen bzw. gemeinsam haben. Die Ausgabe, in Form einer Zwischenausgabe, kann einer Arbeitswarteschlange zugeführt werden, die ein oder mehrere Eigenschaften mit der Arbeitswarteschlange 212 von 2 teilt bzw. gemeinsam hat. In einigen Ausführungsformen kann der erste Task Input von einer Datenbank und/oder einer anderen Speicherkomponente erhalten. In einigen Ausführungsformen kann der erste Task ein Zwischen-Task sein, der seinen Input von einem oder mehreren anderen Tasks erhält. In einigen Ausführungsformen können zusätzliche Tasks als Tasks identifiziert werden, die Zwischenausgaben erzeugen und die Ausgaben an die Arbeitswarteschlange liefern.
  • In Schritt 410 wird ein zweiter Task identifiziert, der die Ausgabe des in Schritt 405 identifizierten ersten (und aller anderen Tasks) verbraucht. In einigen Ausführungsformen kann der zweite Task eine oder mehrere Eigenschaften mit dem Task mit hoher Priorität 214 von 2 teilen bzw. gemeinsam haben. Der zweite Task kann Input aus der Arbeitswarteschlange identifizieren, die die Ausgabe des ersten Tasks enthält. Folglich ist der zweite Task von der Ausgabe des ersten Tasks abhängig, damit der zweite Task verarbeitet werden kann. In Fällen, in denen eine Zwischenausgabe nicht verfügbar ist, kann der zweite Task die Verarbeitung nicht fortsetzen.
  • In Schritt 415 wird die Arbeitswarteschlange überwacht und wird bestimmt, dass sich die Arbeitswarteschlange schneller von Zwischenausgaben leert, als neue Zwischenausgaben zu der Arbeitswarteschlange hinzugefügt werden. Folglich kann es sein, dass der zweite Task keine Ressourcen mehr zur Verfügung stehen, so dass er die Verarbeitung nicht fortsetzen kann, bis mehr Zwischenausgaben verfügbar sind. Weil dies zu einer ineffizienten Zuteilung der Ressourcen des Prozessors führen kann, ist ein untätiger Task mit hoher Priorität unerwünscht, wie zuvor beschrieben wurde. Der Zustand der Arbeitswarteschlange kann von einer Komponente bestimmt werden, die eine oder mehrere Eigenschaften mit dem Monitor 216 teilt, der dann den Zustand an den Taskplaner 218 weiterleiten kann. Der Monitor kann z. B. einen Synchronisationsmechanismus beinhalten, der von dem Task-Scheduler 218 abgefragt werden kann, um zu bestimmen, ob dem ersten Task für eine bestimmte Zeitspanne eine höhere Priorität zugewiesen werden soll.
  • In Schritt 420 wird die Priorität des ersten Tasks oder des zweiten Tasks (oder beider) angepasst, um die Menge an Zwischenausgaben in der Arbeitswarteschlange zu ändern. In einigen Ausführungsformen kann die Anpassung beinhalten, dass weniger der zweiten Tasks an den Prozessor gesendet werden und/oder die Anzahl der ersten Tasks, die an den Prozessor gesendet werden, erhöht wird. Durch Anpassen der Prioritäten auf andere als die ursprünglich zugewiesenen Prioritäten kann die Arbeitswarteschlange mit Zwischenausgaben aufgefüllt werden, ohne die Prioritäten der Prozessorwarteschlange zu ändern.
  • 5 ist ein Blockdiagramm, das ein beispielhaftes Computersystem veranschaulicht, welches ein System mit miteinander verbundenen Geräten und Komponenten, ein System-on-a-Chip (SOC) oder eine Kombination davon 500 sein kann, das mit einem Prozessor ausgebildet sein kann, der Ausführungseinheiten zur Ausführung einer Anweisung beinhalten kann, gemäß zumindest einer Ausführungsform. In zumindest einer Ausführungsform kann das Computersystem 500, ohne Beschränkung darauf, eine Komponente, wie beispielsweise einen Prozessor 502, beinhalten, um Ausführungseinheiten einschließlich Logik zur Ausführung von Algorithmen zur Verarbeitung von Daten, in Übereinstimmung mit der Erfindung, wie in der hierin beschriebenen Ausführungsform, einzusetzen. In zumindest einer Ausführungsform kann das Computersystem 500 Prozessoren beinhalten, wie beispielsweise die PENTIUM®-Prozessorfamilie, XeonTM-, Itanium®-, XScaleTM- und/oder StrongARMTM-, Intel® Core™- oder Intel® Nervana™-Mikroprozessoren, die von der Intel Corporation aus Santa Clara, Kalifornien, erhältlich sind, obwohl auch andere Systeme (einschließlich PCs mit anderen Mikroprozessoren, technische Workstations, Set-Top-Boxen und dergleichen) verwendet werden können. In zumindest einer Ausführungsform kann das Computersystem 500 eine Version des Betriebssystems WINDOWS ausführen, das von der Microsoft Corporation in Redmond, Washington, erhältlich ist, obwohl auch andere Betriebssysteme (z. B. UNIX und Linux), eingebettete Software und/oder grafische Benutzeroberflächen verwendet werden können.
  • Ausführungsformen können in anderen Vorrichtungen wie beispielsweise Handheld-Geräten und eingebetteten Anwendungen verwendet werden. Einige Beispiele für Handheld-Geräte beinhalten Mobiltelefone, Internetprotokoll-Geräte, Digitalkameras, persönliche digitale Assistenten („PDAs“) und Handheld-PCs. In zumindest einer Ausführungsform können eingebettete Anwendungen einen Mikrocontroller, einen digitalen Signalprozessor („DSP“), ein System auf einem Chip, Netzwerkcomputer („NetPCs“), Set-Top-Boxen, Netzwerk-Hubs, Wide-Area-Network („WAN“)-Switches oder ein beliebiges andere System beinhalten, das eine oder mehrere Anweisungen in Übereinstimmung mit zumindest einer Ausführungsform ausführen kann.
  • In zumindest einer Ausführungsform kann das Computersystem 500, ohne Beschränkung darauf, einen Prozessor 502 beinhalten, der, ohne Beschränkung darauf, eine oder mehrere Ausführungseinheiten 508 beinhalten kann, um ein Training eines Modells maschinellen Lernens und/oder eine Inferenzierung in Übereinstimmung mit hierin beschriebenen Techniken durchzuführen. In zumindest einer Ausführungsform ist das Computersystem 500 ein Einzelprozessor-Desktop- oder -Serversystem, aber in einer anderen Ausführungsform kann das Computersystem 500 ein Multiprozessorsystem sein. In zumindest einer Ausführungsform kann der Prozessor 502, ohne Beschränkung darauf, einen CISC (Complex Instruction Set Computer)-Mikroprozessor, einen RISC (Reduced Instruction Set Computing)-Mikroprozessor, einen VLIW (Very Long Instruction Word)-Mikroprozessor, einen Prozessor, der eine Kombination von Befehlssätzen implementiert, oder eine beliebige andere Prozessorvorrichtung, wie beispielsweise einen digitalen Signalprozessor, beinhalten. In zumindest einer Ausführungsform kann der Prozessor 502 mit einem Prozessorbus 510 verbunden sein, der Datensignale zwischen dem Prozessor 502 und anderen Komponenten in dem Computersystem 500 übertragen kann.
  • In zumindest einer Ausführungsform kann der Prozessor 502, ohne Beschränkung darauf, einen internen Cache-Speicher („Cache“) der Ebene 1 bzw. internen Level 1 („L1“) Cache-Speicher- 504 enthalten. In zumindest einer Ausführungsform kann der Prozessor 502 einen einzigen internen Cache oder mehrere Ebenen von internem Cache haben. In zumindest einer Ausführungsform kann sich der Cache-Speicher außerhalb des Prozessors 502 befinden. Andere Ausführungsformen können auch eine Kombination aus sowohl internen als auch externen Caches beinhalten, je nach spezieller Implementierung und Bedürfnissen. In zumindest einer Ausführungsform kann eine Registerdatei 506 verschiedene Datentypen in verschiedenen Registern speichern, darunter, ohne Beschränkung darauf, Ganzzahlregister, Gleitkommaregister, Statusregister und Befehlszeigerregister.
  • In zumindest einer Ausführungsform befindet sich die Ausführungseinheit 508, einschließlich, ohne Beschränkung darauf, der Logik zur Durchführung von Ganzzahl- und Gleitkommaoperationen, ebenfalls in dem Prozessor 502. In zumindest einer Ausführungsform kann der Prozessor 502 auch einen Nur-Lese-Speicher („ROM“) für Mikrocode („ucode“) beinhalten, der Mikrocode für bestimmte Makrobefehle speichert. In zumindest einer Ausführungsform kann die Ausführungseinheit 508 Logik zur Verarbeitung eines gepackten Befehlssatzes 509 beinhalten. In zumindest einer Ausführungsform können durch die Aufnahme eines gepackten Befehlssatzes 509 in einen Befehlssatz eines Universal- bzw. Mehrzweckprozessors 502 zusammen mit einer zugehörigen Schaltungsanordnung zur Ausführung von Befehlen Operationen, die von vielen Multimedia-Anwendungen verwendet werden, unter Verwendung gepackter Daten in einem Mehrzweckprozessor 502 durchgeführt werden. In einer oder mehreren Ausführungsformen können viele Multimedia-Anwendungen beschleunigt und effizienter ausgeführt werden, indem die volle Breite des Datenbusses eines Prozessors zur Ausführung von Operationen mit gepackten Daten genutzt wird, wodurch die Notwendigkeit entfallen kann, kleinere Dateneinheiten über den Datenbus des Prozessors zu übertragen, um eine oder mehrere Operationen mit jeweils einem Datenelement durchzuführen.
  • In zumindest einer Ausführungsform kann die Ausführungseinheit 508 auch in Mikrocontrollern, eingebetteten Prozessoren, Grafikgeräten, DSPs und anderen Arten von Logikschaltungen verwendet werden. In zumindest einer Ausführungsform kann das Computersystem 500, ohne Beschränkung darauf, einen Speicher 520 beinhalten. In zumindest einer Ausführungsform kann der Speicher 520 als ein dynamischer Direktzugriffsspeicher („DRAM“), ein statischer Direktzugriffsspeicher („SRAM“), eine Flash-Speicher-Vorrichtung oder eine andere Speichervorrichtung implementiert sein. In zumindest einer Ausführungsform kann der Speicher 520 (eine) Anweisung(en) 519 und/oder Daten 521 speichern, die durch Datensignale repräsentiert werden, die von dem Prozessor 502 ausgeführt werden können.
  • In zumindest einer Ausführungsform kann der Systemlogik-Chip mit dem Prozessorbus 510 und dem Speicher 520 gekoppelt sein. In zumindest einer Ausführungsform kann der Systemlogik-Chip, ohne Beschränkung darauf, einen Speicher-Controller-Hub („MCH“) 516 beinhalten, und kann der Prozessor 502 mit dem MCH 516 über den Prozessorbus 510 kommunizieren. In zumindest einer Ausführungsform kann der MCH 516 einen Speicherpfad 518 mit hoher Bandbreite zu dem Speicher 520 für die Befehls- und Datenspeicherung und für die Speicherung von Grafikbefehlen, Daten und Texturen bereitstellen. In zumindest einer Ausführungsform kann der MCH 516 Datensignale zwischen dem Prozessor 502, dem Speicher 520 und anderen Komponenten in dem Computersystem 500 leiten und Datensignale zwischen dem Prozessorbus 510, dem Speicher 520 und einer System- Eingabe/Ausgabe bzw. System-E/A 522 brücken. In zumindest einer Ausführungsform kann der Systemlogikchip einen Grafikport zur Kopplung mit einem Grafikcontroller bereitstellen. In zumindest einer Ausführungsform kann der MCH 516 über einen Speicherpfad 518 mit hoher Bandbreite mit dem Speicher 520 gekoppelt sein, und kann die Grafik-/Video-Karte 512 über eine Zwischenverbindung bzw. einen Interconnect 511 (z. B. Accelerated Graphics Port („AGP“), PCI-Express (PCIe), AXI, NVLink oder einen anderen proprietären Bus mit ähnlichen Eigenschaften) mit dem MCH 516 gekoppelt sein.
  • In zumindest einer Ausführungsform kann das Computersystem 500 die System-E/A- 522, die ein proprietärer Hub-Schnittstellenbus ist, verwenden, um den MCH 516 mit einem E/A-Controller-Hub („ICH“) 530 zu koppeln. In zumindest einer Ausführungsform kann der ICH 530 direkte Verbindungen zu einigen E/A-Geräten über einen lokalen E/A-Bus bereitstellen. In zumindest einer Ausführungsform kann der lokale E/A-Bus, ohne Beschränkung darauf, einen Hochgeschwindigkeits-E/A-Bus zur Verbindung von Peripheriegeräten mit dem Speicher 520, einem Chipsatz und dem Prozessor 502 beinhalten. Beispiele können ohne Einschränkung einen Audio-Controller 529, einen Firmware-Hub („Flash-BIOS“) 528, einen drahtlosen Sender/Empfänger bzw. Transceiver 526, einen Datenspeicher 524, einen Legacy-E/A-Controller 523 mit Benutzereingabe- und Tastaturschnittstellen 525, einen seriellen Erweiterungsport 527, wie beispielsweise Universal Serial Bus („USB“), und einen Netzwerk-Controller 534 beinhalten. Der Datenspeicher 524 kann ein Festplattenlaufwerk, ein Diskettenlaufwerk, ein CD-ROM-Gerät, eine Flash-Speicher-Vorrichtung oder ein anderes Massenspeichergerät umfassen.
  • In zumindest einer Ausführungsform veranschaulicht 5 ein System, das miteinander verbundene Hardwaregeräte oder „Chips“ enthält, wohingegen in anderen Ausführungsformen 5 ein Beispiel für ein System auf einem Chip („SoC“) veranschaulichen kann. In zumindest einer Ausführungsform können die in 5 veranschaulichten Vorrichtungen Geräte mit proprietären Interconnects, standardisierten Interconnects (z. B. PCle) oder einer Kombination davon verbunden sein. In zumindest einer Ausführungsform sind eine oder mehrere Komponenten des Computersystems 500 über Compute-Express-Link (CXL)-Interconnects miteinander verbunden.
  • 6 veranschaulicht ein beispielhaftes Daten- bzw. Rechenzentrum 600, in welchem zumindest eine Ausführungsform verwendet werden kann. In zumindest einer Ausführungsform beinhaltet das Rechenzentrum 600 eine Rechenzentrum-Infrastrukturschicht 610, eine Rahmen- bzw. Frameworkschicht 620, eine Softwareschicht 630 und eine Anwendungsschicht 640.
  • In zumindest einer Ausführungsform, wie in 6 gezeigt, kann die Rechenzentrum-Infrastrukturschicht 610 einen Ressourcen-Orchestrator 612, gruppierte Rechenressourcen 614 und Knoten-Rechenressourcen („Knoten-C.R.s“) 616(1)-616(N) beinhalten, wobei „N“ eine beliebige ganze, positive Zahl repräsentiert. In zumindest einer Ausführungsform können die Knoten-C.R.s 616(1)-1016(N), ohne darauf beschränkt zu sein, eine beliebige Anzahl von Zentralverarbeitungseinheiten („CPUs“) oder anderen Prozessoren (einschließlich Beschleunigern, feldprogrammierbaren Gate-Arrays (FPGAs), Grafikprozessoren usw.), Speichervorrichtungen (z. B. dynamischer Festwertspeicher), Speichervorrichtungen (z. B. Festkörper bzw. Solid-State- oder Festplattenlaufwerke), Netzwerk-Eingabe-/ Ausgabe („NW E/A“)-Vorrichtungen, Netzwerk-Switches, virtuellen Maschinen („VMs“), Leistungsmodulen und Kühlmodulen usw. beinhalten. In zumindest einer Ausführungsform können ein oder mehrere Knoten-C.R.s unter den Knoten-C.R.s 616(1)-1016(N) ein Server mit einer oder mehreren der vorstehend genannten Rechenressourcen sein.
  • In zumindest einer Ausführungsform können die gruppierten Rechenressourcen 614 separate Gruppierungen von Knoten-C.R.s beinhalten, die in einem oder mehreren Gestellrahmen bzw. Racks (nicht gezeigt) oder in vielen Racks in Rechenzentren an verschiedenen geografischen Standorten (ebenfalls nicht gezeigt) untergebracht sind. Separate Gruppierungen von Knoten-C.R.s innerhalb der gruppierten Rechenressourcen 614 können gruppierte Rechen-, Netzwerk-, Speicher- oder Speicherressourcen beinhalten, die zur Unterstützung einer oder mehrerer Arbeitslasten konfiguriert oder alloziert sein können. In zumindest einer Ausführungsform können mehrere Knoten-C.R.s mit CPUs oder Prozessoren in einem oder mehreren Racks gruppiert sein, um Rechenressourcen zur Unterstützung einer oder mehrerer Arbeitslasten bereitzustellen. In zumindest einer Ausführungsform können ein oder mehrere Racks auch eine beliebige Anzahl von Stromversorgungsmodulen, Kühlmodulen und Netzwerk-Switches in beliebiger Kombination beinhalten.
  • In zumindest einer Ausführungsform kann der Ressourcen-Orchestrator 612 einen oder mehrere Knoten-CRs 616(1)-616(N) und/oder gruppierte Rechenressourcen 614 konfigurieren oder anderweitig steuern. In zumindest einer Ausführungsform kann der Ressourcen-Orchestrator 612 eine Software-Design-Infrastruktur („SDI“)-Verwaltungsentität für das Rechenzentrum 600 beinhalten. In zumindest einer Ausführungsform kann der Ressourcen-Orchestrator Hardware, Software oder eine Kombination davon beinhalten.
  • In zumindest einer Ausführungsform, wie in 6 gezeigt, beinhaltet die Frameworkschicht 620 einen Auftragsplaner bzw. Job-Scheduler 622, einen Konfigurationsverwalter bzw. Konfigurationsmanager 624, einen Ressourcenverwalter bzw. Ressourcenmanager 626 und ein verteiltes Dateisystem 628. In zumindest einer Ausführungsform kann die Frameworkschicht 620 ein Framework zur Unterstützung der Software 632 der Softwareschicht 630 und/oder einer oder mehrerer Anwendung(en) 642 der Anwendungsschicht 640 beinhalten. In zumindest einer Ausführungsform können die Software 632 oder die Anwendung(en) 642 jeweils webbasierte Dienstsoftware oder Anwendungen beinhalten, wie sie beispielsweise von Amazon Web Services, Google Cloud und Microsoft Azure bereitgestellt werden. In zumindest einer Ausführungsform kann die Frameworkschicht 620, ohne darauf beschränkt zu sein, eine Art freies und quelloffenes Software-Webanwendungs-Framework sein, wie z. B. Apache SparkTM (im Folgenden „Spark“), das ein verteiltes Dateisystem 628 für die Verarbeitung großer Datenmengen (z. B. „Big Data“) nutzen kann. In zumindest einer Ausführungsform kann der Job-Scheduler 622 einen Spark-Treiber beinhalten, um die Planung von Arbeitslasten zu erleichtern, die von verschiedenen Schichten des Rechenzentrums 600 unterstützt werden. In zumindest einer Ausführungsform kann der Konfigurationsmanager 624 in der Lage sein, verschiedene Schichten zu konfigurieren, z. B. die Softwareschicht 630 und die Framework-Schicht 620 einschließlich Spark und das verteilte Dateisystem 628 zur Unterstützung der Verarbeitung großer Datenmengen. In zumindest einer Ausführungsform kann der Ressourcenmanager 626 in der Lage sein, geclusterte oder gruppierte Computerressourcen zu verwalten, die zur Unterstützung des verteilten Dateisystems 628 und des Job Schedulers 622 zugeordnet sind. In zumindest einer Ausführungsform können geclusterte oder gruppierte Computerressourcen die gruppierte Computerressource 614 auf der Rechenzentrumsinfrastrukturebene 610 umfassen. In zumindest einer Ausführungsform kann der Ressourcenmanager 626 mit dem Ressourcen-Orchestrator 612 koordiniert werden, um diese zugeordneten oder zugewiesenen Computerressourcen zu verwalten.
  • In zumindest einer Ausführungsform kann die in der Softwareschicht 630 enthaltene Software 632 Software beinhalten, die von zumindest Teilen der Knoten C.R.s 616(1)-616(N), den gruppierten Computerressourcen 614 und/oder dem verteilten Dateisystem 628 der Frameworkschicht 620 verwendet wird. Eine oder mehrere Arten von Software können, ohne darauf beschränkt zu sein, Internet-Webseiten-Such-Software, E-Mail-Virenscan-Software, Datenbank-Software und Streaming-Video-Content-Software umfassen.
  • In zumindest einer Ausführungsform kann (können) die in der Anwendungsschicht 640 enthaltene(n) Anwendung(en) 642 eine oder mehrere Arten von Anwendungen beinhalten, die von zumindest Teilen der Knoten C.R.s 616(1)-616(N), den gruppierten Rechenressourcen 614 und/oder dem verteilten Dateisystem 628 der Frameworkschicht 620 verwendet werden. Eine oder mehrere Arten von Anwendungen können, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Genomanwendungen, eine kognitive Berechnung und Anwendungen für maschinelles Lernen beinhalten, einschließlich Trainings- oder Inferenzsoftware, Software für ein Framework maschinellen Lernens (z. B. PyTorch, TensorFlow, Caffe usw.) oder andere Anwendungen für maschinelles Lernen, die in Verbindung mit einer oder mehreren Ausführungsformen verwendet werden.
  • In zumindest einer Ausführungsform können ein beliebiger des Konfigurationsmanagers 624, des Ressourcenmanagers 626 und des Ressourcen-Orchestrators 612 eine beliebige Anzahl und Art von selbstmodifizierenden Aktionen basierend auf einer beliebigen Menge und Art von Daten, die auf jede beliebige technisch mögliche Weise erfasst wurden, implementieren. In zumindest einer Ausführungsform können selbstmodifizierende Aktionen einen Rechenzentrumsbetreiber des Rechenzentrums 600 davon entlasten, möglicherweise schlechte Konfigurationsentscheidungen zu treffen und möglicherweise nicht ausgelastete und/oder schlecht leistende Teile eines Rechenzentrums zu vermeiden.
  • In zumindest einer Ausführungsform kann das Rechenzentrum CPUs, anwendungsspezifische integrierte Schaltkreise (ASICs), GPUs, FPGAs oder andere Hardware verwenden, um ein Training und/oder eine Inferenzierung unter Verwendung der vorstehend beschriebenen Ressourcen durchzuführen. Außerdem können eine oder mehrere der oben beschriebenen Software- und/oder Hardware-Ressourcen als ein Dienst konfiguriert sein, um es Benutzern zu ermöglichen, ein Training oder eine Inferenzierung von Informationen, wie beispielsweise Bilderkennung, Spracherkennung oder andere Dienste der künstlichen Intelligenz, zu ermöglichen.
  • Andere Variationen sind im Sinne der Erfindung. Daher sind, während offenbarte Techniken verschiedenen Modifikationen und alternativen Konstruktionen zugänglich sind, bestimmte dargestellte Ausführungsformen derselben in Zeichnungen gezeigt und wurden vorstehend im Einzelnen beschrieben. Es versteht sich jedoch, dass nicht beabsichtigt ist, die Erfindung auf eine bestimmte Form oder bestimmte Formen zu beschränken, sondern dass im Gegenteil beabsichtigt ist, alle Modifikationen, alternativen Konstruktionen und Äquivalente abzudecken, die in den Rahmen und den Schutzumfang der Erfindung fallen, wie sie in den beigefügten Ansprüchen definiert ist.
  • Die Verwendung der Begriffe „ein(e)“ und „der“ und ähnlicher Bezeichnungen im Kontext des Beschreibens offenbarter Ausführungsformen (insbesondere im Kontext der folgenden Ansprüche) ist so auszulegen, dass diese sowohl die Einzahl als auch die Mehrzahl umfassen, sofern hier nichts anders angegeben ist oder durch Kontext eindeutig widerlegt wird, und nicht als Definition eines Begriffs. Die Begriffe „umfassend“, „mit“, „einschließlich“, „beinhaltend“ und „enthaltend“ sind, sofern nicht anders angegeben, als offene Begriffe zu verstehen (d.h. „einschließlich, aber nicht beschränkt auf“). Der Begriff „verbunden“ ist, wenn unverändert und sich auf physikalische Verbindungen beziehend, als teilweise oder ganz in einem Bauteil enthalten, an ihm angebracht oder mit ihm verbunden zu verstehen, auch wenn etwas dazwischen liegt. Angaben von Wertebereichen sind lediglich beabsichtigt, als ein verkürzendes Verfahren der individuellen Bezugnahme auf jeden einzelnen Wert, der in den Bereich fällt, zu dienen, sofern hierin nichts anderes angegeben ist, und jeder einzelne Wert wird in die Spezifikation einbezogen, als wäre er hierin einzeln aufgeführt. Die Verwendung des Begriffs „Satz“ oder „Menge“ (z. B. „eine Menge von Gegenständen“) oder „Teilmenge“ ist, sofern nicht anders angegeben oder durch Kontext widerlegt, als eine nicht leere Sammlung zu verstehen, die ein oder mehrere Elemente umfasst. Außerdem und sofern nicht anders vermerkt oder durch Kontext widerlegt, bezeichnet der Begriff „Teilmenge“ einer entsprechenden Menge nicht unbedingt eine echte Teilmenge der entsprechenden Menge, sondern Teilmenge und entsprechende Menge können gleich sein.
  • Konjunktivische Sprache, wie z. B. Phrasen der Form „zumindest eines von A, B und C“ oder „zumindest eines von A, B und C“, wird, sofern nicht ausdrücklich anders angegeben oder anderweitig eindeutig durch Kontext widerlegt, andernfalls mit Kontext verstanden, wie er im Allgemeinen verwendet wird, um darzulegen, dass ein Element, ein Begriff usw. entweder A oder B oder C oder eine beliebige nicht leere Teilmenge der Menge von A und B und C sein kann. Beispielsweise beziehen sich in einem veranschaulichenden Beispiel einer Menge mit drei Elementen die konjunktivischen Phrasen „zumindest eines von A, B und C“ und „zumindest eines von A, B und C“ auf eine beliebige der folgenden Mengen: {A}, {B}, {C}, {A, B}, {A, C}, {B, C}, {A, B, C}. Eine solche konjunktivische Sprache soll also nicht generell implizieren, dass bestimmte Ausführungsformen zumindest eines von A, zumindest eines von B und zumindest eines von C als vorhanden erfordern. Darüber hinaus, sofern nicht anders angegeben oder durch Kontext widerlegt, bezeichnet der Begriff „Vielzahl“ einen Zustand des mehrfachen Vorhandenseins (z. B. bezeichnet „eine Mehrzahl von Elementen“ mehrere Elemente). Die Anzahl von Elementen in einer Mehrzahl beträgt zumindest zwei, kann aber mehr sein, wenn dies entweder explizit oder durch Kontext so angegeben wird. Sofern nicht anders angegeben oder aus Kontext anderweitig ersichtlich, bedeutet „basierend auf‟ „zumindest teilweise basierend auf‟ und nicht „ausschließlich basierend auf“.
  • Operationen bzw. Betriebsabläufe hierin beschriebenen Prozesse können in jeder geeigneten Reihenfolge ausgeführt werden, sofern hierin nicht anders angegeben oder durch Kontext eindeutig widerlegt. In zumindest einer Ausführungsform wird ein Prozess wie die hierin beschriebenen Prozesse (oder Variationen und/oder Kombinationen davon) gesteuert durch ein oder mehrere Computersysteme durchgeführt, die mit ausführbaren Anweisungen konfiguriert sind und als Code (z. B. ausführbare Anweisungen, ein oder mehrere Computerprogramme oder eine oder mehrere Anwendungen) implementiert sind, die kollektiv auf einem oder mehreren Prozessoren, durch Hardware oder Kombinationen davon ausgeführt werden. In zumindest einer Ausführungsform ist der Code auf einem computerlesbaren Speichermedium gespeichert, z. B. in Form eines Computerprogramms, das eine Vielzahl von Anweisungen umfasst, die von einem oder mehreren Prozessoren ausgeführt werden können. In zumindest einer Ausführungsform ist ein computerlesbares Speichermedium ein nichtflüchtiges computerlesbares Speichermedium, das flüchtige Signale (z. B. eine sich ausbreitende transiente elektrische oder elektromagnetische Übertragung) ausschließt, aber nichtflüchtige Datenspeicherschaltkreise (z. B. Puffer, Cache und Warteschlangen) innerhalb von Transceivern für flüchtige Signale einschließt. In zumindest einer Ausführungsform ist Code (z.B. ausführbarer Code oder Quellcode) auf einem Satz von einem oder mehreren nichtflüchtigen computerlesbaren Speichermedien, auf denen ausführbare Anweisungen gespeichert sind (oder anderem Speicher zum Speichern von ausführbaren Anweisungen) gespeichert, die, wenn sie von einem oder mehreren Prozessoren eines Computersystems ausgeführt werden (d.h. als ein Ergebnis der Ausführung), das Computersystem veranlassen, hierin beschriebene Operationen durchzuführen. In zumindest einer Ausführungsform umfasst der Satz nichtflüchtiger, computerlesbarer Speichermedien mehrere nichtflüchtige, computerlesbare Speichermedien, und fehlt einem oder mehreren der einzelnen nichtflüchtigen Speichermedien der mehreren nichtflüchtigen, computerlesbaren Speichermedien der gesamte Code, während mehreren nichtflüchtige, computerlesbare Speichermedien gemeinsam den gesamten Code speichern. In zumindest einer Ausführungsform werden ausführbare Befehle derart ausgeführt, dass verschiedene Befehle von verschiedenen Prozessoren ausgeführt werden - zum Beispiel speichert ein nichtflüchtiges, computerlesbares Speichermedium Anweisungen und führt eine Haupt-Zentralverarbeitungseinheit („CPU“) einige der Befehle aus, während eine Grafikverarbeitungseinheit („GPU“) andere Anweisungen ausführt. In zumindest einer Ausführungsform haben verschiedene Komponenten eines Computersystems separate Prozessoren und führen verschiedene Prozessoren verschiedene Teilmengen von Anweisungen aus.
  • Demgemäß sind in zumindest einer Ausführungsform Computersysteme dazu konfiguriert, einen oder mehrere Dienste zu implementieren, die einzeln oder gemeinsam Operationen der hierin beschriebenen Prozesse durchführen, und sind solche Computersysteme mit anwendbarer Hardware und/oder Software konfiguriert, die die Durchführung von Operationen ermöglichen. Ferner ist ein Computersystem, das zumindest eine Ausführungsform der vorliegenden Offenbarung implementiert, eine einzelne Vorrichtung und, in einer anderen Ausführungsform, ein verteiltes Computersystem, das mehrere Vorrichtungen umfasst, die unterschiedlich arbeiten derart, dass das verteilte Computersystem die hierin beschriebenen Operationen durchführt, und derart, dass eine einzelne Vorrichtung nicht alle Operationen durchführt.
  • Die Verwendung der Beispiele einzeln und insgesamt, oder beispielhafter Formulierungen (z. B. „wie beispielsweise“), die hierin bereitgestellt wird, dient lediglich der besseren Veranschaulichung von Ausführungsformen der Erfindung und stellt keine Beschränkung des Umfangs der Erfindung dar, sofern nicht anders beansprucht. Keine Formulierung in der Beschreibung ist so auszulegen, dass ein nicht beanspruchtes Element als wesentlich für die Umsetzung der Erfindung angesehen wird.
  • Alle Bezugnahmen, einschließlich Veröffentlichungen, Patentanmeldungen und Patenten, die hierin zitiert werden, werden hiermit durch Bezugnahme in demselben Umfang einbezogen, als ob jede Bezugnahme einzeln und ausdrücklich als durch Bezugnahme einbezogen angegeben wäre und hierin in ihrer Gesamtheit wiedergegeben würde.
  • In der Beschreibung und den Ansprüchen können Begriffe „gekoppelt“ und „verbunden“ sowie deren Ableitungen verwendet werden. Es versteht sich, dass diese Begriffe nicht als Synonyme füreinander gedacht sind. Vielmehr kann in bestimmten Beispielen „verbunden“ oder „gekoppelt“ verwendet werden, um anzuzeigen, dass zwei oder mehr Elemente in direktem oder indirektem physikalischem oder elektrischem Kontakt zueinander stehen. „Gekoppelt“ kann auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt zueinander stehen, aber dennoch miteinander kooperieren oder interagieren.
  • Sofern nicht ausdrücklich anders angegeben, beziehen sich Begriffe wie „Verarbeiten“, „Rechnen“, „Berechnen“, „Bestimmen“ oder dergleichen in der gesamten Spezifikation auf Aktionen und/oder Prozesse eines Computers oder Rechen- bzw. Computersystems, oder einer ähnlichen elektronischen Rechenvorrichtung, die Daten, die als physikalische, z. B. elektronische, Größen in Registern und/oder Speichern des Computersystems dargestellt werden, manipulieren und/oder in andere Daten umwandeln, die in ähnlicher Weise als physikalische Größen in Speichern, Registern oder anderen solchen Informationsspeicher-, -übertragungs- oder -anzeigevorrichtungen des Computersystems repräsentiert werden.
  • In ähnlicher Weise kann sich der Begriff „Prozessor“ auf eine beliebige Vorrichtung oder einen beliebigen Teil einer Vorrichtung beziehen, die elektronische Daten aus Registern und/oder Speicher verarbeitet und diese elektronischen Daten in andere elektronische Daten umwandelt, die in Registern und/oder Speicher gespeichert werden können. Als nicht beschränkende Beispiele kann ein „Prozessor“ eine CPU oder eine GPU sein. Eine „Datenverarbeitungsplattform“ kann einen oder mehrere Prozessoren umfassen. Wie hierin verwendet, können „Software“-Prozesse z. B. Software- und/oder Hardware-Entitäten umfassen, die im Laufe der Zeit Arbeit verrichten, wie z. B. Tasks, Threads und intelligente Agenten. Außerdem kann sich jeder Prozess auf mehrere Prozesse beziehen, um Anweisungen nacheinander oder parallel, kontinuierlich oder intermittierend auszuführen. Die Begriffe „System“ und „Verfahren“ werden hier insofern austauschbar verwendet, als ein System ein oder mehrere Verfahren verkörpern kann und Verfahren als ein System betrachtet werden können.
  • In dem vorliegenden Dokument kann auf das Erhalten, Erfassen, Empfangen oder Eingeben analoger oder digitaler Daten in ein Subsystem, ein Computersystem oder eine computerimplementierte Maschine Bezug genommen werden. Der Prozess des Erhaltens, Erfassens, Empfangens oder Eingebens analoger und digitaler Daten kann auf verschiedene Weise erzielt werden, z. B. durch Empfangen von Daten als ein Parameter eines Funktionsaufrufs oder eines Aufrufs an eine Anwendungsprogrammierschnittstelle. In einigen Implementierungen kann der Prozess des Erhaltens, Erfassens, Empfangens oder Eingebens von analogen oder digitalen Daten durch die Übertragung von Daten über eine serielle oder parallele Schnittstelle erzielt werden. In einer anderen Implementierung kann der Prozess des Erhaltens, Erfassens, Empfangens oder Eingebens von analogen oder digitalen Daten durch Übertragen von Daten über ein Computernetzwerk von einer bereitstellenden Entität zur einer erfassenden Entität erzielt werden. Es kann auch auf das Bereitstellen, Ausgeben, Übertragen, Senden oder Präsentieren analoger oder digitaler Daten Bezug genommen werden. In verschiedenen Beispielen kann der Prozess des Bereitstellens, Ausgebens, Übertragens, Sendens oder Darstellens analoger oder digitaler Daten durch die Übertragung von Daten als Eingabe- oder Ausgabeparameter eines Funktionsaufrufs, eines Parameters einer Anwendungsprogrammierschnittstelle oder eines Interprozess-Kommunikationsmechanismus erzielt werden.
  • Obwohl die vorstehende Diskussion beispielhafte Implementierungen der beschriebenen Techniken darlegt, können auch andere Architekturen verwendet werden, um die beschriebene Funktionalität zu implementieren, und sollen in den Anwendungsbereich dieser Erfindung fallen. Ferner könnten, obwohl spezifische Verteilungen von Verantwortlichkeiten vorstehend zu Diskussionszwecken definiert sind, verschiedene Funktionen und Verantwortlichkeiten abhängig von Umständen auf unterschiedliche Weisen verteilt und aufgeteilt werden.
  • Ferner versteht sich, obwohl der Gegenstand in einer Sprache beschrieben wurde, die für strukturelle Merkmale und/oder methodische Handlungen spezifisch ist, dass der in den beigefügten Ansprüchen beanspruchte Gegenstand nicht notwendigerweise auf bestimmte beschriebene Merkmale oder Handlungen beschränkt ist. Vielmehr werden bestimmte Merkmale und Handlungen als beispielhafte Formen des Implementierens der Ansprüche offenbart.

Claims (20)

  1. Verfahren zum Priorisieren einer Taskwarteschlange, umfassend: Bestimmen einer Prioritätswarteschlange eines Prozessors, wobei die Prioritätswarteschlange Anforderungen für Verarbeitungszeit des Prozessors beinhaltet, wobei die Anforderungen eine Vielzahl von Tasks beinhalten; Identifizieren eines Tasks mit hoher Priorität in der Prioritätswarteschlange; Identifizieren zumindest einer Feeder-Task, wobei der zumindest eine Feeder-Task eine oder mehrere Zwischenausgaben für den Verbrauch durch den Task mit hoher Priorität erzeugt, wobei dem Task mit hoher Priorität ein größerer Betrag an Verarbeitungszeit des Prozessors zugewiesen wird als dem zumindest einen Feeder-Task; Bestimmen, dass der Task mit hoher Priorität mehr von der einen oder den mehreren Zwischenausgaben verbraucht, als der Feeder-Task von der einen oder den mehreren Zwischenausgaben produziert; und Reallozieren von Verarbeitungszeit in der Prioritätswarteschlange für die Vielzahl von Tasks, um ein Verhältnis zwischen dem Verbrauch der einen oder der mehreren Zwischenausgaben und der Produktion der einen oder der mehreren Zwischenausgaben zu verringern.
  2. Verfahren nach Anspruch 1, wobei das Verringern des Verhältnisses ein Erhöhen einer Priorität des zumindest einen Feeder-Tasks in der Prioritätswarteschlange beinhaltet.
  3. Verfahren nach Anspruch 1 oder 2, wobei das Verringern des Verhältnisses ein Verringern einer Priorität des Tasks mit hoher Priorität in der Prioritätswarteschlange beinhaltet.
  4. Verfahren nach einem der vorangehenden Ansprüche, wobei der Task mit hoher Priorität und der Feeder-Task Teil einer Deep-Learning-Pipeline sind.
  5. Verfahren nach Anspruch 4, wobei der Feeder-Task ein Empfangen von Bilddaten und Erzeugen vorverarbeiteter Bilddaten beinhaltet.
  6. Verfahren nach Anspruch 5, wobei der Task mit hoher Priorität ein tiefes neuronales Netzwerk ist und die vorverarbeiteten Bilddaten als Daten zum Trainieren des tiefen neuronalen Netzwerks verwendet werden.
  7. Verfahren nach einem der vorangehenden Ansprüche, wobei die Zwischenausgabe in einer Arbeitswarteschlange gespeichert wird und wobei das Bestimmen, dass der Task mit hoher Priorität mehr von der einen oder den mehreren Zwischenausgaben verbraucht, als der Feeder-Task von der einen oder den mehreren Zwischenausgaben produziert, ein Überwachen der Arbeitswarteschlange beinhaltet.
  8. Verfahren nach Anspruch 7, wobei die Überwachung der Arbeitswarteschlange ein Überwachen eines Synchronisationsmechanismus beinhaltet, der anzeigt, ob sich die Arbeitswarteschlange mit Zwischenausgaben füllt oder von Zwischenausgaben leert.
  9. Verfahren nach einem der vorangehenden Ansprüche, wobei die Prioritätswarteschlange einem oder mehreren zusätzlichen Prozessoren zugeordnet ist, die Anforderungen empfangen, die die Vielzahl von Tasks beinhalten.
  10. Verfahren zur Priorisierung von Tasks, umfassend: Identifizieren eines ersten Tasks, wobei von dem ersten Task erledigte Arbeit einer Arbeitswarteschlange als Zwischenausgabe bereitgestellt wird; Identifizieren eines zweiten Tasks, wobei der zweite Task Zwischenarbeit aus der Arbeitswarteschlange verbraucht; Bestimmen, dass die Arbeitswarteschlange schneller von Zwischenausgaben geleert wird, als Zwischenausgaben zu der Arbeitswarteschlange hinzugefügt werden; und Einstellen einer Priorität zumindest einer des ersten und/oder des zweiten Tasks, um eine Rate einzustellen, mit der die Zwischenausgabe zu der Arbeitswarteschlange hinzugefügt wird.
  11. Verfahren nach Anspruch 10, wobei das Bestimmen, dass sich die Arbeitswarteschlange leert, beinhaltet: Identifizieren eines Synchronisationsmechanismus, wobei der Synchronisationsmechanismus anzeigt, ob die Arbeitswarteschlange verfügbare Ressourcen hat, um zusätzliche Zwischenarbeit zu empfangen; und wobei das Einstellen der Priorität eines des ersten und des zweiten Tasks ein Erhöhen der Menge der Zwischenausgabe durch den ersten Task in der Arbeitswarteschlange beinhaltet.
  12. Verfahren nach Anspruch 11, wobei der Synchronisationsmechanismus eine binäre Repräsentation ist, die anzeigt, ob in der Arbeitswarteschlange Platz für weitere Zwischenausgaben vorhanden ist.
  13. Verfahren nach einem der Ansprüche 10 bis 12, ferner umfassend: Identifizieren eines dritten Tasks, wobei der dritte Task eine Ausgabe an die Arbeitswarteschlange als Zwischenausgabe bereitstellt; Einstellen einer Priorität des dritten Tasks, um die Rate zu ändern, mit der Zwischenarbeit zu der Arbeitswarteschlange hinzugefügt wird.
  14. Verfahren nach einem der Ansprüche 10 bis 13, ferner umfassend: Empfangen von Input, wobei der Input dem ersten Task zur Verarbeitung bereitgestellt wird; und Bereitstellen einer endgültigen Ausgabe im Ansprechen auf ein Beenden der Verarbeitung der Zwischenausgabe durch den zweiten Task.
  15. Verfahren nach Anspruch 14, wobei der Input Bilddaten ist, wobei der erste Task die Bilddaten vorverarbeitet und wobei der Task mit hoher Priorität eine Ausgabe bereitstellt zum Trainieren eines tiefen neuronalen Netzwerks basierend auf den vorverarbeiteten Bilddaten.
  16. System, umfassend: einen Prozessor; eine Prioritätswarteschlange für den Prozessor, wobei die Prioritätswarteschlange Anforderungen für Verarbeitungszeit des Prozessors beinhaltet, die von einer Vielzahl von Tasks empfangen wurden; und Speicher einschließlich Anweisungen zum: Identifizieren eines Tasks mit hoher Priorität, wobei dem Task mit hoher Priorität ein größerer Betrag an Verarbeitungszeit des Prozessors zugewiesen wird als einem oder mehreren anderen Tasks, und wobei eine oder mehrere der Anforderungen in der Prioritätswarteschlange mit dem Task mit hoher Priorität in Beziehung stehen; Identifizieren eines Feeder-Tasks, wobei der Feeder-Task eine oder mehrere Zwischenausgaben für den Verbrauch durch den Task mit hoher Priorität erzeugt, wobei der Feeder-Task in der Prioritätswarteschlange eine niedrigere Priorität als der Task mit hoher Priorität hat, und wobei eine oder mehrere der Anforderungen in der Prioritätswarteschlange mit dem Feeder-Task in Beziehung stehen; und Anpassen von Anforderungen, die von dem Feeder-Task und dem Task mit hoher Priorität an die Prioritätswarteschlange des Prozessors gesendet werden, basierend auf einer Bestimmung, dass der Task mit hoher Priorität mehr von der einen oder den mehreren Zwischenausgaben verbraucht, als der Feeder-Task von der einen oder den mehreren Zwischenausgaben produziert.
  17. System nach Anspruch 16, ferner umfassend: eine Arbeitswarteschlange, wobei die Arbeitswarteschlange Zwischenausgaben beinhaltet, die von dem Feeder-Task fertiggestellt und noch nicht von dem Task mit hoher Priorität verbraucht wurden; und wobei die Anweisungen zum Anpassen von Anforderungen, die an die Prioritätswarteschlange gesendet werden, ferner Anweisungen enthalten zum: Überwachen der Arbeitswarteschlange, um zu bestimmen, ob der Task mit hoher Priorität mehr von der einen oder den mehreren Zwischenausgaben verbraucht, als der Feeder-Task von der einen oder den mehreren Zwischenausgaben produziert.
  18. System nach Anspruch 16 oder 17, wobei die Anweisungen ferner Anweisungen beinhalten zum: Empfangen von Input, wobei der Input dem ersten Task zur Verarbeitung bereitgestellt wird; und Bereitstellen einer endgültigen Ausgabe im Ansprechen auf den Abschluss der Verarbeitung der Zwischenausgabe durch den zweiten Task.
  19. System nach Anspruch 18, wobei der Input Bilddaten ist, wobei der erste Task die Bilddaten vorverarbeitet und wobei der Task mit hoher Priorität ein tiefes neuronales Netzwerk auf der Grundlage der vorverarbeiteten Bilddaten trainiert.
  20. System nach einem der Ansprüche 16 bis 19, wobei die Anweisungen ferner Anweisungen beinhalten zum: Identifizieren eines dritten Tasks, wobei der dritte Task eine Ausgabe an die Arbeitswarteschlange als eine Zwischenausgabe bereitstellt; und Anpassen einer Priorität des dritten Tasks, um die Menge von Zwischenarbeit in der Arbeitswarteschlange zu ändern.
DE102020132469.3A 2019-12-20 2020-12-07 Warteschlangen mit benutzerdefiniert gemessener priorität Pending DE102020132469A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/722,422 US11954518B2 (en) 2019-12-20 2019-12-20 User-defined metered priority queues
US16/722,422 2019-12-20

Publications (1)

Publication Number Publication Date
DE102020132469A1 true DE102020132469A1 (de) 2021-06-24

Family

ID=76205943

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020132469.3A Pending DE102020132469A1 (de) 2019-12-20 2020-12-07 Warteschlangen mit benutzerdefiniert gemessener priorität

Country Status (3)

Country Link
US (1) US11954518B2 (de)
CN (1) CN113010301A (de)
DE (1) DE102020132469A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11915040B2 (en) * 2020-03-17 2024-02-27 UiPath, Inc. Scheduling and prioritizing RPA jobs based on user-defined priority
GB2624514A (en) * 2022-09-23 2024-05-22 Samsung Electronics Co Ltd Method for optimising usage of a processing unit for executing machine learning models

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ATE388542T1 (de) * 1999-12-13 2008-03-15 Broadcom Corp Sprach-durchgangsvorrichtung mit sprachsynchronisierung in abwärtsrichtung
US6918111B1 (en) * 2000-10-03 2005-07-12 Sun Microsystems, Inc. System and method for scheduling instructions to maximize outstanding prefetches and loads
US20020083063A1 (en) * 2000-12-26 2002-06-27 Bull Hn Information Systems Inc. Software and data processing system with priority queue dispatching
GB0031763D0 (en) * 2000-12-29 2001-02-07 Mitel Semiconductor Ltd Arbiter for a queue management system
US7072299B2 (en) * 2001-08-20 2006-07-04 International Business Machines Corporation Credit-based receiver using selected transmit rates and storage thresholds for preventing under flow and over flow-methods, apparatus and program products
US20050160178A1 (en) * 2003-12-17 2005-07-21 Venables Bradley D. Adjusting shaped rates
US7433364B2 (en) * 2003-12-24 2008-10-07 Intel Corporation Method for optimizing queuing performance
US20050185583A1 (en) * 2004-02-19 2005-08-25 Hosein Patrick A. QoS management for multiple service instances
US20060192850A1 (en) * 2004-04-22 2006-08-31 Koninklijke Philips Electronics N.V. Method of and system to set an output quality of a media frame
US7779418B2 (en) * 2004-12-30 2010-08-17 Oracle International Corporation Publisher flow control and bounded guaranteed delivery for message queues
CN101310483B (zh) 2005-11-18 2012-02-08 艾利森电话股份有限公司 用于调度hsdpa的方法和基站
US9448856B2 (en) * 2005-12-30 2016-09-20 Level 3 Communications, Llc Lock-free dual queue with condition synchronization and time-outs
US8072630B2 (en) * 2006-05-10 2011-12-06 Ricoh Production Print Solutions LLC Integration of job control and synchronization with printer controller data exchanges
US20080066066A1 (en) * 2006-09-08 2008-03-13 Macpherson Michael B Task queue suitable for processing systems that use multiple processing units and shared memory
JP2008123045A (ja) * 2006-11-08 2008-05-29 Matsushita Electric Ind Co Ltd プロセッサ
US7822886B1 (en) * 2008-04-16 2010-10-26 Xilinx, Inc. Dataflow control for application with timing parameters
US8428075B1 (en) * 2009-05-28 2013-04-23 Juniper Networks, Inc. System and method for efficient shared buffer management
US8904399B2 (en) * 2010-03-15 2014-12-02 Qualcomm Incorporated System and method of executing threads at a processor
US8738860B1 (en) * 2010-10-25 2014-05-27 Tilera Corporation Computing in parallel processing environments
US9063790B2 (en) * 2011-06-13 2015-06-23 Accenture Global Services Limited System and method for performing distributed parallel processing tasks in a spot market
US8689237B2 (en) * 2011-09-22 2014-04-01 Oracle International Corporation Multi-lane concurrent bag for facilitating inter-thread communication
US9276866B2 (en) * 2012-11-30 2016-03-01 Microsoft Technology Licensing, Llc Tuning congestion notification for data center networks
RU2538920C2 (ru) 2013-05-06 2015-01-10 Общество с ограниченной ответственностью "Аби ИнфоПоиск" Способ распределения задач сервером вычислительной системы, машиночитаемый носитель информации и система для реализации способа
US9614794B2 (en) * 2013-07-11 2017-04-04 Apollo Education Group, Inc. Message consumer orchestration framework
US9734007B2 (en) * 2014-07-09 2017-08-15 Qualcomm Incorporated Systems and methods for reliably storing data using liquid distributed storage
US20160077545A1 (en) * 2014-09-17 2016-03-17 Advanced Micro Devices, Inc. Power and performance management of asynchronous timing domains in a processing device
CN104657221B (zh) 2015-03-12 2019-03-22 广东石油化工学院 一种云计算中基于任务分类的多队列错峰调度模型及方法
CN104657214A (zh) 2015-03-13 2015-05-27 华存数据信息技术有限公司 一种基于多队列和多优先级的大数据任务管理系统和方法
US9684512B2 (en) * 2015-03-30 2017-06-20 International Business Machines Corporation Adaptive Map-Reduce pipeline with dynamic thread allocations
US20160371122A1 (en) * 2015-06-19 2016-12-22 Hewlett Packard Enterprise Development Lp File processing workflow management
US9888079B2 (en) * 2015-07-30 2018-02-06 The Boeing Company Method for managing messages across a controller area network
US20170289242A1 (en) * 2016-03-31 2017-10-05 David Keppel Technologies for dynamic work queue management
US10133574B2 (en) * 2016-06-14 2018-11-20 Advanced Micro Devices, Inc. Power management of instruction processors in a system-on-a-chip
NL2019410B1 (en) * 2017-08-10 2019-02-21 Aidence B V Computer-aided diagnostics using deep neural networks
WO2019183861A1 (zh) 2018-03-28 2019-10-03 深圳市大疆创新科技有限公司 任务处理方法、设备及机器可读存储介质
US11328208B2 (en) * 2018-08-29 2022-05-10 Cerebras Systems Inc. Processor element redundancy for accelerated deep learning
CN109857535B (zh) * 2019-02-18 2021-06-11 国家计算机网络与信息安全管理中心 面向Spark JDBC的任务优先级控制的实现方法及装置

Also Published As

Publication number Publication date
US11954518B2 (en) 2024-04-09
US20210191754A1 (en) 2021-06-24
CN113010301A (zh) 2021-06-22

Similar Documents

Publication Publication Date Title
CN109491790B (zh) 基于容器的工业物联网边缘计算资源分配方法及系统
CN104317658B (zh) 一种基于MapReduce的负载自适应任务调度方法
CN103309946B (zh) 多媒体文件处理方法、装置及系统
US10761897B2 (en) Predictive model-based intelligent system for automatically scaling and managing provisioned computing resources
DE602004011890T2 (de) Verfahren zur Neuverteilung von Objekten an Recheneinheiten
DE112010005096T5 (de) Verfahren und Vorrichtungen zum Bewerten der Ressourcen-Kapazität in einem System von virtuellen Containern
CN108701046A (zh) 用于避免虚拟机之间的物理cpu争用的虚拟cpu合并
DE112012004336T5 (de) System, Verfahren und Programmprodukt für kostenbewusste Auswahl von Vorlagen zum Bereitstellen von gemeinsam genutzten Ressourcen
CN109783237A (zh) 一种资源配置方法及装置
DE112013000486T5 (de) Anweisungsausgleich durch Anweisungsunsicherheit für Prozessoren mit mehreren Threads
DE112012004999T5 (de) Beschleunigungselement zur Cloud-Bereitstellung
DE102016118210A1 (de) Granulare Dienstqualität für Computer-Ressourcen
DE102020132469A1 (de) Warteschlangen mit benutzerdefiniert gemessener priorität
CN112181613B (zh) 异构资源分布式计算平台批量任务调度方法及存储介质
CN109783225B (zh) 一种多租户大数据平台的租户优先级管理方法及系统
CN113946431B (zh) 一种资源调度方法、系统、介质及计算设备
DE112021005586T5 (de) Automatisches skalieren einer abfrage-steuerungsroutine für arbeitslasten im bereich big data auf unternehmensebene
DE102019103932A1 (de) Technologien für optimierte Dienstgütebeschleunigung
CN115586961A (zh) 一种ai平台计算资源任务调度方法、装置及介质
CN114090251A (zh) 一种边缘计算资源自适应动态调度方法及系统
CN115495222A (zh) 基于深度学习和大数据的云计算系统
DE112020007087T5 (de) Gleichzeitige Hashtabellen-Aktualisierungen
CN103442087B (zh) 一种基于响应时间趋势分析的Web服务系统访问量控制装置和方法
CN116915869A (zh) 基于云边协同的时延敏感型智能服务快速响应方法
CN116389591A (zh) 一种基于跨域分布式处理系统及调度优化方法

Legal Events

Date Code Title Description
R012 Request for examination validly filed