DE102017213160A1 - Kompilierung für knotenvorrichtungs-GPU-basierte Parallelverarbeitung - Google Patents

Kompilierung für knotenvorrichtungs-GPU-basierte Parallelverarbeitung Download PDF

Info

Publication number
DE102017213160A1
DE102017213160A1 DE102017213160.8A DE102017213160A DE102017213160A1 DE 102017213160 A1 DE102017213160 A1 DE 102017213160A1 DE 102017213160 A DE102017213160 A DE 102017213160A DE 102017213160 A1 DE102017213160 A1 DE 102017213160A1
Authority
DE
Germany
Prior art keywords
task
gpu
routine
node device
node
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.)
Granted
Application number
DE102017213160.8A
Other languages
English (en)
Other versions
DE102017213160B4 (de
Inventor
Henry Gabriel Victor Bequet
Huina Chen
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.)
SAS Institute Inc
Original Assignee
SAS Institute Inc
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
Priority claimed from US15/422,285 external-priority patent/US9760376B1/en
Application filed by SAS Institute Inc filed Critical SAS Institute Inc
Publication of DE102017213160A1 publication Critical patent/DE102017213160A1/de
Application granted granted Critical
Publication of DE102017213160B4 publication Critical patent/DE102017213160B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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
    • 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/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • 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/5044Allocation 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 hardware capabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • 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]
    • 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/5055Allocation 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 software capabilities, i.e. software resources associated or available to the machine
    • 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/5061Partitioning or combining of resources
    • G06F9/5072Grid computing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/06Management of faults, events, alarms or notifications
    • H04L41/0654Management of faults, events, alarms or notifications using network fault recovery
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/1004Server selection for load balancing
    • H04L67/1008Server selection for load balancing based on parameters of servers, e.g. available memory or workload
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/561Adding application-functional data or data for application control, e.g. adding metadata
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Mathematical Physics (AREA)
  • Library & Information Science (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)

Abstract

Eine Vorrichtung kann einen Prozessor und Speicher umfassen, um Anweisungen zu speichern, die den Prozessor veranlassen, Operationen durchzuführen, einschließlich: in Reaktion auf eine Bestimmung, dass eine GPU einer Knotenvorrichtung verfügbar ist, Bestimmen, ob eine Taskroutine kompiliert werden kann, um eine GPU-Taskroutine zur Ausführung durch die GPU zu erzeugen, um eine Durchführung von mehreren Instanzen einer Aufgabe der Taskroutine wenigstens teilweise parallel ohne Abhängigkeiten dazwischen zu veranlassen; und in Reaktion auf eine Bestimmung, dass die Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen: Verwenden einer Umwandlungsregel, um die Taskroutine in die GPU-Taskroutine umzuwandeln; Kompilieren der GPU-Taskroutine zur Ausführung durch die GPU; und Zuweisen der Durchführung der Aufgabe mit einer Datensatzpartition an die Knotenvorrichtung, um die Durchführung der mehreren Instanzen mit der Datensatzpartition durch die GPU zu ermöglichen.

Description

  • QUERVERWEIS AUF VERWANDTE ANMELDUNGEN
  • Diese Anmeldung beansprucht den Vorteil der Priorität gemäß 35 U.S.C. &119(e) aus der vorläufigen US-Patentanmeldung Serien-Nr. 62/289,484, eingereicht am 1. Februar 2016, vorläufigen US-Patentanmeldung Serien-Nr. 62/379,512, eingereicht am 25. August 2016, und vorläufigen US-Patentanmeldung Serien-Nr. 62/394,411, eingereicht am 14. September 2016, deren Gesamtheit hierin durch Bezugnahme aufgenommen ist. Diese Anmeldung ist eine Fortsetzung von und beansprucht den Vorteil der Priorität gemäß 35 U.S.C. §120 aus der US-Patentanmeldung Serien-Nr. 15/422,154, die gleichzeitig hiermit am 1. Februar 2017 eingereicht wurde, deren Gesamtheit hierin durch Bezugnahme aufgenommen ist.
  • HINTERGRUND
  • Es ist zunehmend üblicher geworden, Gitter von zahlreichen Knotenvorrichtungen zu verwenden, um Analysen von großen Datensätzen (z. B. üblicherweise als „Big Data” bezeichnet) in einer verteilten Weise durchzuführen, in der Aufgaben von Analyseroutinen wenigstens teilweise parallel über mehrere ausgewählte der Knotenvorrichtungen durchgeführt werden. Beim Betrieb derartiger Gitter gibt es oftmals konkurrierende Ziele bei der Zuweisung der Aufgaben von Analyseroutinen an die Knotenvorrichtungen, einschließlich des Ziels, die Verarbeitungsressourcen jeder Knotenvorrichtung möglichst vollständig und ununterbrochen zu nutzen, und des Ziels, die Verarbeitungs- und Speicherressourcen jeder Knotenvorrichtung sowie die Netzbandbreitenressourcen des Gitters effektiver zu nutzen. Was zur Komplexität der Adressierung derartiger konkurrierender Ziele hinzukommt, ist die übliche Praxis, Gitterressourcen zu teilen, indem veranlasst wird, dass die Aufgaben von mehreren Analyseroutinen gleichzeitig von den Knotenvorrichtungen des Gitters durchgeführt werden. Ein klassischer Ansatz zur Zuweisung von Aufgaben besteht darin, einfach die nächste durchzuführende Aufgabe der Knotenvorrichtung zuzuweisen, die die nächste mit verfügbaren Verarbeitungsressourcen ist. Leider bedeutet dieser klassische Ansatz eine Entscheidung, erhebliche Ineffizienzen bei der Verwendung von Speicher- und Netzbandbreiten zu ermöglichen.
  • KURZFASSUNG
  • Diese Kurzfassung ist nicht dazu bestimmt, nur Schlüssel- oder wesentliche Merkmale des beschriebenen Gegenstands zu identifizieren, noch soll sie isoliert verwendet werden, um den Schutzbereich des beschriebenen Gegenstands zu bestimmen. Der Gegenstand sollte unter Bezugnahme auf geeignete Teile der gesamten Beschreibung dieses Patents, beliebige oder alle Zeichnungen und jeden Anspruch verstanden werden.
  • Eine Vorrichtung kann einen Prozessor und einen Speicher umfassen, um Anweisungen zu speichern, die, wenn sie durch den Prozessor ausgeführt werden, den Prozessor veranlassen, für jede Knotenvorrichtung einer Mehrzahl von Knotenvorrichtungen eine Zuweisung der Durchführung einer ersten Aufgabe mit einem erster Datensatz abzuleiten, wobei: der erste Datensatz in eine Mehrzahl von Partitionen aufteilbar ist; eine erste Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen zugewiesen ist, um die erste Aufgabe mit einer ersten Partition der Mehrzahl von Partitionen des ersten Datensatzes durchzuführen; und eine zweite Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen zugewiesen ist, um die erste Aufgabe mit einer zweiten Partition der Mehrzahl von Partitionen des ersten Datensatzes durchzuführen. Der Prozessor kann veranlasst werden zum Übertragen von einer Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der ersten Partition an die erste Knotenvorrichtung, um die Durchführung der ersten Aufgabe mit der ersten Partition durch die erste Knotenvorrichtung zu veranlassen und eine Speicherung von wenigstens einem Teil der ersten Partition innerhalb des flüchtigen Speichers der ersten Knotenvorrichtung zu veranlassen; Übertragen von einer Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der zweiten Partition an die zweite Knotenvorrichtung, um die Durchführung der ersten Aufgabe mit der zweiten Partition durch die zweite Knotenvorrichtung zu veranlassen und eine Speicherung von wenigstens einem Teil der zweiten Partition innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung zu veranlassen; Empfangen von einer Anzeige von der ersten Knotenvorrichtung der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition durch die erste Knotenvorrichtung, so dass die erste Knotenvorrichtung verfügbar ist, um die Durchführung einer anderen Aufgabe zuzuweisen; Verzögern der Zuweisung der Durchführung einer zweiten Aufgabe auf der zweiten Partition an die erste Knotenvorrichtung nach Empfangen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition durch die erste Knotenvorrichtung bis zu einer vorbestimmten Zeitperiode, trotz Bereitschaft der zweiten Aufgabe, die auf der zweiten Partition durchgeführt werden soll, und trotz Verfügbarkeit des ersten Knotens als Ergebnis der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition; und Bestimmen, ob eine Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der zweiten Partition durch die zweite Knotenvorrichtung, so dass die zweite Knotenvorrichtung verfügbar ist, um die Durchführung einer anderen Aufgabe zuzuweisen, von der zweiten Knotenvorrichtung innerhalb der vorbestimmten Zeitperiode empfangen wird. In Reaktion auf den Empfang der Anzeige der Beendigung der ersten Aufgabe mit der zweiten Partition durch die zweite Knotenvorrichtung innerhalb der vorbestimmten Zeitperiode kann der Prozessor veranlasst werden zum Zuweisen der Durchführung der zweiten Aufgabe auf der zweiten Partition an die zweite Knotenvorrichtung, um Zugriffe auf wenigstens einen Teil der zweiten Partition innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung zu ermöglichen; und Übertragen von einer Anzeige der Zuweisung der Durchführung der zweiten Aufgabe auf der zweiten Partition an die zweite Knotenvorrichtung, um ein Abrufen der zweiten Partition durch die erste Knotenvorrichtung zu vermeiden. In Reaktion auf einen fehlenden Empfang der Anzeige der Beendigung der ersten Aufgabe mit der zweiten Partition durch die zweite Knotenvorrichtung innerhalb der vorbestimmten Zeitperiode kann der Prozessor veranlasst werden zum Zuweisen der Durchführung der zweiten Aufgabe auf der zweiten Partition an die erste Knotenvorrichtung; und Übertragen von einer Anzeige der Zuweisung der Durchführung der zweiten Aufgabe auf der zweiten Partition an die erste Knotenvorrichtung, um ein Abrufen der zweiten Partition durch die erste Knotenvorrichtung zu veranlassen.
  • Der Prozessor kann veranlasst werden, Operationen durchzuführen, einschließlich Ableiten der vorbestimmten Zeitperiode von wenigstens einer Messung einer Zeitdauer zwischen der Übertragung einer Zuweisung der Durchführung der ersten Aufgabe an eine Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen und dem Empfang einer Anzeige der Beendigung der Durchführung der ersten Aufgabe von der Knotenvorrichtung.
  • Der Prozessor kann veranlasst werden, Operationen durchzuführen, einschließlich: Bestimmen einer Anzahl von Knotenvorrichtungen der Mehrzahl von Knotenvorrichtungen, die verfügbar sind, um die erste Aufgabe durchzuführen; und Ableiten einer Aufteilung des ersten Datensatzes in die Mehrzahl von Partitionen des ersten Datensatzes basierend auf der Anzahl von Knotenvorrichtungen und Metadaten beschreibend für eine Weise, in der der erste Datensatz organisiert ist. Der erste Datensatz kann innerhalb einer oder mehreren Speichervorrichtungen gespeichert werden; der Prozessor kann veranlasst werden, Operationen durchzuführen, einschließlich Abrufen der Metadaten aus der einen oder den mehreren Speichervorrichtungen; die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der ersten Partition an die erste Knotenvorrichtung kann die erste Knotenvorrichtung veranlassen, die erste Partition von der einen oder den mehreren Speichervorrichtungen abzurufen; und die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen, die zweite Partition von der einen oder den mehreren Speichervorrichtungen abzurufen.
  • Die Vorrichtung kann wenigstens eine flüchtige Speicherkomponente umfassen, die mit dem Prozessor gekoppelt ist, und der Prozessor kann veranlasst werden, Operationen durchzuführen, einschließlich Zuweisen an den Prozessor der Durchführung der ersten Aufgabe mit einer dritten Partition der Mehrzahl von Partitionen des ersten Datensatzes; Speichern von wenigstens einem Teil der dritten Partition innerhalb der wenigstens einen flüchtigen Speicherkomponente; und Durchführen der ersten Aufgabe mit der dritten Partition.
  • Der Prozessor kann veranlasst werden, Operationen durchzuführen, einschließlich, für jede Knotenvorrichtung einer Teilmenge der Mehrzahl von Knotenvorrichtungen, Ableiten einer Zuweisung, um eine der Mehrzahl von Partitionen des ersten Datensatzes aus einer oder mehreren Speichervorrichtungen abzurufen und zu speichern, um die Verwendung jeder Knotenvorrichtung der Teilmenge als eine Sicherungsknotenvorrichtung zu ermöglichen, um auf einen Ausfall von einer der Knotenvorrichtungen der Mehrzahl von Knotenvorrichtungen zu reagieren, wobei: eine dritte Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen zugewiesen ist, um die erste Aufgabe mit einer dritten Partition der Mehrzahl von Partitionen des ersten Datensatzes durchzuführen; und der dritte Knoten zugewiesen ist, um die zweite Partition von der einen oder den mehreren Speichervorrichtungen abzurufen und zu speichern, um die Verwendung der dritten Knotenvorrichtung als eine Sicherungsknotenvorrichtung zu ermöglichen, um auf einen Ausfall der zweiten Knotenvorrichtung zu reagieren. Der Prozessor kann veranlasst werden, während der vorbestimmten Zeitperiode eine Anzeige von der dritten Knotenvorrichtung der Beendigung der Durchführung der ersten Aufgabe mit der dritten Partition durch die dritte Knotenvorrichtung zu empfangen, so dass die dritte Knotenvorrichtung verfügbar ist, um die Durchführung einer anderen Aufgabe zuzuweisen. In Reaktion auf den Empfang der Anzeige der Beendigung der ersten Aufgabe mit der dritten Partition durch die dritte Knotenvorrichtung während der vorbestimmten Zeitperiode und in Reaktion auf einen fehlenden Empfang der Anzeige der Beendigung der ersten Aufgabe mit der zweiten Partition durch die zweite Knotenvorrichtung innerhalb der vorbestimmten Zeitperiode kann der Prozessor veranlasst werden zum Zuweisen der Durchführung der zweiten Aufgabe auf der zweiten Partition an die dritte Knotenvorrichtung; und Übertragen von einer Anzeige der Zuweisung der Durchführung der zweiten Aufgabe auf der zweiten Partition an die dritte Knotenvorrichtung.
  • Die Durchführungen der ersten Aufgabe mit den ersten und zweiten Partitionen können die Verwendung der ersten und zweiten Partitionen als Eingaben für Durchführungen der ersten Aufgabe umfassen, um entsprechende Partitionen eines zweiten Datensatzes zu erzeugen; und die Durchführung der zweiten Aufgabe auf der zweiten Partition kann die Verwendung der zweiten Partition als eine Eingabe für eine Durchführung der zweiten Aufgabe umfassen, um eine entsprechende Partition eines dritten Datensatzes zu erzeugen. Die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der ersten Partition an die erste Knotenvorrichtung kann die erste Knotenvorrichtung veranlassen zum: Abrufen der ersten Partition aus einer oder mehreren Speichervorrichtungen; Verwenden von wenigstens einem Teil der ersten Partition, die innerhalb des flüchtigen Speichers der ersten Knotenvorrichtung gespeichert ist, als eine Eingabe für die Durchführung der ersten Aufgabe durch die erste Knotenvorrichtung; und Übertragen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition, während wenigstens ein Teil der ersten Partition innerhalb des flüchtigen Speichers der ersten Knotenvorrichtung gespeichert bleibt. Die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen zum: Abrufen der zweiten Partition aus einer oder mehreren Speichervorrichtungen; Verwenden von wenigstens einem Teil der zweiten Partition, die innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung gespeichert ist, als eine Eingabe für die Durchführung der ersten Aufgabe durch die zweite Knotenvorrichtung; und Übertragen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der zweiten Partition, während wenigstens ein Teil der zweiten Partition innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung gespeichert bleibt. Die Übertragung der Anzeige der Zuweisung der Durchführung der zweiten Aufgabe auf der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen, wenigstens einen Teil der zweiten Partition zu verwenden, die noch innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung als eine Eingabe für die Durchführung der zweiten Aufgabe durch die zweite Knotenvorrichtung gespeichert ist, um Zugriffe auf die zweite Partition, die innerhalb des nicht-flüchtigen Speichers der zweiten Knotenvorrichtung gespeichert ist, zu minimieren.
  • Die Durchführungen der ersten Aufgabe mit den ersten und zweiten Partitionen können Durchführungen der ersten Aufgabe umfassen, um die ersten und zweiten Partitionen als Ausgaben der ersten Aufgabe unter Verwendung entsprechender Partitionen eines zweiten Datensatzes als Eingaben zu erzeugen; und die Durchführung der zweiten Aufgabe auf der zweiten Partition kann die Verwendung der zweiten Partition als eine Eingabe für eine Durchführung der zweiten Aufgabe umfassen, um eine entsprechende Partition eines dritten Datensatzes zu erzeugen. Die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der ersten Partition an die erste Knotenvorrichtung kann die erste Knotenvorrichtung veranlassen zum: Erzeugen der ersten Partition als eine Ausgabe der Durchführung der ersten Aufgabe durch die erste Knotenvorrichtung; und Übertragen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition, während wenigstens ein Teil der ersten Partition innerhalb des flüchtigen Speichers der ersten Knotenvorrichtung gespeichert bleibt. Die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen zum: Erzeugen der zweiten Partition als eine Ausgabe der Durchführung der ersten Aufgabe durch die zweite Knotenvorrichtung; und Übertragen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der zweiten Partition; während wenigstens ein Teil der zweiten Partition innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung gespeichert bleibt. Die Übertragung der Anzeige der Zuweisung der Durchführung der zweiten Aufgabe auf der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen, wenigstens einen Teil der zweiten Partition zu verwenden, die noch innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung als eine Eingabe für die Durchführung der zweiten Aufgabe durch die zweite Knotenvorrichtung gespeichert ist, um Zugriffe auf die zweite Partition, die innerhalb des nicht-flüchtigen Speichers der zweiten Knotenvorrichtung gespeichert ist, zu minimieren.
  • Ein Computerprogrammprodukt, das in einem nicht-transitorischen maschinenlesbaren Speichermedium konkret ausgeführt ist, wobei das Computerprogrammprodukt Anweisungen umfasst, die betriebsfähig sind, um zu veranlassen, dass ein Prozessor Operationen durchführt, einschließlich, für jede Knotenvorrichtung einer Mehrzahl von Knotenvorrichtungen, Ableiten einer Zuweisung der Durchführung einer ersten Aufgabe mit einem ersten Datensatz, wobei: der erste Datensatz in eine Mehrzahl von Partitionen aufteilbar ist; eine erste Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen zugewiesen ist, um die erste Aufgabe mit einer ersten Partition der Mehrzahl von Partitionen des ersten Datensatzes durchzuführen; und eine zweite Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen zugewiesen ist, um die erste Aufgabe mit einer zweiten Partition der Mehrzahl von Partitionen des ersten Datensatzes durchzuführen. Der Prozessor kann veranlasst werden, Operationen durchzuführen, einschließlich: Übertragen von einer Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der ersten Partition an die erste Knotenvorrichtung, um die Durchführung der ersten Aufgabe mit der ersten Partition durch die erste Knotenvorrichtung zu veranlassen und eine Speicherung von wenigstens einem Teil der ersten Partition innerhalb des flüchtigen Speichers der ersten Knotenvorrichtung zu veranlassen; Übertragen von einer Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der zweiten Partition an die zweite Knotenvorrichtung, um die Durchführung der ersten Aufgabe mit der zweiten Partition durch die zweite Knotenvorrichtung zu veranlassen und eine Speicherung von wenigstens einem Teil der zweiten Partition innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung zu veranlassen; Empfangen von einer Anzeige von der ersten Knotenvorrichtung der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition durch die erste Knotenvorrichtung, so dass die erste Knotenvorrichtung verfügbar ist, um die Durchführung einer anderen Aufgabe zuzuweisen; Verzögern der Zuweisung der Durchführung einer zweiten Aufgabe auf der zweiten Partition an die erste Knotenvorrichtung nach Empfangen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition durch die erste Knotenvorrichtung bis zu einer vorbestimmten Zeitperiode, trotz Bereitschaft der zweiten Aufgabe, die auf der zweiten Partition durchgeführt werden soll, und trotz Verfügbarkeit des ersten Knotens als Ergebnis der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition; und Bestimmen, ob eine Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der zweiten Partition durch die zweite Knotenvorrichtung, so dass die zweite Knotenvorrichtung verfügbar ist, um die Durchführung einer anderen Aufgabe zuzuweisen, von der zweiten Knotenvorrichtung innerhalb der vorbestimmten Zeitperiode empfangen wird. In Reaktion auf den Empfang der Anzeige der Beendigung der ersten Aufgabe mit der zweiten Partition durch die zweite Knotenvorrichtung innerhalb der vorbestimmten Zeitperiode kann der Prozessor veranlasst werden zum Zuweisen der Durchführung der zweiten Aufgabe auf der zweiten Partition an die zweite Knotenvorrichtung, um Zugriffe auf wenigstens einen Teil der zweiten Partition innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung zu ermöglichen; und Übertragen von einer Anzeige der Zuweisung der Durchführung der zweiten Aufgabe auf der zweiten Partition an die zweite Knotenvorrichtung, um ein Abrufen der zweiten Partition durch die erste Knotenvorrichtung zu vermeiden. In Reaktion auf einen fehlenden Empfang der Anzeige der Beendigung der ersten Aufgabe mit der zweiten Partition durch die zweite Knotenvorrichtung innerhalb der vorbestimmten Zeitperiode kann der Prozessor veranlasst werden zum Zuweisen der Durchführung der zweiten Aufgabe auf der zweiten Partition an die erste Knotenvorrichtung; und Übertragen von einer Anzeige der Zuweisung der Durchführung der zweiten Aufgabe auf der zweiten Partition an die erste Knotenvorrichtung, um ein Abrufen der zweiten Partition durch die erste Knotenvorrichtung zu veranlassen.
  • Der Prozessor kann veranlasst werden, Operationen durchzuführen, einschließlich Ableiten der vorbestimmten Zeitperiode von wenigstens einer Messung einer Zeitdauer zwischen der Übertragung einer Zuweisung der Durchführung der ersten Aufgabe an eine Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen und dem Empfang einer Anzeige der Beendigung der Durchführung der ersten Aufgabe von der Knotenvorrichtung.
  • Der Prozessor wird veranlasst, Operationen durchzuführen, einschließlich: Bestimmen einer Anzahl von Knotenvorrichtungen der Mehrzahl von Knotenvorrichtungen, die verfügbar sind, um die erste Aufgabe durchzuführen; und Ableiten einer Aufteilung des ersten Datensatzes in die Mehrzahl von Partitionen des ersten Datensatzes basierend auf der Anzahl von Knotenvorrichtungen und Metadaten beschreibend für eine Weise, in der der erste Datensatz organisiert ist. Der erste Datensatz kann innerhalb einer oder mehreren Speichervorrichtungen gespeichert werden; der Prozessor kann veranlasst werden, Operationen durchzuführen, umfassend Abrufen der Metadaten aus der einen oder den mehreren Speichervorrichtungen; die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der ersten Partition an die erste Knotenvorrichtung kann die erste Knotenvorrichtung veranlassen, die erste Partition von der einen oder den mehreren Speichervorrichtungen abzurufen; und die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen, die zweite Partition von der einen oder den mehreren Speichervorrichtungen abzurufen.
  • Der Prozessor wird veranlasst, Operationen durchzuführen, einschließlich Zuweisen an den Prozessor der Durchführung der ersten Aufgabe mit einer dritten Partition der Mehrzahl von Partitionen des ersten Datensatzes; Speichern von wenigstens einem Teil der dritten Partition innerhalb wenigstens einer flüchtigen Speicherkomponente, die mit dem Prozessor gekoppelt ist; und Durchführen der ersten Aufgabe mit der dritten Partition.
  • Der Prozessor kann veranlasst werden, Operationen durchzuführen, einschließlich, für jede Knotenvorrichtung einer Teilmenge der Mehrzahl von Knotenvorrichtungen, Ableiten einer Zuweisung, um eine der Mehrzahl von Partitionen des ersten Datensatzes aus einer oder mehreren Speichervorrichtungen abzurufen und zu speichern, um die Verwendung jeder Knotenvorrichtung der Teilmenge als eine Sicherungsknotenvorrichtung zu ermöglichen, um auf einen Ausfall von einer der Knotenvorrichtungen der Mehrzahl von Knotenvorrichtungen zu reagieren, wobei: eine dritte Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen zugewiesen ist, um die erste Aufgabe mit einer dritten Partition der Mehrzahl von Partitionen des ersten Datensatzes durchzuführen; und der dritte Knoten zugewiesen ist, um die zweite Partition von der einen oder den mehreren Speichervorrichtungen abzurufen und zu speichern, um die Verwendung der dritten Knotenvorrichtung als eine Sicherungsknotenvorrichtung zu ermöglichen, um auf einen Ausfall der zweiten Knotenvorrichtung zu reagieren. Der Prozessor kann veranlasst werden, während der vorbestimmten Zeitperiode eine Anzeige von der dritten Knotenvorrichtung der Beendigung der Durchführung der ersten Aufgabe mit der dritten Partition durch die dritte Knotenvorrichtung zu empfangen, so dass die dritte Knotenvorrichtung verfügbar ist, um die Durchführung einer anderen Aufgabe zuzuweisen. Der Prozessor kann, in Reaktion auf den Empfang der Anzeige der Beendigung der ersten Aufgabe mit der dritten Partition durch die dritte Knotenvorrichtung während der vorbestimmten Zeitperiode und in Reaktion auf einen fehlenden Empfang der Anzeige der Beendigung der ersten Aufgabe mit der zweiten Partition durch die zweite Knotenvorrichtung innerhalb der vorbestimmten Zeitperiode, veranlasst werden zum: Zuweisen der Durchführung der zweiten Aufgabe auf der zweiten Partition an die dritte Knotenvorrichtung; und Übertragen von einer Anzeige der Zuweisung der Durchführung der zweiten Aufgabe auf der zweiten Partition an die dritte Knotenvorrichtung.
  • Die Durchführungen der ersten Aufgabe mit den ersten und zweiten Partitionen können die Verwendung der ersten und zweiten Partitionen als Eingaben für Durchführungen der ersten Aufgabe umfassen, um entsprechende Partitionen eines zweiten Datensatzes zu erzeugen; und die Durchführung der zweiten Aufgabe auf der zweiten Partition kann die Verwendung der zweiten Partition als eine Eingabe für eine Durchführung der zweiten Aufgabe umfassen, um eine entsprechende Partition eines dritten Datensatzes zu erzeugen. Die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der ersten Partition an die erste Knotenvorrichtung kann die erste Knotenvorrichtung veranlassen zum: Abrufen der ersten Partition aus einer oder mehreren Speichervorrichtungen; Verwenden von wenigstens einem Teil der ersten Partition, die innerhalb des flüchtigen Speichers der ersten Knotenvorrichtung gespeichert ist, als eine Eingabe für die Durchführung der ersten Aufgabe durch die erste Knotenvorrichtung; und Übertragen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition, während wenigstens ein Teil der ersten Partition innerhalb des flüchtigen Speichers der ersten Knotenvorrichtung gespeichert bleibt. Die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen zum: Abrufen der zweiten Partition aus einer oder mehreren Speichervorrichtungen; Verwenden von wenigstens einem Teil der zweiten Partition, die innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung gespeichert ist, als eine Eingabe für die Durchführung der ersten Aufgabe durch die zweite Knotenvorrichtung; und Übertragen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der zweiten Partition, während wenigstens ein Teil der zweiten Partition innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung gespeichert bleibt. Die Übertragung der Anzeige der Zuweisung der Durchführung der zweiten Aufgabe auf der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen, wenigstens einen Teil der zweiten Partition zu verwenden, die noch innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung als eine Eingabe für die Durchführung der zweiten Aufgabe durch die zweite Knotenvorrichtung gespeichert ist, um Zugriffe auf die zweite Partition, die innerhalb des nicht-flüchtigen Speichers der zweiten Knotenvorrichtung gespeichert ist, zu minimieren.
  • Die Durchführungen der ersten Aufgabe mit den ersten und zweiten Partitionen können Durchführungen der ersten Aufgabe umfassen, um die ersten und zweiten Partitionen als Ausgaben der ersten Aufgabe unter Verwendung entsprechender Partitionen eines zweiten Datensatzes als Eingaben zu erzeugen; und die Durchführung der zweiten Aufgabe auf der zweiten Partition kann die Verwendung der zweiten Partition als eine Eingabe für eine Durchführung der zweiten Aufgabe umfassen, um eine entsprechende Partition eines dritten Datensatzes zu erzeugen. Die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der ersten Partition an die erste Knotenvorrichtung kann die erste Knotenvorrichtung veranlassen zum: Erzeugen der ersten Partition als eine Ausgabe der Durchführung der ersten Aufgabe durch die erste Knotenvorrichtung; und Übertragen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition, während wenigstens ein Teil der ersten Partition innerhalb des flüchtigen Speichers der ersten Knotenvorrichtung gespeichert bleibt. Die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen zum: Erzeugen der zweiten Partition als eine Ausgabe der Durchführung der ersten Aufgabe durch die zweite Knotenvorrichtung; und Übertragen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der zweiten Partition, während wenigstens ein Teil der zweiten Partition innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung gespeichert bleibt. Die Übertragung der Anzeige der Zuweisung der Durchführung der zweiten Aufgabe auf der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen, wenigstens einen Teil der zweiten Partition zu verwenden, die noch innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung als eine Eingabe für die Durchführung der zweiten Aufgabe durch die zweite Knotenvorrichtung gespeichert ist, um Zugriffe auf die zweite Partition, die innerhalb des nichtflüchtigen Speichers der zweiten Knotenvorrichtung gespeichert ist, zu minimieren.
  • Ein computerimplementiertes Verfahren kann, für jede Knotenvorrichtung einer Mehrzahl von Knotenvorrichtungen, Ableiten an einer Koordinierungsvorrichtung von einer Zuweisung der Durchführung einer ersten Aufgabe mit einem ersten Datensatz umfassen, wobei der erste Datensatz in eine Mehrzahl von Partitionen aufteilbar ist, und das Ableiten kann umfassen: Ableiten einer ersten Zuweisung einer ersten Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen, um die erste Aufgabe mit einer ersten Partition der Mehrzahl von Partitionen des ersten Datensatzes durchzuführen; und Ableiten einer zweiten Zuweisung einer zweiten Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen, um die erste Aufgabe mit einer zweiten Partition der Mehrzahl von Partitionen des ersten Datensatzes durchzuführen. Das Verfahren kann das Übertragen von einer Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der ersten Partition an die erste Knotenvorrichtung, um die Durchführung der ersten Aufgabe mit der ersten Partition durch die erste Knotenvorrichtung zu veranlassen und eine Speicherung von wenigstens einem Teil der ersten Partition innerhalb des flüchtigen Speichers der ersten Knotenvorrichtung zu veranlassen, umfassen; Übertragen von einer Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der zweiten Partition an die zweite Knotenvorrichtung, um die Durchführung der ersten Aufgabe mit der zweiten Partition durch die zweite Knotenvorrichtung zu veranlassen und eine Speicherung von wenigstens einem Teil der zweiten Partition innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung zu veranlassen; Empfangen, an der Koordinierungsvorrichtung, von einer Anzeige von der ersten Knotenvorrichtung der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition durch die erste Knotenvorrichtung, so dass die erste Knotenvorrichtung verfügbar ist, um die Durchführung einer anderen Aufgabe zuzuweisen; Verzögern der Zuweisung der Durchführung einer zweiten Aufgabe auf der zweiten Partition an die erste Knotenvorrichtung nach Empfangen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition durch die erste Knotenvorrichtung bis zu einer vorbestimmten Zeitperiode, trotz Bereitschaft der zweiten Aufgabe, die auf der zweiten Partition durchgeführt werden soll, und trotz Verfügbarkeit des ersten Knotens als Ergebnis der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition; und Bestimmen, an der Koordinierungsvorrichtung, ob eine Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der zweiten Partition durch die zweite Knotenvorrichtung, so dass die zweite Knotenvorrichtung verfügbar ist, um die Durchführung einer anderen Aufgabe zuzuweisen, von der zweiten Knotenvorrichtung innerhalb der vorbestimmten Zeitperiode empfangen wird. Das Verfahren kann in Reaktion auf den Empfang der Anzeige der Beendigung der ersten Aufgabe mit der zweiten Partition durch die zweite Knotenvorrichtung innerhalb der vorbestimmten Zeitperiode umfassen: Zuweisen der Durchführung der zweiten Aufgabe auf der zweiten Partition an die zweite Knotenvorrichtung, um Zugriffe auf wenigstens einen Teil der zweiten Partition innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung zu ermöglichen; und Übertragen von einer Anzeige der Zuweisung der Durchführung der zweiten Aufgabe auf der zweiten Partition an die zweite Knotenvorrichtung, um ein Abrufen der zweiten Partition durch die erste Knotenvorrichtung zu vermeiden.
  • Das Verfahren kann, an der Koordinierungsvorrichtung, das Ableiten der vorbestimmten Zeitperiode von wenigstens einer Messung einer Zeitdauer zwischen der Übertragung einer Zuweisung der Durchführung der ersten Aufgabe an eine Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen und dem Empfang einer Anzeige der Beendigung der Durchführung der ersten Aufgabe von der Knotenvorrichtung umfassen.
  • Das Verfahren kann das Bestimmen, an der Koordinierungsvorrichtung, einer Anzahl von Knotenvorrichtungen der Mehrzahl von Knotenvorrichtungen, die verfügbar sind, um die erste Aufgabe durchzuführen, umfassen; und Ableiten, an der Koordinierungsvorrichtung, einer Aufteilung des ersten Datensatzes in die Mehrzahl von Partitionen des ersten Datensatzes basierend auf der Anzahl von Knotenvorrichtungen und Metadaten beschreibend für eine Weise, in der der erste Datensatz organisiert ist. Der erste Datensatz wird innerhalb einer oder mehreren Speichervorrichtungen gespeichert; das Verfahren kann das Abrufen der Metadaten, durch die Koordinierungsvorrichtung, von der einen oder den mehreren Speichervorrichtungen umfassen; die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der ersten Partition an die erste Knotenvorrichtung kann die erste Knotenvorrichtung veranlassen, die erste Partition von der einen oder den mehreren Speichervorrichtungen abzurufen; und die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen, die zweite Partition von der einen oder den mehreren Speichervorrichtungen abzurufen.
  • Das Verfahren kann das Zuweisen, an die Koordinierungsvorrichtung, der Durchführung der ersten Aufgabe mit einer dritten Partition der Mehrzahl von Partitionen des ersten Datensatzes umfassen; Speichern von wenigstens einem Teil der dritten Partition innerhalb wenigstens einer flüchtigen Speicherkomponente der Koordinierungsvorrichtung; und Durchführen, an der Koordinierungsvorrichtung, der ersten Aufgabe mit der dritten Partition. Das Verfahren kann in Reaktion auf einen fehlenden Empfang der Anzeige der Beendigung der ersten Aufgabe mit der zweiten Partition durch die zweite Knotenvorrichtung innerhalb der vorbestimmten Zeitperiode umfassen: Zuweisen der Durchführung der zweiten Aufgabe auf der zweiten Partition an die erste Knotenvorrichtung; und Übertragen von einer Anzeige der Zuweisung der Durchführung der zweiten Aufgabe auf der zweiten Partition an die erste Knotenvorrichtung, um ein Abrufen der zweiten Partition durch die erste Knotenvorrichtung zu veranlassen.
  • Die Durchführungen der ersten Aufgabe mit den ersten und zweiten Partitionen können die Verwendung der ersten und zweiten Partitionen als Eingaben für Durchführungen der ersten Aufgabe umfassen, um entsprechende Partitionen eines zweiten Datensatzes zu erzeugen; und die Durchführung der zweiten Aufgabe auf der zweiten Partition kann die Verwendung der zweiten Partition als eine Eingabe für eine Durchführung der zweiten Aufgabe umfassen, um eine entsprechende Partition eines dritten Datensatzes zu erzeugen. Die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der ersten Partition an die erste Knotenvorrichtung kann die erste Knotenvorrichtung veranlassen zum: Abrufen der ersten Partition aus einer oder mehreren Speichervorrichtungen; Verwenden von wenigstens einem Teil der ersten Partition, die innerhalb des flüchtigen Speichers der ersten Knotenvorrichtung gespeichert ist, als eine Eingabe für die Durchführung der ersten Aufgabe durch die erste Knotenvorrichtung; und Übertragen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition, während wenigstens ein Teil der ersten Partition innerhalb des flüchtigen Speichers der ersten Knotenvorrichtung gespeichert bleibt. Die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen zum: Abrufen der zweiten Partition aus einer oder mehreren Speichervorrichtungen; Verwenden von wenigstens einem Teil der zweiten Partition, die innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung gespeichert ist, als eine Eingabe für die Durchführung der ersten Aufgabe durch die zweite Knotenvorrichtung; und Übertragen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der zweiten Partition, während wenigstens ein Teil der zweiten Partition innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung gespeichert bleibt. Die Übertragung der Anzeige der Zuweisung der Durchführung der zweiten Aufgabe auf der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen, wenigstens einen Teil der zweiten Partition zu verwenden, die noch innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung als eine Eingabe für die Durchführung der zweiten Aufgabe durch die zweite Knotenvorrichtung gespeichert ist, um Zugriffe auf die zweite Partition, die innerhalb des nicht-flüchtigen Speichers der zweiten Knotenvorrichtung gespeichert ist, zu minimieren.
  • Die Durchführungen der ersten Aufgabe mit den ersten und zweiten Partitionen können Durchführungen der ersten Aufgabe umfassen, um die ersten und zweiten Partitionen als Ausgaben der ersten Aufgabe unter Verwendung entsprechender Partitionen eines zweiten Datensatzes als Eingaben zu erzeugen; und die Durchführung der zweiten Aufgabe auf der zweiten Partition umfasst die Verwendung der zweiten Partition als eine Eingabe für eine Durchführung der zweiten Aufgabe, um eine entsprechende Partition eines dritten Datensatzes zu erzeugen. Die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der ersten Partition an die erste Knotenvorrichtung kann die erste Knotenvorrichtung veranlassen zum: Erzeugen der ersten Partition als eine Ausgabe der Durchführung der ersten Aufgabe durch die erste Knotenvorrichtung; und Übertragen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der ersten Partition, während wenigstens ein Teil der ersten Partition innerhalb des flüchtigen Speichers der ersten Knotenvorrichtung gespeichert bleibt. Die Übertragung der Anzeige der Zuweisung der Durchführung der ersten Aufgabe mit der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen zum: Erzeugen der zweiten Partition als eine Ausgabe der Durchführung der ersten Aufgabe durch die zweite Knotenvorrichtung; und Übertragen der Anzeige der Beendigung der Durchführung der ersten Aufgabe mit der zweiten Partition, während wenigstens ein Teil der zweiten Partition innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung gespeichert bleibt. Die Übertragung der Anzeige der Zuweisung der Durchführung der zweiten Aufgabe auf der zweiten Partition an die zweite Knotenvorrichtung kann die zweite Knotenvorrichtung veranlassen, wenigstens einen Teil der zweiten Partition zu verwenden, die noch innerhalb des flüchtigen Speichers der zweiten Knotenvorrichtung als eine Eingabe für die Durchführung der zweiten Aufgabe durch die zweite Knotenvorrichtung gespeichert ist, um Zugriffe auf die zweite Partition, die innerhalb des nicht-flüchtigen Speichers der zweiten Knotenvorrichtung gespeichert ist, zu minimieren.
  • Eine Vorrichtung kann einen Prozessor und einen Speicher umfassen, um Anweisungen zu speichern, die, wenn sie durch den Prozessor ausgeführt werden, den Prozessor veranlassen, Operationen durchzuführen, einschließlich: Analysieren eines aktuellen Status von Ressourcen von wenigstens einer Knotenvorrichtung einer Mehrzahl von Knotenvorrichtungen, um eine Verfügbarkeit von wenigstens einer Grafikverarbeitungseinheit (Graphics Processing Unit, GPU) der wenigstens einen Knotenvorrichtung zu bestimmen, die zugewiesen werden soll, um eine erste Aufgabe einer Analyseroutine durchzuführen, wobei: der Betrieb der Mehrzahl von Knotenvorrichtungen koordiniert ist, um Aufgaben von Analyseroutinen wenigstens teilweise parallel durchzuführen; die Analyseroutine zur Ausführung durch wenigstens eine zentrale Verarbeitungseinheit (Central Processing Unit, CPU) des wenigstens einen Knotens erzeugt wird; und die Ressourcen der wenigstens einen Knotenvorrichtung aus einer Gruppe bestehend aus der wenigstens einen CPU, der wenigstens einen GPU und Speicherplatz innerhalb wenigstens eines Speichers der wenigstens einen Knotenvorrichtung ausgewählt werden. In Reaktion auf eine Bestimmung, dass die wenigstens eine GPU verfügbar ist, um zugewiesen zu werden, die erste Aufgabe der Analyseroutine durchzuführen, kann der Prozessor Operationen durchführen, einschließlich: Analysieren einer ersten Taskroutine der Analyseroutine, um zu bestimmen, ob die erste Taskroutine kompiliert werden kann, um eine GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU zu erzeugen, um zu veranlassen, dass die wenigstens eine GPU mehrere Instanzen der ersten Aufgabe der Analyseroutine wenigstens teilweise parallel ohne eine Abhängigkeit zwischen Eingaben und Ausgaben der mehreren Instanzen der ersten Aufgabe durchführt, wobei: die erste Taskroutine zur Ausführung durch die wenigstens eine CPU erzeugt wird, um die erste Aufgabe der Analyseroutine durchzuführen; und die Bestimmung, ob die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen, eine Bestimmung, ob die erste Taskroutine eine Anweisung umfasst, die die Kompilierung verhindert, um die GPU-Taskroutine zu erzeugen, und eine Bestimmung, ob Eingaben und Ausgaben der ersten Taskroutine definiert sind, um die Abhängigkeit nicht zu erfordern, umfasst. In Reaktion auf eine Bestimmung, dass die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen, kann der Prozessor Operationen durchführen, einschließlich: Zuweisen einer Datensatzpartition einer Mehrzahl von Datensatzpartitionen eines Datensatzes an die wenigstens eine Knotenvorrichtung, um Zugriff auf die Datensatzpartition durch die wenigstens eine GPU zu ermöglichen; Verwenden einer Umwandlungsregel, um wenigstens eine Anweisung der ersten Taskroutine in wenigstens eine entsprechende Anweisung der GPU-Taskroutine umzuwandeln; Kompilieren der wenigstens einen entsprechenden Anweisung der GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU; und Zuweisen einer Durchführung der ersten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der mehreren Instanzen der ersten Aufgabe mit der Datensatzpartition durch die wenigstens eine GPU zu ermöglichen.
  • Um zu bestimmen, ob die erste Taskroutine eine Anweisung umfasst, die die Kompilierung verhindert, um die GPU-Taskroutine zu erzeugen, kann der Prozessor veranlasst werden zum: Bestimmen, ob die Anweisung der ersten Taskroutine in einem Satz von Anweisungen eingeschlossen ist, die nicht in wenigstens eine Anweisung umgewandelt werden können, die von der wenigstens einen GPU ausgeführt werden kann; und in Reaktion auf eine Bestimmung, dass die Anweisung der ersten Taskroutine nicht im Satz von Anweisungen eingeschlossen ist, Bestimmen, ob die Anweisung der ersten Taskroutine in der ersten Taskroutine in einer Weise verwendet wird, die eine Umwandlung in wenigstens eine Anweisung verhindert, die von der wenigstens einen GPU ausgeführt werden kann. Um die wenigstens eine Anweisung der ersten Taskroutine in die wenigstens eine entsprechende Anweisung der GPU-Taskroutine umzuwandeln, kann der Prozessor veranlasst werden, die wenigstens eine Anweisung der ersten Taskroutine von einer ersten Programmiersprache in die wenigstens eine entsprechende Anweisung in einer zweiten Programmiersprache gemäß der Umwandlungsregel umzuwandeln. Der wenigstens eine Speicher der wenigstens einen Knotenvorrichtung kann einen ersten flüchtigen Speicher, der kommunikativ mit der wenigstens einen CPU gekoppelt ist, und einen zweiten flüchtigen Speicher, der kommunikativ mit der wenigstens einen GPU gekoppelt ist, umfassen; das Zuweisen der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um Zugriff auf die Datensatzpartition durch die wenigstens eine GPU zu ermöglichen, kann umfassen, dass veranlasst wird, dass die Datensatzpartition innerhalb des zweiten flüchtigen Speichers gespeichert wird; und in Reaktion auf eine Bestimmung, dass die wenigstens eine GPU nicht verfügbar ist, um zugewiesen zu werden, die erste Aufgabe der Analyseroutine durchzuführen, kann der Prozessor veranlasst werden, Operationen durchzuführen, einschließlich: Unterlassen der Analyse der ersten Taskroutine, um zu bestimmen, ob die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen; Zuweisen der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um eine Speicherung der Datensatzpartition innerhalb des ersten flüchtigen Speichers zu veranlassen, Zugriff auf die Datensatzpartition durch die wenigstens eine CPU zu ermöglichen; Kompilieren der ersten Taskroutine zur Ausführung durch die wenigstens eine CPU; und Zuweisen der Durchführung der ersten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der ersten Aufgabe mit der Datensatzpartition durch die wenigstens eine CPU zu ermöglichen.
  • Die Vorrichtung kann eine Koordinierungsvorrichtung umfassen, die den Betrieb der Mehrzahl von Knotenvorrichtungen koordiniert; der Prozessor kann veranlasst werden, wiederkehrend Aktualisierungen für den aktuellen Status von jeder Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen zu empfangen; und um den aktuellen Status zu analysieren, um die Verfügbarkeit der wenigstens einen GPU der wenigstens einen Knotenvorrichtung zu bestimmen, kann der Prozessor veranlasst werden, eine Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen zu identifizieren, die eine GPU integriert, die durch den aktuellen Status als verfügbar angezeigt wird. Um die Datensatzpartition des Datensatzes an die wenigstens eine Knotenvorrichtung zuzuweisen, kann der Prozessor veranlasst werden, Operationen durchzuführen, einschließlich: Analysieren von Metadaten, die indikativ für strukturelle Merkmale des Datensatzes sind, um eine Beschränkung in einer Weise zu identifizieren, in der der Datensatz in die Mehrzahl von Datensatzpartitionen aufgeteilt werden kann, wobei die Beschränkung aus einer Gruppe bestehend aus einer Anzeige einer kleinsten atomaren Einheit von Daten innerhalb des Datensatzes und einer Spezifikation eines Partitionierungsschemas ausgewählt ist; und Ableiten einer Aufteilung des Datensatzes in die Mehrzahl von Datensatzpartitionen wenigstens teilweise basierend auf der Beschränkung. Der Prozessor kann veranlasst werden, Operationen durchzuführen, einschließlich: Abrufen der Metadaten aus wenigstens einer Speichervorrichtung, bei der der Datensatz gespeichert ist; und Übertragen einer Anzeige der Zuweisung der Datensatzpartition an die wenigstens eine Knotenvorrichtung oder die wenigstens eine Speichervorrichtung, um eine Übertragung der Datensatzpartition von der wenigstens einen Speichervorrichtung an die wenigstens eine Knotenvorrichtung zu veranlassen.
  • Die Vorrichtung kann eine Knotenvorrichtung der wenigstens einen Knotenvorrichtung umfassen; die Knotenvorrichtung kann eine GPU der wenigstens einen GPU umfassen; der Prozessor kann eine CPU der wenigstens einen CPU umfassen; und um den aktuellen Status zu analysieren, um die Verfügbarkeit der wenigstens einen GPU der wenigstens einen Knotenvorrichtung zu bestimmen, kann die CPU veranlasst werden, zu bestimmen, ob die GPU der Knotenvorrichtung durch den aktuellen Status als verfügbar angezeigt wird. Der Prozessor wird veranlasst, Operationen durchzuführen, einschließlich Analysieren einer zweiten Taskroutine der Analyseroutine, um zu bestimmen, ob die zweite Taskroutine kompiliert werden kann, um eine andere GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU zu erzeugen, um zu veranlassen, dass die wenigstens eine GPU mehrere Instanzen der zweiten Aufgabe der Analyseroutine wenigstens teilweise parallel ohne eine Abhängigkeit zwischen Eingaben und Ausgaben der mehreren Instanzen der zweiten Aufgabe durchführt, wobei die zweite Taskroutine zur Ausführung durch die wenigstens eine CPU erzeugt wird, um eine zweite Aufgabe der Analyseroutine durchzuführen. In Reaktion auf eine Bestimmung, dass die zweite Taskroutine nicht kompiliert werden kann, um die andere GPU-Taskroutine zu erzeugen, kann der Prozessor Operationen durchführen, einschließlich: Kompilieren der zweiten Taskroutine zur Ausführung durch die wenigstens eine CPU; und Zuweisen einer Durchführung der zweiten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der zweiten Aufgabe mit der Datensatzpartition durch die wenigstens eine CPU zu ermöglichen.
  • Die Umwandlungsregel kann aus einer Gruppe ausgewählt werden, bestehend aus: einer Spezifikation eines Satzes von Anweisungen, von denen jede die Kompilierung der ersten Taskroutine verhindert, um die GPU-Taskroutine zu erzeugen, falls sie innerhalb der ersten Taskroutine vorhanden ist; einer Spezifikation eines Satzes von Anweisungen, von denen jede die Kompilierung der ersten Taskroutine nicht verhindern würde, um die GPU-Taskroutine zu erzeugen, falls sie innerhalb der ersten Taskroutine vorhanden ist; einer Spezifikation einer Weise der Verwendung einer Anweisung, die die Kompilierung der ersten Taskroutine verhindert, um die GPU-Taskroutine zu erzeugen, falls die Weise der Verwendung der Anweisung innerhalb der ersten Taskroutine auftritt, wobei das Vorhandensein der Anweisung innerhalb der ersten Taskroutine ansonsten nicht die Kompilierung der ersten Taskroutine zur Erzeugung der GPU-Taskroutine verhindert; einer Spezifikation einer Prozedur zum Umwandeln von Anweisungen in der ersten Taskroutine, die in einer Schleife durch die wenigstens eine CPU ausgeführt werden sollen, in entsprechende Anweisungen der GPU-Taskroutine, die parallel durch die wenigstens eine GPU in einer entsprechenden Schleife mit weniger Iterationen als die Schleife ausgeführt werden sollen; einer Spezifikation einer Prozedur zum Umwandeln von Anweisungen in der ersten Taskroutine, die in einer Schleife durch die wenigstens eine CPU ausgeführt werden sollen, in entsprechende Anweisungen der GPU-Taskroutine, die parallel durch die wenigstens eine GPU und nicht in einer Schleife ausgeführt werden sollen; und einer Spezifikation einer Prozedur zum Umwandeln von Anweisungen in der ersten Taskroutine, die eine Datenstruktur definieren, umfassend Einträge, auf die sequentiell während der Ausführung der ersten Taskroutine durch die wenigstens eine CPU zugegriffen werden soll, in entsprechende Anweisungen der GPU-Taskroutine, die eine entsprechende Datenstruktur definieren, umfassend Einträge, auf die während der Ausführung der GPU-Taskroutine durch die wenigstens eine GPU parallel zugegriffen werden soll.
  • Ein Computerprogrammprodukt, das in einem nicht-transitorischen maschinenlesbaren Speichermedium konkret ausgeführt ist, wobei das Computerprogrammprodukt Anweisungen umfasst, die betriebsfähig sind, um zu veranlassen, dass ein Prozessor Operationen durchführt, einschließlich: Analysieren eines aktuellen Status von Ressourcen von wenigstens einer Knotenvorrichtung einer Mehrzahl von Knotenvorrichtungen, um eine Verfügbarkeit von wenigstens einer Grafikverarbeitungseinheit (Graphics Processing Unit, GPU) der wenigstens einen Knotenvorrichtung zu bestimmen, die zugewiesen werden soll, um eine erste Aufgabe einer Analyseroutine durchzuführen, wobei: der Betrieb der Mehrzahl von Knotenvorrichtungen koordiniert ist, um Aufgaben der Analyseroutine wenigstens teilweise parallel durchzuführen; die Analyseroutine zur Ausführung durch wenigstens eine zentrale Verarbeitungseinheit (Central Processing Unit, CPU) des wenigstens einen Knotens erzeugt wird; und die Ressourcen der wenigstens einen Knotenvorrichtung aus einer Gruppe bestehend aus der wenigstens einen CPU, der wenigstens einen GPU und Speicherplatz innerhalb wenigstens eines Speichers der wenigstens einen Knotenvorrichtung ausgewählt werden. In Reaktion auf eine Bestimmung, dass die wenigstens eine GPU verfügbar ist, um zugewiesen zu werden, die erste Aufgabe der Analyseroutine durchzuführen, kann der Prozessor veranlasst werden, Operationen durchzuführen, einschließlich: Analysieren einer ersten Taskroutine der Analyseroutine, um zu bestimmen, ob die erste Taskroutine kompiliert werden kann, um eine GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU zu erzeugen, um zu veranlassen, dass die wenigstens eine GPU mehrere Instanzen der ersten Aufgabe der Analyseroutine wenigstens teilweise parallel ohne eine Abhängigkeit zwischen Eingaben und Ausgaben der mehreren Instanzen der ersten Aufgabe durchführt, wobei: die erste Taskroutine zur Ausführung durch die wenigstens eine CPU erzeugt wird, um die erste Aufgabe der Analyseroutine durchzuführen; und die Bestimmung, ob die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen, eine Bestimmung, ob die erste Taskroutine eine Anweisung umfasst, die die Kompilierung verhindert, um die GPU-Taskroutine zu erzeugen, und eine Bestimmung, ob Eingaben und Ausgaben der ersten Taskroutine definiert sind, um die Abhängigkeit nicht zu erfordern, umfasst. In Reaktion auf eine Bestimmung, dass die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen, kann der Prozessor veranlasst werden, Operationen durchführen, einschließlich: Zuweisen einer Datensatzpartition einer Mehrzahl von Datensatzpartitionen eines Datensatzes an die wenigstens eine Knotenvorrichtung, um Zugriff auf die Datensatzpartition durch die wenigstens eine GPU zu ermöglichen; Verwenden einer Umwandlungsregel, um wenigstens eine Anweisung der ersten Taskroutine in wenigstens eine entsprechende Anweisung der GPU-Taskroutine umzuwandeln; Kompilieren der wenigstens einen entsprechenden Anweisung der GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU; und Zuweisen einer Durchführung der ersten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der mehreren Instanzen der ersten Aufgabe mit der Datensatzpartition durch die wenigstens eine GPU zu ermöglichen.
  • Um zu bestimmen, ob die erste Taskroutine eine Anweisung umfasst, die die Kompilierung verhindert, um die GPU-Taskroutine zu erzeugen, kann der Prozessor veranlasst werden zum: Bestimmen, ob die Anweisung der ersten Taskroutine in einem Satz von Anweisungen eingeschlossen ist, die nicht in wenigstens eine Anweisung umgewandelt werden können, die von der wenigstens einen GPU ausgeführt werden kann; und in Reaktion auf eine Bestimmung, dass die Anweisung der ersten Taskroutine nicht im Satz von Anweisungen eingeschlossen ist, Bestimmen, ob die Anweisung der ersten Taskroutine in der ersten Taskroutine in einer Weise verwendet wird, die eine Umwandlung in wenigstens eine Anweisung verhindert, die von der wenigstens einen GPU ausgeführt werden kann. Um die wenigstens eine Anweisung der ersten Taskroutine in die wenigstens eine entsprechende Anweisung der GPU-Taskroutine umzuwandeln, kann der Prozessor veranlasst werden, die wenigstens eine Anweisung der ersten Taskroutine von einer ersten Programmiersprache in die wenigstens eine entsprechende Anweisung in einer zweiten Programmiersprache gemäß der Umwandlungsregel umzuwandeln. Der wenigstens eine Speicher der wenigstens einen Knotenvorrichtung umfasst einen ersten flüchtigen Speicher, der kommunikativ mit der wenigstens einen CPU gekoppelt ist, und einen zweiten flüchtigen Speicher, der kommunikativ mit der wenigstens einen GPU gekoppelt ist; das Zuweisen der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um Zugriff auf die Datensatzpartition durch die wenigstens eine GPU zu ermöglichen, kann umfassen, dass veranlasst wird, dass die Datensatzpartition innerhalb des zweiten flüchtigen Speichers gespeichert wird; und in Reaktion auf eine Bestimmung, dass die wenigstens eine GPU nicht verfügbar ist, um zugewiesen zu werden, die erste Aufgabe der Analyseroutine durchzuführen, wird der Prozessor veranlasst, Operationen durchzuführen, einschließlich: Unterlassen der Analyse der ersten Taskroutine, um zu bestimmen, ob die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen; Zuweisen der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um eine Speicherung der Datensatzpartition innerhalb des ersten flüchtigen Speichers zu veranlassen, Zugriff auf die Datensatzpartition durch die wenigstens eine CPU zu ermöglichen; Kompilieren der ersten Taskroutine zur Ausführung durch die wenigstens eine CPU; und Zuweisen der Durchführung der ersten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der ersten Aufgabe mit der Datensatzpartition durch die wenigstens eine CPU zu ermöglichen.
  • Der Prozessor kann eine Komponente einer Koordinierungsvorrichtung sein, die den Betrieb der Mehrzahl von Knotenvorrichtungen koordiniert; der Prozessor kann veranlasst werden, wiederkehrend Aktualisierungen für den aktuellen Status von jeder Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen zu empfangen; und um den aktuellen Status zu analysieren, um die Verfügbarkeit der wenigstens einen GPU der wenigstens einen Knotenvorrichtung zu bestimmen, kann der Prozessor veranlasst werden, eine Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen zu identifizieren, die eine GPU integriert, die im aktuellen Status als verfügbar angezeigt wird. Um die Datensatzpartition des Datensatzes an die wenigstens eine Knotenvorrichtung zuzuweisen, wird der Prozessor veranlasst, Operationen durchzuführen, einschließlich: Analysieren von Metadaten, die indikativ für strukturelle Merkmale des Datensatzes sind, um eine Beschränkung in einer Weise zu identifizieren, in der der Datensatz in die Mehrzahl von Datensatzpartitionen aufgeteilt werden kann, wobei die Beschränkung aus einer Gruppe bestehend aus einer Anzeige einer kleinsten atomaren Einheit von Daten innerhalb des Datensatzes und einer Spezifikation eines Partitionierungsschemas ausgewählt ist; und Ableiten einer Aufteilung des Datensatzes in die Mehrzahl von Datensatzpartitionen wenigstens teilweise basierend auf der Beschränkung. Der Prozessor kann veranlasst werden, Operationen durchzuführen, einschließlich: Abrufen der Metadaten aus wenigstens einer Speichervorrichtung, bei der der Datensatz gespeichert ist; und Übertragen einer Anzeige der Zuweisung der Datensatzpartition an die wenigstens eine Knotenvorrichtung oder die wenigstens eine Speichervorrichtung, um eine Übertragung der Datensatzpartition von der wenigstens einen Speichervorrichtung an die wenigstens eine Knotenvorrichtung zu veranlassen.
  • Der Prozessor kann eine CPU der wenigstens einen CPU umfassen; die CPU kann eine Komponente einer Knotenvorrichtung der wenigstens einen Knotenvorrichtung sein; die Knotenvorrichtung kann eine GPU der wenigstens einen GPU umfassen; und um den aktuellen Status zu analysieren, um die Verfügbarkeit der wenigstens einen GPU der wenigstens einen Knotenvorrichtung zu bestimmen, kann die CPU veranlasst werden, zu bestimmen, ob die GPU der Knotenvorrichtung durch den aktuellen Status als verfügbar angezeigt wird. Der Prozessor kann veranlasst werden, Operationen durchzuführen, einschließlich: Analysieren einer zweiten Taskroutine der Analyseroutine, um zu bestimmen, ob die zweite Taskroutine kompiliert werden kann, um eine andere GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU zu erzeugen, um zu veranlassen, dass die wenigstens eine GPU mehrere Instanzen der zweiten Aufgabe der Analyseroutine wenigstens teilweise parallel ohne eine Abhängigkeit zwischen Eingaben und Ausgaben der mehreren Instanzen der zweiten Aufgabe durchführt, wobei die zweite Taskroutine zur Ausführung durch die wenigstens eine CPU erzeugt wird, um eine zweite Aufgabe der Analyseroutine durchzuführen. In Reaktion auf eine Bestimmung, dass die zweite Taskroutine nicht kompiliert werden kann, um die andere GPU-Taskroutine zu erzeugen, kann der Prozessor veranlasst werden zum: Kompilieren der zweiten Taskroutine zur Ausführung durch die wenigstens eine CPU; und Zuweisen einer Durchführung der zweiten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der zweiten Aufgabe mit der Datensatzpartition durch die wenigstens eine CPU zu ermöglichen. Die wenigstens eine GPU kann die Ausführung der wenigstens einen entsprechenden Anweisung der GPU-Taskroutine parallel über wenigstens eintausend Threads der Ausführung unterstützen.
  • Ein computerimplementiertes Verfahren kann umfassen: Analysieren eines aktuellen Status von Ressourcen von wenigstens einer Knotenvorrichtung einer Mehrzahl von Knotenvorrichtungen, um eine Verfügbarkeit von wenigstens einer Grafikverarbeitungseinheit (Graphics Processing Unit, GPU) der wenigstens einen Knotenvorrichtung zu bestimmen, die zugewiesen werden soll, um eine erste Aufgabe einer Analyseroutine durchzuführen, wobei: der Betrieb der Mehrzahl von Knotenvorrichtungen koordiniert ist, um Aufgaben von Analyseroutinen wenigstens teilweise parallel durchzuführen; die Analyseroutine zur Ausführung durch wenigstens eine zentrale Verarbeitungseinheit (Central Processing Unit, CPU) des wenigstens einen Knotens erzeugt wird; und die Ressourcen der wenigstens einen Knotenvorrichtung aus einer Gruppe bestehend aus der wenigstens einen CPU, der wenigstens einen GPU und Speicherplatz innerhalb wenigstens eines Speichers der wenigstens einen Knotenvorrichtung ausgewählt werden. Das Verfahren kann in Reaktion auf eine Bestimmung, dass die wenigstens eine GPU verfügbar ist, um zugewiesen zu werden, die erste Aufgabe der Analyseroutine durchzuführen, umfassen: Analysieren einer ersten Taskroutine der Analyseroutine, um zu bestimmen, ob die erste Taskroutine kompiliert werden kann, um eine GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU zu erzeugen, um zu veranlassen, dass die wenigstens eine GPU mehrere Instanzen der ersten Aufgabe der Analyseroutine wenigstens teilweise parallel ohne eine Abhängigkeit zwischen Eingaben und Ausgaben der mehreren Instanzen der ersten Aufgabe durchführt, wobei: die erste Taskroutine zur Ausführung durch die wenigstens eine CPU erzeugt wird, um die erste Aufgabe der Analyseroutine durchzuführen; und die Bestimmung, ob die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen, eine Bestimmung, ob die erste Taskroutine eine Anweisung umfasst, die die Kompilierung verhindert, um die GPU-Taskroutine zu erzeugen, und eine Bestimmung, ob Eingaben und Ausgaben der ersten Taskroutine definiert sind, um die Abhängigkeit nicht zu erfordern, umfasst. Das Verfahren kann in Reaktion auf eine Bestimmung, dass die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen, umfassen: Zuweisen einer Datensatzpartition einer Mehrzahl von Datensatzpartitionen eines Datensatzes an die wenigstens eine Knotenvorrichtung, um Zugriff auf die Datensatzpartition durch die wenigstens eine GPU zu ermöglichen; Verwenden einer Umwandlungsregel, um wenigstens eine Anweisung der ersten Taskroutine in wenigstens eine entsprechende Anweisung der GPU-Taskroutine umzuwandeln; Kompilieren der wenigstens einen entsprechenden Anweisung der GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU; und Zuweisen einer Durchführung der ersten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der mehreren Instanzen der ersten Aufgabe mit der Datensatzpartition durch die wenigstens eine GPU zu ermöglichen.
  • Die Bestimmung, ob die erste Taskroutine eine Anweisung umfasst, die die Kompilierung verhindert, um die GPU-Taskroutine zu erzeugen, kann umfassen: Bestimmen, ob die Anweisung der ersten Taskroutine in einem Satz von Anweisungen eingeschlossen ist, die nicht in wenigstens eine Anweisung umgewandelt werden können, die von der wenigstens einen GPU ausgeführt werden kann; und in Reaktion auf eine Bestimmung, dass die Anweisung der ersten Taskroutine nicht im Satz von Anweisungen eingeschlossen ist, Bestimmen, ob die Anweisung der ersten Taskroutine in der ersten Taskroutine in einer Weise verwendet wird, die eine Umwandlung in wenigstens eine Anweisung verhindert, die von der wenigstens einen GPU ausgeführt werden kann. Das Umwandeln der wenigstens einen Anweisung der ersten Taskroutine in die wenigstens eine entsprechende Anweisung der GPU-Taskroutine kann das Umwandeln der wenigstens einen Anweisung der ersten Taskroutine von einer ersten Programmiersprache in die wenigstens eine entsprechende Anweisung in einer zweiten Programmiersprache gemäß der Umwandlungsregel umfassen.
  • Der wenigstens eine Speicher der wenigstens einen Knotenvorrichtung kann einen ersten flüchtigen Speicher, der kommunikativ mit der wenigstens einen CPU gekoppelt ist, und einen zweiten flüchtigen Speicher, der kommunikativ mit der wenigstens einen GPU gekoppelt ist, umfassen; das Zuweisen der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um Zugriff auf die Datensatzpartition durch die wenigstens eine GPU zu ermöglichen, kann umfassen, dass veranlasst wird, dass die Datensatzpartition innerhalb des zweiten flüchtigen Speichers gespeichert wird; und in Reaktion auf eine Bestimmung, dass die wenigstens eine GPU nicht verfügbar ist, um zugewiesen zu werden, die erste Aufgabe der Analyseroutine durchzuführen, kann das Verfahren umfassen: Unterlassen der Analyse der ersten Taskroutine, um zu bestimmen, ob die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen; Zuweisen der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um eine Speicherung der Datensatzpartition innerhalb des ersten flüchtigen Speichers zu veranlassen, Zugriff auf die Datensatzpartition durch die wenigstens eine CPU zu ermöglichen; Kompilieren der ersten Taskroutine zur Ausführung durch die wenigstens eine CPU; und Zuweisen der Durchführung der ersten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der ersten Aufgabe mit der Datensatzpartition durch die wenigstens eine CPU zu ermöglichen.
  • Eine Koordinierungsvorrichtung kann den Betrieb der Mehrzahl von Knotenvorrichtungen koordinieren; die Koordinierungsvorrichtung kann wiederkehrend Aktualisierungen für den aktuellen Status von jeder Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen empfangen; und das Analysieren des aktuellen Status, um die Verfügbarkeit der wenigstens einen GPU der wenigstens einen Knotenvorrichtung zu bestimmen, kann das Identifizieren an der Koordinierungsvorrichtung einer Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen, die eine GPU integriert, die im aktuellen Status als verfügbar angezeigt wird, umfassen. Das Zuweisen der Datensatzpartition des Datensatzes an die wenigstens eine Knotenvorrichtung kann umfassen: Analysieren, an der Koordinierungsvorrichtung, von Metadaten, die indikativ für strukturelle Merkmale des Datensatzes sind, um eine Beschränkung in einer Weise zu identifizieren, in der der Datensatz in die Mehrzahl von Datensatzpartitionen aufgeteilt werden kann, wobei die Beschränkung aus einer Gruppe bestehend aus einer Anzeige einer kleinsten atomaren Einheit von Daten innerhalb des Datensatzes und einer Spezifikation eines Partitionierungsschemas ausgewählt ist; und Ableiten einer Aufteilung des Datensatzes in die Mehrzahl von Datensatzpartitionen wenigstens teilweise basierend auf der Beschränkung. Das Verfahren kann umfassen: Abrufen der Metadaten aus wenigstens einer Speichervorrichtung, bei der der Datensatz gespeichert ist; und Übertragen einer Anzeige der Zuweisung der Datensatzpartition an die wenigstens eine Knotenvorrichtung oder die wenigstens eine Speichervorrichtung, um eine Übertragung der Datensatzpartition von der wenigstens einen Speichervorrichtung an die wenigstens eine Knotenvorrichtung zu veranlassen.
  • Das Analysieren des akuellen Zustands, um die Verfügbarkeit der wenigstens einen GPU der wenigstens einen Knotenvorrichtung zu bestimmen, kann das Analysieren eines aktuellen Status der Knotenvorrichtung durch eine CPU einer Knotenvorrichtung umfassen, ob eine GPU der Knotenvorrichtung aktuell verfügbar ist, wobei: die wenigstens eine CPU die CPU umfassen kann; die wenigstens eine Knotenvorrichtung die Knotenvorrichtung umfassen kann; und die wenigstens eine GPU die GPU umfassen kann.
  • Das Verfahren nach Anspruch 21 kann umfassen: Analysieren einer zweiten Taskroutine der Analyseroutine, um zu bestimmen, ob die zweite Taskroutine kompiliert werden kann, um eine andere GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU zu erzeugen, um zu veranlassen, dass die wenigstens eine GPU mehrere Instanzen der zweiten Aufgabe der Analyseroutine wenigstens teilweise parallel ohne eine Abhängigkeit zwischen Eingaben und Ausgaben der mehreren Instanzen der zweiten Aufgabe durchführt, wobei die zweite Taskroutine zur Ausführung durch die wenigstens eine CPU erzeugt wird, um eine zweite Aufgabe der Analyseroutine durchzuführen. Das Verfahren kann in Reaktion auf eine Bestimmung, dass die zweite Taskroutine nicht kompiliert werden kann, um die andere GPU-Taskroutine zu erzeugen, umfassen: Kompilieren der zweiten Taskroutine zur Ausführung durch die wenigstens eine CPU; und Zuweisen einer Durchführung der zweiten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der zweiten Aufgabe mit den Datensatzpartitionen durch die wenigstens eine CPU zu ermöglichen. Das Verfahren kann das Analysieren der Analyseroutine umfassen, um eine Reihenfolge von Aufgaben der Analyseroutine zu bestimmen, wobei die Reihenfolge der Aufgaben eine relative Reihenfolge der ersten und zweiten Aufgaben umfasst.
  • Das Vorstehende wird zusammen mit anderen Merkmalen und Ausführungsformen unter Bezugnahme auf die nachfolgende Beschreibung, Ansprüche und beigefügten Zeichnungen deutlicher.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Die vorliegende Offenbarung wird in Verbindung mit den beigefügten Figuren beschrieben:
  • 1 veranschaulicht ein Blockschaltbild, das eine Veranschaulichung der Hardwarekomponenten eines Rechensystems bereitstellt, gemäß einigen Ausführungsformen der vorliegenden Technologie.
  • 2 veranschaulicht ein beispielhaftes Netz, das einen beispielhaften Satz von Vorrichtungen umfasst, die miteinander über ein Austauschsystem und über ein Netz kommunizieren, gemäß einigen Ausführungsformen der vorliegenden Technologie.
  • 3 veranschaulicht eine Darstellung eines Konzeptmodells eines Kommunikationsprotokollsystems gemäß einigen Ausführungsformen der vorliegenden Technologie.
  • 4 veranschaulicht ein Kommunikationsgitter-Rechensystem, das eine Vielzahl von Steuer- und Arbeiterknoten umfasst, gemäß einigen Ausführungsformen der vorliegenden Technologie.
  • 5 veranschaulicht ein Flussdiagramm, das einen beispielhaften Prozess zum Anpassen eines Kommunikationsgitters oder eines Arbeitsprojekts in einem Kommunikationsgitter nach einem Ausfall eines Knotens zeigt, gemäß einigen Ausführungsformen der vorliegenden Technologie.
  • 6 veranschaulicht einen Teil eines Kommunikationsgitter-Rechensystems, das einen Steuerknoten und einen Arbeiterknoten umfasst, gemäß einigen Ausführungsformen der vorliegenden Technologie.
  • 7 veranschaulicht ein Flussdiagramm, das einen beispielhaften Prozess zum Ausführen eines Datenanalyse- oder Verarbeitungsprojekts zeigt, gemäß einigen Ausführungsformen der vorliegenden Technologie.
  • 8 veranschaulicht ein Blockschaltbild, das Komponenten einer Ereignisstromverarbeitungs-Engine (Event Stream Processing Engine, ESPE) umfasst, gemäß Ausführungsformen der vorliegenden Technologie.
  • 9 veranschaulicht ein Flussdiagramm, das einen beispielhaften Prozess einschließlich Operationen, die durch eine Ereignisstromverarbeitungs-Engine durchgeführt werden, zeigt, gemäß einigen Ausführungsformen der vorliegenden Technologie.
  • 10 veranschaulicht ein ESP-System, das über eine Schnittstelle zwischen einer Publishing-Vorrichtung und mehreren Ereignis-Subscribing-Vorrichtungen verbunden ist, gemäß Ausführungsformen der vorliegenden Technologie.
  • 11A und 11B veranschaulichen jeweils ein Ausführungsbeispiel eines verteilten Verarbeitungssystems.
  • 12 veranschaulicht ein Ausführungsbeispiel eines Seitenaustauschs.
  • 13A und 13B veranschaulichen jeweils ein Ausführungsbeispiel der Zuweisung der Durchführung von Aufgaben einer Analyseroutine an Knotenvorrichtungen eines verteilten Verarbeitungssystems.
  • 14A, 14B und 14C veranschaulichen zusammen ein Ausführungsbeispiel einer Zuweisung von Datensatzpartitionen und Aufgaben.
  • 15A und 15B veranschaulichen zusammen ein Beispiel einer Durchführung einer zugewiesenen Aufgabe durch ein Ausführungsbeispiel einer Knotenvorrichtung.
  • 16 veranschaulicht ein weiteres Ausführungsbeispiel einer Zuweisung von Datensatzpartitionen und Aufgaben.
  • 17A, 17B und 17C veranschaulichen zusammen ein Ausführungsbeispiel einer Verzögerung der Zuweisung einer Datensatzpartition und einer Aufgabe.
  • 18A, 18B und 18C veranschaulichen zusammen ein weiteres Ausführungsbeispiel einer Verzögerung der Zuweisung einer Datensatzpartition und einer Aufgabe.
  • 19 veranschaulicht noch ein Ausführungsbeispiel einer Analyse von Taskroutinen und Zuweisung von Aufgaben durch eine Koordinierungsvorrichtung.
  • 20 veranschaulicht noch ein Ausführungsbeispiel einer Analyse und Kompilierung einer Taskroutine durch eine Knotenvorrichtung.
  • 21 veranschaulicht noch ein Ausführungsbeispiel von anfänglichen und nachfolgenden Zuweisungen von Aufgaben durch eine Koordinierungsvorrichtung.
  • 22 veranschaulicht noch ein Ausführungsbeispiel einer Ableitung einer Zeitperiode einer Verzögerung zur Verwendung bei einer nachfolgenden Zuweisung einer Aufgabe.
  • 23 veranschaulicht noch ein Ausführungsbeispiel einer verzögerten Zuweisung einer Aufgabe durch eine Koordinierungsvorrichtung.
  • DETAILLIERTE BESCHREIBUNG
  • Verschiedene hierin beschriebene Ausführungsformen sind allgemein auf Techniken gerichtet, um die effektive Verwendung von Verarbeitungs-, Speicher- und Netzbandbreitenressourcen innerhalb eines Gitters von Knotenvorrichtungen zu verbessern, um zu ermöglichen, dass einzelne Analyseroutinen in kürzerer Zeit abgeschlossen werden. Verschiedene Ausführungsformen sind auch allgemein auf Techniken zur Verbesserung der Leichtigkeit der Verwendung von Multithreading-Unterstützung gerichtet, die von wenigstens einigen Prozessoren eines Gitters bereitgestellt wird. Jede Knotenvorrichtung eines Gitters von Knotenvorrichtungen kann sowohl flüchtigen Speicher, der einen schnelleren Zugriff auf Daten und Routinen bereitstellt, als auch nicht-flüchtigen Speicher, der eine höhere Speicherkapazität bereitstellt, jedoch mit einem langsameren Zugriff als der flüchtige Speicher, umfassen. Außerdem kann jeder Knoten des Gitters eine oder mehrere zentrale Verarbeitungseinheiten (Central Processing Units, CPUs) umfassen oder kann eine Kombination aus einer oder mehreren CPUs und einer oder mehreren Grafikverarbeitungseinheiten (Graphics Processing Units, GPUs) umfassen, von denen jede besser geeignet sein kann, um verschiedene Typen von Aufgaben einer Analyseroutine durchzuführen. Die anfänglichen Zuweisungen von Datensatzpartitionen und Aufgabe(n) einer Analyseroutine an Knotenvorrichtungen können auf der Verrfügbarkeit von Ressourcen innerhalb der Knotenvorrichtungen und/oder auf einer automatisierten Analyse der Taskroutinen innerhalb der Analyseroutine basieren, um Taskroutinen zu identifizieren, die zur Ausführung von GPUs anstelle von CPUs umgewandelt und kompiliert werden können. Eine derartige Analyse kann entweder in Verbindung mit dem Ableiten der anfänglichen Zuweisungen oder als Teil des Kompilierens jeder der Taskroutinen zur Ausführung durch CPUs und/oder durch GPUs durchgeführt werden. Anschließend kann während der Ausführung von Taskroutinen der Analyseroutine, wenn eine Knotenvorrichtung verfügbar wird, so dass sie einer nächsten Aufgabe zur Durchführung mit einer bestimmten Datensatzpartition zugewiesen werden könnte, eine derartige Zuweisung an die eine Knotenvorrichtung um eine vorbestimmte Zeitperiode verzögert werden, um einer anderen Knotenvorrichtung, die immer noch eine vorangehende Aufgabe mit dieser bestimmten Datensatzpartition durchführt, eine Möglichkeit zu geben, verfügbar zu werden und zugewiesen zu werden, diese nächste Aufgabe mit dieser bestimmten Datensatzpartition durchzuführen. Eine derartige Verzögerung der Zuweisung kann es ermöglichen, die zeitlich begrenzte Speicherung der bestimmten Datensatzpartition innerhalb des flüchtigen Speichers der anderen Knotenvorrichtung zu nutzen, um dadurch die Durchführung der nächsten Aufgabe mit der bestimmten Datensatzpartition schneller zu ermöglichen. Eine derartige Verzögerung bei der Zuweisung kann auch das Auftreten einer potentiell größeren Verzögerung vermeiden, die mit der Übertragung der bestimmten Datensatzpartition an die eine Knotenvorrichtung assoziiert ist.
  • Eine Koordinierungsvorrichtung eines Gitters von Knotenvorrichtungen kann wiederkehrend Knotendaten von jedem der Knoten des Knotenvorrichtungsgitters empfangen, wobei wiederkehrend aktualisierte Anzeigen des Umfangs der Verfügbarkeit verschiedener Verarbeitungs-, Speicher- und/oder Netzzugriffsressourcen in jedem bereitgestellt werden. Die Koordinierungsvorrichtung kann auch eine Analyseroutine empfangen, die ausführbare Anweisungen für mehrere Taskroutinen für mehrere Aufgaben umfasst, die mit wenigstens einem Datensatz durchgeführt werden sollen, und eine Reihenfolge, in der die Aufgaben durchgeführt werden sollen, spezifiziert. Die Koordinierungsvorrichtung kann ferner Metadaten empfangen, die indikativ für verschiedene strukturelle Merkmale von wenigstens dem einen Datensatz sind. Aus den Knotendaten, den Metadaten und/oder der Analyseroutine kann die Koordinierungsvorrichtung anfängliche Zuweisungen von Datensatzpartitionen des wenigstens einen Datensatzes an ausgewählte der Knotenvorrichtungen und anfängliche Zuweisungen der Aufgabe(n) ableiten, die durch die ausgewählten Knotenvorrichtungen durchgeführt werden soll(en). Die Koordinierungsvorrichtung kann dann Anzeigen der anfänglichen Zuweisungen an die ausgewählten Knotenvorrichtungen übertragen. Als Teil derartiger anfänglicher Zuweisungen können mehrere Datensatzpartitionen von wenigstens dem einen Datensatz auf die ausgewählten Knotenvorrichtungen verteilt werden, um den ausgewählten Knotenvorrichtungen zu ermöglichen, die gleichen Aufgaben wenigstens teilweise parallel zu ihren entsprechenden Datensatzpartitionen durchzuführen. Die Koordinierungsvorrichtung kann zusätzlich entweder an eine einzelne Speichervorrichtung oder ein Gitter von Speichervorrichtungen, die bzw. das den Datensatz speichert, Anzeigen der Verteilung von Datensatzpartitionen übertragen, die an die ausgewählten Knotenvorrichtungen als Teil der anfänglichen Zuweisungen vorgenommen werden soll, um zu ermöglichen, dass die Durchführungen der anfänglichen Aufgabe(n) beginnen. In einigen Ausführungsformen kann jede der ausgewählten Knotenvorrichtungen einen oder mehrere der Datensatzpartitionen von der einen oder den mehreren der Speichervorrichtungen abrufen. In anderen Ausführungsformen können eine oder mehrere der Datensatzpartitionen an jede der ausgewählten Knotenvorrichtungen durch die eine oder mehreren der Speichervorrichtungen übertragen werden.
  • In Bezug auf die Verarbeitungsressourcen, über die die Koordinierungsvorrichtung wiederkehrend Knotendaten empfangen kann, kann jede der Knotenvorrichtungen eine oder mehrere GPUs zusätzlich zur oder anstelle der Integration einer oder mehrerer CPUs integrieren. Die eine oder mehreren CPUs können eine interne Verarbeitungsarchitektur verwenden, die als gut geeignet für die serielle Verarbeitung von Taskroutinen befunden wird, die verschiedene Eingabe-/Ausgabeoperationen und/oder Verzweigungsoperationen einschließen, die die Ausführung verschiedener Sätze von Anweisungen auf den Ergebnissen von verschiedenen Bestimmungen bedingen. Die eine oder mehreren CPUs können jeweils einen oder mehrere Verarbeitungskerne umfassen, die jeweils einen relativ begrenzten Grad an paralleler Ausführung von Anweisungen auf einer relativ begrenzten Anzahl von Threads der Ausführung unterstützen können. Im Gegensatz dazu können die eine oder mehreren GPUs eine interne Verarbeitungsarchitektur verwenden, die als gut geeignet für die parallele Verarbeitung von Taskroutinen befunden wird, die eine relativ begrenzte Vielfalt von Berechnungen und/oder bitweisen Operationen umfassen. In einigen Ausführungsformen können die eine oder mehreren GPUs in der Lage sein, die parallele Verarbeitung einer relativ großen Menge von Instanzen einer Aufgabe über eine relativ große Anzahl von Threads der Ausführung zu unterstützen, wenn keine Abhängigkeiten zwischen den Instanzen der Aufgabe vorhanden sind (manchmal als „peinlich parallel” bezeichnet). In der Tat kann für eine relativ begrenzte Vielfalt von Aufgaben eine einzelne GPU innerhalb einer einzelnen Knotenvorrichtung in der Lage sein, die gleiche Arbeit wie die CPUs von zahlreichen separaten Knotenvorrichtungen durchzuführen, aber schneller und kostengünstiger. Somit kann es vorteilhaft sein, dass wenigstens eine Teilmenge der Knotenvorrichtungen vorhanden ist, die eine oder mehrere GPUs integrieren, die in der Lage sind, eine solche begrenzte Vielzahl von Aufgaben mit einer derartigen Geschwindigkeitszunahme durchzuführen, und es kann vorteilhaft sein, in der Lage zu sein, Aufgaben in Analyseroutinen automatisch zu identifizieren, die von einer solchen begrenzten Vielzahl sind.
  • In Ausführungsformen eines Knotenvorrichtungsgitters, in dem einige, aber nicht alle der Knotenvorrichtungen derartige GPUs integrieren, kann, ob eine Analyseroutine Taskroutinen für eine oder mehrere Aufgaben umfasst, die dafür zugänglich sind, von GPUs als peinlich parallele Aufgaben schneller als von CPUs ausgeführt zu werden, die Koordinierungsvorrichtung die Bestimmung veranlassen, ob Priorität der Zuweisung von Knotenvorrichtungen, die GPUs integrieren, oder Knotenvorrichtungen, die GPUs nicht integrieren, gegeben wird, um die Aufgaben der Analyseroutine durchzuführen. Die Koordinierungsvorrichtung kann die Taskroutinen einer Analyseroutine analysieren, um Aufgaben zu identifizieren, die mit Anweisungen implementiert werden und die mit Daten in einer Weise arbeiten, die Abhängigkeiten vermeidet, die bewirken, dass diese Aufgaben dafür zugänglich sind, zur Ausführung als peinlich parallele Aufgaben über eine große Anzahl von Threads durch eine oder mehrere GPUs kompiliert zu werden. Falls keine derartige Taskroutine durch eine derartige Analyse gefunden wird, dann kann die Gesamtheit der Analyseroutine zur Ausführung ausschließlich durch CPUs kompiliert werden. Ebenso kann Priorität der Zuweisung von Aufgaben der Analyseroutine gegeben werden, die von Knotenvorrichtungen ausgeführt werden sollen, die keine GPUs integrieren und/oder die eine oder mehrere CPUs sowie eine oder mehrere GPUs integrieren. Eine derartige Priorisierung kann bewirkt werden, um so viele der Knoten, die eine oder mehrere GPUs integrieren, so verfügbar wie möglich zu lassen, um Aufgaben einer anderen Analyseroutine zugewiesen zu bekommen, in der die Anweisungen und/oder Interaktion mit Daten in einer oder mehreren Taskroutinen dafür zugänglich sind, zur Ausführung als peinlich parallele Aufgaben durch GPUs kompiliert zu werden.
  • Es sollte jedoch angemerkt werden, dass, obgleich die Ergebnisse der Analyse der Taskroutinen einer Analyseroutine einen gewissen Einfluss darauf ausüben können, welche Knotenvorrichtungen für die Zuweisung von Aufgaben ausgewählt werden, in einigen Ausführungsformen Anzeigen dafür, welche Verarbeitungsressourcen unter den verfügbaren Knotenvorrichtungen verfügbar sind, einen gewissen Einfluss darauf haben können, ob die Taskroutinen zur Ausführung durch GPUs analysiert und/oder kompiliert werden. Insbesondere in Ausführungsformen, in denen keine der Knotenvorrichtungen, die GPUs integrieren, aktuell verfügbar sind, um irgendeiner Aufgabe zugewiesen zu werden (z. B. sind alle Knotenvorrichtungen, die GPUs integrieren, zugewiesen, um Aufgaben einer anderen und gänzlich nicht verwandten Analyseroutine durchzuführen), kann die Koordinierungsvorrichtung möglicherweise davon absehen, irgendeine Analyse der Taskroutinen durchzuführen, um zu bestimmen, ob irgendwelche der Taskroutinen dafür zugänglich sind, zur Ausführung durch eine GPU kompiliert zu werden, da aktuell keine GPUs hierfür verfügbar sind.
  • Wenn eine Analyse der Anweisungen innerhalb Taskroutinen durchgeführt wird, kann eine derartige Analyse Vergleiche von Anweisungen für jede Taskroutine mit einer Liste von Anweisungen, die jeweils dafür bekannt sind, wenigstens nicht zu verhindern, dass ihre entsprechenden Aufgaben als peinlich parallele Aufgaben durch eine GPU durchgeführt werden, und/oder mit einer Liste von Anweisungen, von denen jeweils bekannt ist, dass sie eine Aufgabe wiedergeben, die unfähig ist, als eine peinlich parallele Aufgabe durch eine GPU durchgeführt zu werden, zur Folge haben. Zusätzlich, wenn eine Taskroutine keine Anweisungen umfasst, die ihre entsprechende Aufgabe als unfähig wiedergeben, als eine peinlich parallele Aufgabe durch eine GPU durchgeführt zu werden, kann die Weise, in der die Anweisungen innerhalb dieser Taskroutine verwendet werden, analysiert werden, um zu bestimmen, ob die Weise, in der irgendwelche Anweisungen verwendet werden, die entsprechende Aufgabe als unfähig wiedergibt, als eine peinlich parallele Aufgabe durch eine GPU durchgeführt zu werden. Beispielhaft, falls derartige Anweisungen verwendet werden, um Operationen auf Daten in einer Weise durchzuführen, die Abhängigkeiten zwischen Instanzen einer Taskroutine erzeugen würden, so dass diese Instanzen nicht wirklich parallel durchgeführt werden könnten, kann die Aufgabe der Taskroutine dann möglicherweise nicht dafür zugänglich sein, als eine peinlich parallele Aufgabe durchgeführt zu werden. Falls bestimmt wird, dass die Anweisungen einer Taskroutine und die Weise, in der diese Anweisungen verwendet werden, nicht verhindern, dass die entsprechende Aufgabe als eine peinlich parallele Aufgabe durch eine GPU durchgeführt wird, dann kann das Kompilieren der Anweisungen der Taskroutine für eine derartige Ausführung durch eine oder mehrere GPUs die standardmäßige Vorgehensweise sein. Wenn das Knotenvorrichtungsgitter Knotenvorrichtungen umfasst, die unterschiedliche GPUs integrieren, die keinen Anweisungssatz teilen, kann die Kompilierung der Taskroutine für eine derartige Ausführung durch eine oder mehrere GPUs mehrere Kompilierungen der Taskroutine zur Unterstützung von jeder der unterschiedlichen GPUs zur Folge haben.
  • In einigen Ausführungsformen kann das Kompilieren einer Taskroutine zur Durchführung einer Aufgabe, von der bestimmt wurde, dass sie dafür zugänglich ist, als eine peinlich parallele Aufgabe durch eine GPU durchgeführt zu werden, eine Umwandlung von Anweisungen der Taskroutine, die nicht erzeugt wurden, um eine derartige peinlich parallele Durchführung der Aufgabe durch eine GPU zu veranlassen, in Anweisungen, die erzeugt werden, um eine derartige Durchführung der Aufgabe zu veranlassen, zur Folge haben. Ein Compiler, um eine derartige Umwandlung durchzuführen, kann einen Satz von Kompilierregeln verwenden, die jeweils mit einer oder mehreren bestimmten Anweisungen assoziiert sind, die unter den Anweisungen der Taskroutine vorhanden sein können, und die die eine oder mehreren bestimmten Anweisungen veranlassen, in eine oder mehrere andere Anweisungen umgewandelt zu werden, die eine peinlich parallele Ausführung durch eine GPU bewirken. Unter derartigen Kompilierregeln können Regeln sein, die jeweils die Umwandlung eines bestimmten Typs von Schleife von Anweisungen in einen anderen Typ von Schleife veranlassen, die für eine peinlich parallele Ausführung durch eine GPU zugänglicher ist (z. B. eine Schleife mit einer reduzierten Anzahl von Iterationen), und/oder die den Ersatz eines bestimmten Typs von Schleife von Anweisungen mit einer oder mehreren anderen Anweisungen zur Ausführung durch eine GPU in einer peinlich parallelen Weise veranlassen, die nicht die Verwendung einer Schleife zur Folge hat. Es kann auch ein Satz von Kompilierregeln vorhanden sein, die jeweils mit einem bestimmten Typ von Datenstruktur assoziiert sind, die durch die Anweisungen der Taskroutine instanziiert oder anderweitig verwendet werden kann, und die veranlassen, dass die Datenstruktur in eine andere Datenstruktur umgewandelt wird, die für die Verwendung in einer peinlich parallelen Ausführung durch eine GPU zugänglicher ist.
  • Durch die Verwendung derartiger Umwandlungen von Anweisungen einer oder mehrerer Taskroutinen kann dem Personal, das die Anweisungen der Taskroutinen einer Analyseroutine schreibt, die Möglichkeit gegeben werden, die peinlich parallelen Verarbeitungsfähigkeiten der einen oder mehreren GPUs zu nutzen, die in wenigstens einigen der Knotenvorrichtungen integriert sind, ohne die Notwendigkeit, die Anweisungen der Taskroutinen speziell für die peinlich parallele Ausführung durch GPUs zu schreiben. Anders ausgedrückt, kann diesem Personal die Notwendigkeit erspart bleiben, die Fähigkeiten zu erwerben, um die Anweisungen zu architektieren und zu schreiben, die die Aufgaben einer Analyseroutine in einer Weise implementieren, die für eine peinlich parallele Ausführung durch GPUs ausgelegt ist. Zusätzlich bleibt, wenn das Knotenvorrichtungsgitter Knotenvorrichtungen umfasst, die unterschiedliche GPUs integrieren, die keinen Anweisungssatz teilen, diesem Personal ferner die Notwendigkeit erspart, verschiedene Versionen der Anweisungen der Taskroutinen zu architektieren und zu schreiben, um die unterschiedlichen Eigenheiten der peinlich parallelen Ausführung durch jede der verschiedenen GPUs zu adressieren.
  • In Bezug auf die Speicherressourcen, über die die Koordinierungsvorrichtung wiederkehrend Knotendaten empfangen kann, kann jede der Knotenvorrichtungen Speicherfähigkeiten integrieren, die als eine Kombination aus flüchtigem und nicht-flüchtigem Speicher implementiert sind. Der flüchtige Speicher kann mit einer oder mehreren Speicherkomponenten implementiert sein, die eine Speichertechnologie einsetzen, die einen relativ schnellen Zugriff auf Daten und/oder Routinen ermöglicht, aber nicht in der Lage ist, darin gespeicherte Daten und/oder Routinen ohne kontinuierliche Zufuhr von elektrischer Leistung zu behalten. Derartige Technologien schließen unter anderem beliebige einer Vielzahl von Typen von Direktzugriffsspeicher (Random Access Memory, RAM) ein. Der nicht-flüchtige Speicher kann mit einer oder mehreren Speicherkomponenten implementiert sein, die eine Speichertechnologie einsetzen, die in der Lage ist, darin gespeicherte Daten und/oder Routinen zu behalten, unabhängig davon, ob elektrische Leistung weiterhin bereitgestellt wird, die aber nicht in der Lage ist, Zugriff bereitzustellen, der so schnell wie der ist, der von verschiedenen flüchtigen Speichertechnologien bereitgestellt wird, auf denen der flüchtige Speicher basieren kann. Derartige Technologien für nicht-flüchtigen Speicher schließen unter anderem die Verwendung von einer beliebigen einer Vielzahl von ferromagnetischen und/oder optischen Speichermedien ein.
  • Aufgrund des schnelleren Zugriffs, der durch den flüchtigen Speicher im Vergleich zum nicht-flüchtigen Speicher bereitgestellt wird, können Anweisungen, die gerade von der einen oder den mehreren CPUs und/oder der einen oder den mehreren GPUs ausgeführt werden, die in jede Knotenvorrichtung integriert sind, innerhalb flüchtigem Speicher gespeichert werden, wo sie schneller gelesen, geschrieben und/oder modifiziert werden können. Aufgrund der oft geringeren Kosten und/oder höheren Speicherdichten der nicht-flüchtigen Speicherkomponenten im Vergleich zu den flüchtigen Speicherkomponenten kann der nicht-flüchtige Speicher jedoch mit einer höheren Speicherkapazität als der flüchtige Speicher innerhalb jeder der Knotenvorrichtungen implementiert werden. Obwohl es möglicherweise Datensätze gibt, die ausreichend klein sind und/oder die auf eine ausreichend große Anzahl von Knotenvorrichtungen verteilt sind, um zu bewirken, dass jede Datensatzpartition des Datensatzes, die an eine Knotenvorrichtung verteilt wird, ausreichend klein ist, um vollständig innerhalb von flüchtigem Speicher speicherbar zu sein, ist vorgesehen, dass die Datensatzpartitionen der Mehrheit von Datensätzen jeweils eher zu groß sind, um dies zu tun.
  • Infolgedessen können innerhalb jeder Knotenvorrichtung Seiten von Routinen, die ausgeführt werden, und/oder von Daten, auf die von der einen oder den mehreren CPUs und/oder der einen oder den mehreren GPUs zugegriffen wird, von nicht-flüchtigem Speicher in flüchtigen Speicher ausgetauscht werden. Wie Fachleuten auf dem Gebiet bekannt sein kann, kann jeder beliebige einer Vielzahl von Algorithmen verwendet werden, um Seiten von Routinen und/oder von Daten auszuwählen, die in flüchtigen Speicher ausgetauscht werden sollen, und/oder um Seiten auszuwählen, die innerhalb von flüchtigem Speicher gehalten werden sollen, während andere zurück zum nicht-flüchtigen Speicher ausgetauscht werden, einschließlich unter anderem beliebiger einer Vielzahl von nachfragebasierten und/oder prädiktiven Algorithmen. In einer oder mehreren Ausführungsformen können eine oder mehrere der Knotenvorrichtungen ein Betriebssystem (Operating System, OS) ausführen, das eine Paging-Komponente umfasst, die ein derartiges Austauschen von einheitlich großen Seiten von Routinen und/oder Daten durchführt. Abhängig von verschiedenen Faktoren, wie beispielsweise den Typen der durchgeführten Operationen, der Häufigkeit von Zugriffen auf verschiedene Seiten von Routinen und/oder von Daten und/oder der Anzahl von Routinen, die parallel ausgeführt werden, kann eine Seite einer Routine und/oder von Daten innerhalb eines flüchtigen Speichers für eine längere oder kürzere Zeitperiode behalten werden, bevor sie zurück zum nicht-flüchtigen Speicher ausgetauscht wird, um Platz innerhalb des flüchtigen Speichers für eine andere Seite einer Routine und/oder von Daten freizugeben. Somit kann die Speicherung von Seiten von Routinen und/oder von Daten innerhalb eines flüchtigen Speichers innerhalb jeder der Knotenvorrichtungen zeitlich begrenzt sein.
  • In Knotenvorrichtungen, die sowohl eine oder mehrere CPUs als auch eine oder mehrere GPUs integrieren, kann es einen flüchtigen Speicher für die eine oder mehreren CPUs und einen weiteren flüchtigen Speicher für die eine oder mehreren GPUs geben. Jedoch kann es einen einzelnen nicht-flüchtigen Speicher geben, und Seiten von Routinen und/oder von Daten können zwischen dem einzelnen nicht-flüchtigen Speicher und jedem der zwei flüchtigen Speicher ausgetauscht werden. In einigen Ausführungsformen kann der Betrieb der einen oder mehreren GPUs wenigstens teilweise durch die eine oder mehreren CPUs gesteuert werden, so dass die eine oder mehreren GPUs nicht vollständig autonom von der einen oder den mehreren CPUs betrieben werden können. In derartigen Ausführungsformen kann der flüchtige Speicher, der mit der einen oder den mehreren GPUs assoziiert ist, auch für die eine oder mehreren CPUs zugänglich sein, und eine Speicherseitenmanagementroutine, die von der einen oder den mehreren CPUs ausgeführt wird, um ein Austauschen von Seiten von Routinen und/oder Daten für die eine oder mehreren CPUs durchzuführen, kann auch ein derartiges Austauschen von Seiten von Routinen und/oder von Daten für die eine oder mehreren GPUs durchführen. Wie Fachleuten auf dem Gebiet bekannt sein kann, kann ein derartiges Austauschen durch die eine oder mehreren CPUs im Auftrag der einen oder mehreren GPUs aufgrund der Notwendigkeit auftreten, dass eine oder mehrere Treiberroutinen durch die eine oder mehreren CPUs ausgeführt werden sollen, um den Zugriff auf den nicht-flüchtigen Speicher zu ermöglichen und/oder ein Dateisystem zu nutzen, das beim Speichern von Daten und/oder Routinen als Dateien mit dem nicht-flüchtigen Speicher verwendet wird. Somit kann unabhängig von der genauen Weise, in der jede der ausgewählten Knotenvorrichtungen mit einer Datensatzpartition versehen ist, eine derartige empfangene Datensatzpartition anfänglich vollständig innerhalb des nicht-flüchtigen Speichers innerhalb jeder Knotenvorrichtung gespeichert werden. Nach einem derartigen Empfang und Speichern können dann Seiten der empfangenen Datensatzpartition nach Bedarf in den flüchtigen Speicher der einen oder mehreren CPUs und/oder der einen oder mehreren GPUs ausgetauscht werden, um die Durchführung einer oder mehrerer Aufgaben einer Analyseroutine mit der Datensatzpartition zu unterstützen.
  • In Bezug auf die Netzzugriffsressourcen, über die die Koordinierungsvorrichtung wiederkehrend Knotendaten empfangen kann, kann jede der Knotenvorrichtungen eine Netzschnittstelle zu einem Netz integrieren, das vom Knotenvorrichtungsgitter verwendet wird, um die Knotenvorrichtungen kommunikativ miteinander, mit der Koordinierungsvorrichtung und/oder mit einer oder mehreren Speichervorrichtungen (z. B. einem Speichervorrichtungsgitter) zu koppeln. Die Taskroutinen, die von der/den CPU(s) und/oder der/den GPU(s) ausgeführt werden, um Aufgaben von Analyseroutinen auszuführen, können durch die Koordinierungsvorrichtung an Knotenvorrichtungen über das Netz verteilt werden. Auch können die Datensatzpartitionen, mit denen die Aufgaben durchgeführt werden, von der einen oder den mehreren Speichervorrichtungen an die Knotenvorrichtungen über das Netz übertragen werden, und Datensatzpartitionen, die innerhalb des Knotens abgeleitet werden, können zurück an die eine oder mehreren Speichervorrichtungen übertragen werden. Wie Fachleuten auf dem Gebiet bekannt sein kann, können in einigen Ausführungsformen die eine oder mehreren GPUs einer Knotenvorrichtung nicht in der Lage sein, die Netzschnittstelle der Knotenvorrichtung direkt zu betreiben, um einen Austausch von Routinen und/oder Daten zu bewirken, die mit einer Durchführung einer Aufgabe durch die eine oder mehreren GPUs assoziiert sind. Stattdessen können, in einer ähnlichen Weise wie das Austauschen von Seiten, die mit der einen oder den mehreren GPUs zwischen flüchtigem und nicht-flüchtigem Speicher assoziiert sind, die einen oder mehreren CPUs der Knotenvorrichtung so die Netzschnittstelle im Auftrag der einen oder mehreren GPUs betreiben. Wie bereits erwähnt, kann eine derartige Aktion im Auftrag der einen oder mehreren GPUs durch die eine oder mehreren CPUs durch die Notwendigkeit bedingt sein, dass eine oder mehrere Treiberroutinen durch die eine oder mehreren CPUs ausgeführt werden sollen, um Zugriff auf die Netzschnittstelle zu ermöglichen.
  • So wie der Zugriff auf Routinen und/oder Daten, die innerhalb eines nicht-flüchtigen Speichers einer Knotenvorrichtung gespeichert sind, beträchtlich langsamer sein kann als der Zugriff auf Routinen und/oder Daten, die innerhalb eines flüchtigen Speichers gespeichert sind, kann der Zugriff auf Routinen und/oder Daten, die innerhalb einer anderen Vorrichtung gespeichert sind, über ein Netz noch wesentlich langsamer sein. Zusätzlich kann in einigen Ausführungsformen der Zugriff auf Routinen und/oder Daten, die entweder innerhalb des nichtflüchtigen Speichers oder innerhalb einer anderen Vorrichtung gespeichert sind, über das Netz sogar langsamer sein für die eine oder mehreren GPUs aufgrund ihrer Abhängigkeit von der einen oder den mehreren CPUs der Knotenvorrichtung, um Maßnahmen zu ergreifen, um einen derartigen Zugriff im Auftrag der einen oder mehreren GPUs zu ermöglichen. Somit kann es als wünschenswert erachtet werden, warm immer möglich, Zugriffe, die auf Routinen und/oder Daten vorgenommen wurden, zu maximieren, während sie noch innerhalb eines flüchtigen Speichers gespeichert sind, der mit der/den CPU(s) und/oder GPU(s) verbunden ist, die diese Zugriffe vornehmen, und Zugriffe auf Routinen und/oder Daten zu minimieren, während sie in einem nicht-flüchtigen Speicher und/oder innerhalb anderer Vorrichtungen gespeichert sind, so dass der Zugriff über das Netz erfolgen muss. Dies kann zur Folge haben, dass einige Knotenvorrichtungen des Knotenvorrichtungsgitters für verschiedene Zeitperioden untätig werden, um die Verfügbarkeit bestimmter Knotenvorrichtungen zur Verwendung bei der Durchführung bestimmter Aufgaben mit bestimmten Datensatzpartitionen abzuwarten, anstatt sofort Aufgaben jedem Knoten zuzuweisen, der zur Verwendung bei der Durchführung einer Aufgabe verfügbar wird, unabhängig davon, welche Knotenvorrichtungen bereits bestimmte Datensatzpartitionen innerhalb ihrer Speicher aufweisen. Anders ausgedrückt, kann die Zuweisung einer nächsten Aufgabe eine Zeitperiode lang verzögert werden, um zu ermöglichen, dass eine bestimmte Knotenvorrichtung, in der eine bestimmte Datensatzpartition gespeichert ist, wieder verfügbar wird, um eine nächste Aufgabe zugewiesen zu bekommen, die die Verwendung der speziellen Datensatzpartition beinhaltet, anstatt sofort die nächste Aufgabe einer anderen Knotenvorrichtung zuzuweisen, an die die bestimmte Datensatzpartition übertragen werden müsste. Zusätzlich, wenn es mehrere Aufgaben gibt, die mit einer bestimmten Partition durchgeführt werden sollen, die unter Verwendung einer GPU durchgeführt werden können, kann das Verzögern der Zuweisung der nächsten dieser mehreren Aufgaben, um die Möglichkeit zu geben, diese nächste dieser Aufgaben einer Knotenvorrichtung zuzuweisen, die eine GPU integriert und die bereits die jeweilige Datensatzpartition speichert, eine Situation vermeiden, bei der die sofortige Zuweisung der nächsten Aufgabe an die nächste verfügbare Knotenvorrichtung zu einer Zuweisung an eine Knotenvorrichtung führen kann, die keine GPU integriert, was somit zu einer langsameren Durchführung der nächsten dieser Aufgaben führt.
  • Somit, wenn beispielsweise eine erste Knotenvorrichtung, die mit der Durchführung einer ersten Aufgabe einer Analyse mit einer ersten Datensatzpartition eines Datensatzes beschäftigt war, ihre Durchführung der ersten Aufgabe mit der ersten Datensatzpartition abschließt und dadurch verfügbar wird, so dass sie zugewiesen werden könnte, um eine zweite Aufgabe der Analyse mit einer zweiten Datensatzpartition des Datensatzes durchzuführen, kann die Koordinierungsvorrichtung davon absehen, die erste Knotenvorrichtung zuzuweisen, um die zweite Aufgabe mit der zweiten Datensatzpartition für eine vorbestimmte Zeitperiode durchzuführen. Die vorbestimmte Zeitperiode kann ausgewählt werden, um eine Möglichkeit für eine zweite Knotenvorrichtung bereitzustellen, die immer noch mit der Durchführung der ersten Aufgabe mit der zweiten Datensatzpartition beschäftigt ist, um ihre Durchführung der ersten Aufgabe mit der zweiten Datensatzpartition abzuschließen, so dass die zweite Knotenvorrichtung in der Lage ist, die zweite Aufgabe mit der zweiten Datensatzpartition durchzuführen. Falls jedoch die zweite Knotenvorrichtung nicht verfügbar wird, zugewiesen zu werden, um die zweite Aufgabe mit der zweiten Datensatzpartition durchzuführen, dann kann einer anderen Knotenvorrichtung, in der die zweite Datensatzpartition nicht bereits gespeichert ist, diese Durchführung zugewiesen werden (z. B. der ersten Knotenvorrichtung). Alternativ kann in anderen Ausführungsformen, falls es noch eine andere Knotenvorrichtung gibt, in der die zweite Datensatzpartition auch in Vorbereitung für die Verwendung dieser anderen Knotenvorrichtung als ein Backup in Reaktion auf einen Ausfall einer Knotenvorrichtung gespeichert wurde, die eine Aufgabe mit der zweiten Datensatzpartition durchführt, und falls die zweite Knotenvorrichtung nicht verfügbar wird, um zugewiesen zu werden, um die zweite Aufgabe mit der zweiten Datensatzpartition durchzuführen, und falls eine derartige andere Knotenvorrichtung aktuell verfügbar ist, um zugewiesen zu werden, die derartige andere Knotenvorrichtung so zugewiesen werden.
  • Auf diese Weise kann die Tatsache genutzt werden, dass die zweite Datensatzpartition bereits innerhalb der flüchtigen und/oder nicht-flüchtigen Speicher der zweiten Knotenvorrichtung gespeichert ist, so dass die zweite Datensatzpartition nicht zwischen Vorrichtungen ausgetauscht werden muss, um die Durchführung der zweiten Aufgabe mit der zweiten Datensatzpartition durch eine andere Knotenvorrichtung zu ermöglichen. Anders ausgedrückt, wäre die Durchführung der zweiten Aufgabe mit der zweiten Datensatzpartition der ersten Knotenvorrichtung zugewiesen worden, dann hätte die zweite Datensatzpartition entweder von der zweiten Knotenvorrichtung oder von der einen oder den mehreren Speichervorrichtungen an die erste Knotenvorrichtung übertragen werden müssen. Zusätzlich zum Verbrauch der verfügbaren Bandbreite des Netzes und der Netzschnittstelle von wenigstens der ersten Knotenvorrichtung würde die Durchführung durch die erste Knotenvorrichtung der zweiten Aufgabe mit der zweiten Datensatzpartition notwendigerweise verzögert werden, bis wenigstens ausreichend von der zweiten Datensatzpartition durch die erste Knotenvorrichtung empfangen würde, um zu ermöglichen, dass die Durchführung beginnt.
  • Als ein anderes Beispiel können jede einer ersten Knotenvorrichtung, die mit der Durchführung einer ersten Aufgabe einer Analyseroutine beschäftigt war, um eine erste Datensatzpartition eines Datensatzes zu erzeugen, und einer zweiten Knotenvorrichtung, die mit der Durchführung der ersten Aufgabe beschäftigt war, um eine zweite Datensatzpartition des Datensatzes zu erzeugen, beide ihre Durchführungen der ersten Aufgabe abschließen. Während jedoch die erste Knotenvorrichtung verfügbar sein kann, um einer anderen Aufgabe zugewiesen zu werden, kann die zweite Knotenvorrichtung (als Ergebnis der Freigabe von Knotenvorrichtungen unter mehreren nicht verwandten Analysen) mit der Durchführung einer Aufgabe einer nicht verwandten Analyseroutine beschäftigt sein, so dass die zweite Knotenvorrichtung noch nicht verfügbar sein kann, um zugewiesen zu werden, um eine zweite Aufgabe der Analyseroutine mit der zweiten Datensatzpartition durchzuführen, die die zweite Knotenvorrichtung selbst erzeugt hat. Wie bereits erwähnt, kann die Koordinierungsvorrichtung davon absehen, die erste Knotenvorrichtung zuzuweisen, um die zweite Aufgabe mit der zweiten Datensatzpartition für eine vorbestimmte Zeitperiode durchzuführen. Die vorbestimmte Zeitperiode kann ausgewählt werden, um eine Möglichkeit bereitzustellen, dass die zweite Knotenvorrichtung ihre Durchführung der Aufgabe der nicht verwandten Analyseroutine abschließt, so dass die zweite Knotenvorrichtung verfügbar wird, um zugewiesen zu werden, um die zweite Aufgabe mit der zweiten Datensatzpartition durchzuführen. Wie bereits erwähnt, kann auf diese Weise die Tatsache genutzt werden, dass die zweite Datensatzpartition bereits innerhalb der flüchtigen und/oder nicht-flüchtigen Speicher der zweiten Knotenvorrichtung gespeichert ist, so dass die zweite Datensatzpartition nicht zwischen Vorrichtungen ausgetauscht werden muss, um die Durchführung der zweiten Aufgabe mit der zweiten Datensatzpartition durch eine andere Knotenvorrichtung zu ermöglichen.
  • Mit allgemeiner Bezugnahme auf hierin verwendete Notationen und Nomenklatur können Teile der nachfolgenden detaillierten Beschreibung in Form von Programmprozeduren dargestellt werden, die von einem Prozessor von einer Maschine oder von mehreren vernetzten Maschinen ausgeführt werden. Diese prozeduralen Beschreibungen und Darstellungen werden von Fachleuten auf dem Gebiet verwendet, um die Substanz ihrer Arbeit am wirksamsten an andere Fachleute zu übermitteln. Eine Prozedur ist hier und allgemein als eine selbstkonsistente Folge von Operationen konzipiert, die zu einem gewünschten Ergebnis führt. Diese Operationen sind diejenigen, die physische Manipulationen von physischen Größen erfordern. Gewöhnlich, wenn auch nicht notwendigerweise, nehmen diese Größen die Form von elektrischen, magnetischen oder optischen Kommunikationen an, die in der Lage sind, gespeichert, übertragen, kombiniert, verglichen und anderweitig manipuliert zu werden. Es erweist sich manchmal als zweckmäßig, vor allem aus Gründen der üblichen Verwendung, auf das, was kommuniziert wird, als Bits, Werte, Elemente, Symbole, Zeichen, Begriffe, Zahlen oder dergleichen zu verweisen. Es ist jedoch anzumerken, dass alle diese und ähnliche Begriffe mit den entsprechenden physischen Größen assoziiert sind und lediglich zweckmäßige Kennzeichnungen sind, die auf diese Größen angewendet werden.
  • Ferner werden diese Manipulationen oft mit Begriffen, wie beispielsweise Hinzufügen oder Vergleichen, bezeichnet, die üblicherweise mit geistigen Operationen assoziiert sind, die von einem menschlichen Bediener durchgeführt werden. Jedoch ist keine derartige Fähigkeit eines menschlichen Bedieners in irgendeiner der hierin beschriebenen Operationen notwendig oder in den meisten Fällen wünschenswert, die einen Teil einer oder mehrerer Ausführungsformen bilden. Stattdessen sind diese Operationen Maschinenoperationen. Nützliche Maschinen zum Durchführen von Operationen von verschiedenen Ausführungsformen umfassen Maschinen, die selektiv durch eine Routine, die in dem gespeichert ist, das gemäß den hierin beschriebenen Lehren geschrieben ist, aktiviert oder konfiguriert werden, und/oder umfassen Vorrichtungen, die speziell für den erforderlichen Zweck konstruiert sind. Verschiedene Ausführungsformen beziehen sich auch auf Vorrichtungen oder Systeme zum Durchführen dieser Operationen. Diese Vorrichtungen können speziell für den erforderlichen Zweck konstruiert sein oder können einen Allzweckcomputer umfassen. Die erforderliche Struktur für eine Vielzahl dieser Maschinen wird aus der angegebenen Beschreibung ersichtlich.
  • Es wird nun auf die Zeichnungen Bezug genommen, in denen gleiche Bezugszeichen verwendet werden, um sich durchweg auf gleiche Elemente zu beziehen. In der folgenden Beschreibung werden zu Erläuterungszwecken zahlreiche spezielle Details dargelegt, um ein gründliches Verständnis davon bereitzustellen. Es kann jedoch offensichtlich sein, dass die neuartigen Ausführungsformen ohne diese speziellen Details umgesetzt werden können. In anderen Fällen werden wohlbekannte Strukturen und Vorrichtungen in Blockschaltbildform gezeigt, um eine Beschreibung davon zu erleichtern. Die Absicht ist, alle Modifikationen, Äquivalente und Alternativen innerhalb des Schutzbereichs der Ansprüche abzudecken.
  • Die in einigen der Figuren dargestellten Systeme können in verschiedenen Konfigurationen bereitgestellt sein. In einigen Ausführungsformen können die Systeme als ein verteiltes System ausgelegt sein, bei dem eine oder mehrere Komponenten des Systems über ein oder mehrere Netze in einem Cloud-Computing-System und/oder einem Fog-Computing-System verteilt sind.
  • 1 ist ein Blockschaltbild, das eine Veranschaulichung der Hardwarekomponenten eines Datenübertragungsnetzes 100 bereitstellt, gemäß Ausführungsformen der vorliegenden Technologie. Das Datenübertragungsnetz 100 ist ein spezialisiertes Computersystem, das zum Verarbeiten großer Datenmengen verwendet werden kann, bei denen eine große Anzahl von Computerverarbeitungszyklen erforderlich ist.
  • Das Datenübertragungsnetz 100 kann auch eine Rechenumgebung 114 umfassen. Die Rechenumgebung 114 kann ein spezialisierter Computer oder eine andere Maschine sein, der bzw. die die innerhalb des Datenübertragungsnetzes 100 empfangenen Daten verarbeitet. Das Datenübertragungsnetz 100 umfasst auch eine oder mehrere Netzvorrichtungen 102. Die Netzvorrichtungen 102 können Clientvorrichtungen umfassen, die versuchen, mit der Rechenumgebung 114 zu kommunizieren. Beispielsweise können die Netzvorrichtungen 102 unter anderem Daten an die zu verarbeitende Rechenumgebung 114 senden, Signale an die Rechenumgebung 114 senden, um verschiedene Aspekte der Rechenumgebung oder der Daten, die sie verarbeitet, zu steuern. Die Netzvorrichtungen 102 können mit der Rechenumgebung 114 mittels einer Anzahl von Weisen interagieren, wie beispielsweise über ein oder mehrere Netze 108. Wie in 1 gezeigt, kann die Rechenumgebung 114 ein oder mehrere andere Systeme umfassen. Beispielsweise kann die Rechenumgebung 114 ein Datenbanksystem 118 und/oder ein Kommunikationsgitter 120 umfassen.
  • In anderen Ausführungsformen können Netzvorrichtungen eine große Menge an Daten, entweder alle auf einmal oder über eine Zeitperiode gestreamt (z. B. unter Verwendung von Ereignisstromverarbeitung (Event Stream Processing, ESP), die weiter unter Bezugnahme auf 810 beschrieben wird), an die Rechenumgebung 114 über die Netze 108 bereitstellen. Beispielsweise können Netzvorrichtungen 102 Netzcomputer, Sensoren, Datenbanken oder andere Vorrichtungen umfassen, die Daten an die Rechenumgebung 114 übertragen oder anderweitig bereitstellen können. Beispielsweise können Netzvorrichtungen lokale Netzvorrichtungen, wie beispielsweise Router, Hubs, Switches oder andere Computernetzvorrichtungen, umfassen. Diese Vorrichtungen können eine Vielzahl von gespeicherten oder erzeugten Daten bereitstellen, wie beispielsweise Netzdaten oder Daten, die für die Netzvorrichtungen selbst spezifisch sind. Netzvorrichtungen können auch Sensoren umfassen, die ihre Umgebung oder andere Vorrichtungen überwachen, um Daten bezüglich dieser Umgebung oder dieser Vorrichtungen zu sammeln, und derartige Netzvorrichtungen können Daten bereitstellen, die sie über die Zeit sammeln. Netzvorrichtungen können auch Vorrichtungen innerhalb des Internets der Dinge umfassen, wie beispielsweise Vorrichtungen innerhalb eines Heimautomationsnetzes. Einige dieser Vorrichtungen können als Kantenvorrichtungen bezeichnet werden und können Kantenberechnungsschaltungen beinhalten. Daten können von Netzvorrichtungen direkt an die Rechenumgebung 114 oder an am Netz angeschlossene Datenspeicher, wie beispielsweise die am Netz angeschlossenen Datenspeicher 110, zur Speicherung übertragen werden, so dass die Daten später von der Rechenumgebung 114 oder anderen Teilen des Datenübertragungsnetzes 100 abgerufen werden können.
  • Das Datenübertragungsnetz 100 kann auch einen oder mehrere am Netz angeschlossenen Datenspeicher 110 umfassen. Die am Netz angeschlossenen Datenspeicher 110 werden verwendet, um Daten, die von der Rechenumgebung 114 verarbeitet werden sollen, sowie alle Zwischen- oder Enddaten, die durch das Rechensystem im nicht-flüchtigen Speicher erzeugt werden, zu speichern. In bestimmten Ausführungsformen erlaubt die Konfiguration der Rechenumgebung 114 jedoch, dass ihre Operationen durchgeführt werden, so dass Zwischen- und Enddatenergebnisse ausschließlich im flüchtigen Speicher (z. B. RAM) gespeichert werden können, ohne dass Zwischen- oder Enddatenergebnisse in nicht-flüchtigen Typen von Speicher (z. B. Festplatte) gespeichert werden müssen. Dies kann in bestimmten Situationen nützlich sein, beispielsweise wenn die Rechenumgebung 114 Ad-hoc-Abfragen von einem Benutzer empfängt und wenn Antworten, die durch eine Verarbeitung großer Mengen an Daten erzeugt werden, on-the-fly erzeugt werden müssen. In dieser nicht einschränkenden Situation kann die Rechenumgebung 114 ausgelegt sein, so dass sie die verarbeiteten Informationen innerhalb des Speichers behält, so dass Antworten für den Benutzer auf verschiedenen Detailebenen erzeugt werden können und es einem Benutzer ermöglicht wird, diese Informationen interaktiv abzufragen.
  • Am Netz angeschlossene Datenspeicher können eine Vielzahl von verschiedenen Typen von Daten speichern, die in einer Vielzahl von verschiedenen Weisen organisiert sind, und aus einer Vielzahl von verschiedenen Quellen. Beispielsweise kann ein am Netz angeschlossener Speicher einen anderen Speicher als den primären Speicher umfassen, der sich innerhalb der Rechenumgebung 114 befindet, die direkt von darin befindlichen Prozessoren zugänglich ist. Am Netz angeschlossener Datenspeicher kann unter anderem sekundären, tertiären oder Hilfsspeicher umfassen, wie beispielsweise große Festplatten, Server, virtuellen Speicher. Speichervorrichtungen können tragbare oder nicht tragbare Speichervorrichtungen, optische Speichervorrichtungen und verschiedene andere Medien umfassen, die in der Lage sind, Daten zu speichern und zu enthalten. Ein maschinenlesbares Speichermedium oder computerlesbares Speichermedium kann ein nicht-transitorisches Medium umfassen, in dem Daten gespeichert werden können und das keine Trägerwellen und/oder transitorischen elektronischen Signale umfasst. Beispiele eines nicht-transitorischen Mediums können beispielsweise eine Magnetplatte oder ein Magnetband, optische Speichermedien wie eine Compact Disk oder Digital Versatile Disk, Flash-Speicher, Speicher oder Speichervorrichtungen umfassen. Ein Computerprogrammprodukt kann Code und/oder maschinenausführbare Anweisungen umfassen, die eine Prozedur, eine Funktion, ein Unterprogramm, ein Programm, eine Routine, eine Unterroutine, ein Modul, ein Softwarepaket, eine Klasse oder eine beliebige Kombination von Anweisungen, Datenstrukturen oder Programmanweisungen repräsentieren können. Ein Codesegment kann durch Übergeben und/oder Empfangen von Informationen, Daten, Argumenten, Parameter oder Speicherinhalten mit einem anderen Codesegment oder einer Hardwareschaltung gekoppelt werden. Informationen, Argumente, Parameter, Daten usw. können über beliebige geeignete Mittel, einschließlich unter anderem Speicherfreigabe, Nachrichtenübergabe, Token-Übergabe, Netzübertragung, übergeben, weitergeleitet oder übertragen werden. Ferner können die Datenspeicher eine Vielzahl von verschiedenen Typen von Daten halten. Beispielsweise können am Netz angeschlossene Datenspeicher 110 unstrukturierte (z. B. rohe) Daten halten, wie beispielsweise Herstellungsdaten (z. B. eine Datenbank, die Datensätze enthält, die Produkte identifizieren, die mit Parameterdaten für jedes Produkt hergestellt werden, wie beispielsweise Farben und Modelle) oder Produktverkaufsdatenbanken (z. B. eine Datenbank, die einzelne Datensätze enthält, die Details von einzelnen Produktverkäufen identifizieren).
  • Die unstrukturierten Daten können der Rechenumgebung 114 in verschiedenen Formen, wie beispielsweise in einer flachen Datei oder einem Konglomerat von Datensätzen, präsentiert werden und können Datenwerte und begleitende Zeitstempel aufweisen. Die Rechenumgebung 114 kann verwendet werden, um die unstrukturierten Daten auf eine Vielzahl von Weisen zu analysieren, um die beste Weise zu bestimmen, um diese Daten (z. B. hierarchisch) zu strukturieren, so dass die strukturierten Daten für einen Typ von weiterer Analyse zugeschnitten sind, die ein Benutzer auf den Daten durchführen möchte. Beispielsweise können die unstrukturierten zeitgestempelten Daten nach dem Verarbeiten zeitlich (z. B. in tägliche Zeitperiodeneinheiten) aggregiert werden, um Zeitreihendaten zu erzeugen, und/oder hierarchisch nach einer oder mehreren Dimensionen (z. B. Parameter, Attribute und/oder Variablen) strukturiert werden. Beispielsweise können Daten in einer hierarchischen Datenstruktur, wie beispielsweise in einer ROLAP- oder MOLAP-Datenbank, gespeichert werden oder können in einer anderen tabellarischen Form gespeichert werden, wie beispielsweise in einer flachen Hierarchieform.
  • Das Datenübertragungsnetz 100 kann auch eine oder mehrere Serverfarmen 106 umfassen. Die Rechenumgebung 114 kann ausgewählte Kommunikationen oder Daten an die eine oder mehreren Serverfarmen 106 oder einen oder mehrere Server innerhalb der Serverfarmen weiterleiten. Die Serverfarmen 106 können ausgelegt sein, um Informationen in einer vorbestimmten Weise bereitzustellen. Beispielsweise können die Serverfarmen 106 auf Daten zugreifen, um sie in Reaktion auf eine Kommunikation zu senden. Die Serverfarmen 106 können separat von einer anderen Vorrichtung innerhalb des Datenübertragungsnetzes 100, wie beispielsweise der Rechenumgebung 114, untergebracht sein und/oder können Teil einer Vorrichtung oder eines Systems sein.
  • Die Serverfarmen 106 können eine Vielzahl von verschiedenen Typen von Datenverarbeitung als Teil des Datenübertragungsnetzes 100 hosten. Die Serverfarmen 106 können eine Vielzahl von unterschiedlichen Daten von Netzvorrichtungen, von der Rechenumgebung 114, vom Cloud-Netz 116 oder von anderen Quellen empfangen. Die Daten können von einem oder mehreren Sensoren als Eingaben von einer Steuerdatenbank erhalten oder gesammelt worden sein oder als Eingaben von einem externen System oder einer externen Vorrichtung empfangen worden sein. Die Serverfarmen 106 können die Verarbeitung der Daten unterstützen, indem sie basierend auf einer oder mehreren Regeln, die durch die Serverfarmen implementiert werden, Rohdaten in verarbeitete Daten umwandeln. Beispielsweise können Sensordaten analysiert werden, um Änderungen in einer Umgebung über die Zeit oder in Echtzeit zu bestimmen.
  • Das Datenübertragungsnetz 100 kann auch ein oder mehrere Cloud-Netze 116 umfassen. Das Cloud-Netz 116 kann ein Cloud-Infrastruktursystem umfassen, das Cloud-Dienste bereitstellt. In bestimmten Ausführungsformen können Dienste, die vom Cloud-Netz 116 bereitgestellt werden, eine Vielzahl von Diensten umfassen, die den Benutzern des Cloud-Infrastruktursystems auf Anforderung zur Verfügung gestellt werden. Das Cloud-Netz 116 ist in 1 als mit der Rechenumgebung 114 verbunden gezeigt (und daher mit der Rechenumgebung 114 als Client oder Benutzer), aber das Cloud-Netz 116 kann mit beliebigen der Vorrichtungen in 1 verbunden sein oder von diesen genutzt werden. Die vom Cloud-Netz bereitgestellten Dienste können dynamisch skaliert werden, um die Bedürfnisse ihrer Benutzer zu erfüllen. Das Cloud-Netz 116 kann ein(en) oder mehrere Computer, Server und/oder Systeme umfassen. In einigen Ausführungsformen unterscheiden sich die Computer, Server und/oder Systeme, die das Cloud-Netz 116 bilden, von den eigenen Computern, Servern und/oder Systemen des Benutzers vor Ort. Beispielsweise kann das Cloud-Netz 116 eine Anwendung hosten, und ein Benutzer kann über ein Kommunikationsnetz, wie beispielsweise das Internet, die Anwendung auf Anforderung bestellen und verwenden.
  • Obgleich jede Vorrichtung, jeder Server und jedes System in 1 als eine einzelne Vorrichtung gezeigt ist, versteht es sich, dass stattdessen mehrere Vorrichtungen verwendet werden können. Beispielsweise kann ein Satz von Netzvorrichtungen verwendet werden, um verschiedene Kommunikationen von einem einzelnen Benutzer zu übertragen, oder der entfernte Server 140 kann einen Serverstapel umfassen. Als ein weiteres Beispiel können Daten als Teil der Rechenumgebung 114 verarbeitet werden.
  • Jede Kommunikation innerhalb des Datenübertragungsnetzes 100 (z. B. zwischen Clientvorrichtungen, zwischen den Servern 106 und der Rechenumgebung 114 oder zwischen einem Server und einer Vorrichtung) kann über ein oder mehrere Netze 108 erfolgen. Die Netze 108 können einen oder mehrere einer Vielzahl von verschiedenen Typen von Netzen umfassen, einschließlich eines drahtlosen Netzes, eines drahtgebundenen Netzes oder einer Kombination eines drahtgebundenen und drahtlosen Netzes. Beispiele geeigneter Netze umfassen das Internet, ein Personal Area Network, ein Local Area Network (LAN), ein Wide Area Network (WAN) oder ein Wireless Local Area Network (WLAN). Ein drahtloses Netz kann eine drahtlose Schnittstelle oder eine Kombination von drahtlosen Schnittstellen umfassen. Als ein Beispiel kann ein Netz in dem einen oder den mehreren Netzen 108 einen Kurzstreckenkommunikationskanal, wie beispielsweise einen Bluetooth- oder einen Bluetooth Low Energy-Kanal, umfassen. Ein drahtgebundenes Netz kann eine drahtgebundene Schnittstelle umfassen. Die drahtgebundenen und/oder drahtlosen Netze können unter Verwendung von Routern, Zugangspunkten, Brücken, Gateways oder dergleichen implementiert werden, um Vorrichtungen im Netz 114 zu verbinden, wie weiter unter Bezugnahme auf 2 beschrieben wird. Das eine oder die mehreren Netze 108 können vollständig innerhalb eines Intranets, eines Extranets oder einer Kombination davon integriert sein oder können diese umfassen. In einer Ausführungsform können Kommunikationen zwischen zwei oder mehr Systemen und/oder Vorrichtungen durch ein sicheres Kommunikationsprotokoll, wie beispielsweise Secure Sockets Lager (SSL) oder Transport Lager Security (TLS), erreicht werden. Zusätzlich können Daten und/oder Transaktionsdetails verschlüsselt werden.
  • Einige Aspekte können das Internet der Dinge (Internet of Things, IoT) nutzen, bei dem Dinge (z. B. Maschinen, Vorrichtungen, Telefone, Sensoren) mit Netzen verbunden werden können und die Daten von diesen Dingen innerhalb der Dinge und/oder außerhalb der Dinge gesammelt und verarbeitet werden können. Beispielsweise kann das IoT Sensoren in vielen verschiedenen Vorrichtungen umfassen, und hochwertige Analysen können angewendet werden, um versteckte Beziehungen zu identifizieren und Effizienzen zu erhöhen. Dies kann sowohl für Big Data Analytics als auch für Real-Time (z. B. ESP) Analytics gelten. Dies wird weiter unten unter Bezugnahme auf 2 beschrieben.
  • Wie bereits erwähnt, kann die Rechenumgebung 114 ein Kommunikationsgitter 120 und ein Übertragungsnetzdatenbanksystem 118 umfassen. Das Kommunikationsgitter 120 kann ein gitterbasiertes Rechensystem zum Verarbeiten großer Datenmengen sein. Das Übertragungsnetzdatenbanksystem 118 kann zum Verwalten, Speichern und Abrufen von großen Datenmengen sein, die an die einen oder mehreren am Netz angeschlossenen Datenspeicher 110 oder andere Datenspeicher, die sich an verschiedenen Orten innerhalb des Übertragungsnetzdatenbanksystems 118 befinden, verteilt und darin gespeichert werden. Die Rechenknoten im gitterbasierten Rechensystem 120 und im Übertragungsnetzdatenbanksystem 118 können die gleiche Prozessorhardware, wie beispielsweise Prozessoren, die sich innerhalb der Rechenumgebung 114 befinden, gemeinsam nutzen.
  • 2 veranschaulicht ein beispielhaftes Netz, das einen beispielhaften Satz von Vorrichtungen umfasst, die miteinander über ein Austauschsystem und über ein Netz kommunizieren, gemäß Ausführungsformen der vorliegenden Technologie. Wie bereits erwähnt, kann jede Kommunikation innerhalb des Datenübertragungsnetzes 100 über ein oder mehrere Netze erfolgen. Das System 200 umfasst eine Netzvorrichtung 204, die ausgelegt ist, um mit einer Vielzahl von Typen von Clientvorrichtungen, beispielsweise den Clientvorrichtungen 230, über eine Vielzahl von Typen von Kommunikationskanälen zu kommunizieren.
  • Wie in 2 gezeigt, kann die Netzvorrichtung 204 eine Kommunikation über ein Netz (z. B. ein zellulares Netz über eine Basisstation 210) übertragen. Die Kommunikation kann über die Basisstation 210 an eine andere Netzvorrichtung, wie beispielsweise Netzvorrichtungen 205209, geleitet werden. Die Kommunikation kann auch über die Basisstation 210 an die Rechenumgebung 214 geleitet werden. Beispielsweise kann die Netzvorrichtung 204 Daten entweder aus ihrer Umgebung oder aus anderen Netzvorrichtungen (wie beispielsweise Netzvorrichtungen 205209) sammeln und diese Daten an die Rechenumgebung 214 übertragen.
  • Obwohl die Netzvorrichtungen 204209 in 2 jeweils als ein Mobiltelefon, Laptop-Computer, Tablet-Computer, Temperatursensor, Bewegungssensor und Audiosensor gezeigt sind, können die Netzvorrichtungen Sensoren sein oder diese umfassen, die gegenüber der Erkennung von Aspekten ihrer Umgebung empfindlich sind. Beispielsweise können die Netzvorrichtungen Sensoren, wie beispielsweise unter anderem Wassersensoren, Leistungssensoren, elektrische Stromsensoren, chemische Sensoren, optische Sensoren, Drucksensoren, geografische oder Positionssensoren (z. B. GPS), Geschwindigkeitssensoren, Beschleunigungssensoren, Durchflussratensensoren, umfassen. Beispiele für Eigenschaften, die erfasst werden können, umfassen unter anderem Kraft, Drehmoment, Last, Dehnung, Position, Temperatur, Luftdruck, Fluidströmung, chemische Eigenschaften, Widerstand, elektromagnetische Felder, Strahlung, Bestrahlung, Nähe, Akustik, Feuchtigkeit, Distanz, Geschwindigkeit, Vibrationen, Beschleunigung, elektrisches Potential, elektrischer Strom. Die Sensoren können an verschiedenen Komponenten angebracht sein, die als Teil einer Vielzahl von verschiedenen Typen von Systemen verwendet werden (z. B. ein Ölbohrvorgang). Die Netzvorrichtungen können Daten erkennen und aufzeichnen, die sich auf die Umgebung beziehen, die sie überwacht, und diese Daten an die Rechenumgebung 214 übertragen.
  • Wie bereits erwähnt, umfasst ein Typ von System, das verschiedene Sensoren umfassen kann, die Daten sammeln, die gemäß bestimmten Ausführungsformen verarbeitet und/oder an eine Rechenumgebung übertragen werden sollen, ein Ölbohrsystem. Beispielsweise können der eine oder die mehreren Bohrbetriebssensoren Oberflächensensoren, die eine Hakenlast, eine Fluidrate, eine Temperatur und eine Dichte in und aus dem Bohrloch, einen Standrohrdruck, ein Oberflächendrehmoment, eine Drehzahl eines Bohrrohrs, eine Vortriebsrate, eine mechanische spezifische Energie usw. messen, und Bohrlochsensoren, die eine Drehzahl einer Bohrspitze, Fluiddichten, Bohrlochdrehmoment, Bohrlochvibration (axial, tangential, lateral), ein an einer Bohrspitze angelegtes Gewicht, einen Ringdruck, einen Differentialdruck, ein Azimut, eine Neigung, einen Bohrlochknick, eine gemessene Tiefe, eine vertikale Tiefe, eine Bohrlochtemperatur usw. messen, umfassen. Neben den direkt von den Sensoren gesammelten Rohdaten können andere Daten Parameter umfassen, die entweder von den Sensoren entwickelt oder dem System durch einen Client oder eine andere Steuervorrichtung zugewiesen sind. Beispielsweise können ein oder mehrere Bohrbetriebssteuerparameter Einstellungen wie beispielsweise ein Schlammmotordrehzahl-zu-Fluss-Verhältnis, einen Bohrspitzendurchmesser, eine vorhergesagte Formationspitze, seismische Daten, Wetterdaten usw. steuern. Andere Daten können unter Verwendung von physikalischen Modellen wie beispielsweise einem Erdmodell, einem Wettermodell, einem seismischen Modell, einem Bodenlochmontagemodell, einem Bohrlochplanmodell, einem Ringreibungsmodell usw. erzeugt werden. Zusätzlich zu Sensor- und Steuereinstellungen können vorhergesagte Ausgaben von beispielsweise der Vortriebsrate, der mechanischen spezifischen Energie, der Hakenlast, der Strömung in der Fluidrate, der Ausströmungsfluidrate, des Pumpendrucks, des Oberflächendrehmoments, der Drehzahl des Bohrrohrs, des Ringdrucks, des Ringreibungsdrucks, der Ringtemperatur, der äquivalenten Zirkulationsdichte usw. auch im Data Warehouse gespeichert werden.
  • In einem anderen Beispiel umfasst ein anderer Typ von System, das verschiedene Sensoren umfassen kann, die Daten sammeln, die gemäß bestimmten Ausführungsformen verarbeitet und/oder an eine Rechenumgebung übertragen werden sollen, eine Hausautomation oder ein ähnliches automatisiertes Netz in einer anderen Umgebung, wie beispielsweise in einem Büroraum, einer Schule, einem öffentlichen Raum, einer Sportstätte oder einer Vielzahl anderer Orte. Netzvorrichtungen in einem derartigen automatisierten Netz können Netzvorrichtungen umfassen, die einem Benutzer ermöglichen, auf verschiedene Haushaltsgeräte, die sich innerhalb des Hauses des Benutzers (z. B. ein Fernsehgerät, ein Radio, ein Licht, ein Ventilator, ein Befeuchter, ein Sensor, ein Mikrowellenherd, ein Bügeleisen und/oder dergleichen) oder außerhalb des Hauses des Benutzers (z. B. Außenbewegungssensoren, Außenbeleuchtung, Garagentoröffner, Sprinkleranlagen oder dergleichen) befinden, zuzugreifen, sie zu steuern und/oder sie zu konfigurieren. Beispielsweise kann die Netzvorrichtung 102 einen Heimautomationsschalter umfassen, der mit einem Haushaltsgerät gekoppelt sein kann. In einer anderen Ausführungsform kann eine Netzvorrichtung einem Benutzer ermöglichen, auf Vorrichtungen zuzugreifen, sie zu steuern und/oder sie zu konfigurieren, wie beispielsweise bürobezogene Vorrichtungen (z. B. Kopiergerät, Drucker oder Faxgerät), audio- und/oder videobezogene Vorrichtungen (z. B. ein Receiver, ein Lautsprecher, ein Projektor, ein DVD-Player oder ein Fernsehgerät), Medienwiedergabegeräte (z. B. ein Compact-Disc-Player, ein CD-Player oder dergleichen), Rechenvorrichtungen (z. B. ein Heimcomputer, ein Laptop-Computer, ein Tablet, ein persönlicher digitaler Assistent (PDA), eine Rechenvorrichtung oder eine tragbare Vorrichtung), Beleuchtungsvorrichtungen (z. B. eine Lampe oder Einbauleuchten), Vorrichtungen, die mit einem Sicherheitssystem assoziiert sind, Vorrichtungen, die mit einem Alarmsystem assoziiert sind, Vorrichtungen, die in einem Kraftfahrzeug betrieben werden können (z. B. Funkvorrichtungen, Navigationsvorrichtungen), und/oder dergleichen. Die Daten können von derartigen verschiedenen Sensoren in Rohform gesammelt werden, oder Daten können von den Sensoren verarbeitet werden, um Parameter oder andere Daten zu erzeugen, die entweder von den Sensoren basierend auf den Rohdaten entwickelt oder dem System durch einen Client oder eine andere Steuervorrichtung zugewiesen sind.
  • In einem anderen Beispiel umfasst ein Typ von System, das verschiedene Sensoren umfassen kann, die Daten sammeln, die gemäß bestimmten Ausführungsformen verarbeitet und/oder an eine Rechenumgebung übertragen werden sollen, ein Strom- oder Energienetz. Eine Vielzahl unterschiedlicher Netzvorrichtungen können in einem Energienetz eingeschlossen sein, wie beispielsweise unter anderem verschiedene Vorrichtungen innerhalb eines oder mehrerer Kraftwerke, Energiefarmen (z. B. unter anderem Windpark, Solarpark), Energiespeichereinrichtungen, Fabriken, Häuser und Unternehmen der Verbraucher. Eine oder mehrere dieser Vorrichtungen können einen oder mehrere Sensoren umfassen, die Energieverstärkung oder -verlust, elektrische Eingabe oder Ausgabe oder Verlust und eine Vielzahl anderer Leistungsgrade erkennen. Diese Sensoren können Daten sammeln, um Benutzer darüber zu informieren, wie das Energienetz und einzelne Vorrichtungen innerhalb des Netzes funktionieren und wie sie effizienter gemacht werden können.
  • Netzvorrichtungssensoren können auch eine Verarbeitung auf Daten durchführen, die gesammelt werden, bevor die Daten an die Rechenumgebung 114 übertragen werden oder bevor entschieden wird, ob Daten an die Rechenumgebung 114 übertragen werden sollen. Beispielsweise können Netzvorrichtungen bestimmen, ob die gesammelten Daten bestimmte Regeln erfüllen, beispielsweise durch Vergleichen von Daten oder Werten, die aus den Daten berechnet wurden, und Vergleichen dieser Daten mit einem oder mehreren Schwellenwerten. Die Netzvorrichtung kann diese Daten und/oder Vergleiche verwenden, um zu bestimmen, ob die Daten zur weiteren Verwendung oder Verarbeitung an die Rechenumgebung 214 übertragen werden sollen.
  • Die Rechenumgebung 214 kann die Maschinen 220 und 240 umfassen. Obwohl die Rechenumgebung 214 in 2 mit zwei Maschinen, 220 und 240, gezeigt ist, kann die Rechenumgebung 214 nur eine Maschine oder mehr als zwei Maschinen aufweisen. Die Maschinen, die die Rechenumgebung 214 bilden, können spezialisierte Computer, Server oder andere Maschinen umfassen, die ausgelegt sind, um große Datenmengen einzeln und/oder gemeinsam zu verarbeiten. Die Rechenumgebung 214 kann auch Speichervorrichtungen umfassen, die eine oder mehrere Datenbanken von strukturierten Daten, wie beispielsweise Daten, die in einer oder mehreren Hierarchien organisiert sind, oder von unstrukturierten Daten umfassen. Die Datenbanken können mit den Verarbeitungsvorrichtungen innerhalb der Rechenumgebung 214 kommunizieren, um Daten an sie zu verteilen. Da Netzvorrichtungen Daten an die Rechenumgebung 214 übertragen können, können diese Daten von der Rechenumgebung 214 empfangen und anschließend innerhalb dieser Speichervorrichtungen gespeichert werden. Daten, die von der Rechenumgebung 214 verwendet werden, können auch in Datenspeichern 235 gespeichert werden, die auch ein Teil der Rechenumgebung 214 sein oder damit verbunden sein können.
  • Die Rechenumgebung 214 kann mit verschiedenen Vorrichtungen über einen oder mehrere Router 225 oder andere Inter-Netzwerk- oder Intra-Netzwerk-Verbindungskomponenten kommunizieren. Beispielsweise kann die Rechenumgebung 214 mit den Vorrichtungen 230 über einen oder mehrere Router 225 kommunizieren. Die Rechenumgebung 214 kann Daten von oder in Bezug auf Kommunikationen, Clientvorrichtungsoperationen, Clientregeln und/oder mit dem Benutzer assoziierten Aktionen, die in einem oder mehreren Datenspeichern 235 gespeichert sind, sammeln, analysieren und/oder speichern. Derartige Daten können das Kommunikations-Routing zu den Vorrichtungen innerhalb der Rechenumgebung 214, wie Daten innerhalb der Rechenumgebung 214 gespeichert oder verarbeitet werden sowie andere Aktionen beeinflussen.
  • Insbesondere können verschiedene andere Vorrichtungen ferner verwendet werden, um das Kommunikations-Routing und/oder die Verarbeitung zwischen Vorrichtungen innerhalb der Rechenumgebung 214 und mit Vorrichtungen außerhalb der Rechenumgebung 214 zu beeinflussen. Beispielsweise kann die Rechenumgebung 214, wie in 2 gezeigt, einen Webserver 240 umfassen. Somit kann die Rechenumgebung 214 Daten von Interesse, wie beispielsweise Clientinformationen (z. B. Produktinformationen, Clientregeln usw.), technische Produktdetails, Nachrichten, aktuelle oder vorhergesagte Wetterdaten und so weiter, abrufen.
  • Zusätzlich dazu, dass die Rechenumgebung 214 Daten sammelt (z. B. wie sie von Netzvorrichtungen, wie beispielsweise Sensoren, und Clientvorrichtungen oder anderen Quellen empfangen werden), die als Teil eines Big Data Analytics-Projekts verarbeitet werden sollen, kann sie auch Daten als Teil einer Streaming Analytics-Umgebung in Echtzeit empfangen. Wie bereits erwähnt, können Daten unter Verwendung einer Vielzahl von Quellen gesammelt werden, wie sie über verschiedene Typen von Netzen oder lokal kommuniziert werden. Derartige Daten können auf einer Echtzeit-Streaming-Basis empfangen werden. Beispielsweise können Netzvorrichtungen periodisch Daten von Netzvorrichtungssensoren empfangen, wenn die Sensoren kontinuierlich Veränderungen in ihren Umgebungen erfassen, überwachen und verfolgen. Vorrichtungen innerhalb der Rechenumgebung 214 können auch eine Voranalyse bei Daten durchführen, die empfangen werden, um zu bestimmen, ob die empfangenen Daten als Teil eines laufenden Projekts verarbeitet werden sollen. Die Daten, die von der Rechenumgebung 214 empfangen und gesammelt werden, unabhängig davon, was die Quelle oder das Verfahren oder das Timing des Empfangs ist, können über eine Zeitperiode verarbeitet werden, damit ein Client Ergebnisdaten basierend auf den Bedürfnissen und Regeln des Clients bestimmen kann.
  • 3 veranschaulicht eine Darstellung eines Konzeptmodells eines Kommunikationsprotokollsystems gemäß Ausführungsformen der vorliegenden Technologie. Insbesondere identifiziert 3 den Betrieb einer Rechenumgebung in einem Open Systems Interaction-Modell, das verschiedenen Verbindungskomponenten entspricht. Das Modell 300 zeigt beispielsweise, wie eine Rechenumgebung, wie beispielsweise die Rechenumgebung 314 (oder die Rechenumgebung 214 in 2) mit anderen Vorrichtungen in ihrem Netz kommunizieren und steuern kann, wie und unter welchen Bedingungen die Kommunikation zwischen der Rechenumgebung und anderen Vorrichtungen ausgeführt wird.
  • Das Modell kann die Schichten 302314 umfassen. Die Schichten sind in einem Stapel angeordnet. Jede Schicht im Stapel bedient die Schicht, die ein Level höher als sie liegt (mit Ausnahme der Anwendungsschicht, die die höchste Schicht ist), und wird von der Schicht bedient, die ein Level darunter liegt (mit Ausnahme der physischen Schicht, die die niedrigste Schicht ist). Die physische Schicht ist die niedrigste Schicht, da sie rohe Bytes von Daten empfängt und überträgt und die am weitesten entfernte Schicht vom Benutzer in einem Kommunikationssystem ist. Auf der anderen Seite ist die Anwendungsschicht die höchste Schicht, da sie direkt mit einer Softwareanwendung interagiert.
  • Wie bereits erwähnt, umfasst das Modell eine physische Schicht 302. Die physische Schicht 302 repräsentiert die physische Kommunikation und kann Parameter dieser physischen Kommunikation definieren. Beispielsweise kann eine derartige physische Kommunikation in Form von elektrischen, optischen oder elektromagnetischen Signalen erfolgen. Die physische Schicht 302 definiert auch Protokolle, die die Kommunikation innerhalb eines Datenübertragungsnetzes steuern können.
  • Die Verbindungsschicht 304 definiert Verbindungen und Mechanismen, die verwendet werden, um Daten über ein Netz zu übertragen (d. h. zu bewegen). Die Verbindungsschicht verwaltet die Knoten-zu-Knoten-Kommunikation, wie beispielsweise innerhalb einer Gitterrechenumgebung. Die Verbindungsschicht 304 kann Fehler erkennen und korrigieren (z. B. Übertragungsfehler in der physischen Schicht 302). Die Verbindungsschicht 304 kann auch eine Media Access Control(MAC)-Schicht und Logical Link Control(LLC)-Schicht umfassen.
  • Die Netzschicht 306 definiert das Protokoll für das Routing innerhalb eines Netzes. Mit anderen Worten koordiniert die Netzschicht die Übertragung von Daten über Knoten in einem gleichen Netz (z. B. einer Gitterrechenumgebung). Die Netzschicht 306 kann auch die Prozesse definieren, die verwendet werden, um die lokale Adressierung innerhalb des Netzes zu strukturieren.
  • Die Transportschicht 308 kann die Übertragung von Daten und die Qualität der Übertragung und/oder des Empfangs dieser Daten verwalten. Die Transportschicht 308 kann ein Protokoll zum Übertragen von Daten bereitstellen, wie beispielsweise ein Transmission Control Protocol (TCP). Die Transportschicht 308 kann Datenrahmen zur Übertragung assemblieren und disassemblieren. Die Transportschicht kann auch Übertragungsfehler erkennen, die in den darunter liegenden Schichten auftreten.
  • Die Sitzungsschicht 310 kann Kommunikationsverbindungen zwischen Vorrichtungen in einem Netz herstellen, pflegen und verwalten. Mit anderen Worten steuert die Sitzungsschicht die Dialoge oder die Art der Kommunikation zwischen Netzvorrichtungen im Netz. Die Sitzungsschicht kann auch Prüfpunktausführungs-, Vertagungs-, Beendigungs- und Neustartprozeduren festlegen.
  • Die Präsentationsschicht 312 kann eine Übersetzung für die Kommunikation zwischen den Anwendungs- und Netzschichten bereitstellen. Mit anderen Worten kann diese Schicht Daten basierend auf Datenarten und/oder Codierungen, die bekanntermaßen von einer Anwendungs- oder Netzschicht akzeptiert werden, verschlüsseln, entschlüsseln und/oder formatieren.
  • Die Anwendungsschicht 314 interagiert direkt mit Softwareanwendungen und Endbenutzern und verwaltet die Kommunikation zwischen ihnen. Die Anwendungsschicht 314 kann Ziele, Zustände oder Verfügbarkeit lokaler Ressourcen und/oder Kommunikationsinhalt oder Formatierungen unter Verwendung der Anwendungen identifizieren.
  • Die Intra-Netzwerk-Verbindungskomponenten 322 und 324 sind gezeigt, dass sie in niedrigeren Levels arbeiten, wie beispielsweise jeweils in der physischen Schicht 302 und Verbindungsschicht 304. Beispielsweise kann ein Hub in der physischen Schicht arbeiten, ein Switch kann in der physischen Schicht arbeiten und ein Router kann in der Netzschicht arbeiten. Inter-Netzwerk-Verbindungskomponenten 326 und 328 sind gezeigt, dass sie auf höheren Levels arbeiten, wie beispielsweise den Schichten 306314. Beispielsweise können Router in der Netzschicht arbeiten und Netzvorrichtungen können in den Transport-, Sitzungs-, Präsentations- und Anwendungsschichten arbeiten.
  • Wie bereits erwähnt, kann eine Rechenumgebung 314 in verschiedenen Ausführungsformen mit einer, mehreren, allen oder beliebigen der verschiedenen Schichten interagieren und/oder darauf arbeiten. Beispielsweise kann die Rechenumgebung 314 mit einem Hub (z. B. über die Verbindungsschicht) interagieren, um so anzupassen, mit welchen Vorrichtungen der Hub kommuniziert. Die physische Schicht kann durch die Verbindungsschicht bedient werden, so dass sie derartige Daten von der Verbindungsschicht implementieren kann. Beispielsweise kann die Rechenumgebung 314 steuern, von welchen Vorrichtungen sie Daten empfangen wird. Falls die Rechenumgebung 314 beispielsweise weiß, dass eine bestimmte Netzvorrichtung ausgeschaltet, defekt oder anderweitig nicht verfügbar oder unzuverlässig ist, kann die Rechenumgebung 314 den Hub anweisen, dass verhindert wird, dass irgendwelche Daten von dieser Netzvorrichtung an die Rechenumgebung 314 übertragen werden. Ein derartiger Prozess kann vorteilhaft sein, um zu vermeiden, dass Daten empfangen werden, die ungenau sind oder die durch eine ungesteuerte Umgebung beeinflusst wurden. Als weiteres Beispiel kann die Rechenumgebung 314 mit einer Brücke, einem Switch, einem Router oder einem Gateway kommunizieren und beeinflussen, welche Vorrichtung innerhalb des Systems (z. B. System 200) die Komponente als Ziel auswählt. In einigen Ausführungsformen kann die Rechenumgebung 314 mit verschiedenen Schichten interagieren, indem sie die Kommunikation durch Routing oder Modifizierung bestehender Kommunikation mit Geräten austauscht, die auf einer bestimmten Schicht arbeiten. In einer anderen Ausführungsform, wie z. B. in einer Gitterrechenumgebung, kann ein Knoten bestimmen, wie Daten innerhalb der Umgebung weitergeleitet werden sollen (z. B. welcher Knoten bestimmte Daten empfangen sollte), basierend auf bestimmten Parameter oder Informationen, die von anderen Schichten innerhalb des Modells bereitgestellt werden.
  • Wie bereits erwähnt, kann die Rechenumgebung 314 ein Teil einer Kommunikationsgitterumgebung sein, deren Kommunikation, wie im Protokoll aus 3 gezeigt, implementiert werden kann. Beispielsweise können, unter Rückbezug auf 2, eine oder mehrere der Maschinen 220 und 240 Teil einer Kommunikationsgitter-Rechenumgebung sein. Eine Gitterrechenumgebung kann in einem verteilten System mit nicht interaktiven Arbeitslasten verwendet werden, bei denen sich Daten im Speicher in den Maschinen oder Rechenknoten befinden. In einer derartigen Umgebung steuert der analytische Code anstelle eines Datenbankmanagementsystems die von den Knoten durchgeführte Verarbeitung. Die Daten werden durch Vorverteilen an die Gitterknoten gemeinsam angeordnet, und der analytische Code auf jedem Knoten lädt die lokalen Daten in den Speicher. Jedem Knoten kann eine bestimmte Aufgabe zugewiesen werden, wie beispielsweise ein Teil eines Verarbeitungsprojekts, oder um andere Knoten innerhalb des Gitters zu organisieren oder zu steuern.
  • 4 veranschaulicht ein Kommunikationsgitter-Rechensystem 400, das eine Vielzahl von Steuer- und Arbeiterknoten umfasst, gemäß Ausführungsformen der vorliegenden Technologie. Das Kommunikationsgitter-Rechensystem 400 umfasst drei Steuerknoten und einen oder mehrere Arbeiterknoten. Das Kommunikationsgitter-Rechensystem 400 umfasst die Steuerknoten 402, 404 und 406. Die Steuerknoten sind über die Kommunikationspfade 451, 453 und 455 kommunikativ verbunden. Daher können die Steuerknoten Informationen (z. B. bezogen auf das Kommunikationsgitter oder Benachrichtigungen) aneinander übertragen und Informationen voneinander empfangen. Obwohl das Kommunikationsgitter-Rechensystem 400 in 4 mit drei Steuerknoten gezeigt ist, kann das Kommunikationsgitter mehr oder weniger als drei Steuerknoten umfassen.
  • Das Kommunikationsgitter-Rechensystem (oder nur „Kommunikationsgitter”) 400 umfasst auch einen oder mehrere Arbeiterknoten. In 4 sind sechs Arbeiterknoten 410420 gezeigt. Obwohl 4 sechs Arbeiterknoten zeigt, kann ein Kommunikationsgitter gemäß Ausführungsformen der vorliegenden Technologie mehr oder weniger als sechs Arbeiterknoten umfassen. Die Anzahl von Arbeiterknoten, die in einem Kommunikationsgitter eingeschlossen sind, kann unter anderem davon abhängen, wie groß das Projekt oder der Datensatz ist, das bzw. der durch das Kommunikationsgitter verarbeitet wird, von der Kapazität jedes Arbeiterknotens, von der Zeit, die für das Kommunikationsgitter designiert ist, um das Projekt abzuschließen. Jeder Arbeiterknoten innerhalb des Kommunikationsgitters 400 kann (drahtgebunden oder drahtlos und direkt oder indirekt) mit den Steuerknoten 402406 verbunden sein. Daher kann jeder Arbeiterknoten Informationen von den Steuerknoten empfangen (z. B. eine Anweisung zum Durchführen von Arbeiten an einem Projekt) und kann Informationen an die Steuerknoten übertragen (z. B. ein Ergebnis einer Arbeit, die an einem Projekt durchgeführt wurde). Ferner können Arbeiterknoten (entweder direkt oder indirekt) miteinander kommunizieren. Beispielsweise können Arbeiterknoten Daten untereinander übertragen, die sich auf einen Auftrag, der durchgeführt wird, oder eine einzelne Aufgabe innerhalb eines Auftrags, der von diesem Arbeiterknoten durchgeführt wird, beziehen. Jedoch können in bestimmten Ausführungsformen Arbeiterknoten beispielsweise nicht mit bestimmten anderen Arbeiterknoten (kommunikativ oder anderweitig) verbunden sein. In einer Ausführungsform können Arbeiterknoten nur in der Lage sein, mit dem Steuerknoten zu kommunizieren, der sie steuert, und können möglicherweise nicht in der Lage sein, mit anderen Arbeiterknoten im Kommunikationsgitter zu kommunizieren, unabhängig davon, ob sie andere Arbeiterknoten sind, die durch den Steuerknoten gesteuert werden, der den Arbeiterknoten steuert, oder Arbeiterknoten, die von anderen Steuerknoten im Kommunikationsgitter gesteuert werden.
  • Ein Steuerknoten kann sich mit einer externen Vorrichtung verbinden, mit der der Steuerknoten kommunizieren kann (z. B. kann sich ein Gitterbenutzer, wie beispielsweise ein Server oder Computer, mit einem Controller des Gitters verbinden). Beispielsweise kann sich ein Server oder Computer mit Steuerknoten verbinden und ein Projekt oder einen Auftrag an den Knoten übertragen. Das Projekt kann einen Datensatz umfassen. Der Datensatz kann von beliebiger Größe sein. Sobald der Steuerknoten ein derartiges Projekt mit einem großen Datensatz empfängt, kann der Steuerknoten den Datensatz oder Projekte, die sich auf den Datensatz beziehen, um von Arbeiterknoten durchgeführt zu werden, verteilen. Alternativ kann der Datensatz für ein Projekt mit einem großen Datensatz von einer anderen Maschine als einem Steuerknoten (z. B. einem Hadoop-Datenknoten, der das Hadoop Distributed File System oder HDFS verwendet) empfangen oder gespeichert werden.
  • Steuerknoten können unter anderem Kenntnisse über den Status der Knoten im Gitter (d. h. Gitterstatusinformationen) beibehalten, Arbeitsanforderungen von Clients akzeptieren, die Arbeit über Arbeiterknoten aufteilen, die Arbeiterknoten koordinieren. Arbeiterknoten können Arbeitsanforderungen von einem Steuerknoten akzeptieren und dem Steuerknoten Ergebnisse der Arbeit, die durch den Arbeiterknoten durchgeführt wurde, bereitstellen. Ein Gitter kann von einem einzelnen Knoten (z. B. einer Maschine, einem Computer, einem Server usw.) gestartet werden. Dieser erste Knoten kann zugewiesen werden oder kann als der primäre Steuerknoten starten, der alle zusätzlichen Knoten steuern wird, die in das Gitter eintreten.
  • Wenn ein Projekt zur Ausführung eingereicht wird (z. B. durch einen Client oder einen Controller des Gitters), kann es einem Satz von Knoten zugewiesen werden. Nachdem die Knoten einem Projekt zugewiesen sind, kann eine Datenstruktur (d. h. ein Kommunikator) erzeugt werden. Der Kommunikator kann vom Projekt für Informationen verwendet werden, die zwischen dem auf jedem Knoten laufenden Projektcode gemeinsam genutzt werden sollen. Ein Kommunikations-Handle kann auf jedem Knoten erzeugt werden. Ein Handle ist beispielsweise ein Verweis auf den Kommunikator, der innerhalb eines einzelnen Prozesses auf einem einzelnen Knoten gültig ist, und das Handle kann verwendet werden, wenn eine Kommunikation zwischen Knoten angefordert wird.
  • Ein Steuerknoten, wie beispielsweise der Steuerknoten 402, kann als der primäre Steuerknoten bezeichnet werden. Ein Server, ein Computer oder eine andere externe Vorrichtung kann sich mit dem primären Steuerknoten verbinden. Sobald der Steuerknoten ein Projekt empfängt, kann der primäre Steuerknoten Teile des Projekts an seine Arbeiterknoten zur Ausführung verteilen. Wenn ein Projekt beispielsweise auf dem Kommunikationsgitter 400 initiiert wird, steuert der primäre Steuerknoten 402 die für das Projekt durchzuführende Arbeit, um das Projekt wie angefordert oder angewiesen abzuschließen. Der primäre Steuerknoten kann die Arbeit an die Arbeiterknoten basierend auf verschiedenen Faktoren verteilen, wie beispielsweise, welche Teilmengen oder Teile von Projekten am effizientesten und in der korrekten Zeitdauer abgeschlossen werden können. Beispielsweise kann ein Arbeiterknoten eine Analyse auf einem Teil von Daten durchführen, die bereits lokal auf dem Arbeiterknoten sind (z. B. darauf gespeichert sind). Der primäre Steuerknoten koordiniert und verarbeitet auch die Ergebnisse der Arbeit, die von jedem Arbeiterknoten durchgeführt wird, nachdem jeder Arbeiterknoten seinen Auftrag ausführt und abschließt. Beispielsweise kann der primäre Steuerknoten ein Ergebnis von einem oder mehreren Arbeiterknoten empfangen, und der Steuerknoten kann die empfangenen Ergebnisse organisieren (z. B. sammeln und assemblieren) und sie kompilieren, um ein vollständiges Ergebnis für das vom Endbenutzer empfangene Projekt zu erzeugen.
  • Alle verbleibenden Steuerknoten, wie beispielsweise die Steuerknoten 404 und 406, können als Backup-Steuerknoten für das Projekt zugewiesen werden. In einer Ausführungsform können die Backup-Steuerknoten möglicherweise keinen Teil des Projekts steuern. Stattdessen können Backup-Steuerknoten als ein Backup für den primären Steuerknoten dienen und als primärer Steuerknoten übernehmen, falls der primäre Steuerknoten ausfallen würde. Falls ein Kommunikationsgitter nur einen einzelnen Steuerknoten umfassen würde und der Steuerknoten ausfallen würde (z. B. wird der Steuerknoten abgeschaltet oder bricht), dann kann das Kommunikationsgitter als Ganzes ausfallen und ein Projekt oder Auftrag, das bzw. der auf dem Kommunikationsgitter ausgeführt wird, kann fehlschlagen und möglicherweise nicht abschließen. Obgleich das Projekt erneut ausgeführt werden kann, kann ein derartiger Fehler eine Verzögerung (schwere Verzögerung in einigen Fällen, wie beispielsweise eine Verzögerung über Nacht) beim Abschluss des Projekts verursachen. Daher kann ein Gitter mit mehreren Steuerknoten, einschließlich eines Backup-Steuerknotens, vorteilhaft sein.
  • Um dem Gitter einen anderen Knoten oder eine andere Maschine hinzuzufügen, kann der primäre Steuerknoten beispielsweise ein Paar von Listening Sockets öffnen. Ein Socket kann verwendet werden, um Arbeitsanforderungen von Clients zu akzeptieren, und das zweite Socket kann verwendet werden, um Verbindungen von anderen Gitterknoten zu akzeptieren. Der primäre Steuerknoten kann mit einer Liste von anderen Knoten (z. B. anderen Maschinen, Computer, Servern), die im Gitter teilnehmen werden, und der Rolle, die jeder Knoten im Gitter ausfüllen wird, bereitgestellt sein. Beim Start des primären Steuerknotens (z. B. des ersten Knotens im Gitter) kann der primäre Steuerknoten ein Netzprotokoll verwenden, um den Serverprozess auf jedem anderen Knoten im Gitter zu starten. Befehlszeilenparameter können beispielsweise jeden Knoten über einen oder mehrere Informationsteile informieren, wie beispielsweise: unter anderem die Rolle, die der Knoten im Gitter haben wird, den Hostnamen des primären Steuerknotens, die Portnummer, auf der der primäre Steuerknoten Verbindungen von Peer-Knoten akzeptiert. Die Informationen können auch in einer Konfigurationsdatei bereitgestellt werden, über einen sicheren Shell-Tunnel übertragen werden, von einem Konfigurationsserver wiederhergestellt werden, unter anderem. Obgleich die anderen Maschinen im Gitter zunächst nichts über die Konfiguration des Gitters wissen können, können diese Informationen auch durch den primären Steuerknoten an einen anderen Knoten gesendet werden. Aktualisierungen der Gitterinformationen können auch anschließend an diese Knoten gesendet werden.
  • Für jeden anderen Steuerknoten als den primären Steuerknoten, der dem Gitter hinzugefügt ist, kann der Steuerknoten drei Sockets öffnen. Das erste Socket kann Arbeitsanforderungen von Clients akzeptieren, das zweite Socket kann Verbindungen von anderen Gitterelementen akzeptieren, und das dritte Socket kann sich mit dem primären Steuerknoten (z. B. permanent) verbinden. Wenn ein Steuerknoten (z. B. ein primärer Steuerknoten) eine Verbindung von einem anderen Steuerknoten empfängt, prüft er zuerst, ob sich der Peer-Knoten in der Liste der konfigurierten Knoten im Gitter befindet. Falls er sich nicht in der Liste befindet, kann der Steuerknoten die Verbindung löschen. Falls er sich in der Liste befindet, kann er dann versuchen, die Verbindung zu authentifizieren. Falls die Authentifizierung erfolgreich ist, kann der Authentifizierungsknoten Informationen an seinen Peer senden, wie beispielsweise die Portnummer, auf der ein Knoten auf Verbindungen hört, den Hostnamen des Knotens, Informationen über die Authentifizierung des Knotens und andere Informationen. Wenn ein Knoten, wie beispielsweise der neue Steuerknoten, Informationen über einen anderen aktiven Knoten empfängt, wird geprüft, ob er bereits eine Verbindung zu diesem anderen Knoten hat. Falls er keine Verbindung zu diesem Knoten hat, kann er dann eine Verbindung zu diesem Steuerknoten herstellen.
  • Jeder Arbeiterknoten, der dem Gitter hinzugefügt wird, kann eine Verbindung zum primären Steuerknoten und beliebigen anderen Steuerknoten auf dem Gitter herstellen. Nach dem Herstellen der Verbindung kann er sich selbst gegenüber dem Gitter authentifizieren (z. B. gegenüber beliebigen Steuerknoten, einschließlich sowohl primären als auch Backups, oder einem Server oder Benutzer, der das Gitter steuert). Nach erfolgreicher Authentifizierung kann der Arbeiterknoten Konfigurationsinformationen vom Steuerknoten akzeptieren.
  • Wenn sich ein Knoten mit einem Kommunikationsgitter verbindet (z. B. wenn der Knoten eingeschaltet wird oder mit einem bestehenden Knoten auf dem Gitter oder mit beiden verbunden wird), wird dem Knoten (z. B. durch ein Betriebssystem des Gitters) eine universell eindeutige Kennung (Universally Unique Identifier, UUID) zugewiesen. Diese eindeutige Kennung kann anderen Knoten und externen Entitäten (Vorrichtungen, Benutzern usw.) helfen, den Knoten zu identifizieren und von anderen Knoten zu unterscheiden. Wenn ein Knoten mit dem Gitter verbunden ist, kann der Knoten seine eindeutige Kennung mit den anderen Knoten im Gitter teilen. Da jeder Knoten seine eindeutige Kennung teilen kann, kann jeder Knoten die eindeutige Kennung jedes anderen Knotens auf dem Gitter kennen. Eindeutige Kennungen können auch eine Hierarchie von jedem der Knoten (z. B. Backup-Steuerknoten) innerhalb des Gitters designieren. Beispielsweise können die eindeutigen Kennungen von jedem der Backup-Steuerknoten in einer Liste von Backup-Steuerknoten gespeichert werden, um eine Reihenfolge anzugeben, in der die Backup-Steuerknoten für einen ausgefallenen primären Steuerknoten übernehmen, um ein neuer primärer Steuerknoten zu werden. Jedoch kann eine Hierarchie von Knoten auch unter Verwendung von anderen Verfahren als der Verwendung der eindeutigen Kennungen der Knoten bestimmt werden. Beispielsweise kann die Hierarchie vorbestimmt sein oder basierend auf anderen vorbestimmten Faktoren zugewiesen werden.
  • Das Gitter kann zu jedem beliebigen Zeitpunkt neue Maschinen hinzufügen (z. B. von einem beliebigen Steuerknoten initiiert). Nach dem Hinzufügen eines neuen Knotens zum Gitter kann der Steuerknoten zuerst den neuen Knoten zu seiner Tabelle von Gitterknoten hinzufügen. Der Steuerknoten kann dann auch jeden anderen Steuerknoten über den neuen Knoten benachrichtigen. Die Knoten, die die Benachrichtigung empfangen, können bestätigen, dass sie ihre Konfigurationsinformationen aktualisiert haben.
  • Der primäre Steuerknoten 402 kann beispielsweise eine oder mehrere Kommunikationen an die Backup-Steuerknoten 404 und 406 (und beispielsweise an andere Steuer- oder Arbeiterknoten innerhalb des Kommunikationsgitters) übertragen. Derartige Kommunikationen können periodisch in festen Zeitintervallen zwischen bekannten festen Stufen der Ausführung des Projekts gesendet werden, unter anderen Protokollen. Die vom primären Steuerknoten 402 übertragenen Kommunikationen können verschiedene Typen aufweisen und können eine Vielzahl von Informationsarten umfassen. Beispielsweise kann der primäre Steuerknoten 402 Schnappschüsse (z. B. Statusinformationen) des Kommunikationsgitters übertragen, so dass der Backup-Steuerknoten 404 immer einen letzten Schnappschuss des Kommunikationsgitters aufweist. Der Schnappschuss oder Gitterstatus kann beispielsweise die Struktur des Gitters (einschließlich beispielsweise der Arbeiterknoten im Gitter, der eindeutigen Kennungen der Knoten oder ihrer Beziehungen mit dem primären Steuerknoten) und den Status eines Projekts (z. B. den Status des Teils des Projekts von jedem Arbeiterknoten) umfassen. Der Schnappschuss kann auch Analysen oder Ergebnisse umfassen, die von Arbeiterknoten im Kommunikationsgitter empfangen werden. Die Backup-Steuerknoten können die vom primären Steuerknoten empfangenen Backup-Daten empfangen und speichern. Die Backup-Steuerknoten können eine Anforderung für einen derartigen Schnappschuss (oder andere Informationen) vom primären Steuerknoten übertragen, oder der primäre Steuerknoten kann derartige Informationen periodisch an die Backup-Steuerknoten senden.
  • Wie bereits erwähnt, können die Backup-Daten dem Backup-Steuerknoten ermöglichen, als primärer Steuerknoten zu übernehmen, falls der primäre Steuerknoten ausfällt, ohne dass das Gitter das Projekt von vorne starten muss. Falls der primäre Steuerknoten ausfällt, kann der Backup-Steuerknoten, der als primärer Steuerknoten übernehmen wird, die aktuellste Version des vom primären Steuerknoten empfangenen Schnappschusses abrufen und den Schnappschuss verwenden, um das Projekt von der Stufe des Projekts fortzusetzen, die durch die Backup-Daten angezeigt wird. Dies kann ein Fehlschlagen des Projekts als Ganzes verhindern.
  • Ein Backup-Steuerknoten kann verschiedene Verfahren verwenden, um zu bestimmen, dass der primäre Steuerknoten ausgefallen ist. In einem Beispiel eines derartigen Verfahrens kann der primäre Steuerknoten eine Kommunikation an den Backup-Steuerknoten (z. B. periodisch) senden, die anzeigt, dass der primäre Steuerknoten funktioniert und nicht ausgefallen ist, wie beispielsweise eine Heartbeat-Kommunikation. Der Backup-Steuerknoten kann bestimmen, dass der primäre Steuerknoten ausgefallen ist, falls der Backup-Steuerknoten eine bestimmte vorbestimmte Zeitperiode lang keine Heartbeat-Kommunikation empfangen hat. Alternativ kann ein Backup-Steuerknoten auch eine Kommunikation vom primären Steuerknoten selbst (bevor er ausfiel) oder von einem Arbeiterknoten empfangen, dass der primäre Steuerknoten ausgefallen ist, beispielsweise da der primäre Steuerknoten nicht mit dem Arbeiterknoten kommuniziert hat.
  • Es können verschiedene Verfahren durchgeführt werden, um zu bestimmen, welcher Backup-Steuerknoten eines Satzes von Backup-Steuerknoten (z. B. Backup-Steuerknoten 404 und 406) für den ausgefallenen primären Steuerknoten 402 übernehmen wird und der neue primäre Steuerknoten wird. Beispielsweise kann der neue primäre Steuerknoten basierend auf einer Rangfolge oder „Hierarchie” von Backup-Steuerknoten basierend auf ihren eindeutigen Kennungen ausgewählt werden. In einer alternativen Ausführungsform kann ein Backup-Steuerknoten durch eine andere Vorrichtung im Kommunikationsgitter oder von einer externen Vorrichtung (z. B. einer Systeminfrastruktur oder einem Endbenutzer, wie beispielsweise einem Server oder Computer, der das Kommunikationsgitter steuert) als der neue primäre Steuerknoten zugewiesen werden. In einer anderen alternativen Ausführungsform kann der Backup-Steuerknoten, der als der neue primäre Steuerknoten übernimmt, basierend auf Bandbreite oder anderen Statistiken über das Kommunikationsgitter designiert werden.
  • Ein Arbeiterknoten innerhalb des Kommunikationsgitters kann auch ausfallen. Falls ein Arbeiterknoten ausfällt, kann die Arbeit, die vom ausgefallenen Arbeiterknoten durchgeführt wird, unter den betriebsfähigen Arbeiterknoten neu verteilt werden. In einer alternativen Ausführungsform kann der primäre Steuerknoten eine Kommunikation an jeden der betriebsfähigen Arbeiterknoten übertragen, die sich noch auf dem Kommunikationsgitter befinden, dass jeder der Arbeiterknoten auch absichtlich ausfallen sollte. Nachdem alle Arbeiterknoten ausfallen, können sie jeweils den zuletzt gespeicherten Prüfpunkt ihres Status abrufen und das Projekt von diesem Prüfpunkt neu starten, um den verlorenen Fortschritt des ausgeführten Projekts zu minimieren.
  • 5 veranschaulicht ein Flussdiagramm, das einen beispielhaften Prozess zum Anpassen eines Kommunikationsgitters oder eines Arbeitsprojekts in einem Kommunikationsgitter nach einem Ausfall eines Knotens zeigt, gemäß Ausführungsformen der vorliegenden Technologie. Der Prozess kann beispielsweise das Empfangen von Gitterstatusinformationen, einschließlich eines Projektstatus eines Teils eines Projekts, das von einem Knoten im Kommunikationsgitter ausgeführt wird, umfassen, wie im Vorgang 502 beschrieben. Beispielsweise kann ein Steuerknoten (z. B. ein Backup-Steuerknoten, der mit einem primären Steuerknoten und einem Arbeiterknoten auf einem Kommunikationsgitter verbunden ist) Gitterstatusinformationen empfangen, wobei die Gitterstatusinformationen einen Projektstatus des primären Steuerknotens oder einen Projektstatus des Arbeiterknotens umfassen. Der Projektstatus des primären Steuerknotens und der Projektstatus des Arbeiterknotens können einen Status von einem oder mehreren Teilen eines Projekts umfassen, das von den primären Knoten und Arbeiterknoten im Kommunikationsgitter ausgeführt wird. Der Prozess kann auch das Speichern der Gitterstatusinformationen umfassen, wie im Vorgang 504 beschrieben. Beispielsweise kann ein Steuerknoten (z. B. ein Backup-Steuerknoten) die empfangenen Gitterstatusinformationen lokal innerhalb des Steuerknotens speichern. Alternativ können die Gitterstatusinformationen an eine andere Vorrichtung zum Speichern gesendet werden, wo der Steuerknoten Zugriff auf die Informationen haben kann.
  • Der Prozess kann im Vorgang 506 auch das Empfangen einer Fehlerkommunikation umfassen, die einem Knoten im Kommunikationsgitter entspricht. Beispielsweise kann ein Knoten eine Fehlerkommunikation empfangen, die eine Anzeige umfasst, dass der primäre Steuerknoten ausgefallen ist, wodurch ein Backup-Steuerknoten aufgefordert wird, für den primären Steuerknoten zu übernehmen. In einer alternativen Ausführungsform kann ein Knoten einen Fehler empfangen, dass ein Arbeiterknoten ausgefallen ist, wodurch ein Steuerknoten aufgefordert wird, die vom Arbeiterknoten durchgeführte Arbeit neu zuzuweisen. Der Prozess kann auch das Neuzuweisen eines Knotens oder eines Teils des Projekts umfassen, das durch den ausgefallenen Knoten ausgeführt wird, wie im Vorgang 508 beschrieben. Beispielsweise kann ein Steuerknoten den Backup-Steuerknoten als einen neuen primären Steuerknoten basierend auf der Fehlerkommunikation nach dem Empfangen der Fehlerkommunikation designieren. Falls der ausgefallene Knoten ein Arbeiterknoten ist, kann ein Steuerknoten einen Projektstatus des ausgefallenen Arbeiterknotens unter Verwendung des Schnappschusses des Kommunikationsgitters identifizieren, wobei der Projektstatus des ausgefallenen Arbeiterknotens einen Status eines Teils des Teils des Projekts umfasst, das vom ausgefallenen Arbeiterknoten zur Ausfallzeit ausgeführt wird.
  • Der Prozess kann auch das Empfangen von aktualisierten Gitterstatusinformationen basierend auf der Neuzuweisung, wie im Vorgang 510 beschrieben, und das Übertragen eines Satzes von Anweisungen basierend auf den aktualisierten Gitterstatusinformationen an einen oder mehrere Knoten im Kommunikationsgitter, wie im Vorgang 512 beschrieben, umfassen. Die aktualisierten Gitterstatusinformationen können einen aktualisierten Projektstatus des primären Steuerknotens oder einen aktualisierten Projektstatus des Arbeiterknotens umfassen. Die aktualisierten Informationen können an die anderen Knoten im Gitter übertragen werden, um ihre verfallenen gespeicherten Informationen zu aktualisieren.
  • 6 veranschaulicht einen Teil eines Kommunikationsgitter-Rechensystems 600, das einen Steuerknoten und einen Arbeiterknoten umfasst, gemäß Ausführungsformen der vorliegenden Technologie. Das Kommunikationsgitter-Rechensystem 600 umfasst zum Zwecke der Veranschaulichung einen Steuerknoten (Steuerknoten 602) und einen Arbeiterknoten (Arbeiterknoten 610), kann aber auch mehr Arbeiter- und/oder Steuerknoten umfassen. Der Steuerknoten 602 ist über den Kommunikationspfad 650 kommunikativ mit dem Arbeiterknoten 610 verbunden. Daher kann der Steuerknoten 602 Informationen (z. B. bezogen auf das Kommunikationsgitter oder Benachrichtigungen) über den Pfad 650 an den Arbeiterknoten 610 übertragen und Informationen von ihm empfangen.
  • Ähnlich wie in 4 umfasst das Kommunikationsgitter-Rechensystem (oder nur „Kommunikationsgitter”) 600 Datenverarbeitungsknoten (Steuerknoten 602 und Arbeiterknoten 610). Die Knoten 602 und 610 umfassen Multikerndatenprozessoren. Jeder Knoten 602 und 610 umfasst eine gitterfähige Softwarekomponente (Grid-Enabled Software Component, GESC) 620, die auf dem Datenknoten ausgeführt wird, der mit diesem Knoten assoziiert ist, und über eine Schnittstelle mit dem Pufferspeicher 622, der auch mit diesem Knoten assoziiert ist, verbunden ist. Jeder Knoten 602 und 610 umfasst eine Datenbankmanagementsoftware (DBMS) 628, die auf einem Datenbankserver (nicht gezeigt) am Steuerknoten 602 und auf einem Datenbankserver (nicht gezeigt) am Arbeiterknoten 610 ausgeführt wird.
  • Jeder Knoten umfasst auch einen Datenspeicher 624. Die Datenspeicher 624, ähnlich den am Netz angeschlossenen Datenspeichern 110 in 1 und Datenspeichern 235 in 2, werden verwendet, um Daten zu speichern, die von den Knoten in der Rechenumgebung verarbeitet werden sollen. Die Datenspeicher 624 können auch beliebige Zwischen- oder Enddaten speichern, die durch das Rechensystem erzeugt werden, nachdem sie verarbeitet worden sind, beispielsweise in nicht-flüchtigem Speicher. In bestimmten Ausführungsformen erlaubt die Konfiguration der Gitterrechenumgebung jedoch, dass ihre Operationen durchgeführt werden, so dass Zwischen- und Enddatenergebnisse ausschließlich im flüchtigen Speicher (z. B. RAM) gespeichert werden können, ohne dass Zwischen- oder Enddatenergebnisse in nichtflüchtigen Typen von Speicher gespeichert werden müssen. Das Speichern derartiger Daten in flüchtigem Speicher kann in bestimmten Situationen nützlich sein, beispielsweise wenn das Gitter Abfragen (z. B. ad hoc) von einem Client empfängt und wenn Antworten, die durch eine Verarbeitung großer Mengen an Daten erzeugt werden, schnell oder on-the-fly erzeugt werden müssen. In einer derartigen Situation kann das Gitter ausgelegt sein, um die Daten innerhalb des Speichers zu behalten, so dass Antworten auf verschiedenen Detailebenen erzeugt werden können und so dass ein Client diese Informationen interaktiv abfragen kann.
  • Jeder Knoten umfasst auch eine benutzerdefinierte Funktion (User-Defined Functionq, UDF) 626. Die UDF stellt einen Mechanismus für das DBMS 628 bereit, um Daten an die Datenbank zu übertragen oder von ihr zu empfangen, die in den Datenspeichern 624 gespeichert ist, die vom DBMS verwaltet werden. Beispielsweise kann die UDF 626 vom DBMS aufgerufen werden, um der GESC Daten zur Verarbeitung bereitzustellen. Die UDF 626 kann eine Socket-Verbindung (nicht gezeigt) mit der GESC herstellen, um die Daten zu übertragen. Alternativ kann die UDF 626 Daten an die GESC übertragen, indem Daten in gemeinsam genutzten Speicher geschrieben werden, auf den sowohl von der UDF als auch von der GESC zugegriffen werden kann.
  • Die GESC 620 an den Knoten 602 und 620 kann über ein Netz, wie beispielsweise das in 1 gezeigte Netz 108, verbunden sein. Daher können die Knoten 602 und 620 über das Netz unter Verwendung eines vorbestimmten Kommunikationsprotokolls, wie beispielsweise das Message Passing Interface (MPI), miteinander kommunizieren. Jede GESC 620 kann sich an einer Punkt-zu-Punkt-Kommunikation mit der GESC an einem anderen Knoten oder an einer kollektiven Kommunikation mit mehreren GESCs über das Netz beteiligen. Die GESC 620 an jedem Knoten kann identische (oder nahezu identische) Softwareanweisungen enthalten. Jeder Knoten kann in der Lage sein, entweder als ein Steuerknoten oder ein Arbeiterknoten zu arbeiten. Die GESC am Steuerknoten 602 kann über einen Kommunikationspfad 652 mit einer Clientvorrichtung 630 kommunizieren. Insbesondere kann der Steuerknoten 602 mit der Clientanwendung 632 kommunizieren, die von der Clientvorrichtung 630 gehostet wird, um Abfragen zu empfangen und auf diese Abfragen zu antworten, nachdem große Datenmengen verarbeitet wurden.
  • Das DBMS 628 kann die Erstellung, Pflege und Verwendung der Datenbank- oder Datenstruktur (nicht gezeigt) innerhalb eines Knotens 602 oder 610 steuern. Die Datenbank kann in den Datenspeichern 624 gespeicherte Daten organisieren. Das DBMS 628 am Steuerknoten 602 kann Anforderungen für Daten akzeptieren und die entsprechenden Daten für die Anforderung übertragen. Bei einem derartigen Prozess können Datensammlungen über mehrere physische Orte verteilt werden. In diesem Beispiel speichert jeder Knoten 602 und 610 einen Teil der Gesamtdaten, die vom Managementsystem verwaltet werden, in seinem assoziierten Datenspeicher 624.
  • Ferner kann das DBMS für den Schutz vor Datenverlust unter Verwendung von Replikationstechniken verantwortlich sein. Die Replikation umfasst das Bereitstellen einer Backup-Kopie von Daten, die auf einem Knoten oder auf einem oder mehreren anderen Knoten gespeichert sind. Falls daher ein Knoten ausfällt, können die Daten vom ausgefallenen Knoten von einer replizierten Kopie, die sich an einem anderen Knoten befindet, wiederhergestellt werden. Jedoch können, wie hierin mit Bezug auf 4 beschrieben, Daten oder Statusinformationen für jeden Knoten im Kommunikationsgitter auch mit jedem Knoten auf dem Gitter geteilt werden.
  • 7 veranschaulicht ein Flussdiagramm, das ein beispielhaftes Verfahren zum Ausführen eines Projekts innerhalb eines Gitterrechensystems zeigt, gemäß Ausführungsformen der vorliegenden Technologie. Wie unter Bezugnahme auf 6 gezeigt, kann die GESC am Steuerknoten Daten mit einer Clientvorrichtung (z. B. Clientvorrichtung 630) übertragen, um Abfragen zum Ausführen eines Projekts zu empfangen und auf diese Abfragen zu antworten, nachdem große Datenmengen verarbeitet worden sind. Die Abfrage kann an den Steuerknoten übertragen werden, wobei die Abfrage eine Anforderung zum Ausführen eines Projekts umfassen kann, wie im Vorgang 702 beschrieben. Die Abfrage kann Anweisungen über den Typ der Datenanalyse enthalten, die im Projekt durchgeführt werden soll, und ob das Projekt unter Verwendung der gitterbasierten Rechenumgebung ausgeführt werden sollte, wie im Vorgang 704 gezeigt.
  • Um das Projekt zu initiieren, kann der Steuerknoten bestimmen, ob die Abfrage die Verwendung der gitterbasierten Rechenumgebung zur Ausführung des Projekts anfordert. Falls die Bestimmung nein ist, initiiert der Steuerknoten die Ausführung des Projekts in einer Soloumgebung (z. B. am Steuerknoten), wie im Vorgang 710 beschrieben. Falls die Bestimmung ja ist, kann der Steuerknoten die Ausführung des Projekts in der gitterbasierten Rechenumgebung initiieren, wie im Vorgang 706 beschrieben. In einer derartigen Situation kann die Anforderung eine angeforderte Konfiguration des Gitters umfassen. Beispielsweise kann die Anforderung eine Anzahl von Steuerknoten und eine Anzahl von Arbeiterknoten umfassen, die im Gitter verwendet werden sollen, wenn das Projekt ausgeführt wird. Nachdem das Projekt abgeschlossen wurde, kann der Steuerknoten die Ergebnisse der Analyse übertragen, die durch das Gitter geliefert werden, wie im Vorgang 708 beschrieben. Egal ob das Projekt in einer Solo- oder gitterbasierten Umgebung ausgeführt wird, stellt der Steuerknoten die Ergebnisse des Projekts bereit.
  • Wie unter Bezugnahme auf 2 bereits erwähnt, können die hierin beschriebenen Rechenumgebungen Daten sammeln (z. B. wie sie von Netzvorrichtungen empfangen werden, wie beispielsweise Sensoren, wie beispielsweise Netzvorrichtungen 204209 in 2 und Clientvorrichtungen oder anderen Quellen), die als Teil eines Data Analytics-Projekts verarbeitet werden sollen, und Daten können in Echtzeit als Teil einer Streaming Analytics-Umgebung (z. B. ESP) empfangen werden. Die Daten können unter Verwendung einer Vielzahl von Quellen gesammelt werden, wie sie über verschiedene Typen von Netzen oder lokal, wie beispielsweise auf einer Echtzeit-Streaming-Basis, kommuniziert werden. Beispielsweise können Netzvorrichtungen periodisch Daten von Netzvorrichtungssensoren empfangen, wenn die Sensoren kontinuierlich Veränderungen in ihren Umgebungen erfassen, überwachen und verfolgen. Insbesondere entwickeln oder erzeugen eine zunehmende Anzahl von verteilten Anwendungen kontinuierlich fließende Daten von verteilten Quellen durch Anwenden von Abfragen auf die Daten, bevor die Daten an geografisch verteilte Empfänger verteilt werden. Eine Ereignisstromverarbeitungs-Engine (Event Stream Processing Engine, ESPE) kann die Abfragen kontinuierlich auf die Daten anwenden, wenn sie empfangen werden, und bestimmt, welche Entitäten die Daten empfangen sollen. Client- oder andere Vorrichtungen können auch die ESPE oder andere Vorrichtungen abonnieren, die ESP-Daten verarbeiten, so dass sie nach der Verarbeitung Daten empfangen können, basierend auf beispielsweise den von der Verarbeitungs-Engine bestimmten Entitäten. Beispielsweise können die Clientvorrichtungen 230 in 2 die ESPE in der Rechenumgebung 214 abonnieren. In einem anderen Beispiel können die Ereignis-Subscribing-Vorrichtungen 874a–c, die unter Bezugnahme auf 10 weiter beschrieben werden, auch die ESPE abonnieren. Die ESPE kann bestimmen oder definieren, wie Eingabedaten oder Ereignisströme von Netzvorrichtungen oder anderen Publishern (z. B. Netzvorrichtungen 204209 in 2) in bedeutungsvolle Ausgabedaten umgewandelt werden, die von Subscribern, wie beispielsweise den Clientvorrichtungen 230 in 2, verbraucht werden sollen.
  • 8 veranschaulicht ein Blockschaltbild, das Komponenten einer Ereignisstromverarbeitungs-Engine (Event Stream Processing Engine, ESPE) umfasst, gemäß Ausführungsformen der vorliegenden Technologie. Die ESPE 800 kann ein oder mehrere Projekte 802 umfassen. Ein Projekt kann als ein Container des zweiten Levels in einem von der ESPE 800 verwalteten Engine-Modell beschrieben werden, wobei eine Threadpool-Größe für das Projekt von einem Benutzer definiert werden kann. Jedes Projekt des einen oder der mehreren Projekte 802 kann eine oder mehrere kontinuierliche Abfragen 804 umfassen, die Datenströme enthalten, die Datenumwandlungen von eingehenden Ereignisströmen sind. Die eine oder mehreren kontinuierlichen Abfragen 804 können ein oder mehrere Quellfenster 806 und ein oder mehrere abgeleitete Fenster 808 umfassen.
  • Die ESPE kann Streaming-Daten über eine Zeitperiode empfangen, die sich auf bestimmte Ereignisse bezieht, wie beispielsweise Ereignisse oder andere Daten, die von einer oder mehreren Netzvorrichtungen erfasst werden. Die ESPE kann Operationen durchführen, die mit Verarbeitungsdaten assoziiert sind, die durch die eine oder mehreren Vorrichtungen erzeugt werden. Beispielsweise kann die ESPE Daten von der einen oder den mehreren Netzvorrichtungen 204209 empfangen, die in 2 gezeigt sind. Wie bereits erwähnt, können die Netzvorrichtungen Sensoren umfassen, die unterschiedliche Aspekte ihrer Umgebungen erfassen, und können Daten über die Zeit basierend auf diesen erfassten Beobachtungen sammeln. Beispielsweise kann die ESPE innerhalb einer oder mehrerer der Maschinen 220 und 240, die in 2 gezeigt sind, implementiert werden. Die ESPE kann innerhalb einer derartigen Maschine durch eine ESP-Anwendung implementiert werden. Eine ESP-Anwendung kann eine ESPE mit ihrem eigenen dedizierten Threadpool oder Threadpools in ihren Anwendungsbereich einbetten, in dem der Hauptanwendungs-Thread anwendungsspezifische Arbeit ausführen kann und die ESPE Ereignisströme wenigstens durch Erstellen einer Instanz eines Modells in Verarbeitungsobjekte verarbeitet. Der Engine-Container ist der Top-Level-Container in einem Modell, das die Ressourcen des einen oder der mehreren Projekte 802 verwaltet. In einer veranschaulichenden Ausführungsform kann beispielsweise nur eine ESPE 800 für jede Instanz der ESP-Anwendung vorhanden sein, und die ESPE 800 kann einen eindeutigen Engine-Namen aufweisen. Zusätzlich können das eine oder die mehreren Projekte 802 jeweils eindeutige Projektnamen aufweisen, und jede Abfrage kann einen eindeutigen Continuous-Query-Namen aufweisen und mit einem eindeutig benannten Quellfenster des einen oder der mehreren Quellfenster 806 beginnen. Die ESPE 800 kann persistent sein oder nicht.
  • Die Continuous-Query-Modellierung beinhaltet das Definieren von gerichteten Graphen von Fenstern für die Ereignisstrommanipulation und -transformation. Ein Fenster im Kontext der Ereignisstrommanipulation und -transformation ist ein Verarbeitungsknoten in einem Ereignisstromverarbeitungsmodell. Ein Fenster in einer kontinuierlichen Abfrage kann Aggregationen, Berechnungen, Musteranpassungen und andere Operationen auf Daten durchführen, die durch das Fenster fließen. Eine kontinuierliche Abfrage kann als ein gerichteter Graph von Quell-, relationalen, Musteranpassungs- und prozeduralen Fenstern beschrieben werden. Das eine oder die mehreren Quellfenster 806 und das eine oder die mehreren abgeleiteten Fenster 808 repräsentieren das kontinuierliche Ausführen von Abfragen, die Aktualisierungen zu einem Abfrageergebnissatz erzeugen, wenn neue Ereignisblöcke durch die ESPE 800 streamen. Ein gerichteter Graph ist beispielsweise ein Satz von Knoten, die durch Kanten verbunden sind, wobei die Kanten eine mit ihnen assoziierte Richtung aufweisen.
  • Ein Ereignisobjekt kann als ein Paket von Daten beschrieben werden, die als eine Sammlung von Feldern zugänglich sind, wobei wenigstens eines der Felder als Schlüssel oder eindeutige Kennung (Identifier, ID) definiert ist. Das Ereignisobjekt kann unter Verwendung einer Vielzahl von Formaten, einschließlich binär, alphanumerisch, XML usw., erstellt werden. Jedes Ereignisobjekt kann ein oder mehrere Felder umfassen, die als primäre Kennung (Identifier, ID) für das Ereignis designiert werden, so dass die ESPE 800 Operationscodes (Opcodes) für Ereignisse, einschließlich Insert, Update, Upsert und Delete, unterstützen kann. Upsert-Opcodes aktualisieren das Ereignis, wenn das Schlüsselfeld bereits vorhanden ist; andernfalls wird das Ereignis eingefügt. Zur Veranschaulichung kann ein Ereignisobjekt eine gepackte binäre Darstellung eines Satzes von Feldwerten sein und sowohl Metadaten als auch Felddaten umfassen, die mit einem Ereignis assoziiert sind. Die Metadaten können einen Opcode, der angibt, ob das Ereignis ein Insert, Update, Delete oder Upsert repräsentiert, einen Satz von Flags, der angibt, ob das Ereignis ein normales, teilweises aktualisiertes oder ein von einer Retention erzeugtes Ereignis aus dem Retention Policy Management ist, und einen Satz von Mikrosekunden-Zeitstempeln, die für Latenzmessungen verwendet werden können, umfassen.
  • Ein Ereignisblockobjekt kann als Gruppierung oder Paket von Ereignisobjekten beschrieben werden. Ein Ereignisstrom kann als ein Fluss von Ereignisblockobjekten beschrieben werden. Eine kontinuierliche Abfrage der einen oder mehreren kontinuierlichen Abfragen 804 wandelt einen Quellereignisstrom, der aus Streaming-Ereignisblockobjekten besteht, die in der ESPE 800 herausgegeben werden, in einen oder mehrere Ausgabeereignisströme unter Verwendung des einen oder der mehreren Quellfenster 806 und des einen oder der mehreren abgeleiteten Fenster 808 um. Eine kontinuierliche Abfrage kann auch als Datenflussmodellierung betrachtet werden.
  • Das eine oder die mehreren Quellfenster 806 befinden sich oben am gerichteten Graphen und weisen keine Fenster auf, die in sie eingeführt werden. Ereignisströme werden in das eine oder die mehreren Quellfenster 806 herausgegeben, und von dort aus können die Ereignisströme auf den nächsten Satz von verbundenen Fenstern gerichtet werden, wie durch den gerichteten Graphen definiert. Das eine oder die mehreren abgeleiteten Fenster 808 sind alle instanziierte Fenster, die keine Quellfenster sind und die andere Fenster aufweisen, die Ereignisse in sie streamen. Das eine oder die mehreren abgeleiteten Fenster 808 können Berechnungen oder Transformationen auf den eingehenden Ereignisströmen durchführen. Das eine oder die mehreren abgeleiteten Fenster 808 wandeln Ereignisströme basierend auf der Fensterart (d. h. Operatoren wie Verbinden, Filtern, Berechnen, Aggregieren, Kopieren, Musteranpassung, prozedural, Vereinigung usw.) und Fenstereinstellungen um. Wenn Ereignisströme in die ESPE 800 herausgegeben werden, werden sie kontinuierlich abgefragt, und die resultierenden Sätze von abgeleiteten Fenstern in diesen Abfragen werden kontinuierlich aktualisiert.
  • 9 veranschaulicht ein Flussdiagramm, das einen beispielhaften Prozess einschließlich Operationen, die durch eine Ereignisstromverarbeitungs-Engine durchgeführt werden, zeigt, gemäß einigen Ausführungsformen der vorliegenden Technologie. Wie bereits erwähnt, definiert die ESPE 800 (oder eine assoziierte ESP-Anwendung), wie Eingabeereignisströme in bedeutungsvolle Ausgabeereignisströme umgewandelt werden. Insbesondere kann die ESP-Anwendung definieren, wie Eingabeereignisströme von Publishern (z. B. Netzvorrichtungen, die erfasste Daten bereitstellen) in bedeutungsvolle Ausgabeereignisströme umgewandelt werden, die von Subscribern verbraucht werden (z. B. ein Data Analytics-Projekt, das von einer Maschine oder einem Satz von Maschinen ausgeführt wird).
  • Innerhalb der Anwendung kann ein Benutzer mit einem oder mehreren Benutzerschnittstellenfenstern interagieren, die dem Benutzer in einer Anzeige unter der Steuerung der ESPE unabhängig oder über eine Browseranwendung in einer vom Benutzer auswahlbaren Reihenfolge präsentiert werden. Beispielsweise kann ein Benutzer eine ESP-Anwendung ausführen, die die Präsentation eines ersten Benutzerschnittstellenfensters bewirkt, das eine Mehrzahl von Menüs und Selektoren wie beispielsweise Dropdown-Menüs, Schaltflächen, Textfelder, Hyperlinks usw. umfassen kann, die mit der ESP-Anwendung assoziiert sind, wie von Fachleuten auf dem Gebiet verstanden wird. Wie von Fachleuten auf dem Gebiet ferner verstanden wird, können verschiedene Operationen parallel ausgeführt werden, beispielsweise unter Verwendung einer Mehrzahl von Threads.
  • Beim Vorgang 900 kann eine ESP-Anwendung eine ESPE definieren und starten, wodurch eine ESPE an einer Vorrichtung, wie beispielsweise der Maschine 220 und/oder 240, instanziiert wird. In einem Vorgang 902 wird der Engine-Container erzeugt. Zur Veranschaulichung kann die ESPE 800 unter Verwendung eines Funktionsaufrufs instanziiert werden, der den Engine-Container als einen Manager für das Modell spezifiziert.
  • In einer Operation 904 werden die eine oder mehreren kontinuierlichen Abfragen 804 durch die ESPE 800 als ein Modell instanziiert. Die eine oder mehreren kontinuierlichen Abfragen 804 können mit einem dedizierten Threadpool oder Threadpools instanziiert werden, die Aktualisierungen erzeugen, wenn neue Ereignisse durch die ESPE 800 streamen. Zur Veranschaulichung können die eine oder mehreren kontinuierlichen Abfragen 804 erzeugt werden, um die Geschäftsverarbeitungslogik innerhalb der ESPE 800 zu modellieren, um Ereignisse innerhalb der ESPE 800 vorherzusagen, um ein physisches System innerhalb der ESPE 800 zu modellieren, um den physischen Systemzustand innerhalb der ESPE 800 vorherzusagen usw. Beispielsweise kann, wie bereits erwähnt, die ESPE 800 verwendet werden, um die Sensordatenüberwachung und -verwaltung zu unterstützen (z. B. kann die Erfassung Kraft, Drehmoment, Last, Dehnung, Position, Temperatur, Luftdruck, Fluidströmung, chemische Eigenschaften, Widerstand, elektromagnetische Felder, Strahlung, Bestrahlung, Nähe, Akustik, Feuchtigkeit, Distanz, Geschwindigkeit, Vibrationen, Beschleunigung, elektrisches Potential oder elektrischen Strom umfassen).
  • Die ESPE 800 kann Ereignisse in Bewegung oder „Ereignisströme” analysieren und verarbeiten. Anstatt Daten zu speichern und die gespeicherten Daten abzufragen, kann die ESPE 800 Abfragen speichern und Daten durch sie streamen, um eine kontinuierliche Analyse der Daten zu ermöglichen, wenn sie empfangen werden. Das eine oder die mehreren Quellfenster 806 und das eine oder die mehreren abgeleiteten Fenster 808 können basierend auf den relationalen, Musteranpassungs- und prozeduralen Algorithmen erzeugt werden, die die Eingabeereignisströme in die Ausgabeereignisströme umwandeln, um basierend auf dem definierten Continuous-Query-Modell und der Anwendung auf die gestreamten Daten zu modellieren, zu simulieren, zu bewerten, zu testen, vorherzusagen usw.
  • In einem Vorgang 906 wird eine Publish/Subscribe(Pub/Sub)-Fähigkeit für die ESPE 800 initialisiert. In einer veranschaulichenden Ausführungsform wird eine Pub/Sub-Fähigkeit für jedes Projekt des einen oder der mehreren Projekte 802 initialisiert. Um die Pub/Sub-Fähigkeit für die ESPE 800 zu initialisieren und zu aktivieren, kann eine Portnummer bereitgestellt werden. Pub/Sub-Clients können einen Hostnamen einer ESP-Vorrichtung, die die ESPE ausführt, und die Portnummer verwenden, um Pub/Sub-Verbindungen zur ESPE 800 herzustellen.
  • 10 veranschaulicht ein ESP-System 850, das über eine Schnittstelle zwischen der Publishing-Vorrichtung 872 und den Ereignis-Subscribing-Vorrichtungen 874a–c verbunden ist, gemäß Ausführungsformen der vorliegenden Technologie. Das ESP-System 850 kann die ESP-Vorrichtung oder das ESP-Subsystem 851, die Ereignis-Publishing-Vorrichtung 872, eine Ereignis-Subscribing-Vorrichtung A 874a, eine Ereignis-Subscribing-Vorrichtung B 874b und eine Ereignis-Subscribing-Vorrichtung C 874c umfassen. Eingabeereignisströme werden an die ESP-Vorrichtung 851 durch die Publishing-Vorrichtung 872 ausgegeben. In alternativen Ausführungsformen können die Eingabeereignisströme durch eine Mehrzahl von Publishing-Vorrichtungen erzeugt werden. Die Mehrzahl von Publishing-Vorrichtungen können ferner Ereignisströme an andere ESP-Vorrichtungen herausgeben. Die eine oder mehreren kontinuierlichen Abfragen, die durch die ESPE 800 instanziiert werden, können die Eingabeereignisströme analysieren und verarbeiten, um Ausgabeereignisströme auszubilden, die an die Ereignis-Subscribing-Vorrichtung A 874a, die Ereignis-Subscribing-Vorrichtung B 874b und die Ereignis-Subscribing-Vorrichtung C 874c ausgegeben werden. Das ESP-System 850 kann eine größere oder eine kleinere Anzahl von Ereignis-Subscribing-Vorrichtungen von Ereignis-Subscribing-Vorrichtungen umfassen.
  • Publish-Subscribe ist ein nachrichtenorientiertes Interaktions-Paradigma, das auf indirekter Adressierung basiert. Verarbeitete Datenempfänger geben ihr Interesse am Empfangen von Informationen von der ESPE 800 an, indem sie bestimmte Klassen von Ereignissen abonnieren, während Informationsquellen Ereignisse an die ESPE 800 herausgeben, ohne die empfangenden Parteien direkt zu adressieren. Die ESPE 800 koordiniert die Interaktionen und verarbeitet die Daten. In einigen Fällen empfängt die Datenquelle die Bestätigung, dass die herausgegebenen Informationen von einem Datenempfänger empfangen wurden.
  • Eine Publish/Subscribe-API kann als eine Bibliothek beschrieben werden, die es einem Ereignis-Publisher, wie beispielsweise der Publishing-Vorrichtung 872, ermöglicht, Ereignisströme in die ESPE 800 zu streamen, oder einem Ereignis-Subscriber, wie beispielsweise der Ereignis-Subscribing-Vorrichtung A 874a, der Ereignis-Subscribing-Vorrichtung B 874b und der Ereignis-Subscribing-Vorrichtung C 874c, ermöglicht, Ereignisströme von der ESPE 800 zu abonnieren. Zur Veranschaulichung können eine oder mehrere Publish/Subscribe-APIs definiert werden. Unter Verwendung der Publish/Subscribe-API kann eine Ereignis-Publishing-Anwendung Ereignisströme in ein laufendes Ereignisstrom-Prozessorprojektquellfenster von der ESPE 800 herausgeben, und die Ereignis-Subscription-Anwendung kann ein Ereignisstrom-Prozessorprojektquellfenster von der ESPE 800 abonnieren.
  • Die Publish/Subscribe-API stellt plattformübergreifende Konnektivität und Endianness-Kompatibilität zwischen der ESP-Anwendung und anderen vernetzten Anwendungen bereit, wie beispielsweise Ereignis-Publishing-Anwendungen, die an der Publishing-Vorrichtung 872 instanziiert werden, und Ereignis-Subscription-Anwendungen, die an einer oder mehreren der Ereignis-Subscribing-Vorrichtung A 874a, der Ereignis-Subscribing-Vorrichtung B 874b und der Ereignis-Subscribing-Vorrichtung C 874c instanziiert werden.
  • Unter Rückbezug auf 9 initialisiert der Vorgang 906 die Publish/Subscribe-Fähigkeit der ESPE 800. In einem Vorgang 908 werden das eine oder die mehreren Projekte 802 gestartet. Das eine oder die mehreren gestarteten Projekte können im Hintergrund auf einer ESP-Vorrichtung ausgeführt werden. In einem Vorgang 910 wird ein Ereignisblockobjekt von einer oder mehreren Rechenvorrichtungen der Ereignis-Publishing-Vorrichtung 872 empfangen.
  • Das ESP-Subsystem 800 kann einen Publishing-Client 852, die ESPE 800, einen Subscribing-Client A 854, einen Subscribing-Client B 856 und einen Subscribing-Client C 858 umfassen. Der Publishing-Client 852 kann durch eine Ereignis-Publishing-Anwendung gestartet werden, die bei der Publishing-Vorrichtung 872 unter Verwendung der Publish/Subscribe-API ausgeführt wird. Der Subscribing-Client A 854 kann durch eine Ereignis-Subscription-Anwendung A gestartet werden, die bei der Ereignis-Subscribing-Vorrichtung A 874a unter Verwendung der Publish/Subscribe-API ausgeführt wird. Der Subscribing-Client B 856 kann durch eine Ereignis-Subscription-Anwendung B gestartet werden, die bei der Ereignis-Subscribing-Vorrichtung B 874b unter Verwendung der Publish/Subscribe-API ausgeführt wird. Der Subscribing-Client C 858 kann durch eine Ereignis-Subscription-Anwendung C gestartet werden, die bei der Ereignis-Subscribing-Vorrichtung C 874c unter Verwendung der Publish/Subscribe-API ausgeführt wird.
  • Ein Ereignisblockobjekt, das ein oder mehrere Ereignisobjekte enthält, wird in ein Quellfenster des einen oder der mehreren Quellfenster 806 aus einer Instanz einer Ereignis-Publishing-Anwendung auf der Ereignis-Publishing-Vorrichtung 872 injiziert. Das Ereignisblockobjekt kann beispielsweise durch die Ereignis-Publishing-Anwendung erzeugt werden und kann vom Publishing-Client 852 empfangen werden. Eine eindeutige ID kann beibehalten werden, wenn das Ereignisblockobjekt zwischen dem einen oder den mehreren Quellfenstern 806 und/oder dem einen oder den mehreren abgeleiteten Fenstern 808 der ESPE 800 und zum Subscribing-Client A 854, Subscribing-Client B 806 und Subscribing-Client C 808 und zur Ereignis-Subscription-Vorrichtung A 874a, zur Ereignis-Subscription-Vorrichtung B 874b und zur Ereignis-Subscription-Vorrichtung C 874c übergeben wird. Der Publishing-Client 852 kann ferner eine eindeutige eingebettete Transaktions-ID im Ereignisblockobjekt erzeugen und einschließen, wenn das Ereignisblockobjekt durch eine kontinuierliche Abfrage verarbeitet wird, sowie die eindeutige ID, die die Publishing-Vorrichtung 872 dem Ereignisblockobjekt zugewiesen hat.
  • In einem Vorgang 912 wird das Ereignisblockobjekt durch die eine oder mehreren kontinuierlichen Abfragen 804 verarbeitet. In einem Vorgang 914 wird das verarbeitete Ereignisblockobjekt an eine oder mehrere Rechenvorrichtungen der Ereignis-Subscribing-Vorrichtungen 874a–c ausgegeben. Beispielsweise können der Subscribing-Client A 804, der Subscribing-Client B 806 und der Subscribing-Client C 808 das empfangene Ereignisblockobjekt jeweils an die Ereignis-Subscription-Vorrichtung A 874a, die Ereignis-Subscription-Vorrichtung B 874b und die Ereignis-Subscription-Vorrichtung C 874c senden.
  • Die ESPE 800 behält den Ereignisblock-Containership-Aspekt der empfangenen Ereignisblöcke bei, von wenn der Ereignisblock in ein Quellfenster herausgegeben wird, und arbeitet sich durch den gerichteten Graphen hindurch, der durch die eine oder mehreren kontinuierlichen Abfragen 804 definiert ist, mit den verschiedenen Ereignisübersetzungen vor der Ausgabe an Subscriber. Subscriber können eine Gruppe von abonnierten Ereignissen mit einer Gruppe von herausgegebenen Ereignissen korrelieren, indem die eindeutige ID des Ereignisblockobjekts verglichen wird, das ein Publisher, wie beispielsweise die Publishing-Vorrichtung 872, an das Ereignisblockobjekt mit der vom Subscriber empfangenen Ereignisblock-ID angefügt hat.
  • In einem Vorgang 916 wird eine Bestimmung durchgeführt, ob die Verarbeitung gestoppt wird oder nicht. Falls die Verarbeitung nicht gestoppt wird, fährt die Verarbeitung im Vorgang 910 fort, um weiterhin den einen oder die mehreren Ereignisströme, die Ereignisblockobjekte enthalten, von der beispielsweise einen oder den mehreren Netzvorrichtungen zu empfangen. Falls die Verarbeitung gestoppt wird, fahrt die Verarbeitung in einem Vorgang 918 fort. Im Vorgang 918 werden die gestarteten Projekte gestoppt. Im Vorgang 920 wird die ESPE abgeschaltet.
  • Wie bereits erwähnt, werden in einigen Ausführungsformen große Daten für ein Analyseprojekt verarbeitet, nachdem die Daten empfangen und gespeichert wurden. In anderen Ausführungsformen verarbeiten verteilte Anwendungen kontinuierlich fließende Daten in Echtzeit von verteilten Quellen durch Anwenden von Abfragen auf die Daten, bevor die Daten an geografisch verteilte Empfänger verteilt werden. Wie bereits erwähnt, kann eine Ereignisstromverarbeitungs-Engine (Event Stream Processing Engine, ESPE) die Abfragen kontinuierlich auf die Daten anwenden, wenn sie empfangen werden, und bestimmt, welche Entitäten die verarbeiteten Daten empfangen. Dies ermöglicht, dass große Datenmengen in einer Vielzahl von Umgebungen empfangen und/oder gesammelt werden, um in Echtzeit verarbeitet und verteilt zu werden. Beispielsweise können Daten, wie unter Bezugnahme auf 2 gezeigt, von Netzvorrichtungen gesammelt werden, die Vorrichtungen innerhalb des Internets der Dinge einschließen können, wie beispielsweise Vorrichtungen innerhalb eines Heimautomationsnetzes. Jedoch können derartige Daten aus einer Vielzahl von verschiedenen Ressourcen in einer Vielzahl von verschiedenen Umgebungen gesammelt werden. In einer derartigen Situation ermöglichen Ausführungsformen der vorliegenden Technologie eine Echtzeitverarbeitung derartiger Daten.
  • Aspekte der vorliegenden Offenbarung stellen technische Lösungen für technische Probleme bereit, wie beispielsweise Rechenprobleme, die auftreten, wenn eine ESP-Vorrichtung ausfällt, was zu einer vollständigen Dienstunterbrechung und einem potentiell signifikanten Datenverlust führt. Der Datenverlust kann katastrophal sein, wenn die gestreamten Daten geschäftskritische Betriebsvorgänge unterstützen, wie beispielsweise jene, die einen laufenden Fertigungs- oder Bohrvorgang unterstützen. Eine Ausführungsform eines ESP-Systems erreicht ein schnelles und nahtloses Failover der ESPE, die an der Mehrzahl von ESP-Vorrichtungen ohne Dienstunterbrechung oder Datenverlust ausgeführt wird, wodurch die Zuverlässigkeit eines betrieblichen Systems, das auf der Live- oder Echtzeitverarbeitung der Datenströme beruht, signifikant verbessert wird. Die Ereignis-Publishing-Systeme, die Ereignis-Subscribing-Systeme und jede ESPE, die nicht an einer ausgefallenen ESP-Vorrichtung ausgeführt werden, sind sich der ausgefallenen ESP-Vorrichtung nicht bewusst und sind nicht durch sie bewirkt. Das ESP-System kann Tausende von Ereignis-Publishing-Systemen und Ereignis-Subscribing-Systemen einschließen. Das ESP-System hält die Failover-Logik und das Bewusstsein innerhalb der Grenzen des Out-Messaging-Netzkonnektors und der Out-Messaging-Netzvorrichtung.
  • In einem Ausführungsbeispiel wird ein System bereitgestellt, um ein Failover bei Ereignisstromverarbeitungs(Event Stream Processing, ESP)-Ereignisblöcken zu unterstützen. Das System schließt unter anderem eine Out-Messaging-Netzvorrichtung und eine Rechenvorrichtung ein. Die Rechenvorrichtung schließt unter anderem einen Prozessor und ein computerlesbares Medium ein, das betriebsfähig mit dem Prozessor gekoppelt ist. Der Prozessor ist ausgelegt, um eine ESP-Engine (ESPE) auszuführen. Das computerlesbare Medium weist darauf gespeicherte Anweisungen auf, die bei der Ausführung durch den Prozessor bewirken, dass die Rechenvorrichtung das Failover unterstützt. Ein Ereignisblockobjekt wird von der ESPE mit einer eindeutigen Kennung empfangen. Es wird ein erster Status der Rechenvorrichtung als „aktiv” oder „Standby” bestimmt. Wenn der erste Status „aktiv” ist, wird ein zweiter Status der Rechenvorrichtung als „neu aktiv” oder „nicht neu aktiv” bestimmt. „Neu aktiv” wird bestimmt, wenn die Rechenvorrichtung von einem Standby-Status in einen aktiven Status geschaltet wird. Wenn der zweite Status „neu aktiv” ist, wird eine zuletzt herausgegebene Ereignisblockobjektkennung bestimmt, die ein zuletzt herausgegebenes Ereignisblockobjekt eindeutig identifiziert. Ein nächstes Ereignisblockobjekt wird von einem nicht-transitorischen computerlesbaren Medium ausgewählt, das durch die Rechenvorrichtung zugänglich ist. Das nächste Ereignisblockobjekt weist eine Ereignisblockobjektkennung auf, die größer als die bestimmte zuletzt herausgegebene Ereignisblockobjektkennung ist. Das ausgewählte nächste Ereignisblockobjekt wird an eine Out-Messaging-Netzvorrichtung herausgegeben. Wenn der zweite Status der Rechenvorrichtung „nicht neu aktiv” ist, wird das empfangene Ereignisblockobjekt an die Out-Messaging-Netzvorrichtung herausgegeben. Wenn der erste Status der Rechenvorrichtung „Standby” ist, wird das empfangene Ereignisblockobjekt im nicht-transitorischen computerlesbaren Medium gespeichert.
  • 11A veranschaulicht ein Blockschaltbild eines Ausführungsbeispiels eines verteilten Verarbeitungssystems 1000, das eine oder mehrere Speichervorrichtungen 1100, die ein Speichervorrichtungsgitter 1001 ausbilden können, eine Koordinierungsvorrichtung 1300, mehrere Knotenvorrichtungen 1500, die ein Knotenvorrichtungsgitter 1005 ausbilden können, und/oder eine Betrachtungsvorrichtung 1800 integriert. 11B veranschaulicht ein Blockschaltbild eines alternativen Ausführungsbeispiels des verteilten Verarbeitungssystems 1000, bei dem eine alternative Ausführungsform der Knotenvorrichtungen 1500 Merkmale der einen oder mehreren Speichervorrichtungen 1100 integriert und/oder Funktionen davon durchführt. In beiden dieser Ausführungsformen des verteilten Verarbeitungssystems 1000, und wie detaillierter erläutert wird, können die Knotenvorrichtungen 1500 zusammen als das Gitter 1005 unter der Steuerung der Koordinierungsvorrichtung 1300 betrieben werden, wobei jede der mehreren der Knotenvorrichtungen 1500 die gleiche Aufgabe wenigstens teilweise parallel zu einer anderen von mehreren Datensatzpartitionen 1131 eines Datensatzes 1130 durchführt, die auf die mehreren Knotenvorrichtungen 1500 verteilt sind.
  • Wie dargestellt, können diese Vorrichtungen 1100, 1300, 1500 und 1800 Kommunikationen dazwischen in Verbindung mit der Zuweisung und Durchführung von Aufgaben einer Analyseroutine 1210 mit einem oder mehreren Datensätzen 1130 austauschen. Derartige Kommunikationen können den Austausch der Knotenstatus 1535, Datensatzpartitionen 1131 und/oder Metadaten 1135 eines Datensatzes 1130, der Analyseroutine 1210 und/oder Taskroutinen 1211 davon, CPU-Taskroutinen 1571, GPU-Taskroutinen 1671 und/oder Ergebnisdaten 1830 einschließen. Jedoch können eine oder mehrere der Vorrichtungen 1100, 1300, 1500 und/oder 1800 auch über das Netz 1999 andere Daten austauschen, die in keiner Weise mit irgendeiner Zuweisung oder Durchführung von Aufgaben einer beliebigen Analyseroutine in Beziehung stehen. In verschiedenen Ausführungsformen kann das Netz 1999 ein einzelnes Netz sein, das sich innerhalb eines einzelnen Gebäudes oder eines anderen relativ begrenzten Bereichs erstrecken kann, eine Kombination von verbundenen Netzen sein, die sich über eine beträchtliche Distanz erstrecken können, und/oder das Internet einschließen. Somit kann das Netz 1999 auf einer beliebigen Vielfalt (oder Kombination) von Kommunikationstechnologien basieren, durch die Kommunikationen bewirkt werden können, einschließlich, ohne Einschränkung, drahtgebundener Technologien, die eine elektrisch und/oder optisch leitfähige Verkabelung verwenden, und drahtloser Technologien, die Infrarot-, Hochfrequenz(HF)- oder andere Formen der drahtlosen Übertragung verwenden.
  • Unter Bezugnahme auf 11A kann in verschiedenen Ausführungsformen jede der einen oder mehreren Speichervorrichtungen 1100 einen oder mehrere Prozessoren 1150, einen Speicher 1160 und eine Netzschnittstelle 1190 integrieren, um jede der einen oder mehreren Speichervorrichtungen 1100 mit dem Netz 1999 zu koppeln. Der Speicher 1160 kann eine Steuerroutine 1140, eine oder mehrere Analyseroutinen 1210, die jeweils eine oder mehrere Taskroutinen 1211 integrieren können, einen oder mehrere Datensätze 1330, die jeweils Metadaten 1135 integrieren können, und/oder eine oder mehrere Datensatzpartitionen 1131 des einen oder der mehreren Datensätze 1130 speichern. Die Steuerroutine 1140 kann eine Sequenz von Anweisungen integrieren, die auf dem Prozessor 1150 von jeder der einen oder mehreren Speichervorrichtungen 1100 betriebsfähig sind, um eine Logik zu implementieren, um verschiedene Funktionen durchzuführen. Der Prozessor 1150 von jeder der Speichervorrichtungen 1100 kann die Netzschnittstelle 1190 betreiben, um die Analyseroutine 1210 und/oder eine oder mehrere der Taskroutinen 1211 davon mit der Koordinierungsvorrichtung 1300 auszutauschen. Alternativ oder zusätzlich kann der Prozessor 1150 von jeder der Speichervorrichtungen die Netzschnittstelle 1190 betreiben, um einen Austausch von einer oder mehreren Datensatzpartitionen 1131 mit einer oder mehreren der Knotenvorrichtungen 1500 über das Netz 1999 mit der Koordinierungsvorrichtung 1300 zu koordinieren sowie um diesen Austausch zu bewirken. In Ausführungsformen, in denen mehrere der Speichervorrichtungen 1100 zusammen als das Speichervorrichtungsgitter 1001 betrieben werden, kann die Sequenz von Anweisungen der Steuerroutine 1140 auf dem Prozessor 1150 von jeder dieser Speichervorrichtungen 1100 betriebsfähig sein, um verschiedene Funktionen wenigstens teilweise parallel zu den Prozessoren 1150 von anderen der Speichervorrichtungen 1100 durchzuführen.
  • In einigen Ausführungsformen können die Prozessoren 1150 der Speichervorrichtungen 1100 zusammenwirken, um eine Sammelfunktion durchzuführen, bei der jeder der Prozessoren 1150 eine entsprechende der Netzschnittstellen 1190 betreibt, um Datenelemente eines oder mehrerer der Datensätze 1130 über das Netz 1999 zu empfangen, und können die Datenelemente über eine Zeitperiode in den einen oder die mehreren Datensätze 1130 assemblieren. In derartigen Ausführungsformen können Datenelemente eines Datensatzes 1130 über das Netz 1999 und/oder auf andere Weise von einem oder mehreren anderen Vorrichtungen (nicht gezeigt) empfangen werden. Beispielhaft können eine Vielzahl von entfernt angeordneten Sensorvorrichtungen (z. B. geologische Sensoren, die über eine bestimmte geologische Region verteilt sind, oder Teilchenerfassungssensoren, die an verschiedenen Teilen eines Teilchenbeschleunigers angeordnet sind) zahlreiche Datenelemente erzeugen, die dann über das Netz 1999 an die Speichervorrichtungen 1100 bereitgestellt werden, wo die zahlreichen Datenelemente dann assembliert werden, um einen Datensatz 1130 auszubilden. In anderen Ausführungsformen können die Speichervorrichtungen 1100 einen oder mehrere der Datensätze 1130 einer Vielzahl von anderen Vorrichtungen (nicht gezeigt), wie beispielsweise einem Gitter von anderen Knotenvorrichtungen, empfangen. Beispielhaft können solche anderen Vorrichtungen eine oder mehrere Verarbeitungsvorgänge durchführen, die einen Datensatz 1130 erzeugen (z. B. eine Bayessche Analyse verwenden, um eine Vorhersage des Verhaltens von Menschen in einer Simulation des Evakuierens eines brennenden Gebäudes abzuleiten oder um eine Vorhersage des Verhaltens von Strukturkomponenten einer Brücke in Reaktion auf verschiedene Windströme abzuleiten), und können dann einen Datensatz 1130 als eine Ausgabe an das Speichervorrichtungsgitter 1001 übertragen.
  • Jeder der einen oder mehreren Datensätze 1130 kann einen beliebigen einer Vielzahl von Typen von Daten einschließen, die mit einem beliebigen einer Vielzahl von Gegenständen assoziiert sind. Beispielhaft kann jeder der Datensätze 1130 wissenschaftliche Beobachtungsdaten in Bezug auf geologische und/oder meteorologische Ereignisse oder von Sensoren einschließen, die in Laborexperimenten in Bereichen wie beispielsweise Chemie oder Physik eingesetzt werden. In einem anderen Beispiel kann der Datensatz Anzeigen von Aktivitäten einschließen, die durch eine zufällige Stichprobe von Personen einer Bevölkerung von Menschen in einem ausgewählten Land oder einer Gemeinde oder einer Population von bedrohten Arten, die in der Wildnis untersucht werden, durchgeführt werden. Wie dargestellt, kann jeder der Datensätze 1130 Metadaten 1135 integrieren, die Anzeigen von strukturellen Merkmalen bereitstellen, einschließlich unter anderem Aspekte der Art und Weise, in der Datenelemente organisiert und/oder innerhalb jedes Datensatzes 1130 zugänglich gemacht werden.
  • Die Aufgaben, bezüglich welcher die Taskroutinen 1211 der Analyseroutine 1210 veranlassen können, dass einer oder mehrere Prozessoren sie durchführt, können beliebige einer Vielzahl von Datenanalyseaufgaben, Datenumwandlungsaufgaben und/oder Datennormalisierungsaufgaben einschließen. Die Datenanalyseaufgaben können unter anderem Suchen und/oder statistische Analysen einschließen, die die Ableitung von Approximationen, numerischen Charakterisierungen, Modellen, Auswertungen von Hypothesen und/oder Vorhersagen mit sich bringen (z. B. eine Vorhersage durch eine Bayessche Analyse von Aktionen einer Menschenmenge, die versucht, aus einem brennenden Gebäude zu fliehen, oder des Verhaltens von Brückenkomponenten in Reaktion auf eine Windkraft). Die Datenumwandlungsaufgaben können unter anderem Sortieren, zeilen- und/oder spaltenbasierte mathematische Operationen, zeilen- und/oder spaltenbasiertes Filtern unter Verwendung eines oder mehrerer Datenelemente einer Zeile oder Spalte und/oder Neuordnen von Datenelementen innerhalb eines Datenobjekts einschließen. Die Datennormalisierungsaufgaben können unter anderem Normalisierungszeiten des Tages, Datumsangaben, Geldwerte (z. B. Normalisierung auf eine einzelne Währungseinheit), Zeichenabstand, Verwendung von Trennzeichen (z. B. Normalisierung der Verwendung von Punkten und Kommas in numerischen Werten), Verwendung von Formatierungscodes, Verwendung von Big- oder Little-Endian-Codierung, Verwendung oder mangelnde Verwendung von Zeichenbits, Mengen von Bits, die verwendet werden, um ganze Zahlen und/oder Gleitkommawerte darzustellen (z. B. Bytes, Worte, Doppelworte oder Quadworte), usw. einschließen.
  • In verschiedenen Ausführungsformen kann die Koordinierungsvorrichtung 1300 eines oder mehrere von einem Prozessor 1350, einem Speicher 1360, einer Eingabevorrichtung 1320, einer Anzeige 1380 und einer Netzschnittstelle 1390 integrieren, um die Koordinierungsvorrichtung 1300 mit dem Netz 1999 zu koppeln. Der Speicher 1360 kann eine Steuerroutine 1340, die Metadaten 1135 eines Datensatzes 1130, die Analyseroutine 1210, Knotenstatus 1535, Zuweisungsdaten 1330, Aufgabenverzögerungsdaten 1335, eine Kompilierroutine 1440, Kompilierregeln 1434, die CPU-Taskroutinen 1571, die GPU-Taskroutinen 1671 und/oder die Ergebnisdaten 1830 speichern. Die Steuerroutine 1340 und die Kompilierroutine 1440 (falls innerhalb des Speichers 1360 vorhanden) können jeweils eine Sequenz von Anweisungen integrieren, die auf dem Prozessor 1350 betriebsfähg sind, um eine Logik zu implementieren, um verschiedene Funktionen durchzuführen.
  • In verschiedenen Ausführungsformen kann jede der Knotenvorrichtungen 1500 eine oder mehrere einer CPU 1550, einen Speicher 1560 und eine Netzschnittstelle 1590 integrieren, um jede der Knotenvorrichtungen 1500 mit dem Netz 1999 zu koppeln. Der Speicher 1560 kann eine Steuerroutine 1540, eine oder mehrere Datensatzpartitionen 1131, eine Instanz des Knotenstatus 1535, die Kompilierroutine 1440, die Kompilierregeln 1434, eine oder mehrere der Taskroutinen 1211 und/oder eine oder mehrere der CPU-Taskroutinen 1571 speichern. Die Steuerroutine 1540 und die Kompilierroutine 1440 (falls innerhalb des Speichers 1560 vorhanden) können eine Sequenz von Anweisungen integrieren, die auf der CPU 1550 von jeder der Knotenvorrichtungen 1500 betriebsfähg sind, um eine Logik zu implementieren, um verschiedene Funktionen durchzuführen. In Ausführungsformen, in denen mehrere der Knotenvorrichtungen 1500 zusammen als das Knotenvorrichtungsgitter 1005 betrieben werden, kann die Sequenz von Anweisungen der Steuerroutine 1540 auf der CPU 1550 von jeder dieser Knotenvorrichtungen 1500 betriebsfähig sein, um verschiedene Funktionen wenigstens teilweise parallel zu den CPUs 1550 von anderen der Knotenvorrichtungen 1500 durchzuführen.
  • Wenigstens eine Teilmenge der Knotenvorrichtungen 1500 kann zusätzlich einen Grafikcontroller 1600 integrieren, der eine oder mehrere von einer GPU 1650 und einem Speicher 1660 integrieren kann. Der Speicher 1660 kann eine Steuerroutine 1640, eine oder mehrere Datensatzpartitionen 1131 und/oder eine oder mehrere der GPU-Taskroutinen 1671 speichern. Die Steuerroutine 1640 kann eine Sequenz von Anweisungen integrieren, die auf der GPU 1650 von jeder der Knotenvorrichtungen 1600 betriebsfähig sind, die den Grafikcontroller 1600 integriert, um eine Logik zu implementieren, um verschiedene Funktionen durchzuführen. In Ausführungsformen, in denen mehrere der Knotenvorrichtungen 1600 zusammen als das Knotenvorrichtungsgitter 1005 betrieben werden, kann die Sequenz von Anweisungen der Steuerroutine 1640 auf der GPU 1650 des Grafikcontrollers 1600 von jeder dieser Knotenvorrichtungen 1500 betriebsfähig sein, um verschiedene Funktionen wenigstens teilweise parallel zu den GPUs 1650 des Grafikcontrollers 1600 von anderen der Knotenvorrichtungen 1500 durchzuführen.
  • Wie in 12 dargestellt, kann der Speicher 1560 in einen flüchtigen Speicher 1561 und einen nicht-flüchtigen Speicher 1563 aufgeteilt werden, und der Speicher 1660 kann einen flüchtigen Speicher 1661 einschließen, darf aber keinen nicht-flüchtigen Speicher einschließen. Die flüchtigen Speicher 1561 und 1661 können jeweils mit einer oder mehreren flüchtigen Speicherkomponenten 1562 und 1662 implementiert sein. Die flüchtigen Speicherkomponenten 1562 und 1662 können jeweils beliebige einer Vielzahl von Speichertechnologien einsetzen, die einen relativ schnellen Zugriff auf darin gespeicherte Daten und/oder Routinen ermöglichen (z. B. die dargestellte beispielhafte Datensatzpartition 1131), die aber nicht in der Lage sind, die darin gespeicherten Daten und/oder Routinen ohne kontinuierliche Versorgung von elektrischer Leistung zu behalten. Derartige Technologien schließen unter anderem beliebige einer Vielzahl von Typen von Direktzugriffsspeicher (Random Access Memory, RAM) ein. Der nicht-flüchtige Speicher 1563 kann mit einer oder mehreren nicht-flüchtigen Speicherkomponenten 1564 implementiert sein. Die eine oder mehreren nicht-flüchtigen Speicherkomponenten 1564 können jeweils eine Speichertechnologie einsetzen, die in der Lage ist, darin gespeicherte Daten und/oder Routinen zu speichern, unabhängig davon, ob elektrische Leistung weiterhin bereitgestellt wird, aber nicht in der Lage ist, Zugriff auf Daten und/oder Routinen bereitzustellen, der so schnell ist wie der, der von verschiedenen flüchtigen Speichertechnologien bereitgestellt wird, auf denen die flüchtigen Speicher 1561 und/oder 1661 basieren können. Derartige Technologien schließen unter anderem beliebige einer Vielzahl von Technologien ein, die ferromagnetische und/oder optische Speichermedien einsetzen.
  • Aufgrund der Unterschiede in ihren jeweiligen Technologien kann der nicht-flüchtige Speicher 1563 eine wesentlich größere Speicherkapazität aufweisen als einer der flüchtigen Speicher 1561 oder 1661. Somit können Seiten von Daten und/oder Routinen, die innerhalb des nicht-flüchtigen Speichers 1563 gespeichert sind, in jeden der flüchtigen Speicher 1561 und 1661 als ein Mechanismus, um die CPU 1550 und die GPU 1650 zu aktivieren, hinein und hinaus getauscht werden, um den schnelleren Zugriff auf die jeweiligen flüchtigen Speicher 1561 und 1661 zu nutzen, während die begrenzteren Speicherkapazitäten von jedem überwunden werden. Insbesondere, und wie auch dargestellt, kann die CPU 1550 durch die Ausführung einer Seitenkomponente 1541 der Steuerroutine 1540 veranlasst werden, einen derartigen Seitenaustausch zu bewirken, um sowohl den eigenen Betrieb als auch den Betrieb der GPU 1650 zu unterstützen. Die Notwendigkeit, die CPU 1550 einzusetzen, um einen Seitenaustausch im Auftrag der GPU 1650 durchzuführen, kann aus der Verwendung der einen oder mehreren Treiberroutinen (nicht gezeigt) resultieren, die von der CPU 1550 ausgeführt werden, um es der CPU 1550 zu ermöglichen, auf die eine oder mehreren nicht-flüchtigen Speicherkomponenten 1564 zuzugreifen.
  • Unter Rückbezug auf 11A integriert die Betrachtungsvorrichtung 1800 in verschiedenen Ausführungsformen eines oder mehrere von einem Prozessor 1850, einem Speicher 1860, einer Eingabevorrichtung 1820, einer Anzeige 1880 und einer Netzschnittstelle 1890, um die Betrachtungsvorrichtung 1800 mit dem Netz 1999 zu koppeln. Der Speicher 1860 kann eine oder mehrere von einer Steuerroutine 1840, der Analyseroutine 1210 und den Ergebnisdaten 1830 speichern. Die Steuerroutine 1840 kann eine Sequenz von Anweisungen integrieren, die auf dem Prozessor 1850 betriebsfähig sind, um eine Logik zu implementieren, um verschiedene Funktionen auszuführen. Der Prozessor 1850 kann durch seine Ausführung der Steuerroutine 1840 veranlasst werden, die Netzschnittstelle 1890 zu betreiben, um die Ergebnisdaten 1830 von einer der Knotenvorrichtungen 1500 oder von der Koordinierungsvorrichtung 1300 über das Netz 1999 nach Abschluss der Ausführung der Analyseroutine 1210 zu empfangen. In einigen Ausführungsformen kann der Prozessor 1850 auch veranlasst werden, eine Visualisierung basierend auf den Ergebnisdaten 1830 zu erzeugen, um eine Darstellung der Ergebnisse der Durchführung durch mehrere der Knotenvorrichtungen 1500 der Aufgaben der Taskroutinen 1211 der Analyseroutine 1210 auf der Anzeige 1880 zu präsentieren.
  • Alternativ oder zusätzlich kann der Prozessor 1850 durch seine Ausführung der Steuerroutine 1840 veranlasst werden, die Anzeige 1880 und/oder die Eingabevorrichtung 1820 zu betreiben, um eine Benutzerschnittstelle bereitzustellen, durch die ein Bediener der Betrachtungsvorrichtung 1800 eine Eingabe darin bereitstellen kann. Diese Eingabe kann einen Befehl für die Ausführung der Analyseroutine 1210 über mehrere der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005 einschließen, um eine Analyse mit wenigstens einem der Datensätze 1130 durchzuführen, die von der einen oder den mehreren Speichervorrichtungen 1100 gespeichert werden. In Reaktion auf den Empfang des Eingabebefehls kann der Prozessor 1850 veranlasst werden, die Netzschnittstelle 1890 zu betreiben, um den Befehl und/oder die Analyseroutine 1210 über das Netz 1999 an die Koordinierungsvorrichtung 1300 zu übermitteln.
  • Unter Bezugnahme auf 11B unterscheidet sich das alternative Ausführungsbeispiel des verteilten Verarbeitungssystems 1000, das darin dargestellt ist, vom Ausführungsbeispiel aus 11A, indem die eine oder mehreren Speichervorrichtungen 1100 nicht eingeschlossen sind. Stattdessen können die Knotenvorrichtungen 1500 des alternativen Ausführungsbeispiels aus 11B direkt die Funktion des Speicherns des einen oder der mehreren Datensätze 1130 durchführen, wodurch die Notwendigkeit für die eine oder mehreren Speichervorrichtungen 1100 des Ausführungsbeispiels des verteilten Verarbeitungssystems 1000 aus 11A ausgeschlossen wird.
  • Unter Bezugnahme auf beide Ausführungsformen der beiden 11A und 11B ist anzumerken, dass in einigen Ausführungsformen die von der Koordinierungsvorrichtung 1300 ausgeführten Funktionen von einer der Knotenvorrichtungen 1500 anstelle der Koordinierungsvorrichtung 1300 ausgeführt werden können (z. B. Ausführungsformen, die die Koordinierungsvorrichtung 1300 nicht einschließen). In derartigen Ausführungsformen kann eine solche der Knotenvorrichtungen 1500 zusätzlich die Metadaten 1135 eines der Datensätze 1130 von einer der Speichervorrichtungen 1100 (oder von einer der anderen Knotenvorrichtungen 1500 in Ausführungsformen, in denen die Knotenvorrichtungen 1500 die Speicherfunktion der einen oder mehreren Speichervorrichtungen 1100 durchführen) empfangen. Darüber hinaus kann eine solche der Knotenvorrichtungen 1500 zusätzlich die Knotenstatus 1535 von anderen der Knotenvorrichtungen 1500 empfangen. Ferner kann eine solche der Knotenvorrichtungen 1300 zusätzlich die Taskroutinen 1211, die CPU-Taskroutinen 1571 und/oder die GPU-Taskroutinen 1671 an andere der Knotenvorrichtungen 1500 übertragen.
  • 13A veranschaulicht ein Ausführungsbeispiel der Zuweisung von Aufgaben und Kompilierung von Taskroutinen, die durch die Koordinierungsvorrichtung 1300 in einem der Ausführungsbeispiele des verteilten Verarbeitungssystems 1000 aus einer von 11A oder 11B durchgeführt werden können. 13B veranschaulicht ein alternatives Ausführungsbeispiel der Zuweisung von Aufgaben, die durch die Koordinierungsvorrichtung durchgeführt werden kann, während die Kompilierung von Taskroutinen durch die Knotenvorrichtungen 1500 durchgeführt werden kann, die ausgewählt werden, um zugewiesen zu werden, die Aufgaben in einem der Ausführungsbeispiele des verteilten Verarbeitungssystems 1000 aus einer von 11A oder 11B durchzuführen.
  • Unter Bezugnahme auf 13A kann bei der Ausführung der Steuerroutine 1340 der Prozessor 1350 der Koordinierungsvorrichtung 1300 veranlasst werden, Metadaten 1135 zu empfangen, die indikativ für strukturelle Merkmale eines der Datensätze 1130 und/oder der Analyseroutine 1210 von der einen oder mehreren Speichervorrichtungen 1100 und/oder der Betrachtungsvorrichtung 1700 sind. Der Prozessor 1350 kann auch veranlasst werden, von den Knotenvorrichtungen 1500 die Knotenstatus 1535 zu empfangen, die indikativ für die Verarbeitungs-, Speicher- und/oder Netzzugriffsressourcen sind, die in jede der Knotenvorrichtungen 1500 integriert sind, sowie das Ausmaß, in dem jede dieser Ressourcen aktuell verfügbar ist. Der Prozessor 1350 kann die Metadaten 1135, die Analyseroutine 1210 und/oder die Knotenstatus 1535 einsetzen, um anfängliche Zuweisungen von wenigstens einer anfänglichen Aufgabe der Analyseroutine 1210 an ausgewählte der Knotenvorrichtungen 1500 sowie eine anfängliche Verteilung der Datensatzpartitionen 1131 an die ausgewählten der Knotenvorrichtungen 1500 abzuleiten.
  • Beim Ausführen der Kompilierroutine 1440 kann der Prozessor 1350 veranlasst werden, die ausführbaren Anweisungen innerhalb jeder der Taskroutinen 1211 der Analyseroutine 1210 zu analysieren, um diejenigen der Taskroutinen 1211 zu identifizieren, die zur peinlich parallelen Ausführung durch die GPUs 1650 kompiliert werden können, die in wenigstens eine Teilmenge der Knotenvorrichtungen 1500 integriert sein können. Diejenigen der Taskroutinen 1211, die für die GPUs 1650 so kompiliert werden können, können durch den Prozessor 1350 in entsprechende GPU-Taskroutinen 1671 kompiliert werden, die von den GPUs 1650 ausgeführt werden können. Jedoch können diejenigen der Taskroutinen 1211, die für die GPUs 1650 so nicht kompiliert werden können, durch den Prozessor 1350 in entsprechende CPU-Taskroutinen 1571 kompiliert werden, die von den CPUs 1550 der Knotenvorrichtungen 1500 ausgeführt werden können. Der Prozessor 1350 kann dann veranlasst werden, die eine oder mehreren CPU-Taskroutinen 1571 und/oder die eine oder mehreren GPU-Taskroutinen 1671 für die wenigstens eine anfängliche Aufgabe an die ausgewählten der Knotenvorrichtungen 1500 als Teil der Zuweisung der wenigstens einen anfänglichen Aufgabe zu verteilen.
  • Beim Ausführen der Steuerroutine 1540 kann die CPU 1550 von jeder der ausgewählten der Knotenvorrichtungen 1500 die eine oder mehreren CPU-Taskroutinen 1571 und/oder die eine oder mehreren GPU-Taskroutinen 1671 für die wenigstens eine anfängliche Aufgabe empfangen und speichern, sowie wenigstens eine der anfänglich verteilten Datensatzpartitionen 1131. Wenn eine CPU-Taskroutine 1571 empfangen wird, kann die CPU 1550 veranlasst werden, die CPU-Taskroutine 1571 auszuführen, um eine Aufgabe mit der wenigstens einen empfangenen Datensatzpartition 1131 durchzuführen. Wenn eine GPU-Taskroutine 1671 empfangen wird, kann die CPU 1550 veranlasst werden, die GPU-Taskroutine 1671 an die GPU 1650 innerhalb des Grafikcontrollers 1600 der Knotenvorrichtung 1500 zusammen mit der wenigstens einen empfangenen Datensatzpartition 1131 weiterzuleiten, wobei die GPU 1650 durch die Steuerroutine 1640 veranlasst werden kann, die GPU-Taskroutine 1671 auszuführen, um eine Aufgabe mit der wenigstens einen empfangenen Datensatzpartition 1131 durchzuführen.
  • Unabhängig davon, ob die CPU 1550 oder eine GPU 1650 von jeder Knotenvorrichtung 1500 eine Aufgabe mit einer entsprechenden Datensatzpartition 1131 durchführt, kann die CPU 1550 und/oder die GPU 1650 veranlasst werden, wiederkehrend einen entsprechenden der Knotenstatus 1535 mit Anzeigen zu aktualisieren, welche Aufgabe(n) aktuell durchgeführt wird/werden und/oder des Ausmaßes, in dem verschiedene Ressourcen aktuell als Ergebnis zur Verfügung stehen. Die CPU 1550 von jeder Knotenvorrichtung 1500 kann durch eine weitere Ausführung der Steuerroutine 1540 veranlasst werden, den entsprechenden Knotenstatus 1535 wiederkehrend an die Koordinierungsvorrichtung 1300 zu übertragen.
  • Bei einer weiteren Ausführung der Steuerroutine 1340 kann der Prozessor 1350 der Koordinierungsvorrichtung 1300 die Anzeigen in den wiederkehrend empfangenen Knotenstatus 1535 der aktuell ausgeführten Aufgaben und/oder der aktuellen Ausmaße der Verfügbarkeit verschiedener Ressourcen innerhalb jeder Knotenvorrichtung 1500 einsetzen, um die Zeit zu bestimmen, die erforderlich ist, um verschiedene Aufgaben abzuschließen. Der Prozessor 1350 kann Anzeigen von derartigen Zeitdauern speichern, die für jede Aufgabe als Teil der Aufgabenverzögerungsdaten 1535 erforderlich sind. Wenn eine oder mehrere der Knotenvorrichtungen 1500 früher zugewiesene Aufgaben abschließen, kann der Prozessor 1350 veranlasst werden, solche gespeicherten Anzeigen von Zeitdauern einzusetzen, um eine vorbestimmte Zeitperiode zu bestimmen, um die die Zuweisung einer oder mehrerer nächster Aufgaben an eine oder mehrere der Knotenvorrichtungen 1500 verzögert werden soll.
  • Derartige Verzögerungen bei der Zuweisung der nächsten Aufgaben können die Zuweisung dieser nächsten Aufgaben an diejenigen der Knotenvorrichtungen 1500 in einer Weise ermöglichen, die bestimmte Datensatzpartitionen 1131 nutzt, die bereits innerhalb der Speicher 1560 und/oder 1660 von einer oder mehreren der Knotenvorrichtungen 1500 gespeichert sind. Ferner kann dies die zeitlich begrenzte Speicherung von Datensatzpartitionen 1131 innerhalb der flüchtigen Speicher 1561 und/oder 1661 nutzen und kann den Austausch von Datensatzpartitionen 1131 durch das Netz 1999 minimieren, der längere Zeitdauern verbrauchen kann als die Längen der Verzögerungen bei der Zuweisung der nächsten Aufgaben. Weiterhin können in Ausführungsformen, in denen bestimmte Datensatzpartitionen 1131 ursprünglich an Knotenvorrichtungen zugewiesen wurden, die eine oder mehrere GPUs 1650 integrieren, wobei sowohl die früher zugewiesenen Aufgaben als auch die nächsten Aufgaben unter Verwendung der einen oder mehreren GPUs 1650 durchgeführt werden sollen, derartige Verzögerungen bei der Zuweisung von nächsten Aufgaben Instanzen minimieren, bei denen die nächsten Aufgaben veranlasst werden, in anderen Knotenvorrichtungen verarbeitet zu werden, die keine GPU 1650 integrieren, so dass eine oder mehrere CPUs 1550 veranlasst werden, die nächsten Aufgaben durchzuführen.
  • Unter Bezugnahme auf 13B ist die Zuweisung von Aufgaben an ausgewählte der Knotenvorrichtungen 1500 im Wesentlichen dem Ausführungsbeispiel der Zuweisung von Aufgaben aus 13A ähnlich, mit der Ausnahme, dass die Kompilierung der Taskroutinen 1211 der Analyseroutine 1210 innerhalb der ausgewählten Knotenvorrichtungen 1500 statt innerhalb der Koordinierungsvorrichtung 1300 auftreten kann. Insbesondere kann bei der Ableitung von anfänglichen Zuweisungen von wenigstens einer anfänglichen Aufgabe der Analyseroutine 1210 an die ausgewählten Knotenvorrichtungen 1500 der Prozessor 1350 der Koordinierungsvorrichtung 1300 die Taskroutine(n) 1211 der wenigstens einen anfänglichen Aufgabe an die ausgewählten Knotenvorrichtungen 1500 anstelle von CPU-Taskroutinen 1571 oder GPU-Taskroutinen 1671 verteilen. Die CPU 1550 von jedem der ausgewählten Knoten 1500 kann die Kompilierroutine 1440 ausführen, um die verteilte(n) Taskroutine(n) 1211 zu kompilieren, um die entsprechende(n) CPU-Taskroutine(n) 1571 und/oder GPU-Taskroutine(n) 1671 innerhalb der ausgewählten Knotenvorrichtungen 1500 zu erzeugen, statt dass der Prozessor 1350 der Koordinierungsvorrichtung 1300 dies tut.
  • 14A, 14B und 14C veranschaulichen zusammen ein Ausführungsbeispiel einer Zuweisung von Aufgaben, die als Teil der Ausführung einer Analyseroutine durchgeführt werden sollen, an ausgewählte der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005. 14A und 14B veranschaulichen die Sammlung und Verwendung von Daten, die mit einer Analyseroutine 1210, den Metadaten 1135 eines Datensatzes 1130 und/oder Knotenstatus 1535 assoziiert sind, die von den Knotenvorrichtungen 1500 bereitgestellt werden, um die Zuweisungen abzuleiten. 14C veranschaulicht die Verteilung der Taskroutinen 1211, 1571 und/oder 1671 an die ausgewählten Knotenvorrichtungen 1500.
  • Unter Bezugnahme auf 14A, wie dargestellt, kann die Steuerroutine 1340, die durch den Prozessor 1350 der Koordinierungsvorrichtung 1300 ausgeführt wird, eine Überwachungskomponente 1345 einschließen, um zu bewirken, dass der Prozessor 1350 wiederkehrend die Netzschnittstelle 1390 betreibt, um die Knotenstatus 1535 zu empfangen, die wiederkehrend von jedem der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005 über das Netz 1999 übertragen werden können. In einigen Ausführungsformen kann jede der Knotenvorrichtungen 1500 wiederkehrend einen Knotenstatus 1535 in einem regelmäßigen Zeitintervall und unabhängig von anderen laufenden Aktivitäten als eine Form des „Heartbeat-Signals” an die Koordinierungsvorrichtung 1300 übertragen, der fortgesetzte Funktionalität anzeigt, sowie Informationen über aktuell verfügbare Ressourcen und/oder aktuelle Aktivitäten übermittelt. In derartigen Ausführungsformen kann ein fehlender Empfang des Knotenstatus 1535 durch die Koordinierungsvorrichtung 1300 von einer Knotenvorrichtung 1500, wenn erwartet, als eine Anzeige einer Fehlfunktion durch die Knotenvorrichtung 1500 genommen werden, so dass die Ressourcen der Knotenvorrichtung als nicht verfügbar angesehen werden können, und jede Aufgabe, die aktuell zugewiesen ist, kann einer anderen Knotenvorrichtung 1500 zugewiesen werden.
  • Wie auch dargestellt, kann die Steuerroutine 1340 auch eine Zuweisungskomponente 1341 einschließen, um zu bewirken, dass der Prozessor 1350 Datensatzpartitionen 1131 eines Datensatzes 1130 zusammen mit Aufgaben einer Analyseroutine 1210, die mit den zugewiesenen Datensatzpartitionen 1131 durchgeführt werden, an ausgewählte der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005 zuweist. Zur Vorbereitung derartiger Zuweisungen kann der Prozessor 1350 veranlasst werden, die Netzschnittstelle 1390 zu betreiben, um die Metadaten 1135 des Datensatzes 1130 sowie die Analyseroutine 1210 von einer oder mehreren anderen Vorrichtungen über das Netz 1999 zur Verwendung durch die Zuweisungskomponente 1341 abzurufen. In Ausführungsformen, in denen das verteilte Verarbeitungssystem 1000 eine oder mehrere unterschiedliche Speichervorrichtungen 1100 einschließt (wie beispielsweise das beispielhafte verteilte Verarbeitungssystem 1000 aus 11A), können die Metadaten 1135 und/oder die Analyseroutine 1210 an die Koordinierungsvorrichtung 1300 über das Netz 1999 von der einen oder den mehreren Speichervorrichtungen 1100 bereitgestellt werden. In Ausführungsformen, in denen das verteilte Verarbeitungssystem 1000 jedoch keine derartigen unterschiedlichen Speichervorrichtungen einschließt und die Knotenvorrichtungen 1500 eine verteilte Speicherung von Datensätzen 1130 bereitstellen (wie beispielsweise das beispielhafte verteilte Verarbeitungssystem 1000 aus 11B), können die Metadaten 1135 und/oder die Analyseroutine 1210 an die Koordinierungsvorrichtung 1300 über das Netz 1999 von einer oder mehreren der Knotenvorrichtungen 1500 bereitgestellt werden.
  • In noch anderen Ausführungsformen kann die Betrachtungsvorrichtung 1800 der Koordinierungsvorrichtung 1300 die Analyseroutine 1210 bereitstellen. In derartigen Ausführungsformen kann die Betrachtungsvorrichtung 1800 eine Benutzerschnittstelle bereitstellen, durch die die Betrachtungsvorrichtung 1800 gesteuert werden kann, um einen Befehl an die Koordinierungsvorrichtung 1300 über das Netz 1999 zu übertragen, um die Ausführung der Analyseroutine 1210 in einer verteilten Weise zu veranlassen, um eine Analyse mit dem Datensatz 1130 durchzuführen. Teil des Übertragens des Befehls an die Koordinierungsvorrichtung 1300 kann die Übertragung der Analyseroutine 1210 von der Betrachtungsvorrichtung 1700 an die Koordinierungsvorrichtung 1300 sein.
  • Wie ferner dargestellt, kann in Ausführungsformen, in denen die Koordinierungsvorrichtung 1300 die Taskroutinen 1211 der Analyseroutine 1210 kompilieren soll, die Kompilierroutine 1440 durch den Prozessor 1350 ausgeführt werden und kann eine Analysekomponente 1441 einschließen, um diejenigen der Taskroutinen 1211 zu identifizieren, die zugänglich für die Umwandlung und Kompilierung für eine peinlich parallele Ausführung durch eine oder mehrere GPUs 1650 sind. Hierzu kann die Analysekomponente 1441 auch auf die empfangene Analyseroutine 1210 zugreifen, ebenso wie die Zuweisungskomponente 1341 der Steuerroutine 1340.
  • Unter Bezugnahme auf 14B, wie dargestellt, können die Knotenstatus 1535 angeben, welche Verarbeitungs-, Speicher- und/oder Netzzugriffsressourcen in jede Knotenvorrichtung 1500 integriert sind. Wie bereits erwähnt, können die Knotenstatus 1535 wiederkehrend aktualisiert werden, um auch das aktuelle Ausmaß der gegenwärtigen Verfügbarkeit (z. B. den aktuellen Prozentsatz der Nutzung) jeder derartigen Ressource anzugeben.
  • Beispielhaft können die Knotenstatus 1535 Anzeigen von Mengen, Typen, Versionen und/oder anderen internen Architekturdetails der Prozessoren bereitstellen, die in jede der Knotenvorrichtungen 1500 integriert sein können. Somit können die Knotenstatus 1535 für jede Knotenvorrichtung 1500 die Mengen an vorhandenen CPUs 1550 und/oder GPUs 1650 sowie Typinformationen für jeden Prozessor angeben, einschließlich unter anderem Anweisungssatzkompatibilität, Revisionsstand, Cachegröße(n), Menge an Verarbeitungskernen und/oder Menge an Threads, die pro Verarbeitungskern ausgeführt werden können. Wie detaillierter erläutert wird, kann die Bereitstellung derartiger Informationen dazu beitragen, einen heterogenen Satz von Knotenvorrichtungen 1500 innerhalb des Knotenvorrichtungsgitters 1005 zu unterstützen, die eine Vielzahl von verschiedenen Prozessoren unter ihnen nutzen. Zusammen mit Informationen über Verarbeitungsressourcen, die in jede der Knotenvorrichtungen 1500 integriert sind, können die Knotenstatus 1535 wiederkehrend aktualisiert werden, um Anzeigen für die aktuellen Nutzungsniveaus von verschiedenen Prozessoren (z. B. unterschiedlichen CPUs 1550 und/oder GPUs 1650 innerhalb einer einzelnen Knotenvorrichtung 1500), aktuellen Nutzungsniveaus von Threads und/oder aktuellen Nutzungsniveaus von anderen bestimmten Verarbeitungsmerkmalen (z. B. Nutzungsniveaus von beliebigen spezialisierten Verarbeitungskernen, Logikeinheiten, Erweiterungen zu Anweisungssätzen, verschiedenen Levels von Cache usw.) bereitzustellen.
  • Ebenso beispielhaft können die Knotenstatus 1535 Anzeigen für Speicherkapazitäten der flüchtigen Speicher 1561 und/oder 1661 und/oder des nicht-flüchtigen Speichers 1563 bereitstellen, die in jede der Knotenvorrichtungen 1500 integriert sein können. Somit können die Knotenstatus 1535 für jede Knotenvorrichtung 1500 Mengen und/oder verschiedene Parameter von Speicherkomponenten angeben, die verwendet werden, um jeden der Speicher 1561, 1661 und/oder 1563 zu implementieren, einschließlich unter anderem Typen von verwendeten Schnittstellen, Seiten- und/oder Zeilengrößen, Zugriffsgeschwindigkeiten und/oder -latenzen und/oder verwendeter Speichertechnologien. Zusammen mit Informationen bezüglich der Speicherressourcen, die in jede der Knotenvorrichtungen 1500 integriert sind, können die Knotenstatus 1535 wiederkehrend aktualisiert werden, um Anzeigen für die aktuellen Nutzungsniveaus von verschiedenen flüchtigen und/oder nicht-flüchtigen Speichern bereitzustellen.
  • Ferner beispielhaft können die Knotenstatus 1535 Anzeigen von Netzzugriffsfähigkeiten und/oder Bandbreiten der Netzschnittstelle(n) 1590 bereitstellen, die in jede der Knotenvorrichtungen 1500 integriert sein können. Somit können die Knotenstatus 1535 für jede Knotenvorrichtung 1500 unterstützte drahtgebundene und/oder drahtlose Netzschnittstellen, unterstützte Protokolle, Eingabe- und/oder Ausgabepuffergrößen usw. angeben. Zusammen mit Informationen bezüglich der Netzzugriffsressourcen, die in jede der Knotenvorrichtungen 1500 integriert sind, können die Knotenstatus 1535 wiederkehrend aktualisiert werden, um Anzeigen für die aktuellen Nutzungsniveaus der Bandbreite und/oder Puffer für jede Schnittstelle bereitzustellen.
  • Wie auch dargestellt, können die Metadaten 1135 Anzeigen für verschiedene strukturelle Merkmale bereitstellen, durch die Datenelemente innerhalb des Datensatzes 1130 organisiert werden können und/oder auf sie zugegriffen werden kann. Beispielsweise können die Metadaten 1135 Anzeigen der Gesamtgröße, des Typs der Datenstruktur des Datensatzes 1130 (z. B. Binärbaum, mehrdimensionales Array, verknüpfte Liste usw.), Datentyp(en) der Datenelemente (z. B. Gleitkomma, Ganzzahl, Textzeichen usw.), Aspekte des Indexierungsschemas, das für den Zugriff auf Datenelemente verwendet wird (z. B. Anzahl der Dimensionen, verwendete Kennzeichnungen usw.), und/oder noch weitere strukturelle Aspekte einschließen. Auch können die Metadaten 1135 beispielsweise Anzeigen für verschiedene Einschränkungen für die Art und Weise, in der der Datensatz 1130 in die Datensatzpartitionen 1131 aufgeteilt werden können, einschließen, wie beispielsweise ein beliebiges Partitionierungsschema, in das die Datenelemente des Datensatzes 1130 bereits organisiert sind, und/oder eine minimale Größe der kleinsten atomaren Einheit von Daten, in die der Datensatz 1130 partitioniert werden kann, die noch eine unabhängige Verarbeitung der resultierenden Datensatzpartitionen 1131 ermöglicht (z. B. die Größe einer Zeile oder Draw in einem zweidimensionalen Array usw.). Wie Fachleuten auf dem Gebiet bekannt ist, können derartige Beschränkungen hinsichtlich der Art und Weise, in der der Datensatz 1130 aufgeteilt werden kann, eine Obergrenze für die Menge der Datensatzpartitionen 1131, in die der Datensatz 1130 aufgeteilt werden kann, auferlegen, wodurch effektiv ein Obergrenze für die Menge der Knotenvorrichtungen 1500 auferlegt werden kann, auf die die resultierenden Datensatzpartitionen 1131 verteilt werden können.
  • Die Analyseroutine 1210 kann in eine beliebige Anzahl von Taskroutinen 1211 aufgeteilt werden, die jeweils Anweisungen einschließen, die Aspekte einer entsprechenden Aufgabe angeben, die als Ergebnis der Ausführung dieser Taskroutine 1211 als Teil der Ausführung der Analyseroutine 1210 durchgeführt werden soll. Die Anweisungen innerhalb jeder der verschiedenen Taskroutinen 1211 können Anzeigen von erforderlichen Verarbeitungsressourcen (z. B. ob Unterstützung für eine bestimmte Erweiterung zu einem Anweisungssatz erforderlich ist) und/oder Speicherkapazitäten, die erforderlich sind, um Datenstrukturen zu unterstützen, die während der Ausführung instanziiert werden, bereitstellen. Die Analyseroutine 1210 kann auch Anzeigen für eine Reihenfolge bereitstellen, in der die Taskroutinen 1211 ausgeführt werden sollen. Alternativ oder zusätzlich kann die Analyseroutine 1210 Definitionen von Eingaben, die für die Durchführung jeder Aufgabe erforderlich sind, und/oder Definitionen von Ausgaben, die durch jede Aufgabe erzeugt werden, einschließen. Die Bereitstellung von Anzeigen einer Reihenfolge, in der die Taskroutinen 1211 ausgeführt werden sollen, können Anzeigen von Abhängigkeiten zwischen den Taskroutinen 1211 einschließen, wie beispielsweise Anzeigen darüber, wo eine Ausgabe einer Taskroutine 1211 vorhanden ist, die als eine Eingabe für eine andere Taskroutine 1211 erforderlich ist. Die Bereitstellung von Anzeigen von erforderlichen Eingaben und/oder Ausgaben, die erzeugt werden sollen, kann Teil einer Implementierung einer Many-Task-Computing(MTC)-Architektur sein, bei der die Aufgaben der Analyseroutine 1210 jeweils unabhängig voneinander ausgedrückt werden, wenigstens durch ihre Eingaben und Ausgaben, um wenigstens eine Teilmenge der Aufgaben der Analyseroutine 1210 für eine peinlich parallele Ausführung zugänglich zu machen.
  • Die Art und Weise, in der Definitionen von Eingaben und/oder Ausgaben, Anzeigen der Reihenfolge der Aufgabenausführung und/oder Anzeigen von Abhängigkeiten bereitgestellt werden, kann abhängig von Attributen der Programmiersprache(n) variieren, in der die Analyseroutine 1210 erzeugt wird. Beispielhaft können in einigen Ausführungsformen Deklarationsheader für diejenigen der Taskroutinen 1211, die als aufrufbare Funktionen in einer Weise geschrieben sind, die den Konventionen einer ausgewählten Programmiersprache folgt, ausreichend sein, um derartige Definitionen bereitzustellen. Jedoch kann in anderen Ausführungsformen eine unterschiedliche Datei oder andere Datenstruktur entweder innerhalb der Analyseroutine 1210 oder die Analyseroutine 1210 begleitend erzeugt werden, um derartige Definitionen und/oder Anzeigen bereitzustellen. Insbesondere kann beispielhaft ein Array erzeugt werden, in dem jeder Eintrag erforderliche Eingaben, Ausgaben, die erzeugt werden sollen, und/oder eine Position innerhalb einer Reihenfolge der Ausführung angibt. Unabhängig von der genauen Art und Weise, in der Definitionen von Eingaben und/oder Ausgaben und/oder Anzeigen von Abhängigkeiten und/oder die Reihenfolge in einer Datei oder einer anderen Datenstruktur dargestellt sind, können in einigen Ausführungsformen derartige Definitionen und/oder Anzeigen eine Darstellung eines gerichteten azyklischen Graphen (Directed Acyclic Graph, DAG) der Aufgaben der Analyseroutine 1210 ausbilden.
  • Beim Ausführen der Zuweisungskomponente 1341 kann der Prozessor 1350 veranlasst werden, die Knotenstatus 1535, die Metadaten 1135 und/oder Teile der Analyseroutine 1210 zu verwenden, um anfängliche Zuweisungen von wenigstens einer anfänglichen Aufgabe der Analyseroutine 1210 an ausgewählte der Knotenvorrichtungen 1500 und eine anfängliche Verteilung von wenigstens einer Datensatzpartition 1131 an jede der ausgewählten der Knotenvorrichtungen 1500 abzuleiten. Bei der Ableitung derartiger anfänglicher Zuweisungen kann der Prozessor 1350 veranlasst werden, anufänglich die Art und Weise abzuleiten, in der der Datensatz 1130 in Datensatzpartitionen 1131 aufgeteilt werden soll, wenigstens teilweise basierend auf irgendwelchen angegebenen Einschränkungen dabei, die innerhalb der Metadaten 1135 vorhanden sein können, und/oder auf der Anzahl der Knotenvorrichtungen 1500, die gegenwärtig als ausreichend Speicherressourcen aufweisend in den Knotenstatus 1535 angezeigt sind. Der Prozessor 1350 kann alternativ oder zusätzlich veranlasst werden, die ausführbaren Anweisungen innerhalb einer oder mehrerer der Taskroutinen 1211 der Analyseroutine 1210 zu analysieren, um eine oder mehrere bestimmte erforderliche Verarbeitungsressourcen zu identifizieren (z. B. Gleitkomma-Mathematik, Single-Instruction-Multiple-Data(SIMD)-Anweisungsunterstützung usw.), und kann einen der Knoten 1500 auswählen, dem eine anfängliche Aufgabe bzw. anfängliche Aufgaben basierend auf Anzeigen in den Knotenstatus 1535 von denjenigen der Knotenvorrichtungen 1500, die gegenwärtig derartige Verarbeitungsressourcen als verfügbar aufweisen, zugewiesen werden soll(en). Unabhängig von der exakten Logik, die bei der Ableitung der anfänglichen Zuweisungen von Aufgaben und/oder Datensatzpartitionen 1131 an die ausgewählten der Knotenvorrichtungen 1500 verwendet wird, kann der Prozessor 1350 Anzeigen derartiger anfänglicher Zuweisungen als Teil der Zuweisungsdaten 1330 speichern.
  • In Ausführungsformen, in denen die Koordinierungsvorrichtung 1300 die Taskroutinen 1211 der Analyseroutine 1210 kompilieren soll, kann die Koordinierungsvorrichtung 1300 die Kompilierregeln 1434 zur Verwendung bei der Ausführung der Kompilierroutine 1440 durch den Prozessor 1350 speichern. Die Kompilierregeln 1434 können verschiedene Aspekte des Kompilierens von Taskroutinen 1211 der Analyseroutinen 1210 spezifizieren, um die CPU-Taskroutinen 1571 zur Ausführung durch eine oder mehrere der CPUs 1550 und/oder die GPU-Taskroutinen 1671 zur Ausführung durch eine oder mehrere der GPUs 1650 zu erzeugen. Unter dem, was durch die Kompilierregeln 1434 spezifiziert wird, können auch Aspekte der Umwandlung von Anweisungen der Taskroutinen 1211, die ursprünglich nicht erzeugt wurden, um die peinlich parallelen Ausführungsfähigkeiten der GPUs 1650 zu nutzen (durch die Bereitstellung einer relativ großen Menge von Threads der Ausführung), in Anweisungen sein, die dazu erzeugt werden. Somit können die Kompilierregeln 1434 Aspekte der Umwandlung und Kompilierung von Anweisungen von Taskroutinen 1211, die ursprünglich für die Ausführung durch die CPUs 1550 erzeugt wurden, in Anweisungen, die für die Ausführung durch die GPUs 1650 erzeugt werden, spezifizieren.
  • Jede der einen oder mehreren CPUs 1550 von jeder der Knotenvorrichtungen 1500 kann eine interne Verarbeitungsarchitektur verwenden, die als gut geeignet für die sequentielle Verarbeitung von Taskroutinen 1211 befunden wird, die verschiedene Eingabe-/Ausgabeoperationen und/oder Verzweigungsoperationen einschließen, die die Ausführung verschiedener Sätze von Anweisungen innerhalb der Taskroutinen 1211 auf den Ergebnissen von verschiedenen Bestimmungen bedingen. Jede der CPUs 1550 kann jeweils einen oder mehrere Verarbeitungskerne 1555 umfassen (unter Bezugnahme auf 12), die jeweils einen relativ begrenzten Grad an paralleler Ausführung von Anweisungen auf einer relativ begrenzten Anzahl von Threads der Ausführung unterstützen können. Im Gegensatz dazu können die eine oder mehreren GPUs 1650, die in wenigstens einer Teilmenge der Knotenvorrichtungen 1500 vorhanden sein können, eine interne Verarbeitungsarchitektur verwenden, die für eine peinlich parallele Verarbeitung der Taskroutinen 1211 als gut geeignet erachtet wird, die einen relativ begrenzten Satz von Anweisungen für mathematische und/oder bitweise Operationen einschließen, die unabhängig voneinander ausgeführt werden können, so dass es keine Abhängigkeiten zwischen zahlreichen Instanzen einer parallel ausgeführten Taskroutine 1211 gibt. In der Tat kann in einigen Ausführungsformen jede der GPUs 1650 in der Lage sein, eine Parallelverarbeitung über Hunderte, Tausende oder eine noch größere Anzahl von Threads der Ausführung zu unterstützen.
  • Wenn die Anweisungen einer Taskroutine 1211 zugänglich sind, für eine derartige parallele Ausführung über eine so große Anzahl von Threads hinweg umgewandelt zu werden, kann die von einer derartigen Taskroutine 1211 ausgeführte Aufgabe in wesentlich kürzerer Zeit ausführbar sein. Beispielhaft kann eine Aufgabe einer der Taskroutinen 1211, deren Durchführung unter Verwendung der CPUs 1550 der Knotenvorrichtungen 1500 mehrere Tage in Anspruch nehmen kann, stattdessen unter Verwendung der GPUs 1650 für die Durchführung nur Stunden eines einzigen Tages in Anspruch nehmen. Für Aufgaben, die unter Verwendung des begrenzteren Anweisungssatzes der GPUs 1650 implementiert werden können, kann eine einzelne der GPUs 1650 innerhalb einer einzelnen der Knotenvorrichtungen 1500 die äquivalente Arbeit zahlreicher CPUs 1550 über zahlreiche der Knoten 1500 hinweg in kürzerer Zeit mit wesentlich weniger Kostenaufwand durchführen. Eine derartige Verbesserung der Geschwindigkeit der Durchführung wird noch größer, wenn mehrere der GPUs 1650 innerhalb mehrerer der Knotenvorrichtungen 1500 parallel betrieben werden, um eine Aufgabe als eine peinlich parallele Aufgabe über die zahlreichen Threads hinweg durchzuführen, die von jeder unterstützt werden, wodurch eine noch höher parallele Form der Durchführung dieser Aufgabe bereitgestellt wird.
  • Es kann jedoch diejenigen der Taskroutinen 1211 der Analyseroutine 1210 geben, die bestimmte Anweisungen einschließen und/oder bestimmte Operationen durchführen, die die Anweisungen dieser Taskroutinen 1211 für eine derartige peinlich parallele Ausführung durch die GPUs 1650 nicht-umwandelbar und nicht-kompilierbar machen. Wie bereits erwähnt, können die GPUs 1650 einen relativ begrenzten Anweisungssatz unterstützen. Beispielhaft müssen viele Typen von Eingabe/Ausgabe-Operationen zwangsläufig in einer Einzel-Thread-Weise durchgeführt werden, da verschiedene Protokoll-Handshakes und/oder andere Merkmale eine sequentielle Durchführung von Schritten auferlegen. Infolgedessen ist vorgesehen, dass die Analyseroutine 1210 sowohl Taskroutinen 1211, in denen die Anweisungen für die Umwandlung und Kompilierung für die peinlich parallele Ausführung durch die GPUs 1650 zugänglich sind, als auch Taskroutinen 1211, in denen die Anweisungen nicht so sind, dass sie zur Ausführung durch die CPUs 1550 kompiliert werden müssen, einschließen kann.
  • Die Kompilierregeln 1434 können eine Liste von Anweisungen einschließen, die, falls sie in einer Taskroutine 1211 vorhanden sind, wenigstens nicht die Umwandlung und Kompilierung der Anweisungen der Taskroutine 1211 verhindern, um eine entsprechende GPU-Taskroutine 1671 zu erstellen, in der die Anweisungen die Durchführung der Aufgabe der Taskroutine 1211 als eine peinlich parallele Aufgabe unter Verwendung von vielen Threads von wenigstens einer GPU 1650 bei der Ausführung veranlassen. Alternativ oder zusätzlich können die Kompilierregeln 1434 eine Liste von Anweisungen einschließen, die, falls sie innerhalb einer Taskroutine 1211 vorhanden sind, eine derartige Umwandlung der Taskroutine 1211 verhindern, um eine derartige peinlich parallele Ausführung durch die GPUs 1650 zu unterstützen. Zusätzlich können die Kompilierregeln 1434 bestimmte Umstände spezifizieren, unter denen bestimmte Anweisungen, die eine derartige Umwandlung anderweitig nicht verhindern würden, in einer Taskroutine 1211 so verwendet werden können (z. B. als Teil einer Eingabe/Ausgabe-Operation oder einer anderen Operation), dass eine derartige Umwandlung verhindert wird.
  • Für diejenigen der Taskroutinen 1211 der Analyseroutine 1210, die Anweisungen aufweisen, die die Umwandlung in andere Anweisungen unterstützen können, die kompilierbar sind, um die Aufgabe(n) als peinlich parallele Aufgabe(n) auf den GPUs 1650 durchzuführen, können die Kompilierregeln 1434 verschiedene Regeln für die Durchführung einer derartigen Umwandlung spezifizieren. Beispielhaft können die Kompilierregeln 1434 eine oder mehrere Regeln für die Umwandlung von Indexwerten einschließen, die in Schleifen verwendet werden, die in einer Weise instanziiert werden sollen, die für eine peinlich parallele Ausführung zugänglich ist, bei der Kollisionen von Indexwerten und Abhängigkeiten zwischen Instanzen einer Aufgabe, die parallel ausgeführt werden, vermieden werden. Alternativ oder zusätzlich kann es eine oder mehrere Regeln für die Umwandlung von Anweisungen, die innerhalb einer Schleife implementiert wurden, um zu veranlassen, dass eine Operation mehrmals sequentiell durchgeführt wird, in Anweisungen, die veranlassen, dass mehrere Durchführungen dieser Operation parallel über mehrere Threads von wenigstens einer der GPUs 1650 hinweg auftreten, geben. In einigen solcher Umwandlungen; die eine Schleife beinhalten, in der die Anzahl der Durchführungen der Operation groß genug sein kann, dass nicht alle parallel auftreten können, kann die Schleife möglicherweise nicht eliminiert werden und kann stattdessen umgewandelt werden, um weniger Iterationen zu verwenden, wenn eine Teilmenge der Durchführungen der Operation parallel während jeder Iteration auftritt. Beispielhaft können die Kompilierregeln 1434 eine oder mehrere Regeln für die Umwandlung einer Datenstruktur, die innerhalb einer Taskroutine 1211 instanziiert wird, auf deren Datenelemente sequentiell zugegriffen wird, in eine andere Datenstruktur, auf deren Datenelemente parallel über mehrere Threads von wenigstens einer der GPUs 1650 hinweg zugegriffen wird, einschließen.
  • In einigen Ausführungsformen kann die Umwandlung zur Folge haben, dass Anweisungen der Taskroutine 1211, die ursprünglich in einer bestimmten Programmiersprache erzeugt wurden, in andere Anweisungen umgewandelt werden, die in der gleichen Programmiersprache erzeugt werden. In einigen solcher Ausführungsformen können jedoch die Anweisungen, die für die Verwendung in der jeweiligen Sprache definiert werden, durch eine oder mehrere zusätzliche Anweisungen ergänzt werden, die mit Aspekten der internen Architektur, die für die GPU 1650 spezifisch sind, assoziiert sind (z. B. bestimmte Typen von Operanden, bestimmte Typen für zurückgegebene Werte, Organisation von Bits und/oder Bytes von Variablen für eine Registerimplementierung usw.). In anderen Ausführungsformen kann die Umwandlung zur Folge haben, dass Anweisungen der Taskroutine 1211, die ursprünglich in einer Programmiersprache erzeugt wurden, in andere Anweisungen umgewandelt werden, die in einer anderen Programmiersprache erzeugt werden. In einigen solcher Ausführungsformen kann die andere Programmiersprache von einem Anbieter der GPUs 1650 erstellt worden sein, um eine Programmiersprache bereitzustellen, die ausgelegt ist, um die Merkmale der GPUs 1650 optimal zu nutzen.
  • Nachfolgend wird ein Beispiel für eine Umwandlung von Teilen einer Taskroutine 1211 dargestellt, die vom Prozessor 1350 der Koordinierungsvorrichtung 1300 und/oder von einer oder mehreren CPUs 1550 der Knotenvorrichtungen 1500 durchgeführt werden kann. Zuerst werden Teile einer beispielhaften Taskroutine 1211 dargestellt, die in FCMP erzeugt wird, einer Programmiersprache, die in verschiedenen Produkten vom SAS Institute Inc., Cary, NC, USA, angeboten wird. Insbesondere wurden beispielsweise die Deklarationen der Subroutine „income_statement_kernel” und der Datenstruktur „d_matrix_is” zwischen den Programmiersprachen FCMP und C umgewandelt.
  • Figure DE102017213160A1_0002
  • Als Nächstes werden entsprechende Teile einer entsprechenden GPU-Taskroutine dargestellt, die im Umwandlungsprozess, der vom Prozessor 1350 oder von einer oder mehreren der CPUs 1550 durchgeführt wird, erzeugt wird. Insbesondere wurden die obigen Teile der in FCMP erzeugten beispielhaften Taskroutine 1211 umgewandelt, um eine Programmiersprachenerweiterung zu verwenden, die Teil des Programmiermodells Compute Unified Device Architecture (CUDA) ist, um Funktionen von GPUs (z. B. den GPUs 1650) aufzurufen, das von der Nvidia Corporation, Santa Clara, CA, USA, verbreitet wird, einem Anbieter von GPUs, die als die GPUs 1650 eingesetzt werden können.
  • Figure DE102017213160A1_0003
  • Wie Fachleute auf dem Gebiet leicht erkennen können, ist es häufig der Fall, dass Programmiercode, der ursprünglich für die Ausführung unter Verwendung einer ersten Verarbeitungsarchitektur erzeugt wurde, wahrscheinlich effizienter durch einen Prozessor der ersten Architektur ausgeführt wird als Programmiercode, der ursprünglich für die Ausführung unter Verwendung einer zweiten Verarbeitungsarchitektur erzeugt wurde und dann für die Ausführung unter Verwendung der ersten Verarbeitungsarchitektur umgewandelt wird. Trotzdem haben Tests bestätigt, dass durch die Umwandlung der Taskroutinen 1211 durch die Kompilierroutine 1440 signifikante Steigerungen der Geschwindigkeit der Durchführung von einigen Aufgaben einer Analyseroutine 1210 realisiert werden können, von der Erzeugung für eine Ausführung durch die CPUs 1550 bis zur Erzeugung für eine peinlich parallele Ausführung durch die GPUs 1650.
  • Nachfolgend ist eine Tabelle mit Vergleichen der Ausführungszeiten aus dem Testen einer beispielhaften stochastischen Berechnung dargestellt. Eine derartige Berechnung kann eine Aufgabe sein, die als eine der Taskroutinen 1211 innerhalb einer beispielhaften Analyseroutine 1210 implementiert wird. Wie dargestellt, wurde, wenn die stochastische Berechnung in SAS Macro Code (eine weitere Programmiersprache, die in verschiedenen Produkten von SAS Institute Inc. angeboten wird) zur Ausführung durch eine CPU (z. B. eine der CPUs 1550 von einem der Knoten 1500) geschrieben wird, die resultierende Zeitdauer, die zur Ausführung erforderlich ist, von etwa 93.600 Sekunden gemessen. Wenn die gleiche stochastische Berechnung stattdessen in FCMP für die Ausführung durch mehrere CPUs geschrieben wird (z. B. mehrere der CPUs 1550 innerhalb eines oder mehrerer der Knoten 1500), ergab sich eine gemessene Ausführungszeit von 763 Sekunden. Wenn der gleiche FCMP-Code der stochastischen Berechnung jedoch dann für eine peinlich parallele Ausführung durch eine der von Nvidia Corporation angebotenen GPUs (z. B. eine der GPUs 1650 eines der Knoten 1500) zu CUDA umgewandelt wird, ergab sich eine gemessene Ausführungszeit von 73 Sekunden. Obwohl 73 Sekunden langsamer sind als die gemessene Ausführungszeit von 11 Sekunden, die erreicht wird, wenn die gleiche stochastische Berechnung für eine peinlich parallele Ausführung durch eine der von Nvidia Corporation angebotenen GPUs direkt in CUDA geschrieben wird, ist die gemessene Ausführungszeit von 73 Sekunden, die durch die Verwendung der Umwandlung von FCMP zu CUDA erreicht wird, immer noch eine sehr signifikante Verbesserung gegenüber der gemessenen Ausführungszeit von 763 Sekunden, die durch die Ausführung des FCMP-Codes durch mehrere CPUs erreicht wird.
    Eingesetzte Technologie Stochastische Berechnung – Zeit in Sekunden
    CPU SAS Macro Code 93.600
    In FCMP geschriebener Code 763
    GPU In FCMP geschriebener Code, und dann zu CUDA umgewandelt 73
    Direkt in CUDA geschriebener Code 11
  • Somit ermöglicht, wie an diesen gemessenen Ausführungszeiten zu erkennen ist, eine derartige Verwendung der Umwandlung von Code, um die Kompilierung für eine derartige peinlich parallele Ausführung zu ermöglichen, dem Personal, das nicht über die Fähigkeiten oder Schulung verfügt, die Taskroutinen 1211 der Analyseroutine 1210 nativ in CUDA zu schreiben, trotzdem noch die Vorteile einer peinlich parallelen Ausführung des Codes zu nutzen, den sie schreiben können.
  • In Ausführungsformen, in denen die Koordinierungsvorrichtung 1300 die Taskroutinen 1211 der Analyseroutine 1210 kompilieren soll, kann der Prozessor 1350 die Analysekomponente 1441 als Teil der Ableitung der anfänglichen Zuweisungen von Datensatzpartitionen 1131 und der anfänglichen Aufgabe(n) ausführen. Insbesondere kann der Prozessor 1350 durch die Analysekomponente 1441 veranlasst werden, jede Taskroutine 1211 der Analyseroutine 1210 zu analysieren, um diejenigen der Taskroutinen 1211 zu identifizieren, bei denen die Anweisungen zugänglich für die Umwandlung und Kompilierung in entsprechende GPU-Taskroutinen 1671 sind, um eine peinlich parallele Durchführung ihrer entsprechenden Aufgaben durch die GPUs 1650 zu ermöglichen. Auf diese Weise kann der Prozessor 1350 veranlasst werden, die Anzeigen innerhalb der Kompilierregeln 1434 zu verwenden, welche Anweisungen derartige Umwandlungen verhindern und/oder welche Anweisungen derartige Umwandlungen nicht verhindern. Der Prozessor 1350 kann dann veranlasst werden, die Ergebnisse einer derartigen Analyse der Taskroutinen 1211 bei der Auswahl von Knotenvorrichtungen 1500 als Teil der Ableitung der anfänglichen Zuweisungen zu verwenden. Insbesondere, falls die Analyse der Taskroutinen 1211 zu einer Bestimmung durch den Prozessor 1350 fährt, dass keine der Taskroutinen 1211 in entsprechende GPU-Taskroutinen 1671 kompiliert werden können, kann der Prozessor 1350 die Auswahl der Knotenvorrichtungen 1500 auf diejenigen beschränken, die eine oder mehrere der CPUs 1550 integrieren, da aus den Taskroutinen 1211 keine GPU-Taskroutinen 1671 erzeugt werden. Falls die Analyse der Taskroutinen 1211 jedoch zu einer Bestimmung führt, dass einige der Taskroutinen 1211 in entsprechende GPU-Taskroutinen 1671 kompiliert werden können, während andere nicht kompiliert werden können, dann kann der Prozessor 1350 die Auswahl der Knotenvorrichtungen 1500 auf diejenigen beschränken, die sowohl eine oder mehrere CPUs 1550 als auch eine oder mehrere GPUs 1650 integrieren und daher die Ausführung sowohl der CPU-Taskroutinen 1571 als auch der GPU-Taskroutinen 1671 unterstützen können, die aus verschiedenen der Taskroutinen 1211 erzeugt werden. Ferner, falls die Analyse der Taskroutinen 1211 zu einer Bestimmung führt, dass alle der Taskroutinen 1211 in die entsprechenden GPU-Taskroutinen 1671 kompiliert werden können, kann der Prozessor 1350 die Auswahl der Knotenvorrichtungen 1500 auf diejenigen beschränken, die eine oder mehrere der GPUs 1650 integrieren.
  • Unter Bezugnahme auf 14C kann in Ausführungsformen, in denen die Koordinierungsvorrichtung 1300 die Taskroutinen 1211 der Analyseroutine 1210 nicht kompiliert, der Prozessor 1350 durch die Zuweisungskomponente 1341 der Steuerroutine 1340 veranlasst werden, die Netzschnittstelle 1390 zu betreiben, um die Taskroutine(n) 1211 der zugewiesenen anfänglichen Aufgaben auf die ausgewählten Knotenvorrichtungen 1500 zu verteilen. In derartigen Ausführungsformen kann jede der ausgewählten Knotenvorrichtungen 1500 die Taskroutine(n) 1211, die an jeden der ausgewählten Knoten 1500 verteilt ist/sind, unabhängig in die entsprechende(n) CPU-Taskroutine(n) 1571 und/oder GPU-Taskroutine(n) 1671 kompilieren, in Vorbereitung für die Durchführung der anfänglichen Aufgabe(n), die jedem der ausgewählten Knoten 1500 zugewiesen ist/sind.
  • Alternativ kann in Ausführungsformen, in denen die Koordinierungsvorrichtung 1300 die Taskroutinen 1211 der Analyseroutine 1210 kompilieren soll, so dass die Koordinierungsvorrichtung 1300 die Kompilierroutine 1440 zur Ausführung durch den Prozessor 1350 speichert, die Kompilierroutine 1440 eine Kompilierkomponente 1444 zur Durchführung der Kompilierung der Taskroutinen 1211 einschließen. Insbesondere kann der Prozessor 1350 durch die Kompilierkomponente 1444 veranlasst werden, wenigstens die eine oder mehreren Taskroutinen 1211 zu kompilieren, die mit der einen oder den mehreren anfänglichen Aufgaben assoziiert sind, die den ausgewählten der Knotenvorrichtungen 1500 zugewiesen wurden. Für eine Taskroutine 1211, die vom Prozessor 1350 (während der Ausführung der Analysekomponente 1441) als nicht zugänglich bestimmt wurde, um umgewandelt und kompiliert zu werden, um eine entsprechende GPU-Taskroutine 1671 zu erzeugen, kann der Prozessor 1350 veranlasst werden, die Taskroutine 1211 ohne eine derartige Umwandlung zu kompilieren, um eine entsprechende CPU-Taskroutine 1571 zu erzeugen. Für eine Taskroutine 1211, die vom Prozessor 1350 als zugänglich für die Umwandlung und Kompilierung bestimmt wurde, um eine entsprechende GPU-Taskroutine 1671 zu erzeugen, kann der Prozessor 1350 veranlasst werden, eine derartige Umwandlung und Kompilierung zu bewirken, um die entsprechende GPU-Taskroutine 1671 zu erzeugen.
  • In einigen Ausführungsformen, bei denen eine Taskroutine 1211 vom Prozessor 1350 als zugänglich für die Umwandlung und Kompilierung bestimmt wurde, um eine entsprechende GPU-Taskroutine 1671 zu erzeugen, kann der Prozessor 1350 durch die Kompilierkomponente 1444 veranlasst werden, mehr als eine Kompilierung der gleichen Taskroutine 1211 durchzuführen. Beispielsweise kann der Prozessor 1350 in einigen solcher Ausführungsformen zusätzlich die gleiche Taskroutine 1211 kompilieren, um zusätzlich zur entsprechenden GPU-Taskroutine 1671 auch eine entsprechende CPU-Taskroutine 1571 zu erzeugen. Dies kann als wünschenswert erachtet werden, um eine Situation anzusprechen, in der eine unzureichende Anzahl verfügbarer Knotenvorrichtungen 1500 vorhanden sein kann, die eine oder mehrere der GPUs 1650 integrieren, so dass die Aufgabe(n) der Taskroutine 1211 von einer oder mehreren der Knotenvorrichtungen 1500 durchgeführt werden muss/müssen, basierend auf der Ausführung der entsprechenden CPU-Taskroutine 1571 durch eine oder mehrere CPUs 1550. Alternativ oder zusätzlich kann dies als wünschenswert erachtet werden, um eine Situation anzusprechen, in der eine Knotenvorrichtung 1500, die eine oder mehrere GPUs 1650 integriert, beim Ausführen der entsprechenden GPU-Taskroutine 1650 ausfällt und die Durchführung der Aufgabe(n) der Taskroutine 1211 mit der/den jeweiligen Datensatzpartition(en) 1131, die dieser Knotenvorrichtung 1500 zugewiesen ist/sind, einer anderen Knotenvorrichtung 1500 zugewiesen werden muss, die keine GPU 1650 integriert.
  • Als weiteres Beispiel für mehr als eine Kompilierung der gleichen Taskroutine 1211 kann das Knotenvorrichtungsgitter 1005 in einigen dieser Ausführungsformen einen heterogenen Satz von Knotenvorrichtungen 1500 einschließen, die verschiedene GPUs 1650 integrieren, die keinen Anweisungssatz teilen, so dass die Erzeugung einer einzelnen entsprechenden GPU-Taskroutine 1671 für alle verschiedenen GPUs 1650 nicht möglich sein kann. Somit kann der Prozessor 1350 veranlasst werden, mehrere Umwandlungen und Kompilierungen der gleichen Taskroutine 1211 in jede der verschiedenen Versionen der GPU-Taskroutine 1671 durchzuführen, die für jede der verschiedenen GPUs 1650, die unter den Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005 erforderlich sind.
  • Jedoch kann in einigen der Ausführungsformen, in denen die Koordinierungsvorrichtung 1300 die Taskroutinen 1211 der Analyseroutine 1210 kompilieren soll, egal ob die Analyse der Taskroutinen 1211 zur Identifizierung derjenigen, die für eine Kompilierung für eine oder mehrere verschiedene GPUs 1650 zugänglich sind, stattfindet und/oder egal ob eine derartige Kompilierung zur Erzeugung entsprechender GPU-Taskroutinen 1671 stattfindet, konditioniert werden, ob Anzeigen vorhanden sind, dass irgendwelche Knotenvorrichtungen 1500 vorhanden sind, die eine GPU 1650 integrieren. Insbesondere kann in einer Situation, in der die aktuellen Knotenstatus 1535 anzeigen, dass keine der Knotenvorrichtungen, die eine oder mehrere der GPUs 1650 integrieren, aktuell verfügbar sind, um überhaupt eine Aufgabe zugewiesen zu bekommen, der Prozessor 1350 durch die Zuweisungskomponente 1341 veranlasst werden, von der Durchführung einer Analyse der Taskroutinen 1211 abzusehen, um zu bestimmen, ob irgendwelche für die Kompilierung zur Ausführung durch eine GPU 1650 zugänglich sind. Alternativ oder zusätzlich kann in Ausführungsformen, in denen verschiedene Knotenvorrichtungen 1500 unterschiedliche Typen von GPUs 1650 integrieren, so dass mehrere Kompilierungen zur Erzeugung von GPU-Taskroutinen 1671 für alle der unterschiedlichen Typen von GPUs 1650 erforderlich sind, eine Situation auftreten, in der die Knotenstatus 1535 anzeigen, dass alle der GPUs 1650 einer der Typen aktuell nicht für die Durchführung von Aufgaben verfügbar sind. In einer derartigen Situation kann der Prozessor 1350 durch die Zuweisungsroutine veranlasst werden, von der Kompilierung einer beliebigen Taskroutine 1211 abzusehen, um eine GPU-Taskroutine 1671 für die Ausführung durch GPUs 1650 dieses bestimmten Typs zu erzeugen.
  • Die Erzeugung der GPU-Taskroutinen 1671 in einer Weise, die die Umwandlung der Anweisungen der Taskroutinen 1211 in andere Anweisungen einschließt, die die peinlich parallelen Verarbeitungsmerkmale der GPUs 1650 nutzen, gefolgt von der Kompilierung, kann als wünschenswert erachtet werden, um die Leichtigkeit zu verbessern, mit der peinlich parallele Merkmale der GPUs 1650 verwendet werden können. Durch eine derartige Verwendung von Umwandlungen von Anweisungen kann dem Personal die Möglichkeit gegeben werden, die GPUs 1650 zu nutzen, die in wenigstens einigen der Knotenvorrichtungen 1500 vorhanden sein können, ohne die Notwendigkeit, die Anweisungen der Taskroutinen 1211 in einer Weise zu architektieren und zu schreiben, die für eine derartige peinlich parallele Ausführung ausgelegt ist. Anders ausgedrückt, kann diesem Personal die Notwendigkeit erspart bleiben, die zusätzlichen Fähigkeiten und Erfahrungen zu erwerben, um die Anweisungen zu architektieren und zu schreiben, die die Aufgaben der Analyseroutine 1210 in einer Weise implementieren, die für eine peinlich parallele Ausführung durch die GPUs 1650 ausgelegt ist. Zusätzlich kann, wenn das Knotenvorrichtungsgitter 1005 Knotenvorrichtungen 1500 einschließt, die unterschiedliche der GPUs 1650 integrieren, die keinen Anweisungssatz teilen, derartigem Personal ferner die Notwendigkeit erspart bleiben, verschiedene Versionen von Anweisungen zu architektieren und zu schreiben, die die Aufgaben der Analyseroutine 1210 in einer Weise implementieren, die für die unterschiedlichen Eigenheiten der Weise, in der eine hochparallele Ausführung durch jede der unterschiedlichen der GPUs 1650 bereitgestellt wird, ausgelegt ist.
  • 15A und 15B veranschaulichen zusammen ein Ausführungsbeispiel der Durchführung von Aufgaben, die ausgewählten der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005 zugewiesen sind. 15A veranschaulicht Aspekte der Vorbereitung der Durchführung, die das Kompilieren einer Taskroutine 1211 innerhalb einer beispielhaften Knotenvorrichtung 1500 einschließen können, und 15B veranschaulicht Aspekte der Durchführung einer Aufgabe innerhalb der beispielhaften Knotenvorrichtung 1500 durch Ausführung der entsprechenden CPU-Taskroutine 1571 oder entsprechenden GPU-Taskroutine 1671.
  • Unter Bezugnahme auf 15A können, wie zuvor erörtert, in Ausführungsformen, in denen das verteilte Verarbeitungssystem 1000 eine oder mehrere unterschiedliche Speichervorrichtungen 1100 einschließt (wie beispielsweise das beispielhafte verteilte Verarbeitungssystem 1000 aus 11A), eine oder mehrere Datensatzpartitionen 1131 an die Knotenvorrichtungen 1500 über das Netz 1999 bereitgestellt werden, einschließlich an die dargestellte beispielhafte Knotenvorrichtung 1500. Jedoch können in Ausführungsformen, in denen das verteilte Verarbeitungssystem 1000 keine derartigen unterschiedlichen Speichervorrichtungen einschließt und die Knotenvorrichtungen 1500 eine verteilte Speicherung der Datensätze 1130 bereitstellen (wie beispielsweise das beispielhafte verteilte Verarbeitungssystem 1000 aus 11B), eine oder mehr Datensatzpartitionen 1131, mit denen eine Aufgabe innerhalb der beispielhaften Knotenvorrichtung 1500 durchgeführt werden soll, bereits innerhalb der beispielhaften Knotenvorrichtung 1500 gespeichert sein. Ansonsten können eine derartige oder mehrere Datensatzpartitionen 1131 an die beispielhafte Knotenvorrichtung 1500 über das Netz 1999 von einer anderen der Knotenvorrichtungen 1500 bereitgestellt werden.
  • Wie zuvor erörtert, kann in Ausführungsformen, in der die Koordinierungsvorrichtung 1300 die Taskroutinen 1211 der Analyseroutine 1210 nicht kompiliert, die Koordinierungsvorrichtung 1300 die eine oder mehreren Taskroutinen 1211 der einen oder mehreren zugewiesenen anfänglichen Aufgaben an die ausgewählten Knotenvorrichtungen 1500 verteilen. In derartigen Ausführungsformen, und wie dargestellt, kann jede der Knotenvorrichtungen 1500 die Kompilierroutine 1440 zur Ausführung durch eine CPU 1550 von jeder der Knotenvorrichtungen 1500 speichern. Somit kann nach dem Empfang einer Taskroutine 1211 von der Koordinierungsvorrichtung 1300 eine CPU 1550 der beispielhaften Knotenvorrichtung 1500 die Kompilierroutine 1440 ausführen, um zuerst die Taskroutine 1211 zu analysieren, um zu bestimmen, ob sie für die Umwandlung und Kompilierung zugänglich ist, um eine entsprechende GPU-Taskroutine 1671 zu erzeugen. Falls dies der Fall ist, kann die CPU 1550 veranlasst werden, eine derartige Umwandlung und Kompilierung der Taskroutine 1211 durchzuführen, um so die entsprechende GPU-Taskroutine 1671 zur Ausführung durch eine GPU 1650 der beispielhaften Knotenvorrichtung 1500 zu erzeugen. Falls die Taskroutine 1211 jedoch nicht so zugänglich ist, kann die CPU 1550 veranlasst werden, die Taskroutine 1211 ohne eine derartige Umwandlung zu kompilieren, um die entsprechende CPU-Taskroutine 1571 zu erzeugen.
  • Alternativ kann in Ausführungsformen, in denen die Koordinierungsvorrichtung 1300 die Taskroutinen 1211 der Analyseroutine 1210 kompiliert, die Koordinierungsvorrichtung 1300 die eine oder mehreren entsprechenden CPU-Taskroutinen 1571 und/oder GPU-Taskroutinen 1671 verteilen, die innerhalb der Koordinierungsvorrichtung 1300 von der einen oder den mehreren Taskroutinen 1211 erzeugt wurden. Infolgedessen kann der beispielhafte Knoten 1500 eine CPU-Taskroutine 1571, die von der CPU 1550 ausgeführt werden soll, oder eine GPU-Taskroutine 1671, die von der GPU 1650 ausgeführt werden soll, empfangen, anstelle der entsprechenden Taskroutine 1211, von der eine erzeugt wird.
  • Wie dargestellt, kann die Steuerroutine 1640, die durch die GPU 1650 ausgeführt wird, eine Ausführungskomponente 1641 einschließen, um die GPU 1650 zu veranlassen, die entsprechende GPU-Taskroutine 1671 auszuführen, falls die entsprechende GPU-Taskroutine 1671 von der Taskroutine 1211 der anfänglichen Aufgabe, die der beispielhaften Knotenvorrichtung 1500 zugewiesen ist, erzeugt werden kann (ob innerhalb der Koordinierungsvorrichtung 1300 oder der beispielhaften Knotenvorrichtung 1500). Wie auch dargestellt, kann die Steuerroutine 1540, die durch die CPU 1550 ausgeführt wird, jedoch eine Ausführungskomponente 1541 einschließen, um die CPU 1550 zu veranlassen, die entsprechende CPU-Taskroutine 1571 auszuführen, falls die entsprechende GPU-Taskroutine 1671 nicht von der Taskroutine 1211 der anfänglichen Aufgabe erzeugt werden kann, die der beispielhaften Knotenvorrichtung 1500 zugewiesen ist, so dass die Erzeugung der entsprechenden CPU-Taskroutine 1571 notwendig ist.
  • Unter Bezugnahme auf 15B, und unter kurzer Bezugnahme auf 12, wo die GPU 1650 durch die Ausführungskomponente 1641 veranlasst wird, die GPU-Taskroutine 1671 auszuführen, um die zugewiesene anfängliche Aufgabe mit einer Datensatzpartition 1131 durchzuführen, können Seiten sowohl von der GPU-Taskroutine 1671 als auch der Datensatzpartition 1131 zwischen dem nicht-flüchtigen Speicher 1563 und dem flüchtigen Speicher 1661, mit dem die GPU 1650 gekoppelt ist, ausgetauscht werden. Alternativ, wo die CPU 1550 durch die Ausführungskomponente 1541 veranlasst wird, die CPU-Taskroutine 1571 auszuführen, um die zugewiesene anfängliche Aufgabe mit einer Datensatzpartition 1131 durchzuführen, können Seiten sowohl von der CPU-Taskroutine 1571 als auch der Datensatzpartition 1131 zwischen dem nicht-flüchtigen Speicher 1563 und dem flüchtigen Speicher 1561, mit dem die CPU 1550 gekoppelt ist, ausgetauscht werden. Wie zuvor im Zusammenhang mit 12 erörtert, kann jeder der flüchtigen Speicher 1561 und 1661 einen wesentlich schnelleren Zugriff als der nicht-flüchtige Speicher 1563 auf darin gespeicherte Daten und/oder Routinen erlauben, so dass die CPU 1550 und die GPU 1650 effizienter Routinen ausführen können und Operationen mit Daten durchführen können, die jeweils innerhalb der flüchtigen Speicher 1561 und 1661 gespeichert sind. Jedoch kann jeder der flüchtigen Speicher 1561 und 1661 eine wesentlich geringere Speicherkapazität als der nicht-flüchtige Speicher 1563 aufweisen. Infolgedessen kann die Situation wiederholt auftreten, wenn signifikant mehr (wenn nicht alles) einer relativ großen Datensatzpartition 1131 innerhalb des nicht-flüchtigen Speichers 1563 speicherbar ist, während nur ein relativ kleiner Teil dieser Datensatzpartition 1131 innerhalb eines der flüchtigen Speicher 1561 und 1661 speicherbar ist, wodurch die Verwendung eines Seitenaustausches erforderlich ist.
  • Wie dargestellt, kann die Steuerroutine 1540 auch eine Statuskomponente 1543 einschließen, um die CPU 1550 zu veranlassen, die Netzschnittstelle 1590 des beispielhaften Knotens 1500 zu betreiben, um wiederkehrend aktualisierte Anzeigen des aktuellen Status der Verarbeitungs-, Speicher- und/oder Netzzugriffsressourcen des beispielhaften Knotens 1500 als aktualisierte Instanzen des Knotenstatus 1535 an die Koordinierungsvorrichtung 1300 zu übertragen. Wie zuvor im Zusammenhang mit 12 erörtert, kann die GPU 1650 innerhalb des Grafikcontrollers 1600 keinen Zugriff auf die Netzschnittstelle 1590 haben und/oder kann die erforderlichen Treiberroutinen nicht ausführen, um die Netzschnittstelle 1590 direkt zu betreiben. Somit kann die CPU 1550 durch die Statuskomponente 1543 veranlasst werden, wiederkehrend Anzeigen des Status der GPU 1650 und/oder des flüchtigen Speichers 1661 von der GPU 1650 abzurufen, um sie zu den Anzeigen des Status hinzuzufügen, die im übertragenen Knotenstatus 1535 eingeschlossen sind.
  • 16 veranschaulicht ein Ausführungsbeispiel einer Zuweisung von nächsten Aufgaben, die als Teil der Ausführung einer Analyseroutine durchgeführt werden sollen, an ausgewählte der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005. Wie zuvor in Verbindung mit 14A–B und 15B erörtert, kann der Prozessor 1350 der Koordinierungsvorrichtung 1300 durch die Überwachungskomponente 1545 veranlasst werden, die Netzschnittstelle 1390 wiederkehrend zu betreiben, um die Knotenstatus 1535 zu empfangen, die wiederkehrend von den Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005 über das Netz 1999 übertragen werden.
  • In einigen Ausführungsformen kann der Prozessor 1350 auch durch die Überwachungskomponente 1545 veranlasst werden, Anzeigen der Zeitdauern, die für den Abschluss von Aufgaben, die den Knotenvorrichtungen 1500 zugewiesen sind, erforderlich sind, beizubehalten und wiederkehrend zu aktualisieren. In einigen solcher Ausführungsformen können die Aufgabenverzögerungsdaten 1335 eine getrennte Pro-Aufgabe-Zeit für den Abschluss einschließen, die wiederkehrend als ein Durchschnitt der Zeitdauern, die für jede der mehreren Knotenvorrichtungen 1500 erforderlich sind, um die gleiche Aufgabe abzuschließen, berechnet wird. In Ausführungsformen, in denen die Aufgabe möglicherweise verschiedenen der Knotenvorrichtungen 1500 zugewiesen wurde, in denen sie mit verschiedenen Prozessortypen (z. B. einer CPU 1550 vs. einer GPU 1650 oder verschiedenen Typen von GPUs 1650) ausgeführt werden kann, können innerhalb der Aufgabenverzögerungsdaten 1335 für jeden verschiedenen Typ von Prozessor, der zur Ausführung einer Aufgabe verwendet wird, unterschiedliche Durchschnittszeiten beibehalten werden. Alternativ oder zusätzlich können als ein Mechanismus zur Berücksichtigung von Unterschieden in Ressourcen (einschließlich Verarbeitungsressourcen) zwischen den Knotenvorrichtungen 1500 Durchschnitte relativer Unterschiede in den Zeitdauern für jede Knotenvorrichtung 1500, um zugewiesene Aufgaben abzuschließen, im Vergleich zu anderen Knotenvorrichtungen 1500 in den Aufgabenverzögerungsdaten 1335 eingeschlossen werden.
  • In derartigen Ausführungsformen kann der Prozessor 1350 durch die Zuweisungskomponente 1541 veranlasst werden, die gespeicherten Anzeigen der Zeitdauern zum Abschluss zugewiesener Aufgaben innerhalb der Aufgabenverzögerungsdaten 1335 zu verwenden, um eine oder mehrere Zeitperioden abzuleiten, um die der Prozessor 1350 die Zuweisung einer nächsten Aufgabe mit einer bestimmten Datensatzpartition 1131 an eine Knotenvorrichtung 1500 verzögern kann, die nicht bereits die bestimmte Datensatzpartition 1131 darin gespeichert hat. Bei mehreren Zeitperioden der Verzögerung kann jede von ihnen auf einem anderen Durchschnitt der Abschlusszeiten basieren, die innerhalb der Aufgabenverzögerungsdaten 1335 für eine unterschiedliche Aufgabe gespeichert sind. Wenn Unterschiede in den Ressourcen zwischen den Knotenvorrichtungen 1500 durch Durchschnitte relativer Unterschiede in den Zeitdauern berücksichtigt werden, können derartige Durchschnitte vom Prozessor 1350 verwendet werden, um jede der Zeitperioden für die Verzögerung für eine bestimmte Knotenvorrichtung 1500 zu modifizieren.
  • 17A, 17B und 17C, zusammen genommen in der Reihenfolge von 17A bis 17C, veranschaulichen ein Ausführungsbeispiel der Durchführung von Aufgaben unter mehreren ausgewählten der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005. Insbesondere stellen 17A–C eine beispielhafte Dreiergruppe von Knotenvorrichtungen 1500x, 1500y und 1500z dar, die eine erste Aufgabe mit einem beispielhaften Datensatz 1130a durchführen und dann eine zweite Aufgabe in Verbindung mit der ersten Aufgabe mit dem gleichen beispielhaften Datensatz 1130a durchführen. Auf diese Weise soll jede der beispielhaften Knotenvorrichtungen 1500x–z einen weiteren beispielhaften Datensatz 1130b und dann noch einen weiteren beispielhaften Datensatz 1130c erzeugen. Es sei anzumerken, dass dieses Beispiel, das auf den nur drei Knotenvorrichtungen 1500x–z basiert und die drei Datensätze 1130a–c beinhaltet, die in der Größe klein genug sein können, um auf die nur drei Knotenvorrichtungen 1500 verteilt zu werden, ein bewusst vereinfachtes Beispiel darstellt und hierin für Zwecke der Erklärung und des Verständnisses erörtert wird und nicht als Beschränkung angesehen werden sollte. Insbesondere ist vorgesehen, dass Ausführungsformen wahrscheinlich die Durchführung von Aufgaben mit wesentlich größeren Datensätzen 1130 beinhalten und damit wahrscheinlich die Verwendung von wesentlich mehr Knotenvorrichtungen 1500 beinhalten.
  • Ausgehend von 17A wurde jede der drei Knotenvorrichtungen 1500x–z zugewiesen, um die erste Aufgabe mit einer entsprechenden von drei Datensatzpartitionen 1131ax–az des Datensatzes 1130a durchzuführen, um jeweils eine entsprechende der drei Datensatzpartitionen 1131bx–bz des Datensatzes 1130b zu erzeugen. Darüber hinaus wurde jede der drei Knotenvorrichtungen 1500x–z mit ihrer entsprechenden der drei Datensatzpartitionen 1131ax–az des Datensatzes 1130a von der einen oder den mehreren Speichervorrichtungen 1100 über das Netz 1999 versehen.
  • Wie dargestellt, läuft bei einem oder mehreren Prozessoren der Knotenvorrichtung 1500x (z. B. einer oder mehreren CPUs 1550 und/oder einer oder mehreren GPUs 1650) noch die Durchführung der ersten Aufgabe mit der Datensatzpartition 1131ax, so dass die Datensatzpartition 1131bx noch immer innerhalb der Knotenvorrichtung 1500x erzeugt wird. Zusätzlich kann es sein, dass die Durchführung der ersten Aufgabe mit der Datensatzpartition 1131ax ausreichend Verarbeitungs- und/oder Speicherressourcen der Knotenvorrichtung 1500x verbraucht, dass erachtet wird, dass die Knotenvorrichtung 1500x möglicherweise unzureichende Verarbeitungs- und/oder Speicherressourcen aufweist, um zugewiesen zu werden, eine andere Aufgabe durchzuführen, bis die erste Aufgabe mit der Datensatzpartition 1131ax abgeschlossen wurde. Bei der Durchführung der ersten Aufgabe mit der Datensatzpartition 1131ax, um die Datensatzpartition 1131bx zu erzeugen, kann wenigstens eine Teilmenge von jeder dieser Partitionen innerhalb des nicht-flüchtigen Speichers 1563 der Knotenvorrichtung 1500x gespeichert werden. Darüber hinaus können Seiten dieser beiden Partitionen zwischen dem nichtflüchtigen Speicher 1563 und dem einen oder anderen der flüchtigen Speicher 1561 oder 1661 ausgetauscht werden, abhängig davon, ob die erste Aufgabe durch eine oder mehrere CPUs 1550 oder eine oder mehrere GPUs 1650 der Knotenvorrichtung 1500x durchgeführt wird.
  • Wie auch dargestellt, haben ein oder mehrere Prozessoren der Knotenvorrichtung 1500y bereits die Durchführung der ersten Aufgabe mit der Datensatzpartition 1131ay abgeschlossen, so dass die Datensatzpartition 1131by bereits innerhalb der Knotenvorrichtung 1500y erzeugt und dann zur Speicherung an die eine oder mehreren Speichervorrichtungen 1100 übertragen wurde. Zusätzlich wurde nach dem Abschluss dieser Durchführung der ersten Aufgabe die Knotenvorrichtung 1500y zugewiesen, um die zweite Aufgabe mit der Datensatzpartition 1131ay durchzuführen, um eine Datensatzpartition 1131cy des Datensatzes 1130c zu erzeugen. Wie dargestellt, läuft bei einem oder mehreren Prozessoren der Knotenvorrichtung 1500y noch die Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131ay, so dass die Datensatzpartition 1131cy noch immer innerhalb der Knotenvorrichtung 1500y erzeugt wird. Zusätzlich kann es sein, dass die Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131ay ausreichend Verarbeitungs- und/oder Speicherressourcen der Knotenvorrichtung 1500y verbraucht, dass erachtet wird, dass die Knotenvorrichtung 1500y möglicherweise unzureichende Verarbeitungs- und/oder Speicherressourcen aufweist, um zugewiesen zu werden, eine andere Aufgabe durchzuführen, bis die zweite Aufgabe mit der Datensatzpartition 1131ay abgeschlossen wurde. Da die erste Aufgabe mit der Datensatzpartition 1131ay durchgeführt wurde, um die Datensatzpartition 1131by zu erzeugen, kann wenigstens eine Teilmenge der Partition 1131by eine begrenzte Zeitperiode lang innerhalb des nicht-flüchtigen Speichers 1563 der Knotenvorrichtung 1500y gespeichert bleiben. Bei der Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131ay, um die Datensatzpartition 1131cy zu erzeugen, kann wenigstens eine Teilmenge von jeder dieser Partitionen innerhalb des nicht-flüchtigen Speichers 1563 der Knotenvorrichtung 1500x gespeichert werden. Darüber hinaus können Seiten dieser beiden Datensatzpartitionen zwischen dem nicht-flüchtigen Speicher 1563 und dem einen oder anderen der flüchtigen Speicher 1561 oder 1661 ausgetauscht werden, abhängig davon, ob die zweite Aufgabe durch eine oder mehrere CPUs 1550 oder eine oder mehrere GPUs 1650 der Knotenvorrichtung 1500y durchgeführt wird. Ferner kann es infolge eines derartigen Austausches unwahrscheinlich sein, dass eine beliebige Seite der Datensatzpartition 1131by noch innerhalb des flüchtigen Speichers 1561 oder 1661 gespeichert ist.
  • Wie ferner dargestellt, haben ein oder mehrere Prozessoren der Knotenvorrichtung 1500z bereits die Durchführung der ersten Aufgabe mit der Datensatzpartition 1131az abgeschlossen, so dass die Datensatzpartition 1131bz bereits innerhalb der Knotenvorrichtung 1500z erzeugt und dann zur Speicherung an die eine oder mehreren Speichervorrichtungen 1100 übertragen wurde. Auf ähnliche Weise haben der eine oder die mehreren Prozessoren der Knotenvorrichtung 1500z bereits die Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131az abgeschlossen, so dass die Datensatzpartition 1131cz auch bereits innerhalb der Knotenvorrichtung 1500z erzeugt und dann zur Speicherung an die eine oder mehreren Speichervorrichtungen 1100 übertragen wurde. Daher kann im Gegensatz zu den Knotenvorrichtungen 1500x und 1500y erachtet werden, dass die Knotenvorrichtung 1500z ausreichend verfügbare Verarbeitungs- und Speicherressourcen aufweist, damit die Knotenvorrichtung 1500z zugewiesen werden kann, um eine andere Aufgabe durchzuführen. Infolge der Durchführung der ersten Aufgabe mit der Datensatzpartition 1131az zur Erzeugung der Datensatzpartition 1131bz und infolge der Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131az zur Erzeugung der Datensatzpartition 1131cz kann wenigstens eine Teilmenge von einer oder mehreren der Datensatzpartitionen 1131az, 1131bz und 1131cz eine begrenzte Zeitperiode lang innerhalb des nicht-flüchtigen Speichers 1563 der Knotenvorrichtung 1500z gespeichert bleiben. Auch infolge der Durchführung der zweiten Aufgabe in jüngerer Zeit als die erste Aufgabe können Seiten von einer oder beiden der Datensatzpartitionen 1131az und 1131cz immer noch innerhalb des einen oder des anderen der flüchtigen Speicher 1561 oder 1661 gespeichert sein, abhängig davon, ob die zweite Aufgabe durch eine oder mehrere CPUs 1550 oder eine oder mehrere GPUs 1650 der Knotenvorrichtung 1500z durchgeführt wurde. Es kann jedoch unwahrscheinlich sein, dass eine beliebige Seite der Partition 1131bz immer noch innerhalb des flüchtigen Speichers 1561 oder 1661 gespeichert ist.
  • Somit ist die Knotenvorrichtung 1500z, unter den eben beschriebenen Umständen und wie anhand von gestrichelten Linien in 17B dargestellt, verfügbar, so dass sie zugewiesen werden könnte, um die zweite Aufgabe mit der Datensatzpartition 1131ax des Datensatzes 1130a durchzuführen, um die Datensatzpartition 1131cx des Datensatzes 1130c zu erzeugen. Wie gerade oben bereits erörtert, ist es jedoch die Knotenvorrichtung 1500x, die ursprünglich mit der Datensatzpartition 1131ax von der einen oder den mehreren Speichervorrichtungen 1100 bereitgestellt wurde. Daher wird die Datensatzpartition 1131ax bereits innerhalb des nichtflüchtigen Speichers 1563 der Knotenvorrichtung 1500x gespeichert, so dass die Datensatzpartition 1131ax nicht erneut über das Netz 1999 von der einen oder den mehreren Speichervorrichtungen 1100 übertragen werden müsste, falls die Knotenvorrichtung 1500x zugewiesen werden könnte, um die zweite Aufgabe mit der Datensatzpartition 1131ax durchzuführen. Auch gibt es, wie bereits erwähnt, infolge der laufenden Durchführung der ersten Aufgabe mit der Datensatzpartition 1131ax innerhalb der Knotenvorrichtung 1500x aktuell ein Austauschen von Seiten der Datensatzpartition 1131ax zwischen dem nicht-flüchtigen Speicher 1563 und entweder dem flüchtigen Speicher 1561 oder 1661. Somit sind eine oder mehrere Seiten der Datensatzpartition 1131ax aktuell innerhalb des flüchtigen Speichers 1561 oder 1661 der Knotenvorrichtung 1500x gespeichert, und die relativ schnelle Zuweisung der Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131ax an die Knotenvorrichtung 1500x, nachdem die Knotenvorrichtung 1500x ihre Durchführung der ersten Aufgabe abschließt, kann die zeitlich begrenzte Speicherung von dieser einen oder diesen mehreren Seiten innerhalb des flüchtigen Speichers 1561 oder 1661 nutzen, wodurch der Knotenvorrichtung 1500x ermöglicht werden kann, die Durchführung der zweiten Aufgabe wesentlich schneller zu beginnen.
  • Daher wird, wie anhand von gestrichelten Linien in 17B dargestellt, trotz der Verfügbarkeit der Knotenvorrichtung 1500z, um zugewiesen zu werden, um die zweite Aufgabe mit der Datensatzpartition 1131ax durchzuführen, die Knotenvorrichtung 1500z nicht zugewiesen, dies zu tun. Stattdessen wird der Prozessor 1350 der Koordinierungsvorrichtung 1300 durch die Zuweisungskomponente 1341 veranlasst (unter Bezugnahme auf 16), die Zuweisung der Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131ax an eine beliebige der Knotenvorrichtungen 1500x–z eine Zeitperiode lang zu verzögern, um der Knotenvorrichtung 1500x eine Möglichkeit bereitzustellen, ihre Durchführung der ersten Aufgabe mit der Datensatzpartition 1131ax abzuschließen.
  • Wie bereits erörtert, kann die Dauer der Zeitperiode einer derartigen Verzögerung in einigen Ausführungsformen auf Anzeigen in den wiederkehrend empfangenen Knotenstatus 1535 basieren, wie lange es gedauert hat, bis ein oder mehrere Knoten die gleiche Aufgabe abgeschlossen haben, für die die Zuweisung verzögert wird (z. B. basierend auf einem Durchschnitt, der aus den Zeitdauern erzeugt wird, die für einen oder mehrere Knoten erforderlich sind, um die gleiche Aufgabe abzuschließen). Wie auch erörtert worden ist, kann die Zeitperiode der Verzögerung jedoch auch auf Bestimmungen von Unterschieden in den Zeitdauern basieren, die der Knoten benötigt, wenn er die Möglichkeit erhält, eine Aufgabe abzuschließen, im Vergleich zu den Zeitdauern, die andere Knoten benötigen, um die gleiche Aufgabe abzuschließen. Wie bereits erwähnt, kann eine Berücksichtigung derartiger Unterschiede in den Zeitdauern als wünschenswert erachtet werden, um Unterschiede zu berücksichtigen, die in den verschiedenen Ressourcen vorhanden sind, die in verschiedenen Knotenvorrichtungen 1500 integriert sind. Somit kann im Beispiel aus 17A–C die Zeitperiode der Verzögerung, um der Knotenvorrichtung 1500x eine Möglichkeit zu geben, die erste Aufgabe mit der Datensatzpartition 1131ax abzuschließen, auf der Zeitdauer, die für eine oder beide der Knotenvorrichtungen 1500y und 1500z erforderlich war, um die erste Aufgabe mit ihren jeweiligen Datensatzpartitionen 1131ay und 1131az abzuschließen (z. B. ein Durchschnitt davon), und/oder auf Unterschieden in den Zeitdauern, die die Knotenvorrichtung 1500x benötigt, um Aufgaben abzuschließen, im Vergleich zu den Zeitdauern, die die Knotenvorrichtungen 1500y und/oder 1500z benötigen, um die gleichen Aufgaben abzuschließen, basieren.
  • Unabhängig von der genauen Weise, in der die Zeitperiode der Verzögerung bei der Zuweisung der Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131ax an eine der Knotenvorrichtungen 1550x–z abgeleitet wird, kann der Prozessor 1350 der Koordinierungsvorrichtung 1300 einen Takt 1351 verwenden, der zur Überwachung des Zeitverlaufs in den Prozessor 1350 integriert sein kann (unter Bezugnahme auf 16), um zu bestimmen, wann die Zeitperiode der Verzögerung vollständig abgelaufen ist. Falls die Zeitperiode der Verzögerung vollständig abgelaufen ist, bevor die Knotenvorrichtung 1500x ihre Durchführung der ersten Aufgabe mit der Datensatzpartition 1131ax abschließen kann, dann kann der Prozessor 1350 durch die Zuweisungskomponente 1341 veranlasst werden, die Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131ax an die Knotenvorrichtung 1500z zuzuweisen. Falls, wie in 17C dargestellt, die Knotenvorrichtung 1500x jedoch ihre Durchführung der ersten Aufgabe mit der Datensatzpartition 1131ax abschließt, bevor die Zeitperiode der Verzögerung abläuft, dann kann der Prozessor 1350 veranlasst werden, die Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131ax an die Knotenvorrichtung 1500x zuzuweisen. Wie bereits erwähnt, kann eine derartige Zuweisung der zweiten Aufgabe mit der Datensatzpartition 1131ax an die Knotenvorrichtung 1500x wenigstens die Speicherung wenigstens eines Teils der Datensatzpartition 1131ax innerhalb des nicht-flüchtigen Speichers 1563 nutzen, falls nicht auch noch die Speicherung von einer oder mehreren Seiten der Datensatzpartition 1131ax innerhalb des flüchtigen Speichers 1561 oder 1661.
  • 18A, 18B und 18C, zusammen genommen in der Reihenfolge aus 18A bis 18C, veranschaulichen ein weiteres Ausführungsbeispiel der Durchführung von Aufgaben unter mehreren ausgewählten der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005. Insbesondere stellen 18A–C die gleiche beispielhafte Dreiergruppe von Knotenvorrichtungen 1500x, 1500y und 1500z dar, die eine erste Aufgabe mit einem beispielhaften Datensatz 1130a durchführen, um einen beispielhaften Datensatz 1130b zu erzeugen, und dann eine zweite Aufgabe mit dem beispielhaften Datensatz 1130b durchführen, der durch die Durchführung der ersten Aufgabe erzeugt wird. Bei der Durchführung der zweiten Aufgabe mit dem beispielhaften Datensatz 1130b soll jede der beispielhaften Knotenvorrichtungen 1500x–z noch einen weiteren beispielhaften Datensatz 1130c erzeugen. Wie bei 17A–C sei anzumerken, dass dieses Beispiel, das auf nur drei Knotenvorrichtungen 1500 basiert und die drei Datensätze 1130a–c beinhaltet, die in der Größe klein genug sein können, um auf die nur drei Knotenvorrichtungen 1500x–z verteilt zu werden, ein bewusst vereinfachtes Beispiel darstellt und hierin für Zwecke der Erklärung und des Verständnisses erörtert wird und nicht als Beschränkung angesehen werden sollte. Wie bereits erwähnt, ist vorgesehen, dass Ausführungsformen wahrscheinlich die Durchführung von Aufgaben mit wesentlich größeren Datensätzen 1130 beinhalten und damit wahrscheinlich die Verwendung von wesentlich mehr der Knotenvorrichtungen 1500 beinhalten.
  • Ausgehend von 18A wurde jede der drei Knotenvorrichtungen 1500x–z zugewiesen, um die erste Aufgabe mit einer entsprechenden von drei Datensatzpartitionen 1131ax–az des Datensatzes 1130a durchzuführen, um jeweils eine entsprechende der drei Datensatzpartitionen 1131bx–bz des Datensatzes 1130b zu erzeugen. Wie dargestellt, haben alle drei der Knotenvorrichtungen 1500x–z ihre Durchführungen der ersten Aufgabe abgeschlossen, und jede hat ihre entsprechende der Datensatzpartitionen 1131bx–bz an die eine oder mehreren Speichervorrichtungen 1100 zur Speicherung als Datensatz 1130b übertragen. Um diese Durchführungen der ersten Aufgabe zu ermöglichen, wurde jede der drei Knotenvorrichtungen 1500x–z mit ihrer entsprechenden der drei Datensatzpartitionen 1131ax–az des Datensatzes 1130a von der einen oder den mehreren Speichervorrichtungen 1100 über das Netz 1999 versehen.
  • Nach ihren Abschlüssen der ersten Aufgabe wurde jede der Knotenvorrichtungen 1500y und 1500z zugewiesen, um die zweite Aufgabe mit den Datensatzpartitionen 1131by und 1131bz durchzuführen, die die Knotenvorrichtungen 1500y und 1500z jeweils infolge ihrer Durchführungen der ersten Aufgabe erzeugten. Nach Abschluss der ersten Aufgabe wurde der Knotenvorrichtung 1500x jedoch zugewiesen, eine Aufgabe einer anderen und nicht verwandten Analyseroutine durchzuführen. Wie zuvor erörtert, kann die Zuweisung von Aufgaben unterschiedlicher und nicht verwandter Analyseroutinen in Ausführungsformen erfolgen, in denen das Knotenvorrichtungsgitter 1005 in dem Ausmaß geteilt wird, dass mehrere nicht verwandte Analyseroutinen unter Verwendung der Knotenvorrichtungen 1500 gleichzeitig durchgeführt werden.
  • Wie dargestellt, läuft bei einem oder mehreren Prozessoren der Knotenvorrichtung 1500x (z. B. einer oder mehreren CPUs 1550 und/oder einer oder mehreren GPUs 1650) noch die Durchführung der Aufgabe der nicht verwandten Analyseroutine. Zusätzlich kann es sein, dass die Durchführung der Aufgabe der nicht verwandten Analyseroutine ausreichend Verarbeitungs- und/oder Speicherressourcen der Knotenvorrichtung 1500x verbraucht, dass erachtet wird, dass die Knotenvorrichtung 1500x möglicherweise unzureichende Verarbeitungs- und/oder Speicherressourcen aufweist, um zugewiesen zu werden, eine andere Aufgabe durchzuführen, bis die Aufgabe der nicht verwandten Analyseroutine abgeschlossen wurde. Da die erste Aufgabe mit der Datensatzpartition 1131ax durchgeführt wurde, um die Datensatzpartition 1131bx zu erzeugen, kann wenigstens eine Teilmenge von einer oder beiden der Partitionen 1131ax und 1131bx eine begrenzte Zeitperiode lang innerhalb des nicht-flüchtigen Speichers 1563 der Knotenvorrichtung 1500x gespeichert bleiben. Bei der Durchführung der Aufgabe der nicht verwandten Analyseroutine kann ein Austausch von Seiten einer nicht verwandten Datensatzpartition zwischen dem nicht-flüchtigen Speicher 1563 und dem einen oder anderen der flüchtigen Speicher 1561 oder 1661 erfolgen, abhängig davon, ob die Aufgabe der nicht verwandten Analyseroutine durch eine oder mehrere CPUs 1550 oder eine oder mehrere GPUs 1650 der Knotenvorrichtung 1500x durchgeführt wurde. Ferner kann es infolge eines derartigen Austausches unwahrscheinlich sein, dass eine beliebige Seite der Datensatzpartitionen 1131ax oder 1131bx noch innerhalb des flüchtigen Speichers 1561 oder 1661 gespeichert ist.
  • Wie dargestellt, läuft bei einem oder mehreren Prozessoren der Knotenvorrichtung 1500y noch die Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131by, so dass die Datensatzpartition 1131cy noch immer innerhalb der Knotenvorrichtung 1500y erzeugt wird. Zusätzlich kann es sein, dass die Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131by ausreichend Verarbeitungs- und/oder Speicherressourcen der Knotenvorrichtung 1500y verbraucht, dass erachtet wird, dass die Knotenvorrichtung 1500y möglicherweise unzureichende Verarbeitungs- und/oder Speicherressourcen aufweist, um zugewiesen zu werden, eine andere Aufgabe durchzuführen, bis die zweite Aufgabe mit der Datensatzpartition 1131ay abgeschlossen wurde. Da die erste Aufgabe mit der Datensatzpartition 1131ay durchgeführt wurde, um die Datensatzpartition 1131by zu erzeugen, kann wenigstens eine Teilmenge der Partition 1131ay eine begrenzte Zeitperiode lang innerhalb des nicht-flüchtigen Speichers 1563 der Knotenvorrichtung 1500y gespeichert bleiben. Bei der Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131by, um die Datensatzpartition 1131cy zu erzeugen, kann wenigstens eine Teilmenge von jeder dieser Partitionen innerhalb des nicht-flüchtigen Speichers 1563 der Knotenvorrichtung 1500x gespeichert werden. Darüber hinaus können Seiten dieser beiden Datensatzpartitionen zwischen dem nicht-flüchtigen Speicher 1563 und dem einen oder anderen der flüchtigen Speicher 1561 oder 1661 ausgetauscht werden, abhängig davon, ob die zweite Aufgabe durch eine oder mehrere CPUs 1550 oder eine oder mehrere GPUs 1650 der Knotenvorrichtung 1500y durchgeführt wird. Ferner kann es infolge eines derartigen Austausches unwahrscheinlich sein, dass eine beliebige Seite der Datensatzpartition 1131ay noch innerhalb des flüchtigen Speichers 1561 oder 1661 gespeichert ist.
  • Wie ferner dargestellt, haben ein oder mehrere Prozessoren der Knotenvorrichtung 1500z bereits die Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131bz abgeschlossen, so dass die Datensatzpartition 1131cz bereits innerhalb der Knotenvorrichtung 1500z erzeugt und dann zur Speicherung an die eine oder mehreren Speichervorrichtungen 1100 übertragen wurde. Daher kann im Gegensatz zu den Knotenvorrichtungen 1500x und 1500y erachtet werden, dass die Knotenvorrichtung 1500z ausreichend verfügbare Verarbeitungs- und Speicherressourcen aufweist, damit die Knotenvorrichtung 1500z zugewiesen werden kann, um eine andere Aufgabe durchzuführen. Infolge der Durchführung der ersten Aufgabe mit der Datensatzpartition 1131az zur Erzeugung der Datensatzpartition 1131bz und infolge der Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131bz zur Erzeugung der Datensatzpartition 1131cz kann wenigstens eine Teilmenge von einer oder mehreren der Datensatzpartitionen 1131az, 1131bz und 1131cz eine begrenzte Zeitperiode lang innerhalb des nicht-flüchtigen Speichers 1563 der Knotenvorrichtung 1500z gespeichert bleiben. Auch infolge der Durchführung der zweiten Aufgabe in jüngerer Zeit als die erste Aufgabe können Seiten von einer oder beiden der Datensatzpartitionen 1131bz und 1131cz immer noch innerhalb des einen oder des anderen der flüchtigen Speicher 1561 oder 1661 gespeichert sein, abhängig davon, ob die zweite Aufgabe durch eine oder mehrere CPUs 1550 oder eine oder mehrere GPUs 1650 der Knotenvorrichtung 1500z durchgeführt wurde. Es kann jedoch unwahrscheinlich sein, dass eine beliebige Seite der Partition 1131az immer noch innerhalb des flüchtigen Speichers 1561 oder 1661 gespeichert ist.
  • Somit ist, unter den eben beschriebenen Umständen und wie anhand von gestrichelten Linien in 18B dargestellt, die Knotenvorrichtung 1500z verfügbar, so dass sie für die Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131bx des Datensatzes 1130b zugewiesen werden könnte, um die Datensatzpartition 1131cx des Datensatzes 1130c zu erzeugen. Wie gerade oben bereits erörtert, ist es jedoch die Knotenvorrichtung 1500x, die ursprünglich die Datensatzpartition 1131bx erzeugte. Daher wird die Datensatzpartition 1131bx bereits innerhalb des nicht-flüchtigen Speichers 1563 der Knotenvorrichtung 1500x gespeichert, so dass die Datensatzpartition 1131bx nicht über das Netz 1999 von der einen oder den mehreren Speichervorrichtungen 1100 (oder von der Knotenvorrichtung 1500x) übertragen werden müsste, falls die Knotenvorrichtung 1500x zugewiesen werden könnte, um die zweite Aufgabe mit der Datensatzpartition 1131bx durchzuführen. Somit kann die relativ schnelle Zuweisung der Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131bx an die Knotenvorrichtung 1500x, nachdem die Knotenvorrichtung 1500x ihre Durchführung der Aufgabe der nicht verwandten Analyseroutine abschließt, die zeitlich begrenzte Speicherung der Datensatzpartition 1131bx innerhalb des nicht-flüchtigen Speichers 1563 der Knotenvorrichtung 1500x nutzen, was es der Knotenvorrichtung 1500x ermöglichen kann, die Durchführung der zweiten Aufgabe wesentlich schneller zu beginnen.
  • Daher wird, wie anhand von gestrichelten Linien in 18B dargestellt, trotz der Verfügbarkeit der Knotenvorrichtung 1500z, um zugewiesen zu werden, um die zweite Aufgabe mit der Datensatzpartition 1131bx durchzuführen, die Knotenvorrichtung 1500z nicht zugewiesen, dies zu tun. Stattdessen wird der Prozessor 1350 der Koordinierungsvorrichtung 1300 durch die Zuweisungskomponente 1341 veranlasst (unter Bezugnahme auf 16), die Zuweisung der Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131bx an eine beliebige der Knotenvorrichtungen 1500x–z eine Zeitperiode lang zu verzögern, um der Knotenvorrichtung 1500x eine Möglichkeit bereitzustellen, ihre Durchführung der Aufgabe der nicht verwandten Analyseroutine abzuschließen. Ähnlich wie beim Ausführungsbeispiel aus 17A–C, falls die Zeitperiode der Verzögerung vollständig abgelaufen ist, bevor die Knotenvorrichtung 1500x in der Lage ist, ihre Durchführung der Aufgabe der nicht verwandten Analyseroutine abzuschließen, dann kann der Prozessor 1350 durch die Zuweisungskomponente 1341 veranlasst werden (unter Bezugnahme auf 16), die Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131bx an die Knotenvorrichtung 1500z zuzuweisen. Falls, wie in 18C dargestellt, die Knotenvorrichtung 1500x jedoch ihre Durchführung der Aufgabe der nicht verwandten Analyseroutine abschließt, bevor die Zeitperiode der Verzögerung abläuft, dann kann der Prozessor 1350 veranlasst werden, die Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131bx an die Knotenvorrichtung 1500x zuzuweisen.
  • 19 veranschaulicht ein Ausführungsbeispiel eines Logikflusses 2100. Der Logikfluss 2100 kann repräsentativ für einige oder alle der Operationen sein, die von einer oder mehreren der hierin beschriebenen Ausführungsformen ausgeführt werden. Insbesondere kann der Logikfluss 2100 Operationen veranschaulichen, die durch den Prozessor 1350 bei der Ausführung der Steuerroutine 1340 und/oder der Kompilierroutine 1440 und/oder andere Komponente(n) der Koordinierungsvorrichtung 1300 durchgeführt werden.
  • Bei 2110 kann ein Prozessor einer Koordinierungsvorrichtung eines verteilten Verarbeitungssystems (z. B. der Prozessor 1350 der Koordinierungsvorrichtung 1300 des verteilten Verarbeitungssystems 1000) Knotenstatus analysieren, die die Koordinierungsvorrichtung wiederkehrend von Knotenvorrichtungen eines Gitters von Knotenvorrichtungen empfängt (z. B. die Knotenstatus 1535 der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005), um zu bestimmen, welche Verarbeitungsressourcen innerhalb jeder der Knotenvorrichtungen verfügbar sind. Wie bereits erörtert, können die Knotenstatus 1535, die wiederkehrend durch die Knotenvorrichtungen 1500 an die Koordinierungsvorrichtung 1300 übertragen werden, anzeigen, welche Verarbeitungsressourcen in jede der Knotenvorrichtungen 1500 integriert sind (z. B. welche CPU(s) 1500 und/oder GPU(s) 1600 eingeschlossen sind, welche Verarbeitungsmerkmale von jeder bereitgestellt werden usw.) und/oder in welchem Ausmaß diese Verarbeitungsressourcen aktuell innerhalb jeder der Knotenvorrichtungen 1500 verfügbar sind.
  • Bei 2120 kann der Prozessor der Koordinierungsvorrichtung prüfen, ob in den Knotenstatus irgendwelche GPUs als ausreichend verfügbar innerhalb irgendwelcher der Knotenvorrichtungen angezeigt sind, so dass diesen Knotenvorrichtungen eine Aufgabe zugewiesen werden könnte, um von derartigen verfügbaren GPUs durchgeführt zu werden. Falls keine GPUs so verfügbar sind, kann der Prozessor bei 2122 alle der Taskroutinen einer Analyseroutine kompilieren, die von den CPUs der Knotenvorrichtungen ausgeführt werden sollen (z. B. die Taskroutinen 1211 einer Analyseroutine 1210). Bei 2124 kann der Prozessor dann die Zuweisung aller der Aufgaben der Analyseroutine an Knotenvorrichtungen priorisieren, die ausgewählt wurden, da sie nur eine oder mehrere CPUs integrieren und/oder eine Kombination aus einer oder mehreren CPUs und einer oder mehreren GPUs integrieren.
  • Falls jedoch GPUs vorhanden sind, die bei 2120 als ausreichend verfügbar erachtet werden, dann kann der Prozessor bei 2130 jede der Taskroutinen der Analyseroutine analysieren, um zu bestimmen, ob irgendwelche der Taskroutinen für eine Umwandlung ihrer Anweisungen und eine Kompilierung zugänglich sind, die von den GPUs der Knotenvorrichtungen des Knotenvorrichtungsgitters ausgeführt werden soll. Falls bei 2140 keine derartigen zugänglichen Taskroutinen vorhanden sind, dann kann der Prozessor bei 2122 alle der Taskroutinen der Analyseroutine kompilieren, die durch die CPUs der Knotenvorrichtungen ausgeführt werden sollen. Dann kann der Prozessor bei 2124 erneut die Zuweisung aller der Aufgaben der Analyseroutine an Knotenvorrichtungen priorisieren, die ausgewählt wurden, da sie nur eine oder mehrere CPUs integrieren und/oder eine Kombination aus einer oder mehreren CPUs und einer oder mehreren GPUs integrieren. Wie zuvor erörtert, kann, wenn keine der Taskroutinen 1211 einer Analyseroutine 1210 für die Kompilierung zur Ausführung durch eine GPU 1650 zugänglich sind, die Priorisierung der Zuweisung der Aufgaben einer derartigen Analyseroutine 1210 an Knotenvorrichtungen 1500, die nur CPU(s) 1550 integrieren, falls möglich, und/oder Knotenvorrichtungen 1500, die eine Kombination aus der/den CPUs) 1550 und der/den GPU(s) 1650 integrieren, falls erforderlich, als wünschenswert erachtet werden, um die Zuweisungen von Aufgaben an Knotenvorrichtungen 1500, die GPUs 1650 integrieren, zu minimieren, wenn keine der Aufgaben von einer GPU 1650 ausgeführt werden sollen. Dies kann dazu beitragen, dass die GPUs 1650 der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005 zur Verwendung bei der Durchführung von Aufgaben einer anderen Analyseroutine, die von GPUs durchgeführt werden können, leichter verfügbar bleiben.
  • Falls bei 2140 jedoch wenigstens eine Taskroutine der Analyseroutine vorhanden ist, die für eine derartige Umwandlung und Kompilierung zugänglich ist, kann bei 2150 geprüft werden, ob alle der Taskroutinen der Analyseroutine so zugänglich sind. Falls dies der Fall ist, kann der Prozessor bei 2152 alle der Taskroutinen der Analyseroutine kompilieren, die von den GPUs der Knotenvorrichtungen ausgeführt werden sollen. Bei 2154 kann der Prozessor dann die Zuweisung aller der Aufgaben der Analyseroutine an Knotenvorrichtungen priorisieren, die ausgewählt wurden, da sie nur eine oder mehrere GPUs integrieren und/oder eine Kombination aus einer oder mehreren CPUs und einer oder mehreren GPUs integrieren.
  • Falls bei 2150 jedoch eine Mischung von Taskroutinen vorhanden ist, die für eine derartige Umwandlung und Kompilierung zugänglich und nicht zugänglich sind, dann kann der Prozessor bei 2160 alle der Taskroutinen der Analyseroutine kompilieren, die so zugänglich sind, um von den GPUs der Knotenvorrichtungen ausgeführt zu werden. Bei 2162 kann der Prozessor alle der Taskroutinen der Analyseroutine kompilieren, die nicht so zugänglich sind, um von den CPUs der Knotenvorrichtungen ausgeführt zu werden. Bei 2164 kann der Prozessor dann die Zuweisung aller der Aufgaben der Analyseroutine an Knotenvorrichtungen priorisieren, die ausgewählt wurden, da sie eine Kombination aus einer oder mehreren CPUs und einer oder mehreren GPUs integrieren.
  • 20 veranschaulicht ein Ausführungsbeispiel eines Logikflusses 2200. Der Logikfluss 2200 kann repräsentativ für einige oder alle der Operationen sein, die von einer oder mehreren der hierin beschriebenen Ausführungsformen ausgeführt werden. Insbesondere kann der Logikfluss 2200 Operationen veranschaulichen, die durch die eine oder mehreren CPUs 1550 bei der Ausführung der Steuerroutine 1540 und/oder der Kompilierroutine 1440 und/oder andere Komponente(n) der Knotenvorrichtungen 1500 durchgeführt werden.
  • Bei 2210 kann eine CPU einer Knotenvorrichtung eines verteilten Verarbeitungssystems (z. B. eine CPU 1550 einer der Knotenvorrichtungen 1500 des verteilten Verarbeitungssystems 1000) eine Taskroutine (z. B. eine Taskroutine 1211 einer Analyseroutine 1210) analysieren, um zu bestimmen, ob sie für eine Umwandlung ihrer Anweisungen und eine Kompilierung zugänglich ist, um durch die eine oder mehreren GPUs der Knotenvorrichtung (z. B. eine oder mehrere der GPUs 1650) ausgeführt zu werden. Wie zuvor erörtert, können in Ausführungsformen, in denen die Koordinierungsvorrichtung 1300 die Taskroutinen 1211 nicht kompiliert, eine oder mehrere CPUs 1550 von jeder der Knotenvorrichtungen 1500 dies tun. Auch kann eine derartige Kompilierung eine Analyse jeder Taskroutine 1211 einschließen, die von jeder der Knotenvorrichtungen 1500 empfangen wird, die eine oder mehrere der GPUs 1650 integriert, um zu bestimmen, ob die Kompilierung zur Ausführung durch eine oder mehrere CPUs 1550 oder eine oder mehrere GPUs 1650 ausgeführt werden soll.
  • Falls die Taskroutine bei 2220 nicht so zugänglich ist, dann kann die CPU bei 2222 die Taskroutine der Analyseroutine kompilieren, um durch die eine oder mehreren CPUs der Knotenvorrichtung ausgeführt zu werden. Falls die Taskroutine bei 2220 jedoch so zugänglich ist, dann kann die CPU bei 2230 die Taskroutine der Analyseroutine kompilieren, um durch die eine oder mehreren GPUs der Knotenvorrichtung ausgeführt zu werden.
  • 21 veranschaulicht ein Ausführungsbeispiel eines Logikflusses 2300. Der Logikfluss 2300 kann repräsentativ für einige oder alle der Operationen sein, die von einer oder mehreren der hierin beschriebenen Ausführungsformen ausgeführt werden. Insbesondere kann der Logikfluss 2300 Operationen veranschaulichen, die durch den Prozessor 1350 bei der Ausführung der Steuerroutine 1340 und/oder andere Komponente(n) der Koordinierungsvorrichtung 1300 durchgeführt werden.
  • Bei 2310 kann ein Prozessor einer Koordinierungsvorrichtung eines verteilten Verarbeitungssystems (z. B. der Prozessor 1350 der Koordinierungsvorrichtung 1300 des verteilten Verarbeitungssystems 1000) Metadaten eines Datensatzes empfangen, die beschreibend für einen Datensatz von einer oder mehreren Speichervorrichtungen ist (z. B. die Metadaten 1135 von einer oder mehreren Speichervorrichtungen 1100). Bei 2312 kann der Prozessor eine Analyseroutine empfangen, die mehrere Taskroutinen von der einen oder den mehreren Speichervorrichtungen und/oder einer Betrachtungsvorrichtung einschließt (z. B. die Analyseroutine 1210, die mehrere Taskroutinen 1211 von der einen oder den mehreren Speichervorrichtungen 1100 oder von der Betrachtungsvorrichtung 1800 einschließt). Bei 2314 kann der Prozessor die letzten Übertragungen von Knotenstatusdaten von Knotenvorrichtungen eines Gitters von Knotenvorrichtungen des verteilten Verarbeitungssystems empfangen (z. B. die Knotenstatus 1535 der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005). Wie zuvor erörtert, kann die Koordinierungsvorrichtung 1300 in Ausführungsformen, in denen die Knotenvorrichtungen 1500 auch als Speichervorrichtungen wenigstens des einen oder der mehreren Datensätze 1130 dienen, die Metadaten 1135 und/oder die Analyseroutine von einer der Knotenvorrichtungen 1500 empfangen.
  • Bei 2320 kann der Prozessor anfängliche Zuweisungen von Datensatzpartitionen (z. B. den Datensatzpartitionen 1131) und anfänglichen Aufgaben ableiten, einschließlich einer Auswahl von mehreren der Knotenvorrichtungen, auf die Datensatzpartitionen verteilt werden sollen, und anfängliche Zuweisungen der einen oder mehreren anfänglichen Aufgaben sollen vorgenommen werden. Bei 2322 kann der Prozessor Anzeigen über die zugewiesene Verteilung der Datensatzpartitionen an eine oder mehrere Speichervorrichtungen und/oder an die ausgewählten Knotenvorrichtungen übertragen. Wie bereits erörtert, kann die Verteilung von Datensatzpartitionen auf die ausgewählten Knotenvorrichtungen von der einen oder den mehreren Speichervorrichtungen unter der einen oder den mehreren Speichervorrichtungen, den ausgewählten Knotenvorrichtungen und/oder der Koordinierungsvorrichtung in einer beliebigen Vielzahl von Weisen koordiniert werden, wobei eine beliebige Vielzahl von Protokollen verwendet wird, um die Übertragung der Datensatzpartitionen an die ausgewählten Knotenvorrichtungen zu veranlassen.
  • Bei 2330 kann der Prozessor Anzeigen über die Zuweisung einer ersten Aufgabe an die ausgewählten Knotenvorrichtungen übertragen, die an den ausgewählten Knotenvorrichtungen mit entsprechenden der Datensatzpartitionen durchgeführt werden sollen. Wie bereits erörtert, kann die Übertragung von Taskroutinen der Analyseroutine oder die Übertragung von CPU-Taskroutinen und/oder GPU-Taskroutinen (z. B. der Taskroutinen 1211, der CPU-Taskroutinen 1571 und/oder der GPU-Taskroutinen 1671) an die ausgewählten Knotenvorrichtungen als Teil der Signalisierung von Zuweisungen von Aufgaben an die ausgewählten Knotenvorrichtungen erfolgen.
  • Bei 2340 kann der Prozessor von einer ersten Knotenvorrichtung der ausgewählten Knotenvorrichtungen eine Anzeige über den Abschluss der ersten Aufgabe mit der ersten Datensatzpartition durch die erste Knotenvorrichtung empfangen. Wie bereits erörtert, können derartige Anzeigen als Teil der wiederkehrenden Übertragungen von Knotenstatus 1535 an die Koordinierungsvorrichtung übermittelt werden.
  • Bei 2350 kann der Prozessor die Zuweisung einer Durchführung einer zweiten Aufgabe, die eine zweite Datensatzpartition verwendet, an eine beliebige der ausgewählten Knotenvorrichtungen, einschließlich der ersten Knotenvorrichtung, eine vorbestimmte Zeitperiode der Verzögerung lang verzögern, um einer zweiten Knotenvorrichtung der ausgewählten Knotenvorrichtungen, in denen die zweite Datensatzpartition bereits gespeichert ist, eine Möglichkeit zu geben, verfügbar zu werden. Wie bereits erörtert, kann eine derartige Auferlegung einer Verzögerung bei der Zuweisung einer nächsten Aufgabe mit einer bestimmten Datensatzpartition sein, dass einer Knotenvorrichtung, die diese bestimmte Datensatzpartition bereits speichert, ermöglicht wird, verfügbar zu werden, um die Speicherung dieser bestimmten Datensatzpartition innerhalb dieser Knotenvorrichtung zu nutzen, indem die nächste Aufgabe mit der bestimmten Datensatzpartition dieser Knotenvorrichtung zugewiesen wird. Wie bereits erwähnt, können auf diese Weise die Netzbandbreitenressourcen und die Zeit, die für die Übertragung der bestimmten Datensatzpartition an eine andere Knotenvorrichtung benötigt werden, erspart werden, indem auf diese Weise gewartet wird, dass diese Knotenvorrichtung verfügbar wird.
  • Bei 2360 kann der Prozessor prüfen, ob die zweite Knotenvorrichtung, in der die zweite Datensatzpartition bereits gespeichert ist, am Ende der Zeitperiode der Verzögerung verfügbar wurde. Falls die zweite Knotenvorrichtung innerhalb der Zeitperiode der Verzögerung verfügbar wurde, dann kann der Prozessor eine Anzeige der Zuweisung, um die zweite Aufgabe mit der zweiten Datensatzpartition durchzuführen, bei 2362 an die zweite Knotenvorrichtung übertragen. Falls die zweite Knotenvorrichtung jedoch nicht innerhalb der Zeitperiode der Verzögerung verfügbar wurde, dann kann der Prozessor eine Anzeige der Zuweisung, um die zweite Aufgabe mit der zweiten Datensatzpartition durchzuführen, bei 2370 an die erste Knotenvorrichtung übertragen.
  • 22 veranschaulicht ein Ausführungsbeispiel eines Logikflusses 2400. Der Logikfluss 2300 kann repräsentativ für einige oder alle der Operationen sein, die von einer oder mehreren der hierin beschriebenen Ausführungsformen ausgeführt werden. Insbesondere kann der Logikfluss 2400 Operationen veranschaulichen, die durch den Prozessor 1350 bei der Ausführung der Steuerroutine 1340 und/oder andere Komponente(n) der Koordinierungsvorrichtung 1400 durchgeführt werden.
  • Bei 2410 kann ein Prozessor einer Koordinierungsvorrichtung eines verteilten Verarbeitungssystems (z. B. der Prozessor 1350 der Koordinierungsvorrichtung 1300 des verteilten Verarbeitungssystems 1000) eine Anzeige von einer Knotenvorrichtung eines Knotenvorrichtungsgitters des verteilten Verarbeitungssystems (z. B. einer der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005) empfangen, dass diese Knotenvorrichtung ihre Durchführung einer Taskroutine abgeschlossen hat, die eine Datensatzpartition eines Datensatzes (z. B. eine der Datensatzpartitionen 1131 des Datensatzes 1130) beinhaltet. Bei 2412 kann der Prozessor die Zeitdauer bestimmen, die zwischen seiner Übertragung eines Signals an die Knotenvorrichtung zur Durchführung der Aufgabe mit der Datensatzpartition und dem Empfang der Anzeige von der Knotenvorrichtung über den Abschluss dieser Durchführung dieser Aufgabe abgelaufen ist.
  • Bei 2420 kann der Prozessor die neue abgelaufene Zeit mit vorherigen abgelaufenen Zeiten vergleichen, die von anderen Knotenvorrichtungen benötigt werden, um die gleiche Aufgabe mit ihren entsprechenden Datensatzpartitionen des gleichen Datensatzes durchzuführen. Bei 2422 kann der Prozessor prüfen, ob die neue abgelaufene Zeit ähnlich wie die vorherigen abgelaufenen Zeiten für diese Durchführungen der gleichen Aufgabe innerhalb eines vorbestimmten Schwellenwerts der Ähnlichkeit sind. Falls dies nicht der Fall ist, dann kann der Prozessor die neue abgelaufene Zeit zusammen mit den vorherigen abgelaufenen Zeiten verwenden, um erneut eine Zeitperiode der Verzögerung abzuleiten, um die eine neue Aufgabenzuweisung verzögert werden soll, um den Abschluss der Aufgabe durch einen anderen Knoten zu ermöglichen. Wie bereits erörtert, können derartige Bestimmungen einer Zeitperiode der Verzögerung eine Mittelwertbildung von Zeitdauern, die von verschiedenen der Knotenvorrichtungen 1500 benötigt werden, um die gleiche Aufgabe durchzuführen, zur Folge haben.
  • 23 veranschaulicht ein Ausführungsbeispiel eines Logikflusses 2500. Der Logikfluss 2500 kann repräsentativ für einige oder alle der Operationen sein, die von einer oder mehreren der hierin beschriebenen Ausführungsformen ausgeführt werden. Insbesondere kann der Logikfluss 2500 Operationen veranschaulichen, die durch den Prozessor 1350 bei der Ausführung der Steuerroutine 1340 und/oder andere Komponente(n) der Koordinierungsvorrichtung 1300 durchgeführt werden.
  • Bei 2510 kann ein Prozessor einer Koordinierungsvorrichtung eines verteilten Verarbeitungssystems (z. B. der Prozessor 1350 der Koordinierungsvorrichtung 1300 des verteilten Verarbeitungssystems 1000) von einer ersten Knotenvorrichtung eines Knotenvorrichtungsgitters des verteilten Verarbeitungssystems (z. B. einer der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005) eine Anzeige des Abschlusses einer ersten Aufgabe mit einer ersten Datensatzpartition eines Datensatzes (z. B. einer der Datensatzpartitionen 1131 eines Datensatzes 1130) durch die erste Knotenvorrichtung empfangen. Wie bereits erörtert, können derartige Anzeigen als Teil der wiederkehrenden Übertragungen von Knotenstatus 1535 an die Koordinierungsvorrichtung übermittelt werden.
  • Bei 2520 kann der Prozessor die Zuweisung einer Durchführung einer zweiten Aufgabe, die eine zweite Datensatzpartition des gleichen Datensatzes verwendet, an beliebige Knotenvorrichtungen des Knotenvorrichtungsgitters, einschließlich der ersten Knotenvorrichtung, eine vorbestimmte Zeitperiode der Verzögerung lang verzögern, um einer zweiten Knotenvorrichtung des Knotenvorrichtungsgitters, in der die zweite Datensatzpartition bereits gespeichert ist, eine Möglichkeit zu geben, verfügbar zu werden. Bei 2530 kann der Prozessor prüfen, ob die zweite Knotenvorrichtung, in der die zweite Datensatzpartition bereits gespeichert ist, am Ende der Zeitperiode der Verzögerung verfügbar wurde. Falls die zweite Knotenvorrichtung innerhalb der Zeitperiode der Verzögerung verfügbar wurde, dann kann der Prozessor eine Anzeige der Zuweisung, um die zweite Aufgabe mit der zweiten Datensatzpartition durchzuführen, bei 2532 an die zweite Knotenvorrichtung übertragen.
  • Falls die zweite Knotenvorrichtung bei 2530 jedoch nicht innerhalb der Zeitperiode der Verzögerung verfügbar wurde, dann kann der Prozessor bei 2540 prüfen, ob eine andere Knotenvorrichtung des Knotenvorrichtungsgitters vorhanden war, die mit der zweiten Datensatzpartition versehen war, um die andere Knotenvorrichtung vorzubereiten, um als Backup-Knotenvorrichtung für eine Aufgabe zu dienen, die die zweite Datensatzpartition beinhaltet. Falls keine derartige andere Vorrichtung vorhanden ist, dann kann der Prozessor eine Anzeige über die Zuweisung der Durchführung der zweiten Aufgabe mit der zweiten Datensatzpartition bei 2542 an die erste Knotenvorrichtung übertragen.
  • Falls jedoch bei 2540 eine derartige andere Knotenvorrichtung vorhanden ist, dann kann der Prozessor bei 2550 prüfen, ob eine Anzeige empfangen wurde, dass die andere Knotenvorrichtung aktuell verfügbar ist, um eine Aufgabe zugewiesen zu bekommen. Falls dies nicht der Fall ist, dann kann der Prozessor erneut eine Anzeige über die Zuweisung der Durchführung der zweiten Aufgabe mit der zweiten Datensatzpartition bei 2542 an die erste Knotenvorrichtung übertragen. Falls jedoch eine derartige Anzeige der anderen aktuell verfügbaren Knotenvorrichtung empfangen wurde, dann kann der Prozessor eine Anzeige der Zuweisung der Durchführung der zweiten Aufgabe mit der zweiten Datensatzpartition bei 2552 an die andere Knotenvorrichtung übertragen.
  • In verschiedenen Ausführungsformen kann jeder der Prozessoren 1150, 1350, 1550, 1650 und 1850 einen beliebigen einer Vielzahl von kommerziell erhältlichen Prozessoren einschließen. Ferner können einer oder mehrere dieser Prozessoren mehrere Prozessoren, einen Multithreaded-Prozessor, einen Multikernprozessor (unabhängig davon, ob die mehreren Kerne auf den gleichen oder separaten Dies koexistieren) und/oder eine Multiprozessorarchitektur einer anderen Art einschließen, durch die mehrere physisch getrennte Prozessoren verbunden sind.
  • In einer bestimmten Ausführungsform kann die CPU 1550 von jeder der einen oder den mehreren Knotenvorrichtungen 1500 jedoch ausgewählt werden, um die Analyse mehrerer Instanzen von Auftragsflüssen wenigstens teilweise parallel effizient durchzuführen. Beispielhaft kann die CPU 1550 eine Single-Instruction-Multiple-Data(SIMD)-Architektur integrieren, kann mehrere Verarbeitungs-Pipelines integrieren und/oder kann die Fähigkeit zur Unterstützung mehrerer simultaner Threads der Ausführung pro Verarbeitungs-Pipeline integrieren.
  • Alternativ oder zusätzlich kann in einer bestimmten Ausführungsform jede GPU 1650 der einen oder mehreren Knotenvorrichtungen, die wenigstens eine der GPUs 1650 einschließen können, Multithreaded-Fähigkeiten und/oder mehrere Prozessorkerne integrieren, um parallele Durchführungen von Aufgaben zu ermöglichen. Beispielhaft kann die GPU 1650 eine interne Architektur integrieren, die ausgelegt ist, um parallele Durchführungen von Aufgaben zu ermöglichen, die einen relativ begrenzten Anweisungssatz über Hunderte, Tausende, Zehntausende oder noch mehr Threads der Ausführung verwenden, um Grafikanwendungen zu unterstützen, die relativ hochauflösende Bilder beinhalten.
  • In verschiedenen Ausführungsformen kann jede der Steuerroutinen 1140, 1340, 1540, 1840 und 1640, einschließlich der Komponenten, aus denen jede zusammengesetzt ist, ausgewählt werden, dass sie auf jeder Art von Prozessor oder Prozessoren betriebsfähig sind, die ausgewählt werden, um anwendbare der Prozessoren 1150, 1350, 1550, 1850 und/oder 1650 innerhalb der entsprechenden der Vorrichtungen 1100, 1300, 1500 und/oder des Grafikcontrollers 1600 zu implementieren. In verschiedenen Ausführungsformen kann jede dieser Routinen eines oder mehrere aus einem Betriebssystem, Gerätetreibern und/oder Routinen auf Anwendungsebene einschließen (z. B. sogenannte „Software-Suiten”, die auf Disc-Medien bereitgestellt werden, „Applets”, die von einem entfernten Server erhalten werden, usw.). Wenn ein Betriebssystem eingeschlossen ist, kann es sich bei dem Betriebssystem um ein beliebiges einer Vielzahl von verfügbaren Betriebssystemen handeln, die für die Prozessoren 1150, 1550 und/oder 1850 geeignet sind. Wenn ein oder mehrere Gerätetreiber eingeschlossen sind, können diese Gerätetreiber Unterstützung für beliebige einer Vielzahl anderer Komponenten, ob Hardware- oder Softwarekomponenten, der Vorrichtungen 1100, 1300, 1500, 1800 und/oder 1600 bereitstellen.
  • In verschiedenen Ausführungsformen kann jeder der Speicher 1160, 1360, 1560, 1660 und 1860 auf beliebigen einer Vielzahl von Informationsspeichertechnologien basieren, einschließlich flüchtiger Technologien, die die unterbrechungsfreie Bereitstellung von elektrischer Leistung erfordern, und/oder Technologien, die den Einsatz von maschinenlesbaren Speichermedien beinhalten, die entfernbar sein können oder nicht. Somit kann jeder dieser Speicher einen beliebigen einer Vielzahl von Typen (oder Kombinationen von Typen) von Speichervorrichtung einschließen, einschließlich, ohne Einschränkung: Nur-Lese-Speicher (Read-Only Memory, ROM), Direktzugriffsspeicher (Random-Access Memory, RAM), dynamisches RAM (DRAM), DRAM mit doppelter Datenrate (Double-Data-Rate DRAM, DDR-DRAM), synchrones DRAM (SDRAM), statisches RAM (SRAM), programmierbares ROM (PROM), löschbares programmierbares ROM (Erasable Programmable ROM, EPROM), elektrisch löschbares programmierbares ROM (Electrically Erasable Programmable ROM, EEPROM), Flash-Speicher, Polymerspeicher (z. B. ferroelektrischer Polymerspeicher), Ovonic-Speicher, Phasenwechsel- oder ferroelektrischer Speicher, Silizium-Oxid-Nitrid-Oxid-Silizium(SONOS)-Speicher, magnetische oder optische Karten, ein oder mehrere einzelne ferromagnetische Plattenlaufwerke, nicht-flüchtiges Storage Class Memory, oder eine Mehrzahl von Speichervorrichtungen, die in einem oder mehreren Arrays organisiert sind (z. B. mehrere ferromagnetische Plattenlaufwerke, die in einem redundanten Array unabhängiger Festplatten (Redundant Array of Independent Disks, RAID) organisiert sind). Es sei anzumerken, dass, obwohl jeder dieser Speicher als ein einzelner Block dargestellt wird, einer oder mehrere davon mehrere Speichervorrichtungen einschließen können, die auf unterschiedlichen Speichertechnologien basieren können. Somit können beispielsweise einer oder mehrere von jedem dieser dargestellten Speicher eine Kombination von einem optischen Laufwerk oder Flash-Speicherkartenleser, durch die Programme und/oder Daten auf irgendeiner Form eines maschinenlesbaren Speichermediums gespeichert und übermittelt werden können, einem ferromagnetischen Plattenlaufwerk, um Programme und/oder Daten einen relativ längeren Zeitraum lang lokal zu speichern, und einer oder mehreren flüchtigen Festkörperspeichervorrichtungen, die einen relativ schnellen Zugriff auf Programme und/oder Daten ermöglichen (z. B. SRAM oder DRAM), repräsentieren. Es sei auch anzumerken, dass jeder dieser Speicher aus mehreren Speicherkomponenten, die auf einer identischen Speichertechnologie basieren, bestehen kann, die jedoch infolge der Spezialisierung in der Verwendung separat geführt werden können (z. B. werden einige DRAM-Vorrichtungen als ein Hauptspeicher verwendet, während andere DRAM-Vorrichtungen als ein unterschiedlicher Framebuffer eines Grafikcontrollers verwendet werden).
  • In einer bestimmten Ausführungsform kann der Speicher 1160 jedoch in Ausführungsformen, in denen die eine oder mehreren der Speichervorrichtungen 1100 die Speicherung eines oder mehrerer Datensätze 1130 bereitstellen oder in denen der nicht-flüchtige Speicher 1563 in Ausführungsformen, in denen die Knotenvorrichtungen 1500 die Speicherung eines oder mehrerer Datensätze 1130 bereitstellen, mit einem redundanten Array unabhängiger Festplatten (Redundant Array of Independent Disks, RAID) eines RAID-Levels implementiert werden, der ausgewählt wurde, um Fehlertoleranz für die Speicherung eines oder mehrerer Datensätze 1130 bereitzustellen.
  • In verschiedenen Ausführungsformen kann jede der Eingabevorrichtungen 1320 und 1820 jeweils beliebige einer Vielzahl von Typen von Eingabevorrichtung sein, die jeweils beliebige einer Vielzahl von Eingabeerkennungs- und/oder Empfangstechnologien verwenden kann. Beispiele für derartige Eingabevorrichtungen umfassen unter anderem Mikrofone, Fernbedienungen, Eingabestifte, Kartenleser, Fingerabdruckleser, Virtual-Reality-Interaktionshandschuhe, grafische Eingabetablets, Joysticks, Tastaturen, Netzhaut-Scanner, die Berührungseingabekomponenten von Berührungsbildschirmen, Trackballs, Umgebungssensoren und/oder entweder Kameras oder Kameraanordnungen zur Überwachung der Bewegung von Personen, um Befehle und/oder Daten zu akzeptieren, die von diesen Personen mittels Gesten und/oder Mimik bereitgestellt werden.
  • In verschiedenen Ausführungsformen kann jede der Anzeigen 1380 und 1880 jeweils beliebige einer Vielzahl von Typen von Anzeigevorrichtung sein, die jeweils beliebige einer Vielzahl von visuellen Präsentationstechnologien verwenden kann. Beispiele für eine derartige Anzeigevorrichtung umfassen unter anderem eine Kathodenstrahlröhre (Cathode-Ray Tube, CRT), ein Elektrolumineszenz(EL)-Panel, eine Flüssigkristallanzeige (Liquid Crystal Display, LCD), eine Gasplasmaanzeige usw. In einigen Ausführungsformen können die Anzeigen 1180 und/oder 1880 jeweils eine Berührungsbildschirmanzeige sein, so dass die Eingabevorrichtungen 1110 und/oder 1810 jeweils als berührungsempfindliche Komponenten davon darin integriert sein können.
  • In verschiedenen Ausführungsformen kann jede der Netzschnittstellen 1190, 1390, 1590 und 1890 beliebige einer Vielzahl von Kommunikationstechnologien verwenden, um diesen Vorrichtungen zu ermöglichen, wie beschrieben mit anderen Vorrichtungen gekoppelt zu werden. Jede dieser Schnittstellen schließt Schaltungen ein, die wenigstens einen Teil der erforderlichen Funktionalität bereitstellen, um eine derartige Kopplung zu ermöglichen. Jede dieser Schnittstellen kann jedoch auch wenigstens teilweise mit Sequenzen von Anweisungen implementiert werden, die von entsprechenden der Prozessoren ausgeführt werden (z. B. zur Implementierung eines Protokollstapels oder anderer Merkmale). Wenn elektrische und/oder optisch leitfähige Verkabelung verwendet wird, können diese Schnittstellen Timings und/oder Protokolle verwenden, die mit beliebigen einer Vielzahl von Industriestandards übereinstimmen, einschließlich, ohne Einschränkung, RS-232C, RS-422, USB, Ethernet (IEEE-802.3) oder IEEE-1394. Wenn die Verwendung drahtloser Übertragungen beinhaltet ist, können diese Schnittstellen Timings und/oder Protokolle verwenden, die mit beliebigen einer Vielzahl von Industriestandards übereinstimmen, einschließlich, ohne Einschränkung: IEEE 802.11a, 802.11ad, 802.11ah, 802.11ax, 802.11b, 802.11g, 802.16, 802.20 (allgemein als „Mobile Broadband Wireless Access” bezeichnet); Bluetooth; ZigBee; oder einem zellularen Funktelefondienst wie beispielsweise GSM mit General Packet Radio Service (GSM/GPRS), CDMA/1xRTT, Enhanced Data Rates for Global Evolution (EDGE), Evolution Data Only/Optimized (EV-DO), Evolution For Data and Voice (EV-DV), High Speed Downlink Packet Access (HSDPA), High Speed Uplink Packet Access (HSUPA), 4G LTE usw.
  • In einer bestimmten Ausführungsform können eine oder mehrere der Netzschnittstellen 1190, 1390 und/oder 1590 jedoch mit mehreren kupferbasierten oder faseroptikbasierten Netzschnittstellenanschlüssen implementiert werden, um redundante und/oder parallele Pfade beim Austauschen einer oder mehrerer der Datensatzpartitionen 1131, der Taskroutinen 1211, der CPU-Taskroutinen 1571 und/oder der GPU-Taskroutinen 1671 bereitzustellen.
  • In verschiedenen Ausführungsformen können die Aufteilung von Verarbeitungs- und/oder Speicherressourcen auf die Knotenvorrichtungen 1300 und/oder die API-Architekturen, die zur Unterstützung der Kommunikation zwischen den Knotenvorrichtungen und anderen Vorrichtungen verwendet werden, ausgelegt sein und/oder ausgewählt werden, um mit beliebigen einer Vielzahl von Standards für die verteilte Verarbeitung übereinzustimmen, einschließlich unter anderem IEEE P2413, AllJoyn, IoTivity usw. Beispielhaft kann eine Teilmenge von API- und/oder anderen architektonischen Merkmalen eines oder mehrerer derartiger Standards verwendet werden, um das hierin beschriebene relativ minimale Ausmaß an Koordinierung zu implementieren, um eine größere Effizienz bei der Parallelisierung der Verarbeitung von Daten zu bieten, während gleichzeitig ein Austausch von koordinierenden Informationen minimiert wird, der zu unerwünschten Instanzen von Serialisierung zwischen Prozessen führen kann. Es sei jedoch anzumerken, dass die Parallelisierung der Speicherung, des Abrufs und/oder der Verarbeitung von Teilen der Datensätze 1130 nicht von bestehenden API-Architekturen und/oder unterstützenden Kommunikationsprotokollen abhängt oder durch sie eingeschränkt ist. Allgemeiner ausgedrückt, gibt es nichts in der Art und Weise, in der die Datensätze 1130 bei der Speicherung, Übertragung und/oder Verteilung über das Netz 1999 organisiert werden können, das an bestehende API-Architekturen oder Protokolle gebunden ist.
  • Einige Systeme können Hadoop® verwenden, ein Open-Source-Framework zur Speicherung und Analyse von Big Data in einer verteilten Rechenumgebung. Einige Systeme können Cloud-Computing verwenden, das den ubiquitären, bequemen Netzzugriff bei Bedarf auf einen gemeinsam genutzten Pool konfigurierbarer Rechenressourcen (z. B. Netze, Server, Speicher, Anwendungen und Dienste) ermöglichen kann, die mit minimalem Verwaltungsaufwand oder minimaler Dienstanbieterinteraktion schnell bereitgestellt und freigegeben werden können. Einige Gittersysteme können als Hadoop® Cluster mit mehreren Knoten implementiert werden, wie von Fachleuten auf dem Gebiet verstanden wird. ApacheTM Hadoop® ist ein Open-Source-Software-Framework für verteiltes Rechnen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • IEEE-802.3 [0290]
    • IEEE-1394 [0290]
    • IEEE 802.11a [0290]
    • 802.11ad [0290]
    • 802.11ah [0290]
    • 802.11ax [0290]
    • 802.11b [0290]
    • 802.11g [0290]
    • 802.16 [0290]
    • 802.20 [0290]
    • IEEE P2413 [0292]

Claims (30)

  1. Vorrichtung, umfassend einen Prozessor und einen Speicher, um Anweisungen zu speichern, die, wenn sie durch den Prozessor ausgeführt werden, den Prozessor veranlassen, Operationen durchzuführen, umfassend: Analysieren eines aktuellen Status von Ressourcen von wenigstens einer Knotenvorrichtung einer Mehrzahl von Knotenvorrichtungen, um eine Verfügbarkeit von wenigstens einer Grafikverarbeitungseinheit (Graphics Processing Unit, GPU) der wenigstens einen Knotenvorrichtung zu bestimmen, die zugewiesen werden soll, um eine erste Aufgabe einer Analyseroutine durchzuführen, wobei: der Betrieb der Mehrzahl von Knotenvorrichtungen koordiniert ist, um Aufgaben von Analyseroutinen wenigstens teilweise parallel durchzuführen; die Analyseroutine zur Ausführung durch wenigstens eine zentrale Verarbeitungseinheit (Central Processing Unit, CPU) des wenigstens einen Knotens erzeugt wird; und die Ressourcen der wenigstens einen Knotenvorrichtung aus einer Gruppe bestehend aus der wenigstens einen CPU, der wenigstens einen GPU und Speicherplatz innerhalb wenigstens eines Speichers der wenigstens einen Knotenvorrichtung ausgewählt werden; in Reaktion auf eine Bestimmung, dass die wenigstens eine GPU verfügbar ist, um zugewiesen zu werden, die erste Aufgabe der Analyseroutine durchzuführen: Analysieren einer ersten Taskroutine der Analyseroutine, um zu bestimmen, ob die erste Taskroutine kompiliert werden kann, um eine GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU zu erzeugen, um zu veranlassen, dass die wenigstens eine GPU mehrere Instanzen der ersten Aufgabe der Analyseroutine wenigstens teilweise parallel ohne eine Abhängigkeit zwischen Eingaben und Ausgaben der mehreren Instanzen der ersten Aufgabe durchführt, wobei: die erste Taskroutine zur Ausführung durch die wenigstens eine CPU erzeugt wird, um die erste Aufgabe der Analyseroutine durchzuführen; und die Bestimmung, ob die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen, eine Bestimmung, ob die erste Taskroutine eine Anweisung umfasst, die die Kompilierung verhindert, um die GPU-Taskroutine zu erzeugen, und eine Bestimmung, ob Eingaben und Ausgaben der ersten Taskroutine definiert sind, um die Abhängigkeit nicht zu erfordern, umfasst; und in Reaktion auf eine Bestimmung, dass die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen: Zuweisen einer Datensatzpartition einer Mehrzahl von Datensatzpartitionen eines Datensatzes an die wenigstens eine Knotenvorrichtung, um Zugriff auf die Datensatzpartition durch die wenigstens eine GPU zu ermöglichen; Verwenden einer Umwandlungsregel, um wenigstens eine Anweisung der ersten Taskroutine in wenigstens eine entsprechende Anweisung der GPU-Taskroutine umzuwandeln; Kompilieren der wenigstens einen entsprechenden Anweisung der GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU; und Zuweisen einer Durchführung der ersten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der mehreren Instanzen der ersten Aufgabe mit der Datensatzpartition durch die wenigstens eine GPU zu ermöglichen.
  2. Vorrichtung nach Anspruch 1, wobei zum Bestimmen, ob die erste Taskroutine eine Anweisung umfasst, die die Kompilierung verhindert, um die GPU-Taskroutine zu erzeugen, der Prozessor veranlasst wird zum: Bestimmen, ob die Anweisung der ersten Taskroutine in einem Satz von Anweisungen eingeschlossen ist, die nicht in wenigstens eine Anweisung umgewandelt werden können, die von der wenigstens einen GPU ausgeführt werden kann; und in Reaktion auf eine Bestimmung, dass die Anweisung der ersten Taskroutine nicht im Satz von Anweisungen eingeschlossen ist, Bestimmen, ob die Anweisung der ersten Taskroutine in der ersten Taskroutine in einer Weise verwendet wird, die eine Umwandlung in wenigstens eine Anweisung verhindert, die von der wenigstens einen GPU ausgeführt werden kann.
  3. Vorrichtung nach Anspruch 1, wobei zum Umwandeln der wenigstens einen Anweisung der ersten Taskroutine in die wenigstens eine entsprechende Anweisung der GPU-Taskroutine der Prozessor veranlasst wird, die wenigstens eine Anweisung der ersten Taskroutine von einer ersten Programmiersprache in die wenigstens eine entsprechende Anweisung in einer zweiten Programmiersprache gemäß der Umwandlungsregel umzuwandeln.
  4. Vorrichtung nach Anspruch 1, wobei: der wenigstens eine Speicher der wenigstens einen Knotenvorrichtung einen ersten flüchtigen Speicher, der kommunikativ mit der wenigstens einen CPU gekoppelt ist, und einen zweiten flüchtigen Speicher, der kommunikativ mit der wenigstens einen GPU gekoppelt ist, umfasst; das Zuweisen der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um Zugriff auf die Datensatzpartition durch die wenigstens eine GPU zu ermöglichen, umfasst, dass veranlasst wird, dass die Datensatzpartition innerhalb des zweiten flüchtigen Speichers gespeichert wird; und in Reaktion auf eine Bestimmung, dass die wenigstens eine GPU nicht verfügbar ist, um zugewiesen zu werden, die erste Aufgabe der Analyseroutine durchzuführen, der Prozessor veranlasst wird, Operationen durchzuführen, umfassend: Unterlassen der Analyse der ersten Taskroutine, um zu bestimmen, ob die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen; Zuweisen der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um eine Speicherung der Datensatzpartition innerhalb des ersten flüchtigen Speichers zu veranlassen, Zugriff auf die Datensatzpartition durch die wenigstens eine CPU zu ermöglichen; Kompilieren der ersten Taskroutine zur Ausführung durch die wenigstens eine CPU; und Zuweisen der Durchführung der ersten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der ersten Aufgabe mit der Datensatzpartition durch die wenigstens eine CPU zu ermöglichen.
  5. Vorrichtung nach Anspruch 1, wobei: die Vorrichtung eine Koordinierungsvorrichtung umfasst, die den Betrieb der Mehrzahl von Knotenvorrichtungen koordiniert; der Prozessor veranlasst wird, wiederkehrend Aktualisierungen für den aktuellen Status von jeder Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen zu empfangen; und um den aktuellen Status zu analysieren, um die Verfügbarkeit der wenigstens einen GPU der wenigstens einen Knotenvorrichtung zu bestimmen, der Prozessor veranlasst wird, eine Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen zu identifizieren, die eine GPU integriert, die durch den aktuellen Status als verfügbar angezeigt wird.
  6. Vorrichtung nach Anspruch 5, wobei zum Zuweisen der Datensatzpartition des Datensatzes an die wenigstens eine Knotenvorrichtung der Prozessor veranlasst wird, Operationen durchzuführen, umfassend: Analysieren von Metadaten, die indikativ für strukturelle Merkmale des Datensatzes sind, um eine Beschränkung in einer Weise zu identifizieren, in der der Datensatz in die Mehrzahl von Datensatzpartitionen aufgeteilt werden kann, wobei die Beschränkung aus einer Gruppe bestehend aus einer Anzeige einer kleinsten atomaren Einheit von Daten innerhalb des Datensatzes und einer Spezifikation eines Partitionierungsschemas ausgewählt ist; und Ableiten einer Aufteilung des Datensatzes in die Mehrzahl von Datensatzpartitionen wenigstens teilweise basierend auf der Beschränkung.
  7. Vorrichtung nach Anspruch 6, wobei der Prozessor veranlasst wird, Operationen durchzuführen, umfassend: Abrufen der Metadaten aus wenigstens einer Speichervorrichtung, bei der der Datensatz gespeichert ist; und Übertragen einer Anzeige der Zuweisung der Datensatzpartition an die wenigstens eine Knotenvorrichtung oder die wenigstens eine Speichervorrichtung, um eine Übertragung der Datensatzpartition von der wenigstens einen Speichervorrichtung an die wenigstens eine Knotenvorrichtung zu veranlassen.
  8. Vorrichtung nach Anspruch 1, wobei: die Vorrichtung eine Knotenvorrichtung der wenigstens einen Knotenvorrichtung umfasst; die Knotenvorrichtung eine GPU der wenigstens einen GPU umfasst; der Prozessor eine CPU der wenigstens einen CPU umfasst; und um den aktuellen Status zu analysieren, um die Verfügbarkeit der wenigstens einen GPU der wenigstens einen Knotenvorrichtung zu bestimmen, die CPU veranlasst wird, zu bestimmen, ob die GPU der Knotenvorrichtung durch den aktuellen Status als verfügbar angezeigt wird.
  9. Vorrichtung nach Anspruch 1, wobei der Prozessor veranlasst wird, Operationen durchzuführen, umfassend: Analysieren einer zweiten Taskroutine der Analyseroutine, um zu bestimmen, ob die zweite Taskroutine kompiliert werden kann, um eine andere GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU zu erzeugen, um zu veranlassen, dass die wenigstens eine GPU mehrere Instanzen der zweiten Aufgabe der Analyseroutine wenigstens teilweise parallel ohne eine Abhängigkeit zwischen Eingaben und Ausgaben der mehreren Instanzen der zweiten Aufgabe durchführt, wobei die zweite Taskroutine zur Ausführung durch die wenigstens eine CPU erzeugt wird, um eine zweite Aufgabe der Analyseroutine durchzuführen; und in Reaktion auf eine Bestimmung, dass die zweite Taskroutine nicht kompiliert werden kann, um die andere GPU-Taskroutine zu erzeugen: Kompilieren der zweiten Taskroutine zur Ausführung durch die wenigstens eine CPU; und Zuweisen einer Durchführung der zweiten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der zweiten Aufgabe mit der Datensatzpartition durch die wenigstens eine CPU zu ermöglichen.
  10. Vorrichtung nach Anspruch 1, wobei die Umwandlungsregel aus einer Gruppe ausgewählt ist, bestehend aus: einer Spezifikation eines Satzes von Anweisungen, von denen jede die Kompilierung der ersten Taskroutine verhindert, um die GPU-Taskroutine zu erzeugen, falls sie innerhalb der ersten Taskroutine vorhanden ist; einer Spezifikation eines Satzes von Anweisungen, von denen jede die Kompilierung der ersten Taskroutine nicht verhindern würde, um die GPU-Taskroutine zu erzeugen, falls sie innerhalb der ersten Taskroutine vorhanden ist; einer Spezifikation einer Weise der Verwendung einer Anweisung, die die Kompilierung der ersten Taskroutine verhindert, um die GPU-Taskroutine zu erzeugen, falls die Weise der Verwendung der Anweisung innerhalb der ersten Taskroutine auftritt, wobei das Vorhandensein der Anweisung innerhalb der ersten Taskroutine ansonsten nicht die Kompilierung der ersten Taskroutine zur Erzeugung der GPU-Taskroutine verhindert; einer Spezifikation einer Prozedur zum Umwandeln von Anweisungen in der ersten Taskroutine, die in einer Schleife durch die wenigstens eine CPU ausgeführt werden sollen, in entsprechende Anweisungen der GPU-Taskroutine, die parallel durch die wenigstens eine GPU in einer entsprechenden Schleife mit weniger Iterationen als die Schleife ausgeführt werden sollen; einer Spezifikation einer Prozedur zum Umwandeln von Anweisungen in der ersten Taskroutine, die in einer Schleife durch die wenigstens eine CPU ausgeführt werden sollen, in entsprechende Anweisungen der GPU-Taskroutine, die parallel durch die wenigstens eine GPU und nicht in einer Schleife ausgeführt werden sollen; und einer Spezifikation einer Prozedur zum Umwandeln von Anweisungen in der ersten Taskroutine, die eine Datenstruktur definieren, umfassend Einträge, auf die sequentiell während der Ausführung der ersten Taskroutine durch die wenigstens eine CPU zugegriffen werden soll, in entsprechende Anweisungen der GPU-Taskroutine, die eine entsprechende Datenstruktur definieren, umfassend Einträge, auf die während der Ausführung der GPU-Taskroutine durch die wenigstens eine GPU parallel zugegriffen werden soll.
  11. Computerprogrammprodukt, das in einem nicht-transitorischen maschinenlesbaren Speichermedium konkret ausgeführt ist, wobei das Computerprogrammprodukt Anweisungen umfasst, die betriebsfähig sind, um zu veranlassen, dass ein Prozessor Operationen durchführt, umfassend: Analysieren eines aktuellen Status von Ressourcen von wenigstens einer Knotenvorrichtung einer Mehrzahl von Knotenvorrichtungen, um eine Verfügbarkeit von wenigstens einer Grafikverarbeitungseinheit (Graphics Processing Unit, GPU) der wenigstens einen Knotenvorrichtung zu bestimmen, die zugewiesen werden soll, um eine erste Aufgabe einer Analyseroutine durchzuführen, wobei: der Betrieb der Mehrzahl von Knotenvorrichtungen koordiniert ist, um Aufgaben der Analyseroutine wenigstens teilweise parallel durchzuführen; die Analyseroutine zur Ausführung durch wenigstens eine zentrale Verarbeitungseinheit (Central Processing Unit, CPU) des wenigstens einen Knotens erzeugt wird; und die Ressourcen der wenigstens einen Knotenvorrichtung aus einer Gruppe bestehend aus der wenigstens einen CPU, der wenigstens einen GPU und Speicherplatz innerhalb wenigstens eines Speichers der wenigstens einen Knotenvorrichtung ausgewählt werden; in Reaktion auf eine Bestimmung, dass die wenigstens eine GPU verfügbar ist, um zugewiesen zu werden, die erste Aufgabe der Analyseroutine durchzuführen: Analysieren einer ersten Taskroutine der Analyseroutine, um zu bestimmen, ob die erste Taskroutine kompiliert werden kann, um eine GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU zu erzeugen, um zu veranlassen, dass die wenigstens eine GPU mehrere Instanzen der ersten Aufgabe der Analyseroutine wenigstens teilweise parallel ohne eine Abhängigkeit zwischen Eingaben und Ausgaben der mehreren Instanzen der ersten Aufgabe durchführt, wobei: die erste Taskroutine zur Ausführung durch die wenigstens eine CPU erzeugt wird, um die erste Aufgabe der Analyseroutine durchzuführen; und die Bestimmung, ob die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen, eine Bestimmung, ob die erste Taskroutine eine Anweisung umfasst, die die Kompilierung verhindert, um die GPU-Taskroutine zu erzeugen, und eine Bestimmung, ob Eingaben und Ausgaben der ersten Taskroutine definiert sind, um die Abhängigkeit nicht zu erfordern, umfasst; und in Reaktion auf eine Bestimmung, dass die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen: Zuweisen einer Datensatzpartition einer Mehrzahl von Datensatzpartitionen eines Datensatzes an die wenigstens eine Knotenvorrichtung, um Zugriff auf die Datensatzpartition durch die wenigstens eine GPU zu ermöglichen; Verwenden einer Umwandlungsregel, um wenigstens eine Anweisung der ersten Taskroutine in wenigstens eine entsprechende Anweisung der GPU-Taskroutine umzuwandeln; Kompilieren der wenigstens einen entsprechenden Anweisung der GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU; und Zuweisen einer Durchführung der ersten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der mehreren Instanzen der ersten Aufgabe mit der Datensatzpartition durch die wenigstens eine GPU zu ermöglichen.
  12. Computerprogrammprodukt nach Anspruch 11, wobei zum Bestimmen, ob die erste Taskroutine eine Anweisung umfasst, die die Kompilierung verhindert, um die GPU-Taskroutine zu erzeugen, der Prozessor veranlasst wird zum: Bestimmen, ob die Anweisung der ersten Taskroutine in einem Satz von Anweisungen eingeschlossen ist, die nicht in wenigstens eine Anweisung umgewandelt werden können, die von der wenigstens einen GPU ausgeführt werden kann; und in Reaktion auf eine Bestimmung, dass die Anweisung der ersten Taskroutine nicht im Satz von Anweisungen eingeschlossen ist, Bestimmen, ob die Anweisung der ersten Taskroutine in der ersten Taskroutine in einer Weise verwendet wird, die eine Umwandlung in wenigstens eine Anweisung verhindert, die von der wenigstens einen GPU ausgeführt werden kann.
  13. Computerprogrammprodukt nach Anspruch 11, wobei zum Umwandeln der wenigstens einen Anweisung der ersten Taskroutine in die wenigstens eine entsprechende Anweisung der GPU-Taskroutine der Prozessor veranlasst wird, die wenigstens eine Anweisung der ersten Taskroutine von einer ersten Programmiersprache in die wenigstens eine entsprechende Anweisung in einer zweiten Programmiersprache gemäß der Umwandlungsregel umzuwandeln.
  14. Computerprogrammprodukt nach Anspruch 11, wobei: der wenigstens eine Speicher der wenigstens einen Knotenvorrichtung einen ersten flüchtigen Speicher, der kommunikativ mit der wenigstens einen CPU gekoppelt ist, und einen zweiten flüchtigen Speicher, der kommunikativ mit der wenigstens einen GPU gekoppelt ist, umfasst; das Zuweisen der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um Zugriff auf die Datensatzpartition durch die wenigstens eine GPU zu ermöglichen, umfasst, dass veranlasst wird, dass die Datensatzpartition innerhalb des zweiten flüchtigen Speichers gespeichert wird; und in Reaktion auf eine Bestimmung, dass die wenigstens eine GPU nicht verfügbar ist, um zugewiesen zu werden, die erste Aufgabe der Analyseroutine durchzuführen, der Prozessor veranlasst wird, Operationen durchzuführen, umfassend: Unterlassen der Analyse der ersten Taskroutine, um zu bestimmen, ob die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen; Zuweisen der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um eine Speicherung der Datensatzpartition innerhalb des ersten flüchtigen Speichers zu veranlassen, Zugriff auf die Datensatzpartition durch die wenigstens eine CPU zu ermöglichen; Kompilieren der ersten Taskroutine zur Ausführung durch die wenigstens eine CPU; und Zuweisen der Durchführung der ersten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der ersten Aufgabe mit der Datensatzpartition durch die wenigstens eine CPU zu ermöglichen.
  15. Computerprogrammprodukt nach Anspruch 11, wobei: der Prozessor eine Komponente einer Koordinierungsvorrichtung ist, die den Betrieb der Mehrzahl von Knotenvorrichtungen koordiniert; der Prozessor veranlasst wird, wiederkehrend Aktualisierungen für den aktuellen Status von jeder Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen zu empfangen; und um den aktuellen Status zu analysieren, um die Verfügbarkeit der wenigstens einen GPU der wenigstens einen Knotenvorrichtung zu bestimmen, der Prozessor veranlasst wird, eine Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen zu identifizieren, die eine GPU integriert, die im aktuellen Status als verfügbar angezeigt wird.
  16. Computerprogrammprodukt nach Anspruch 15, wobei zum Zuweisen der Datensatzpartition des Datensatzes an die wenigstens eine Knotenvorrichtung der Prozessor veranlasst wird, Operationen durchzuführen, umfassend: Analysieren von Metadaten, die indikativ für strukturelle Merkmale des Datensatzes sind, um eine Beschränkung in einer Weise zu identifizieren, in der der Datensatz in die Mehrzahl von Datensatzpartitionen aufgeteilt werden kann, wobei die Beschränkung aus einer Gruppe bestehend aus einer Anzeige einer kleinsten atomaren Einheit von Daten innerhalb des Datensatzes und einer Spezifikation eines Partitionierungsschemas ausgewählt ist; und Ableiten einer Aufteilung des Datensatzes in die Mehrzahl von Datensatzpartitionen wenigstens teilweise basierend auf der Beschränkung.
  17. Computerprogrammprodukt nach Anspruch 16, wobei der Prozessor veranlasst wird, Operationen durchzuführen, umfassend: Abrufen der Metadaten aus wenigstens einer Speichervorrichtung, bei der der Datensatz gespeichert ist; und Übertragen einer Anzeige der Zuweisung der Datensatzpartition an die wenigstens eine Knotenvorrichtung oder die wenigstens eine Speichervorrichtung, um eine Übertragung der Datensatzpartition von der wenigstens einen Speichervorrichtung an die wenigstens eine Knotenvorrichtung zu veranlassen.
  18. Computerprogrammprodukt nach Anspruch 11, wobei: der Prozessor eine CPU der wenigstens einen CPU umfasst; die CPU eine Komponente einer Knotenvorrichtung der wenigstens einen Knotenvorrichtung ist; die Knotenvorrichtung eine GPU der wenigstens einen GPU umfasst; und um den aktuellen Status zu analysieren, um die Verfügbarkeit der wenigstens einen GPU der wenigstens einen Knotenvorrichtung zu bestimmen, die CPU veranlasst wird, zu bestimmen, ob die GPU der Knotenvorrichtung durch den aktuellen Status als verfügbar angezeigt wird.
  19. Computerprogrammprodukt nach Anspruch 11, wobei der Prozessor veranlasst wird, Operationen durchzuführen, umfassend: Analysieren einer zweiten Taskroutine der Analyseroutine, um zu bestimmen, ob die zweite Taskroutine kompiliert werden kann, um eine andere GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU zu erzeugen, um zu veranlassen, dass die wenigstens eine GPU mehrere Instanzen der zweiten Aufgabe der Analyseroutine wenigstens teilweise parallel ohne eine Abhängigkeit zwischen Eingaben und Ausgaben der mehreren Instanzen der zweiten Aufgabe durchführt, wobei die zweite Taskroutine zur Ausführung durch die wenigstens eine CPU erzeugt wird, um eine zweite Aufgabe der Analyseroutine durchzuführen; und in Reaktion auf eine Bestimmung, dass die zweite Taskroutine nicht kompiliert werden kann, um die andere GPU-Taskroutine zu erzeugen: Kompilieren der zweiten Taskroutine zur Ausführung durch die wenigstens eine CPU; und Zuweisen einer Durchführung der zweiten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der zweiten Aufgabe mit der Datensatzpartition durch die wenigstens eine CPU zu ermöglichen.
  20. Computerprogrammprodukt nach Anspruch 11, wobei die wenigstens eine GPU die Ausführung der wenigstens einen entsprechenden Anweisung der GPU-Taskroutine parallel über wenigstens eintausend Threads der Ausführung unterstützt.
  21. Computerimplementiertes Verfahren, umfassend: Analysieren eines aktuellen Status von Ressourcen von wenigstens einer Knotenvorrichtung einer Mehrzahl von Knotenvorrichtungen, um eine Verfügbarkeit von wenigstens einer Grafikverarbeitungseinheit (Graphics Processing Unit, GPU) der wenigstens einen Knotenvorrichtung zu bestimmen, die zugewiesen werden soll, um eine erste Aufgabe einer Analyseroutine durchzuführen, wobei: der Betrieb der Mehrzahl von Knotenvorrichtungen koordiniert ist, um Aufgaben von Analyseroutinen wenigstens teilweise parallel durchzuführen; die Analyseroutine zur Ausführung durch wenigstens eine zentrale Verarbeitungseinheit (Central Processing Unit, CPU) des wenigstens einen Knotens erzeugt wird; und die Ressourcen der wenigstens einen Knotenvorrichtung aus einer Gruppe bestehend aus der wenigstens einen CPU, der wenigstens einen GPU und Speicherplatz innerhalb wenigstens eines Speichers der wenigstens einen Knotenvorrichtung ausgewählt werden; in Reaktion auf eine Bestimmung, dass die wenigstens eine GPU verfügbar ist, um zugewiesen zu werden, die erste Aufgabe der Analyseroutine durchzuführen: Analysieren einer ersten Taskroutine der Analyseroutine, um zu bestimmen, ob die erste Taskroutine kompiliert werden kann, um eine GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU zu erzeugen, um zu veranlassen, dass die wenigstens eine GPU mehrere Instanzen der ersten Aufgabe der Analyseroutine wenigstens teilweise parallel ohne eine Abhängigkeit zwischen Eingaben und Ausgaben der mehreren Instanzen der ersten Aufgabe durchführt, wobei: die erste Taskroutine zur Ausführung durch die wenigstens eine CPU erzeugt wird, um die erste Aufgabe der Analyseroutine durchzuführen; und die Bestimmung, ob die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen, eine Bestimmung, ob die erste Taskroutine eine Anweisung umfasst, die die Kompilierung verhindert, um die GPU-Taskroutine zu erzeugen, und eine Bestimmung, ob Eingaben und Ausgaben der ersten Taskroutine definiert sind, um die Abhängigkeit nicht zu erfordern, umfasst; und in Reaktion auf eine Bestimmung, dass die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen: Zuweisen einer Datensatzpartition einer Mehrzahl von Datensatzpartitionen eines Datensatzes an die wenigstens eine Knotenvorrichtung, um Zugriff auf die Datensatzpartition durch die wenigstens eine GPU zu ermöglichen; Verwenden einer Umwandlungsregel, um wenigstens eine Anweisung der ersten Taskroutine in wenigstens eine entsprechende Anweisung der GPU-Taskroutine umzuwandeln; Kompilieren der wenigstens einen entsprechenden Anweisung der GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU; und Zuweisen einer Durchführung der ersten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der mehreren Instanzen der ersten Aufgabe mit der Datensatzpartition durch die wenigstens eine GPU zu ermöglichen.
  22. Computerimplementiertes Verfahren nach Anspruch 21, wobei das Bestimmen, ob die erste Taskroutine eine Anweisung umfasst, die die Kompilierung verhindert, um die GPU-Taskroutine zu erzeugen, umfasst: Bestimmen, ob die Anweisung der ersten Taskroutine in einem Satz von Anweisungen eingeschlossen ist, die nicht in wenigstens eine Anweisung umgewandelt werden können, die von der wenigstens einen GPU ausgeführt werden kann; und in Reaktion auf eine Bestimmung, dass die Anweisung der ersten Taskroutine nicht im Satz von Anweisungen eingeschlossen ist, Bestimmen, ob die Anweisung der ersten Taskroutine in der ersten Taskroutine in einer Weise verwendet wird, die eine Umwandlung in wenigstens eine Anweisung verhindert, die von der wenigstens einen GPU ausgeführt werden kann.
  23. Computerimplementiertes Verfahren nach Anspruch 21, wobei das Umwandeln der wenigstens einen Anweisung der ersten Taskroutine in die wenigstens eine entsprechende Anweisung der GPU-Taskroutine umfasst, die wenigstens eine Anweisung der ersten Taskroutine von einer ersten Programmiersprache in die wenigstens eine entsprechende Anweisung in einer zweiten Programmiersprache gemäß der Umwandlungsregel umzuwandeln.
  24. Computerimplementiertes Verfahren nach Anspruch 21, wobei: der wenigstens eine Speicher der wenigstens einen Knotenvorrichtung einen ersten flüchtigen Speicher, der kommunikativ mit der wenigstens einen CPU gekoppelt ist, und einen zweiten flüchtigen Speicher, der kommunikativ mit der wenigstens einen GPU gekoppelt ist, umfasst; das Zuweisen der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um Zugriff auf die Datensatzpartition durch die wenigstens eine GPU zu ermöglichen, umfasst, dass veranlasst wird, dass die Datensatzpartition innerhalb des zweiten flüchtigen Speichers gespeichert wird; und in Reaktion auf eine Bestimmung, dass die wenigstens eine GPU nicht verfügbar ist, um zugewiesen zu werden, die erste Aufgabe der Analyseroutine durchzuführen, das Verfahren umfasst: Unterlassen der Analyse der ersten Taskroutine, um zu bestimmen, ob die erste Taskroutine kompiliert werden kann, um die GPU-Taskroutine zu erzeugen; Zuweisen der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um eine Speicherung der Datensatzpartition innerhalb des ersten flüchtigen Speichers zu veranlassen, Zugriff auf die Datensatzpartition durch die wenigstens eine CPU zu ermöglichen; Kompilieren der ersten Taskroutine zur Ausführung durch die wenigstens eine CPU; und Zuweisen der Durchführung der ersten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der ersten Aufgabe mit der Datensatzpartition durch die wenigstens eine CPU zu ermöglichen.
  25. Computerimplementiertes Verfahren nach Anspruch 21, wobei: eine Koordinierungsvorrichtung den Betrieb der Mehrzahl von Knotenvorrichtungen koordiniert; die Koordinierungsvorrichtung wiederkehrend Aktualisierungen für den aktuellen Status von jeder Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen empfängt; und das Analysieren des aktuellen Status, um die Verfügbarkeit der wenigstens einen GPU der wenigstens einen Knotenvorrichtung zu bestimmen, das Identifizieren an der Koordinierungsvorrichtung einer Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen, die eine GPU integriert, die im aktuellen Status als verfügbar angezeigt wird, umfasst.
  26. Computerimplementiertes Verfahren nach Anspruch 25, wobei das Zuweisen der Datensatzpartition des Datensatzes an die wenigstens eine Knotenvorrichtung umfasst: Analysieren, an der Koordinierungsvorrichtung, von Metadaten, die indikativ für strukturelle Merkmale des Datensatzes sind, um eine Beschränkung in einer Weise zu identifizieren, in der der Datensatz in die Mehrzahl von Datensatzpartitionen aufgeteilt werden kann, wobei die Beschränkung aus einer Gruppe bestehend aus einer Anzeige einer kleinsten atomaren Einheit von Daten innerhalb des Datensatzes und einer Spezifikation eines Partitionierungsschemas ausgewählt ist; und Ableiten einer Aufteilung des Datensatzes in die Mehrzahl von Datensatzpartitionen wenigstens teilweise basierend auf der Beschränkung.
  27. Computerimplementiertes Verfahren nach Anspruch 26, umfassend: Abrufen der Metadaten aus wenigstens einer Speichervorrichtung, bei der der Datensatz gespeichert ist; und Übertragen einer Anzeige der Zuweisung der Datensatzpartition an die wenigstens eine Knotenvorrichtung oder die wenigstens eine Speichervorrichtung, um eine Übertragung der Datensatzpartition von der wenigstens einen Speichervorrichtung an die wenigstens eine Knotenvorrichtung zu veranlassen.
  28. Computerimplementiertes Verfahren nach Anspruch 21, wobei: das Analysieren des akuellen Zustands, um die Verfügbarkeit der wenigstens einen GPU der wenigstens einen Knotenvorrichtung zu bestimmen, das Analysieren eines aktuellen Status der Knotenvorrichtung durch eine CPU einer Knotenvorrichtung umfasst, ob eine GPU der Knotenvorrichtung aktuell verfügbar ist, wobei: die wenigstens eine CPU die CPU umfasst; die wenigstens eine Knotenvorrichtung die Knotenvorrichtung umfasst; und die wenigstens eine GPU die GPU umfasst.
  29. Computerimplementiertes Verfahren nach Anspruch 21, umfassend: Analysieren einer zweiten Taskroutine der Analyseroutine, um zu bestimmen, ob die zweite Taskroutine kompiliert werden kann, um eine andere GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU zu erzeugen, um zu veranlassen, dass die wenigstens eine GPU mehrere Instanzen der zweiten Aufgabe der Analyseroutine wenigstens teilweise parallel ohne eine Abhängigkeit zwischen Eingaben und Ausgaben der mehreren Instanzen der zweiten Aufgabe durchführt, wobei die zweite Taskroutine zur Ausführung durch die wenigstens eine CPU erzeugt wird, um eine zweite Aufgabe der Analyseroutine durchzuführen; und in Reaktion auf eine Bestimmung, dass die zweite Taskroutine nicht kompiliert werden kann, um die andere GPU-Taskroutine zu erzeugen: Kompilieren der zweiten Taskroutine zur Ausführung durch die wenigstens eine CPU; und Zuweisen einer Durchführung der zweiten Aufgabe der Analyseroutine mit der Datensatzpartition an die wenigstens eine Knotenvorrichtung, um die Durchführung der zweiten Aufgabe mit den Datensatzpartitionen durch die wenigstens eine CPU zu ermöglichen.
  30. Computerimplementiertes Verfahren nach Anspruch 29, umfassend Analysieren der Analyseroutine, um eine Reihenfolge von Aufgaben der Analyseroutine zu bestimmen, wobei die Reihenfolge der Aufgaben eine relative Reihenfolge der ersten und zweiten Aufgaben umfasst.
DE102017213160.8A 2016-08-25 2017-07-31 Kompilierung für knotenvorrichtungs-GPU-basierte Parallelverarbeitung Active DE102017213160B4 (de)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201662379512P 2016-08-25 2016-08-25
US62/379,512 2016-08-25
US201662394411P 2016-09-14 2016-09-14
US62/394,411 2016-09-14
US15/422,285 US9760376B1 (en) 2016-02-01 2017-02-01 Compilation for node device GPU-based parallel processing
US15/422,285 2017-02-01

Publications (2)

Publication Number Publication Date
DE102017213160A1 true DE102017213160A1 (de) 2018-03-01
DE102017213160B4 DE102017213160B4 (de) 2023-05-25

Family

ID=59778869

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102017213160.8A Active DE102017213160B4 (de) 2016-08-25 2017-07-31 Kompilierung für knotenvorrichtungs-GPU-basierte Parallelverarbeitung

Country Status (9)

Country Link
CN (1) CN107783782B (de)
BE (1) BE1025002B1 (de)
CA (1) CA2974556C (de)
DE (1) DE102017213160B4 (de)
DK (1) DK179709B1 (de)
FR (1) FR3055438B1 (de)
GB (1) GB2553424B (de)
HK (1) HK1245439B (de)
NO (1) NO343250B1 (de)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111327921A (zh) * 2018-12-17 2020-06-23 深圳市炜博科技有限公司 视频数据处理方法及设备
CN109743453B (zh) * 2018-12-29 2021-01-05 出门问问信息科技有限公司 一种分屏显示方法及装置
CN110163791B (zh) * 2019-05-21 2020-04-17 中科驭数(北京)科技有限公司 数据计算流图的gpu处理方法及装置
CN111984322B (zh) * 2020-09-07 2023-03-24 北京航天数据股份有限公司 一种控制指令传输方法及装置
CN112783506B (zh) * 2021-01-29 2022-09-30 展讯通信(上海)有限公司 一种模型运行方法及相关装置
CN118227384A (zh) * 2024-05-24 2024-06-21 北京蓝耘科技股份有限公司 一种局域gpu数据共享方法、***及存储介质

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8134561B2 (en) * 2004-04-16 2012-03-13 Apple Inc. System for optimizing graphics operations
US8549500B2 (en) * 2007-02-14 2013-10-01 The Mathworks, Inc. Saving and loading graphical processing unit (GPU) arrays providing high computational capabilities in a computing environment
US8938723B1 (en) * 2009-08-03 2015-01-20 Parallels IP Holdings GmbH Use of GPU for support and acceleration of virtual machines and virtual environments
US8310492B2 (en) * 2009-09-03 2012-11-13 Ati Technologies Ulc Hardware-based scheduling of GPU work
US8769510B2 (en) * 2010-04-08 2014-07-01 The Mathworks, Inc. Identification and translation of program code executable by a graphical processing unit (GPU)
DE102013208418A1 (de) * 2012-05-09 2013-11-14 Nvidia Corp. Verfahren und System zur separaten Kompilierung von Geräte-Code, welcher in Host-Code eingebettet ist
US9152601B2 (en) * 2013-05-09 2015-10-06 Advanced Micro Devices, Inc. Power-efficient nested map-reduce execution on a cloud of heterogeneous accelerated processing units
EP2887219A1 (de) * 2013-12-23 2015-06-24 Deutsche Telekom AG System und Verfahren zur mobilen erweiterten Realitätsaufgabenplanung
US9632761B2 (en) * 2014-01-13 2017-04-25 Red Hat, Inc. Distribute workload of an application to a graphics processing unit
US9235871B2 (en) * 2014-02-06 2016-01-12 Oxide Interactive, LLC Method and system of a command buffer between a CPU and GPU

Non-Patent Citations (13)

* Cited by examiner, † Cited by third party
Title
802.11ad
802.11ah
802.11ax
802.11b
802.11g
802.16
802.20
Hong, C. et al.: MapCG: Writing Parallel Program Portable between CPU and GPU. In: Proceedings of the PACT'10, September 11 – 15, Vienna, Austria, 2010. pp. 217 - 226
IEEE 802.11a
IEEE P2413
IEEE-1394
IEEE-802.3
Suchard, M.A. et al.: Understanding GPU Programming for Statistical Computation: studies im Massively Parallel Massive Mixtures.PMCID: PMC2945379 in <https://www.ncbi.nlm.nih.gov/pmc/> am 25.9.2010

Also Published As

Publication number Publication date
FR3055438B1 (fr) 2022-07-29
DK201770596A1 (en) 2018-03-12
BE1025002A1 (fr) 2018-09-14
FR3055438A1 (fr) 2018-03-02
GB201712171D0 (en) 2017-09-13
CA2974556C (en) 2018-06-05
BE1025002B1 (fr) 2018-09-17
GB2553424B (en) 2018-11-21
NO20171277A1 (en) 2018-02-26
DK179709B1 (en) 2019-04-09
NO343250B1 (en) 2018-12-27
DE102017213160B4 (de) 2023-05-25
CN107783782A (zh) 2018-03-09
HK1245439B (zh) 2019-12-06
CN107783782B (zh) 2019-03-15
GB2553424A (en) 2018-03-07
CA2974556A1 (en) 2018-02-25

Similar Documents

Publication Publication Date Title
DE112016001075T5 (de) Verteiltes speichern und abrufen von datensätzen
US9900378B2 (en) Node device function and cache aware task assignment
DE102017213160A1 (de) Kompilierung für knotenvorrichtungs-GPU-basierte Parallelverarbeitung
US10078710B2 (en) Distributed data set storage and analysis reproducibility
DE102020208110A1 (de) Verfahren und vorrichtungen zum aggregieren von telemetriedaten in einer edge-umgebung
US9817882B2 (en) Dynamic distributed generation of data representations from highly condensed data
DE112015005728B4 (de) Automatisches Auffinden von Konfigurationselementen
DE112019004301T5 (de) Verbesserter prozess der programmierung von feldprogrammierbaren gate-arrays unter verwendung einer partiellen rekonfiguration
US9785467B1 (en) Threadsafe use of non-threadsafe libraries with multi-threaded processes
US20160292324A1 (en) Systems and methods for predicting performance
US9742867B1 (en) Network data retrieval
DE112016003355T5 (de) Sicherer Einsatz einer Anwendung über Einsatzorte hinweg
DE202020005715U1 (de) Dynamische Maskierung geteilter Datenobjekte
DE112018004345T5 (de) Gebäudemanagementsystem mit datenaufnahme in intelligente entitäten und schnittstelle von intelligenten entitäten mit unternehmensanwendungen
US20160164899A1 (en) Data-oriented information technology system
DE112018002955T5 (de) Kognitive datei- und objektverwaltung für verteilte speicherumgebungen
DE102022120616A1 (de) Selbstheilung und Rechenzentren
DE112021004577T5 (de) Verwalten eines aufgabenablaufs in einer edge-datenverarbeitungsumgebung
DE112021003274T5 (de) Ressourcenzuordnung zum optimieren von hyperparametern bei umfangreichen deep-learning-arbeitslasten
US9778876B1 (en) Load balanced access to distributed storage of data cubes
DE112021004854T5 (de) Dynamische ersetzung von verarbeitungselementen mit einem leistungsabfall in streaming-anwendungen
DE102021130397A1 (de) Aspektorientiertes streams-computing
DE102022114661A1 (de) Rack-komponenten-erkennungs- und kommunikationsfeld
EP4062289A1 (de) Speicherung und wiederauffindung von verteilten säulenförmigen datensätzen
DE112019005842T5 (de) Skalierbare architektur für eine verteilte zeitreihendatenbank

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R006 Appeal filed
R008 Case pending at federal patent court
R019 Grant decision by federal patent court
R020 Patent grant now final