DE102017213160B4 - Compilation for node device GPU-based parallel processing - Google Patents

Compilation for node device GPU-based parallel processing Download PDF

Info

Publication number
DE102017213160B4
DE102017213160B4 DE102017213160.8A DE102017213160A DE102017213160B4 DE 102017213160 B4 DE102017213160 B4 DE 102017213160B4 DE 102017213160 A DE102017213160 A DE 102017213160A DE 102017213160 B4 DE102017213160 B4 DE 102017213160B4
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.)
Active
Application number
DE102017213160.8A
Other languages
German (de)
Other versions
DE102017213160A1 (en
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/en
Application granted granted Critical
Publication of DE102017213160B4 publication Critical patent/DE102017213160B4/en
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/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/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/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, 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, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, 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

Abstract

Computerimplementiertes Verfahren zur wenigstens teilweise parallelen Durchführung von Aufgaben von Analyseroutinen mittels einer Mehrzahl von Knotenvorrichtungen (1500), umfassend:Empfangen einer Analyseroutine, die ausführbare Anweisungen für eine oder mehrere Aufgaben in Form von Taskroutinen zur Ausführung durch wenigstens eine zentrale Verarbeitungseinheit (Central Processing Unit, CPU) einer Knotenvorrichtung umfasst, die mit wenigstens einem Datensatz durchgeführt werden sollen,Analysieren eines aktuellen Status von Ressourcen von wenigstens einer - Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen, um eine Verfügbarkeit von wenigstens einer Grafikverarbeitungseinheit (Graphics Processing Unit, GPU) der wenigstens einen Knotenvorrichtung zu bestimmen,wobei die genannten Ressourcen zumindest eine CPU und zumindest eine GPU umfassen, und. wenn das Bestimmen ergibt, dass wenigstens eine GPU der wenigstens einen Knotenvorrichtung für die Zuweisung einer ersten Aufgabe der Analyseroutine in Form einer ersten Taskroutine verfügbar ist,Analysieren der ersten Taskroutine, ob diese in eine GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU kompiliert werden kann, so dass die wenigstens eine GPU mehrere Instanzen der ersten Aufgabe der Analyseroutine wenigstens teilweise parallel durchführen kann,wobei das Analysieren umfasst, ob die erste Taskroutine eine Anweisung umfasst, die eine Kompilierung zur Erzeugung einer GPU-Taskroutine verhindert, und ob Eingaben und Ausgaben der ersten Taskroutine Abhängigkeiten aufweisen, die eine Kompilierung zur Erzeugung einer GPU-Taskroutine verhindern,wenn das Analysieren ergibt, dass die erste Taskroutine in eine GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU kompiliert werden kann,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; Zuweisen einer Datensatzpartition des Datensatzes an die wenigstens eine Knotenvorrichtung, um Zugriff auf die Datensatzpartition durch die wenigstens eine GPU zu ermöglichen, undZuweisen einer Durchführung der GPU-Taskroutine an die wenigstens eine Knotenvorrichtung, um die Durchführung der mehreren Instanzen der ersten Aufgabe mit der Datensatzpartition durch die wenigstens eine GPU mittels der GPU-Taskroutine zu ermöglichen.A computer-implemented method for performing analysis routine tasks, at least partially in parallel, by means of a plurality of node devices (1500), comprising:receiving an analysis routine that contains executable instructions for one or more tasks in the form of task routines for execution by at least one central processing unit (Central Processing Unit, CPU) of a node device to be performed on at least one data set,analyzing a current status of resources of at least one node device of the plurality of node devices to determine availability of at least one graphics processing unit (GPU) of the at least one node device determine,said resources comprising at least one CPU and at least one GPU, and. if the determining indicates that at least one GPU of the at least one node device is available for assignment of a first task of the analysis routine in the form of a first task routine,analyzing the first task routine to compile into a GPU task routine for execution by the at least one GPU such that the at least one GPU can perform multiple instances of the first task of the analysis routine, at least in part, in parallel, the analyzing comprising whether the first task routine includes an instruction that prevents compilation to produce a GPU task routine, and whether inputs and outputs the first task routine have dependencies that prevent compilation to create a GPU task routine, if the analyzing indicates that the first task routine can be compiled into a GPU task routine for execution by the at least one GPU,using a conversion rule to generate at least one instruction convert the first task routine into at least one corresponding GPU task routine instruction;compiling the at least one corresponding GPU task routine instruction for execution by the at least one GPU; assigning a dataset partition of the dataset to the at least one node device to enable access to the dataset partition by the at least one GPU, andassigning execution of the GPU task routine to the at least one node device to enable execution of the multiple instances of the first task with the dataset partition enable the at least one GPU using the GPU task routine.

Description

QUERVERWEIS AUF VERWANDTE ANMELDUNGENCROSS REFERENCE TO RELATED APPLICATIONS

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. 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.This application claims the benefit of priority under 35 USC §119(e) from US provisional patent application serial no. 62/289,484 , filed February 1, 2016, US provisional patent application serial no. 62/379,512 , filed August 25, 2016, and US provisional patent application serial no. 62/394,411 , filed September 14, 2016. This application is a continuation of and claims the benefit of priority under 35 USC §120. from US patent application serial no. 15/422,154 , filed concurrently herewith on February 1, 2017.

HINTERGRUNDBACKGROUND

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..It has become increasingly common to use grids of numerous node devices to perform analysis of large data sets (e.g., commonly referred to as "big data") in a distributed manner in which analysis routine tasks are performed at least partially in parallel across selected ones of the node devices be performed. In the operation of such grids, there are often competing goals in allocating the tasks of analysis routines to the node devices, including the goal of making full and uninterrupted use of the processing resources of each node device, and the goal of using the processing and memory resources of each node device, as well as the network bandwidth resources of the to use the grid more effectively. Adding to the complexity of addressing such competing targets is the common practice of sharing grid resources by causing the tasks of multiple analysis routines to be performed concurrently by the grid's node devices. A classic approach to task assignment is to simply assign the next task to be performed to the node device that is closest with available processing resources. Unfortunately, this classic approach means a decision to allow significant inefficiencies in the use of storage and network bandwidth.

Suchard, M.A. et al.: Understanding GPU Programming for Statistical Computation: studies im Massively Parallel Massive Mixtures.PMCID: PMC2945379 betrifft die Parallelisierung, wobei CPUs and GPUs unterschiedlich behandelt werden. Routinen für GPUs werden jedoch getrennt und eigenständig programmiert.Suchard, MA et al.: Understanding GPU Programming for Statistical Computation: studies in Massively Parallel Massive Mixtures.PMCID: PMC2945379 concerns parallelization, with CPUs and GPUs being treated differently. However, routines for GPUs are programmed separately and independently.

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 schlägt ein Programmiergerüst vor, in dem Programme geschrieben werden können unabhängig davon, ob sie später auf einer CPU oder einer GPU ausgeführt werden. Es findet keine Prüfung statt, ob eine CPU Taskroutine in eine GPU Taskroutine umgewandelt werden kann.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 proposes a programming framework in which programs can be written regardless of whether they are later executed on a CPU or a GPU . There is no check whether a CPU task routine can be converted into a GPU task routine.

US 2011/252411 A1 offenbart ein Netz von Rechenknoten, die unterschiedliche Ressourcen wie GPUs und/oder CPUs zur Bearbeitung von Programmen bereitstellen. Es wird nicht überprüft, ob eine Kompilierung in GPU-Code möglich ist, sondern es werden andere Kriterien wie Informationen über die Eingabegröße/den Eingabetyp, Größenschwellenwerte oder der Grad der Parallelität verwendet. Ferner ist keine Analyse der Verfügbarkeit beschrieben. U.S. 2011/252411 A1 discloses a network of computing nodes that provide different resources such as GPUs and/or CPUs for processing programs. It does not check whether it can be compiled into GPU code, but uses other criteria such as input size/type information, size thresholds, or the degree of parallelism. Furthermore, no analysis of the availability is described.

ZUSAMMENFASSUNGSUMMARY

Der Gegenstand der Erfindung ist durch den Anspruch 1 definiert. Vorteilhafte Ausgestaltungen sind den abhängigen Ansprüchen zu entnehmen.The subject of the invention is defined by claim 1. Advantageous configurations can be found in the dependent claims.

Figurenlistecharacter list

Die vorliegende Offenbarung wird in Verbindung mit den beigefügten Figuren beschrieben:

  • 1A und 1B veranschaulichen jeweils ein Ausführungsbeispiel eines verteilten Verarbeitungssystems.
  • 2 veranschaulicht ein Ausführungsbeispiel eines Seitenaustauschs.
  • 3A und 3B veranschaulichen jeweils ein Ausführungsbeispiel der Zuweisung der Durchführung von Aufgaben einer Analyseroutine an Knotenvorrichtungen eines verteilten Verarbeitungssystems.
  • 4A, 4B und 4C veranschaulichen zusammen ein Ausführungsbeispiel einer Zuweisung von Datensatzpartitionen und Aufgaben.
  • 5A und 5B veranschaulichen zusammen ein Beispiel einer Durchführung einer zugewiesenen Aufgabe durch ein Ausführungsbeispiel einer Knotenvorrichtung.
  • 6 veranschaulicht ein weiteres Ausführungsbeispiel einer Zuweisung von Datensatzpartitionen und Aufgaben.
  • 7A, 7B und 7C veranschaulichen zusammen ein Ausführungsbeispiel einer Verzögerung der Zuweisung einer Datensatzpartition und einer Aufgabe.
  • 8A, 8B und 8C veranschaulichen zusammen ein weiteres Ausführungsbeispiel einer Verzögerung der Zuweisung einer Datensatzpartition und einer Aufgabe.
  • 9 veranschaulicht noch ein Ausführungsbeispiel einer Analyse von Taskroutinen und Zuweisung von Aufgaben durch eine Koordinierungsvorrichtung.
  • 10 veranschaulicht noch ein Ausführungsbeispiel einer Analyse und Kompilierung einer Taskroutine durch eine Knotenvorrichtung.
  • 11 veranschaulicht noch ein Ausführungsbeispiel von anfänglichen und nachfolgenden Zuweisungen von Aufgaben durch eine Koordinierungsvorrichtung.
  • 12 veranschaulicht noch ein Ausführungsbeispiel einer Ableitung einer Zeitperiode einer Verzögerung zur Verwendung bei einer nachfolgenden Zuweisung einer Aufgabe.
  • 13 veranschaulicht noch ein Ausführungsbeispiel einer verzögerten Zuweisung einer Aufgabe durch eine Koordinierungsvorrichtung.
The present disclosure is described in connection with the accompanying figures:
  • 1A and 1B each illustrate an embodiment of a distributed processing system.
  • 2 illustrates an embodiment of a page swap.
  • 3A and 3B 12 each illustrate an embodiment of assigning node devices of a distributed processing system to perform tasks of an analysis routine.
  • 4A , 4B and 4C 10 together illustrate one embodiment of an assignment of record partitions and tasks.
  • 5A and 5B 10 together illustrate an example of a performance of an assigned task by an embodiment of a node device.
  • 6 Figure 12 illustrates another embodiment of record partition and task assignment.
  • 7A , 7B and 7C 10 together illustrate one embodiment of deferring the allocation of a record partition and a task.
  • 8A , 8B and 8C 10 together illustrate another embodiment of deferring the allocation of a record partition and a task.
  • 9 FIG. 12 illustrates another embodiment of analysis of task routines and assignment of tasks by a coordinator.
  • 10 Figure 13 illustrates another embodiment of analysis and compilation of a task routine by a node device.
  • 11 FIG. 11 illustrates another embodiment of initial and subsequent assignments of tasks by a coordinator.
  • 12 FIG. 12 illustrates another embodiment of a derivation of a time period of delay for use in a subsequent assignment of a task.
  • 13 FIG. 11 illustrates another embodiment of a delayed assignment of a task by a coordinator.

DETAILLIERTE BESCHREIBUNGDETAILED DESCRIPTION

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 Verfü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.Various embodiments described herein are generally directed to techniques to improve the efficient use of processing, memory, and network bandwidth resources within a lattice of nodal devices to enable individual analysis routines to be completed in less time. Various embodiments are also generally directed to techniques for improving ease of use of multithreading support provided by at least some processors of a grid. Each node device of a lattice of node devices may include both volatile memory, which provides faster access to data and routines, and non-volatile memory, which provides higher storage capacity but with slower access than volatile memory. Additionally, each node of the lattice may include one or more central processing units (CPUs), or may include a combination of one or more CPUs and one or more graphics processing units (GPUs), any of which may be better suited to perform various types of analysis routine tasks. The initial assignments of data set partitions and analysis routine task(s) to node devices may be based on the availability of resources within the node devices and/or on an automated analysis of the task routines within the analysis routine to identify task routines that are designed to run on GPUs instead of CPUs can be converted and compiled. Such analysis can be performed either in connection with deriving the initial assignments or as part of compiling each of the task routines for execution by CPUs and/or GPUs. Subsequently, during execution of task routines of the analysis routine, when a node device becomes available so that it could be assigned a next task to perform on a particular dataset partition, such assignment to the one node device may be delayed by a predetermined period of time to another node device that is still performing a previous task on that particular dataset partition an opportunity to become available and assigned to perform that next task on that particular dataset partition. Such a delay in allocation may allow the temporary storage of the particular dataset partition within the volatile memory of the other node device to be utilized, thereby enabling the next task to be performed more quickly with the particular dataset partition. Such a delay in allocation may also avoid encountering a potentially greater delay associated with the transfer of the particular data set partition to the one node device.

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.A coordinator of a lattice of nodal devices may recurrently receive node data from each of the nodes of the nodal device lattice, updated periodically Displaying the level of availability of various processing, storage and/or network access resources provided in each. The coordinator may also receive an analysis routine comprising executable instructions for multiple task routines for multiple tasks to be performed on at least one dataset and specifying an order in which the tasks are to be performed. The coordinating device may further receive metadata indicative of various structural features of at least the one dataset. From the node data, the metadata and/or the analysis routine, the coordinator may derive initial assignments of dataset partitions of the at least one dataset to selected ones of the node devices and initial assignments of the task(s) to be performed by the selected node devices. The coordinating device can then transmit indications of the initial assignments to the selected node devices. As part of such initial assignments, multiple dataset partitions from at least the one dataset may be distributed among the selected node devices to allow the selected node devices to perform the same tasks, at least in part, in parallel with their respective dataset partitions. The coordinating device may additionally transmit to either a single storage device or a grid of storage devices storing the dataset indications of the distribution of dataset partitions to be made to the selected node devices as part of the initial assignments to allow the Start performing the initial task(s). In some embodiments, each of the selected node devices can retrieve one or more of the data set partitions from the one or more storage devices. In other embodiments, one or more of the data set partitions may be transferred to each of the selected node devices through the one or more of the storage devices.

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 „hochgradig 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.With respect to the processing resources through which the coordinating device may receive node data recurrently, each of the node devices may integrate one or more GPUs in addition to or instead of integrating one or more CPUs. The one or more CPUs may use an internal processing architecture found to be well suited for serializing task routines that involve various input/output operations and/or branch operations that necessitate the execution of various sets of instructions on the results of various determinations . The one or more CPUs may each include one or more processing cores, each capable of supporting a relatively limited degree of parallel execution of instructions on a relatively limited number of threads of execution. In contrast, the one or more GPUs may employ an internal processing architecture that has been found to be well suited for the parallel processing of task routines that involve a relatively limited variety of computations and/or bitwise operations. In some embodiments, the one or more GPUs may be able to support the parallel processing of a relatively large set of instances of a task across a relatively large number of threads of execution when there are no dependencies between the instances of the task (sometimes referred to as referred to as “highly parallel”). Indeed, for a relatively limited variety of tasks, a single GPU within a single node device may be able to perform the same work as the CPUs of numerous separate node devices, but faster and less expensively. Thus, it may be advantageous to have at least a subset of node devices that integrate one or more GPUs capable of performing such a limited variety of tasks with such an increase in speed, and it may be advantageous to be able to be to automatically identify tasks in analysis routines that are of such a limited variety.

In Ausführungsformen eines Knotenvorrichtungsgitters, in dem einige, aber nicht alle der Knotenvorrichtungen derartige GPUs integrieren, kann, falls eine Analyseroutine Taskroutinen für eine oder mehrere Aufgaben umfasst,. die dafür zugänglich sind, von GPUs als hochgradig 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 hochgradig 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 hochgradig parallele Aufgaben durch GPUs kompiliert zu werden.In embodiments of a node device lattice in which some but not all of the node devices integrate such GPUs, if an analysis routine comprises task routines for one or more tasks, . amenable to being executed by GPUs as highly parallel tasks faster than CPUs running . Arranging device for determining whether to prioritize the assignment of node devices that integrate GPUs or node devices that do not integrate GPUs to perform the tasks of the analysis routine. The coordinator may analyze the task routines of an analysis routine to identify tasks that are implemented with instructions and that operate on data in a manner that avoids dependencies that cause those tasks to be amenable to execution as highly parallel tasks via a large number of threads to be compiled by one or more GPUs. If no such task routine is found by such analysis, then the entirety of the analysis routine can be compiled for execution by CPUs only. Also, priority can be given to the assignment of analysis routine tasks to be performed by node devices that do not Integrating GPUs and/or integrating one or more CPUs and one or more GPUs. Such prioritization can be effected to leave as many of the nodes that integrate one or more GPUs available as possible to have tasks assigned to another analysis routine in which the instructions and/or interaction with data in one or more Task routines are amenable to being compiled for execution as highly parallel tasks by GPUs.

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.It should be noted, however, that although the results of analyzing the task routines of an analysis routine may have some impact on which node devices are selected for assignment of tasks, in some embodiments, indications of what processing resources are available among the available node devices may have some impact on whether the task routines are analyzed and/or compiled for execution by GPUs. In particular, in embodiments where none of the node devices that integrate GPUs are currently available to be assigned to any task (e.g., all node devices that integrate GPUs are assigned to perform tasks of a different and entirely unrelated analysis routine) , the coordinator may refrain from performing any analysis of the task routines to determine whether any of the task routines are amenable to being compiled for execution by a GPU since no GPUs are currently available to do so.

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 hochgradig 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 hochgradig 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 hochgradig 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 hochgradig 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 hochgradig 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 hochgradig 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.When analyzing the instructions within task routines, such analysis cannot at least prevent comparisons of instructions for each task routine with a list of instructions that are each known to prevent their corresponding tasks from being performed as highly parallel tasks by a GPU , and/or with a list of instructions each known to result in a task incapable of being performed as a highly parallel task by a GPU. Additionally, if a task routine does not include instructions that render its corresponding task incapable of being performed as a highly parallel task by a GPU, the manner in which the instructions are used within that task routine can be analyzed to determine whether the manner in which any instructions are used renders the corresponding task incapable of being performed as a highly parallel task by a GPU. Illustratively, if such instructions are used to perform operations on data in a way that would create dependencies between instances of a task routine such that those instances could not truly be performed in parallel, then the task routine's task may not be amenable to being a highly parallel task to be performed. If it is determined that a task routine's instructions and the manner in which those instructions are used do not prevent the corresponding task from being performed as a highly parallel task by a GPU, then compiling the task routine's instructions for such execution by one or more GPUs may be the default approach. If the node device lattice includes node devices that integrate different GPUs that do not share an instruction set, compilation of the task routine for such execution by one or more GPUs may result in multiple compilations of the task routine in support of each of the different GPUs.

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 hochgradig parallele Aufgabe durch eine GPU durchgeführt zu werden, eine Umwandlung von Anweisungen der Taskroutine, die nicht erzeugt wurden, um eine derartige hochgradig 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 hochgradig 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 hochgradig 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 hochgradig 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 hochgradig parallelen Ausführung durch eine GPU zugänglicher ist.In some embodiments, compiling a task routine to perform a task determined to be amenable to being performed as a highly parallel task by a GPU may involve converting instructions of the task routine that were not generated to a causing such highly parallel performance of the task by a GPU result in instructions generated to cause such performance of the task. A compiler, to perform such a conversion, may use a set of compilation rules, each associated with one or more particular instructions that may be present among the instructions of the task routine, and causing the one or more particular instructions to be converted into one or several other instructions that cause highly parallel execution by a GPU. Among such compilation rules may be rules that each cause a particular type of loop of instructions to be converted into another type of loop that is more amenable to highly parallel execution by a GPU (e.g., a loop with a reduced number of iterations ), and/or which cause the replacement of a particular type of loop of instructions with one or more other instructions for execution by a GPU in a highly parallel manner that does not entail the use of a loop. There may also be a set of compilation rules, each associated with a particular type of data structure that may be instantiated by the task routine's instructions or otherwise used, and that cause the data structure to be inverted into another data structure which is more amenable to use in highly parallel execution by a GPU.

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 hochgradig 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 hochgradig 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 hochgradig 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 hochgradig parallelen Ausführung durch jede der verschiedenen GPUs zu adressieren.By using such transformations of instructions of one or more task routines, the personnel writing the instructions of the task routines of an analysis routine can be given the opportunity to take advantage of the highly parallel processing capabilities of the one or more GPUs integrated in at least some of the node devices. without the need to write task routine instructions specifically for highly parallel execution by GPUs. In other words, these personnel may be spared the need to acquire the skills to architect and write the instructions that implement the tasks of an analysis routine in a manner designed for highly parallel execution by GPUs. Additionally, when the node device lattice includes node devices that integrate different GPUs that do not share an instruction set, such personnel are further spared the need to architect and write different versions of the task routines' instructions to accommodate the different idiosyncrasies of highly parallel execution by each of the to address different GPUs.

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 öder 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.With respect to the memory resources through which the coordinating device may receive node data on a recurring basis, each of the node devices may incorporate memory capabilities implemented as a combination of volatile and non-volatile memory. The volatile memory may be implemented with one or more memory components that employ a memory technology that allows relatively fast access to data and/or routines, but is incapable of reading data and/or routines stored therein without a continuous supply of electrical power to keep. Such technologies include, but are not limited to, any of a variety of types of random access memory (RAM). The non-volatile memory may be implemented with one or more memory components that employ a memory technology capable of retaining data and/or routines stored therein, regardless of whether electrical power continues to be provided but not in the Capable of providing access that is as fast as that provided by various volatile memory technologies on which the volatile memory may be based. Such non-volatile memory technologies include, but are not limited to, the use of any of a variety of ferromagnetic and/or optical storage media.

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.Due to the faster access provided by volatile memory compared to non-volatile memory, instructions being executed by the one or more CPUs and/or the one or more GPUs integrated into each node device may be able to , stored within volatile memory where they can be read, written, and/or modified more quickly. However, due to the often lower cost and/or higher storage densities of the non-volatile memory components compared to the volatile memory components, the non-volatile memory can be implemented with a higher storage capacity than the volatile memory within each of the node devices. Although there may be data sets that are small enough and/or distributed across a large enough number of node devices to cause each data set partition of the data set distributed to a node device to be small enough to be entirely within volatile Being memory storable is intended that the data set partitions of the majority of data sets are each rather too large to do so.

Infolgedessen können innerhalb jeder Knotenvorrichtung Bereiche 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 Bereiche 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 Bereiche 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 Bereiche 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 Bereichen von Routinen und/oder von Daten innerhalb eines flüchtigen Speichers innerhalb jeder der Knotenvorrichtungen zeitlich begrenzt sein.As a result, within each node device, portions of routines being executed and/or data accessed by the one or more CPUs and/or the one or more GPUs may be swapped from non-volatile memory to volatile memory . As may be known to those skilled in the art, any of a variety of algorithms may be used to select portions of routines and/or data to be swapped into volatile memory and/or to select pages to be within volatile memory to be held while others are swapped back to non-volatile memory, including but not limited to any of a variety of demand-based and/or predictive algorithms. In one or more embodiments, one or more of the node devices may execute an operating system (OS) that includes a paging component that performs such swapping of uniformly sized areas of routines and/or data. Depending on various factors, such as the types of operations being performed, the frequency of accessing different areas of routines and/or data, and/or the number of routines being executed in parallel, a page of routine and/or data may be different retained within volatile memory for a longer or shorter period of time before being swapped back to non-volatile memory to free up space within volatile memory for another page of a routine and/or by release data. Thus, storage of portions of routines and/or data within volatile memory within each of the node devices may be time limited.

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 Bereiche 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 Bereichen von Routinen und/oder Daten für die eine oder mehreren CPUs durchzuführen, kann auch ein derartiges Austauschen von Bereichen 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 node devices that integrate both one or more CPUs and one or more GPUs, there may be volatile memory for the one or more CPUs and another volatile memory for the one or more GPUs. However, there may be a single non-volatile memory, and portions of routines and/or data may be exchanged between the single non-volatile memory and either of the two volatile memories. In some embodiments, the operation of the one or more GPUs may be at least partially controlled by the one or more CPUs such that the one or more GPUs may not operate fully autonomously from the one or more CPUs. In such embodiments, the volatile memory associated with the one or more GPUs may also be accessible to the one or more CPUs, and a memory page management routine executed by the one or more CPUs to facilitate swapping of areas of Performing routines and/or data for the one or more CPUs may also perform such swapping of portions of routines and/or data for the one or more GPUs. As may be known to those skilled in the art, such swapping by the one or more CPUs on behalf of the one or more GPUs may occur due to the need for one or more driver routines to be executed by the one or more CPUs in order to access enable the non-volatile storage and/or utilize a file system used in storing data and/or routines as files with the non-volatile storage. Thus, regardless of the precise manner in which each of the selected node devices is provided with a record partition, such a received record partition may initially be stored entirely within non-volatile memory within each node device. After such receipt and storage, pages of the received dataset partition may then be swapped into volatile memory of the one or more CPUs and/or the one or more GPUs as needed to support performance of one or more analysis routine tasks with the dataset partition.

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, init, 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.With respect to the network access resources over which the coordinator may receive node data recurrently, each of the node devices may integrate a network interface to a network used by the node device mesh to enable the node devices to communicate with each other, init, the coordinator, and/or one or more storage devices (e.g. a storage device grid). The task routines executed by the CPU(s) and/or the GPU(s) to perform analysis routine tasks may be distributed to node devices across the network by the coordinating device. Also, the data set partitions on which the tasks are performed may be transferred from the one or more storage devices to the node devices over the network, and data set partitions derived within the node may be transferred back to the one or more storage devices. As may be known to those skilled in the art, in some embodiments, the one or more GPUs of a node device may not be able to directly operate the network interface of the node device to effectuate an exchange of routines and/or data associated with a performance a task associated with the one or more GPUs. Instead, in a manner similar to swapping pages associated with the one or more GPUs between volatile and non-volatile memory, the one or more CPUs of the node device may thus operate the network interface on behalf of the one or more GPUs. As noted above, such action on behalf of the one or more GPUs by the one or more CPUs may be dictated by the need for one or more driver routines to be executed by the one or more CPUs to allow access to the network interface.

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 nicht-flü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, wann 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.Just as accessing routines and/or data stored within non-volatile memory of a node device may be significantly slower than accessing routines and/or data stored within volatile memory, accessing routines and/or data stored within another device may be significantly slower over a network. Additionally, in some embodiments, accessing routines and/or data stored either within non-volatile memory or within another device over the network may be even slower for the one or more GPUs due to their dependency on the one or more multiple CPUs of the node device to take action to enable such access on behalf of the one or more GPUs. Thus, it may be deemed desirable, whenever possible, to maximize accesses made to routines and/or data while still being stored within volatile memory associated with the CPU(s) and/or GPU(s) making these accesses and to minimize accesses to routines and/or data while stored in non-volatile memory and/or within other devices such that access must be over the network. This may result in some node devices of the node device lattice becoming idle for varying periods of time to await the availability of certain node devices for use in performing specific tasks with specific data set partitions, rather than immediately assigning tasks to each node that is available for use in performing a task regardless of which node devices already have particular data set partitions within their memories. In other words, the assignment of a next task may be delayed for a period of time to allow a particular node device storing a particular data set partition to become available again to be assigned a next task that uses the particular data set partition instead of immediately assigning the next task to another node device to which the particular data set partition would need to be transferred. Additionally, if there are multiple tasks to be performed on a particular partition that can be performed using a GPU, delaying the assignment of the next of those multiple tasks may allow for the opportunity to assign that next of those tasks to a node device that integrates a GPU and that already stores the respective dataset partition, avoid a situation where immediate assignment of the next task to the next available node device may result in assignment to a node device that does not integrate a GPU, thus resulting in slower performance the next of these tasks.

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.Thus, for example, if a first node device that was engaged in performing a first task of analysis on a first dataset partition of a dataset completes its performance of the first task on the first dataset partition and thereby becomes available so that it could be assigned to a to perform the second task of the analysis with a second dataset partition of the dataset, the coordinating device may refrain from assigning the first node device to perform the second task with the second dataset partition for a predetermined period of time. The predetermined time period may be selected to provide an opportunity for a second node device that is still engaged in performing the first task with the second dataset partition to complete its performance of the first task with the second dataset partition such that the second node device in is able to perform the second task with the second data set partition. However, if the second node device becomes unavailable to be assigned to perform the second task with the second dataset partition, then another node device in which the second dataset partition is not already stored may be assigned to do so (e.g., the first knot device). Alternatively, in other embodiments, if there is yet another node device in which the second dataset partition was also stored in preparation for using that other node device as a backup in response to failure of a node device performing a task with the second dataset partition, and if the second node device becomes unavailable to be assigned to perform the second task with the second dataset partition and if such another node device is currently available to be assigned, such other node devices are so assigned.

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.In this way, use can be made of the fact that the second data set partition is already stored within the volatile and/or non-volatile memories of the second node device, so that the second data set partition does not have to be exchanged between devices in order to perform the second task with the enable second data set partition by another node device; In other words, had the first node device been assigned to perform the second task with the second data set partition, then the second data set partition would have had to be transferred to the first node device either from the second node device or from the one or more storage devices. In addition to consuming the available bandwidth of the network and network interface of at least the first node device, the first node device's performance of the second task with the second dataset partition would necessarily be delayed until at least sufficient of the second dataset partition was received by the first node device to allow execution to begin.

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 nichtverwandten 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.As another example, each of a first node device engaged in performing a first task of an analysis routine to generate a first dataset partition of a dataset and a second node device engaged in performing the first task to generate a second dataset partition of the record to generate both their implementations of the first complete task. However, while the first node device may be available to be assigned another task, the second node device (as a result of freeing node devices among multiple unrelated analyses) may be busy performing a task of an unrelated analysis routine such that the second node device may not yet be available to be assigned to perform a second task of the analysis routine on the second dataset partition that the second node device created itself. As previously mentioned, the coordinating device may refrain from assigning the first node device to perform the second task with the second dataset partition for a predetermined period of time. The predetermined time period may be selected to provide an opportunity for the second node device to complete its performance of the unrelated analysis routine's task so that the second node device becomes available to be assigned to perform the second task with the second data set partition. As already mentioned, in this way use can be made of the fact that the second data set partition is already stored within the volatile and/or non-volatile memories of the second node device, so that the second data set partition does not have to be exchanged between devices in order to carry out the to enable a second task with the second data set partition by another node device.

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.With general reference to the notations and nomenclature used herein, portions of the following detailed description may be presented in terms of program procedures executed by a processor of one or more networked machines. These procedural descriptions and representations are used by those skilled in the art to most effectively convey the substance of their work to others skilled in the art. A procedure is conceived here, and generally, as a self-consistent sequence of operations leading to a desired result. These operations are those that require physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical, magnetic, or optical communications capable of being stored, transmitted, combined, compared, and otherwise manipulated. It proves convenient at times, principally for reasons of common usage, to refer to what is being communicated as bits, values, elements, symbols, characters, terms, numbers, or the like. However, it should be noted that all of these and similar terms are associated with the corresponding physical quantities and are merely convenience labels applied to those quantities.

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 Allzweckcompüter umfassen. Die erforderliche Struktur für eine Vielzahl dieser Maschinen wird aus der angegebenen Beschreibung ersichtlich.Furthermore, these manipulations are often referred to in terms, such as adding or comparing, that are commonly associated with mental operations performed by a human operator. However, no such skill of a human operator is necessary, or in most cases desirable, in any of the operations described herein which form part of one or more embodiments. Instead, these operations are machine operations. Useful machines for performing operations of various embodiments include machines that are selectively activated or configured by a routine stored in that written according to the teachings herein, and/or include devices specifically designed for the required purpose are constructed. Various embodiments also relate to devices or systems for performing these operations. These devices may be specially designed for the required purpose or may include a general purpose computer. The required structure for a variety of these machines will appear from the description given.

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.Reference is now made to the drawings, in which like reference numbers are used to refer to like elements throughout. In the following description, for the purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding thereof. However, it may be apparent that the novel embodiments may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to facilitate a description thereof. The intent is to cover all modifications, equivalents, and alternatives within the scope of the claims.

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.The systems illustrated in some of the figures may be provided in various configurations. In some embodiments, the systems may be configured as a distributed system, where one or more components of the system are distributed across one or more networks in a cloud computing system and/or a fog computing system.

1A 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. 1B 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. 1A 11 illustrates a block diagram of one embodiment of a distributed processing system 1000 including one or more storage devices 1100 comprising a storage device lattice 1001, a coordinating device 1300, multiple node devices 1500 that can form a node device grid 1005, and/or a viewing device 1800 integrated. 1B 12 illustrates a block diagram of an alternative embodiment of the distributed processing system 1000 in which an alternative embodiment of the node devices 1500 integrates features of the one or more storage devices 1100 and/or performs functions thereof. In both of these embodiments of the distributed processing system 1000, and as will be explained in more detail, the node devices 1500 may operate together as the grid 1005 under the control of the coordinating device 1300, with each of the plurality of the node devices 1500 performing the same task at least partially in parallel with another of multiple dataset partitions 1131 of a dataset 1130 distributed among the multiple node devices 1500.

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.As illustrated, these devices 1100, 1300, 1500, and 1800 may exchange communications therebetween in connection with assigning and performing tasks of an analysis routine 1210 on one or more data sets 1130. Such communications may include the exchange of node states 1535, data set partitions 1131, and/or metadata 1135 of a data set 1130, analysis routine 1210 and/or task routines 1211 thereof, CPU task routines 1571, GPU task routines 1671, and/or result data 1830. However, one or more of devices 1100, 1300, 1500, and/or 1800 may also exchange other data over network 1999 that is in no way related to any assignment or performance of tasks of any analysis routine. In various embodiments, network 1999 may be a single network that may extend within a single building or other relatively limited area, a combination of connected networks that may extend over a significant distance, and/or may include the Internet. Thus, the network 1999 may be based on any variety (or combination) of communication technologies through which communications may be effected, including, without limitation, wired technologies using electrically and/or optically conductive cabling and wireless technologies using infrared , radio frequency (RF) or other forms of wireless transmission.

Unter Bezugnahme auf 1A 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.With reference to 1A For example, in various embodiments, each of the one or more storage devices 1100 may integrate one or more processors 1150, memory 1160, and a network interface 1190 to couple each of the one or more storage devices 1100 to the network 1999. Storage 1160 may include control routine 1140, one or more analysis routines 1210, each of which may integrate one or more task routines 1211, one or more datasets 1330, each of which may integrate metadata 1135, and/or one or more dataset partitions 1131 of the one or more Store records 1130. The control routine 1140 may incorporate a sequence of instructions operable on the processor 1150 of each of the one or more storage devices 1100 to implement logic to perform various functions. The processor 1150 of each of the storage devices 1100 may operate the network interface 1190 to exchange the analysis routine 1210 and/or one or more of the task routines 1211 thereof with the coordination device 1300 . Alternatively or additionally, the processor 1150 of each of the storage devices may operate the network interface 1190 to coordinate and effectuate an exchange of one or more data set partitions 1131 with one or more of the node devices 1500 via the network 1999 with the coordinating device 1300. In embodiments in which multiple of the storage devices 1100 operate together as the storage device lattice 1001, the sequence of instructions of the control routine 1140 on the processor 1150 of each of those storage devices 1100 may be operable to perform various functions, at least in part, in parallel with the processors 1150 of others memory devices 1100 to perform.

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.In some embodiments, the processors 1150 of the storage devices 1100 may cooperate to perform a collection function, in which each of the processors 1150 operates a corresponding one of the network interfaces 1190 to receive data items of one or more of the data sets 1130 over the network 1999, and may transmit the data items over assemble a time period into the one or more data sets 1130 . In such embodiments, data elements of a data set 1130 may be received over the network 1999 and/or otherwise from one or more other devices (not shown). By way of example, a variety of remotely located sensor devices (e.g. geological sensors distributed over a particular geological region or particle detection sensors located at different parts of a particle accelerator) may generate numerous data items which are then transmitted over the network 1999 to the storage devices 1100 where the various data elements are then assembled to form a data set 1130 to train. In other embodiments, storage devices 1100 may receive one or more of data sets 1130 from a variety of other devices (not shown), such as a grid of other node devices. Illustratively, such other devices may perform one or more processing operations that generate a data set 1130 (e.g., using Bayesian analysis to derive a prediction of the behavior of humans in a simulation of evacuating a burning building or to predict the behavior of structural components, of a bridge in response to various wind currents) and may then transmit a data set 1130 as an output to the storage device grid 1001.

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.Each of the one or more data sets 1130 may include any of a variety of types of data associated with any of a variety of objects. Illustratively, each of the datasets 1130 may include scientific observational data related to geological and/or meteorological events or from sensors used in laboratory experiments in fields such as chemistry or physics. In another example, the dataset may include indications of activities performed by a random sample of individuals from a population of humans in a selected country or community or population of endangered species being studied in the wild. As illustrated, each of the datasets 1130 may incorporate metadata 1135 that provide indications of structural features, including, but not limited to, aspects of the manner in which data items are organized and/or made accessible within each dataset 1130.

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.The tasks that the task routines 1211 of the analysis routine 1210 may cause one or more processors to perform may include any of a variety of data analysis tasks, data transformation tasks, and/or data normalization tasks. The data analysis tasks may include, but are not limited to, search and/or statistical analysis involving the derivation of approximations, numerical characterizations, models, evaluations of hypotheses, and/or predictions (e.g., a prediction by Bayesian analysis of crowd actions, trying to escape from a burning building, or the behavior of bridge components in response to a wind force). The data transformation tasks may include, but are not limited to, sorting, row and/or column based mathematical operations, row and/or column based filtering using one or more data items of a row or column, and/or reordering of data items within a data object. The data normalization tasks may include normalizing times of day, dates, monetary values (e.g. normalizing to a single currency unit), character spacing, use of delimiters (e.g. normalizing use of periods and commas in numeric values), use of formatting codes, Use of big or little endian encoding, use or lack of use of character bits, sets of bits used to represent integers and/or floating point values (e.g., bytes, words, double words or quad words), etc . lock in.

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 various embodiments, the coordinating device 1300 may integrate one or more of a processor 1350, a memory 1360, an input device 1320, a display 1380, and a network interface 1390 to couple the coordinating device 1300 to the network 1999. The memory 1360 can be a control routine 1340, the metadata 1135 of a data record 1130, the analysiseroutine 1210, knot status 1535, allocation data 1330, tasks delay data 1335, a compilation routine 1440, compiling rules 1434, the CPU-Taskroutinen 1571, the GPU-Taskroutinen 1671 and// Save result data 1830. Control routine 1340 and compiler routine 1440 (if present within memory 1360) may each incorporate a sequence of instructions operable on processor 1350 to implement logic to perform various functions.

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 betriebsfahg 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.In various embodiments, each of the node devices 1500 may integrate one or more of a CPU 1550, a memory 1560, and a network interface 1590 to couple each of the node devices 1500 to the network 1999. Memory 1560 may store control routine 1540, one or more record partitions 1131, instance of node status 1535, compile routine 1440, compile rules 1434, one or more task routines 1211, and/or one or more CPU task routines 1571. The control routine 1540 and the compilation routine 1440 (if present within the memory 1560) may integrate a sequence of instructions operable on the CPU 1550 of each of the node devices 1500 to implement logic to perform various functions. In embodiments where multiple of the node devices 1500 operate together as the node device grid 1005, the sequence of instructions of the control rou Tine 1540 on the CPU 1550 of each of those node devices 1500 may be operable to perform various functions, at least in part, in parallel with the CPUs 1550 of other ones of the node devices 1500.

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.At least a subset of the node devices 1500 may additionally integrate a graphics controller 1600, which may integrate one or more of a GPU 1650 and memory 1660. Memory 1660 may store control routine 1640, one or more dataset partitions 1131, and/or one or more GPU task routines 1671. The control routine 1640 may integrate a sequence of instructions operable on the GPU 1650 of each of the node devices 1600 that integrates the graphics controller 1600 to implement logic to perform various functions. In embodiments where multiple of the node devices 1600 operate together as the node device grid 1005, the sequence of instructions of the control routine 1640 on the GPU 1650 of the graphics controller 1600 of each of those node devices 1500 may be operable to perform various functions, at least in part, in parallel with the GPUs 1650 of the graphics controller 1600 from other ones of the node devices 1500 to perform.

Wie in 2 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.As in 2 As illustrated, memory 1560 may be divided into volatile memory 1561 and non-volatile memory 1563, and memory 1660 may include volatile memory 1661 but may not include non-volatile memory. Volatile memory 1561 and 1661 may be implemented with one or more volatile memory components 1562 and 1662, respectively. Volatile storage components 1562 and 1662 may each employ any of a variety of storage technologies that allow relatively fast access to data and/or routines stored therein (e.g., the illustrated example data set partition 1131), but that are not capable of retain data and/or routines stored therein without a continuous supply of electrical power. Such technologies include, but are not limited to, any of a variety of types of random access memory (RAM). The non-volatile memory 1563 may be implemented with one or more non-volatile memory components 1564 . The one or more non-volatile memory components 1564 may each employ a memory technology capable of storing data and/or routines stored therein, regardless of whether electrical power continues to be provided but is unable to access provide data and/or routines as fast as that provided by various volatile memory technologies on which volatile memory 1561 and/or 1661 may be based. Such technologies include, but are not limited to, any of a variety of technologies that employ ferromagnetic and/or optical storage media.

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.Due to differences in their respective technologies, the 1563 non-volatile memory may have a significantly larger storage capacity than either the 1561 or 1661 volatile memory. Thus, pages of data and/or routines stored within the 1563 non-volatile memory may be in each of the volatile memories 1561 and 1661 can be swapped in and out as a mechanism to enable the CPU 1550 and the GPU 1650 to take advantage of the faster access to the respective volatile memories 1561 and 1661 while overcoming the more limited memory capacities of each become. In particular, and as also illustrated, execution of a page component 1541 of control routine 1540 may cause CPU 1550 to effect such page swapping to support both its own operation and the operation of GPU 1650. The need for the CPU 1550 to perform a page swap on behalf of the GPU 1650 may result from the use of the one or more driver routines (not shown) executed by the CPU 1550 to allow the CPU 1550 to to access the one or more non-volatile memory components 1564.

Unter Rückbezug auf 1A 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.Referring back to 1A In various embodiments, viewing device 1800 integrates one or more of a processor 1850, memory 1860, input device 1820, display 1880, and network interface 1890 to couple viewing device 1800 to network 1999. Memory 1860 may store one or more of control routine 1840, analysis routine 1210, and result data 1830. Control routine 1840 may incorporate a sequence of instructions operable on processor 1850 to implement logic to perform various functions. Processor 1850 may be caused by its execution of control routine 1840 to operate network interface 1890 to receive result data 1830 from one of node devices 1500 or from coordinating device 1300 over network 1999 upon completion of execution of analysis routine 1210. In some embodiments, the processor 1850 can also be caused to perform a visualization based on the result data 1830 generate to present on the display 1880 a representation of the results of the performance by a plurality of the node devices 1500 of the tasks of the analysis routine 1210's task routines 1211 .

Alternativ oder zusätzlich kann der Prozessor 1850 durch seine Ausführung der Steuerroutine 1840 veranlasst werden, die Anzeige1880 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.Alternatively or additionally, processor 1850 may be caused by its execution of control routine 1840 to operate display 1880 and/or input device 1820 to provide a user interface through which an operator of viewing device 1800 may provide input thereto. This input may include a command to execute the analysis routine 1210 across a plurality of the node devices 1500 of the node device lattice 1005 to perform an analysis on at least one of the data sets 1130 stored by the one or more storage devices 1100 . In response to receiving the input command, the processor 1850 may be caused to operate the network interface 1890 to transmit the command and/or the analysis routine 1210 to the coordinator 1300 over the network 1999.

Unter Bezugnahme auf 1B unterscheidet sich das alternative Ausführungsbeispiel des verteilten Verarbeitungssystems 1000, das darin dargestellt ist, vom Ausführungsbeispiel aus 1A, indem die eine oder mehreren Speichervorrichtungen 1100 nicht eingeschlossen sind. Stattdessen können die Knotenvorrichtungen 1500 des alternativen Ausführungsbeispiels aus 1B 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 1A ausgeschlossen wird.With reference to 1B The alternative embodiment of the distributed processing system 1000 illustrated therein differs from the embodiment 1A , by not including the one or more storage devices 1100. Instead, the node devices 1500 of the alternate embodiment may 1B directly perform the function of storing the one or more data sets 1130, eliminating the need for the one or more storage devices 1100 of the embodiment of the distributed processing system 1000 1A is excluded.

Unter Bezugnahme auf beide Ausführungsformen der beiden 1A und 1B 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.Referring to both embodiments of the two 1A and 1B It should be noted that in some embodiments, the functions performed by the coordination device 1300 may be performed by one of the node devices 1500 instead of the coordination device 1300 (e.g., embodiments that do not include the coordination device 1300). In such embodiments, such one of the nodal devices 1500 may additionally receive the metadata 1135 of one of the datasets 1130 from one of the storage devices 1100 (or from one of the other nodal devices 1500 in embodiments where the nodal devices 1500 perform the storage function of the one or more storage devices 1100). Moreover, such one of the node devices 1500 can additionally receive the node statuses 1535 from other ones of the node devices 1500 . Furthermore, such one of the node devices 1300 can additionally transmit the task routines 1211, the CPU task routines 1571 and/or the GPU task routines 1671 to other of the node devices 1500.

3A 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 1A oder 1B durchgeführt werden können. 3B 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 1A oder 1B durchzuführen. 3A FIG. 1 illustrates an embodiment of the assignment of tasks and compilation of task routines performed by the scheduler 1300 in one of the embodiments of the distributed processing system 1000 of FIG 1A or 1B can be carried out. 3B 15 illustrates an alternative embodiment of the assignment of tasks that may be performed by the coordinating device, while the compilation of task routines may be performed by the node devices 1500 selected to be assigned the tasks in one of the embodiments of the distributed processing system 1000 one of 1A or 1B to perform.

Unter Bezugnahme auf 3A 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 1100und/oder der Betrachtungsvorrichtung 1800 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.With reference to 3A When executing the control routine 1340, the processor 1350 of the coordinating device 1300 can be caused to receive metadata 1135 indicative of structural features of one of the data sets 1130 and/or the analysis routine 1210 from the one or more storage devices 1100 and/or the viewing device 1800. The processor 1350 can also be caused to receive from the node devices 1500 the node statuses 1535 that are indicative of the processing, storage and/or network access resources that are integrated into each of the node devices 1500 and the extent to which each of these resources is currently available. The processor 1350 may use the metadata 1135, the analysis routine 1210 and/or the node states 1535 to derive initial assignments of at least one initial task of the analysis routine 1210 to selected ones of the node devices 1500 and an initial distribution of the data set partitions 1131 to the selected ones of the node devices 1500.

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 hochgradig 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.When executing the compilation routine 1440, the processor 1350 can be caused to analyze the executable instructions within each of the task routines 1211 of the analysis routine 1210 to identify those of the task routines 1211 that can be compiled for highly parallel execution by the GPUs 1650 that in at least a subset of the node devices 1500 may be integrated. Those of the Task Routines 1211 that can be so compiled for the GPUs 1650 can are compiled by the processor 1350 into corresponding GPU task routines 1671 that can be executed by the GPUs 1650. However, those of the task routines 1211 that cannot be so compiled for the GPUs 1650 can be compiled by the processor 1350 into corresponding CPU task routines 1571 that can be executed by the CPUs 1550 of the node devices 1500. The processor 1350 may then be caused to distribute the one or more CPU task routines 1571 and/or the one or more GPU task routines 1671 for the at least one initial task to the selected ones of the node devices 1500 as part of the assignment of the at least one initial task .

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.In executing the control routine 1540, the CPU 1550 may receive and store from each of the selected ones of the node devices 1500 the one or more CPU task routines 1571 and/or the one or more GPU task routines 1671 for the at least one initial task, as well as at least one of the initial distributed Record Partitions 1131. When a CPU Task Routine 1571 is received, the CPU 1550 may be caused to execute the CPU Task Routine 1571 to perform a task on the at least one Record Partition 1131 received. When a GPU task routine 1671 is received, the CPU 1550 can be caused to forward the GPU task routine 1671 to the GPU 1650 within the graphics controller 1600 of the node device 1500 together with the at least one received data set partition 1131, the GPU 1650 being executed by the control routine 1640 can be caused to execute the GPU task routine 1671 to perform a task with the at least one received dataset partition 1131.

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.Regardless of whether the CPU 1550 or a GPU 1650 of each node device 1500 performs a task with a corresponding data set partition 1131, the CPU 1550 and/or the GPU 1650 can be caused to recurrently update a corresponding one of the node statuses 1535 with indications of which task (n) is/are currently being performed and/or the extent to which various resources are currently available as a result. The CPU 1550 of each node device 1500 can be caused by further execution of the control routine 1540 to transmit the corresponding node status 1535 to the coordination device 1300 recurrently.

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 1335 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.In another execution of the control routine 1340, the processor 1350 of the coordinating device 1300 may use the indications in the recurrently received node status 1535 of the tasks currently being performed and/or the current levels of availability of various resources within each node device 1500 to determine the time required is to complete various tasks. Processor 1350 may store indications of such lengths of time required for each task as part of task delay data 1335 . When one or more of the nodal devices 1500 complete previously assigned tasks, the processor 1350 may be caused to utilize such stored indications of time durations to determine a predetermined period of time by which to delay the assignment of one or more next tasks to one or more of the nodal devices 1500 shall be.

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.Such delays in the assignment of the next tasks may allow the assignment of these next tasks to those of the node devices 1500 in a manner that utilizes certain data set partitions 1131 already stored within the memories 1560 and/or 1660 of one or more of the node devices 1500. Further, this may take advantage of the temporary storage of record partitions 1131 within volatile memory 1561 and/or 1661 and may minimize the exchange of record partitions 1131 through the network 1999, which may consume longer periods of time than the lengths of the delays in the assignment of the next tasks. Furthermore, in embodiments where certain data set partitions 1131 were originally allocated at node devices that integrate one or more GPUs 1650, where both the previously allocated tasks and the next tasks are to be performed using the one or more GPUs 1650, such delays may occur the assignment of next tasks minimize instances where the next tasks are caused to be processed in other node devices that do not integrate GPU 1650 such that one or more CPUs 1550 are caused to perform the next tasks.

Unter Bezugnahme auf 3B ist die Zuweisung von Aufgaben an ausgewählte der Knotenvorrichtungen 1500 im Wesentlichen dem Ausfuhrungsbeispiel der Zuweisung von Aufgaben aus 3A ä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.With reference to 3B For example, the assignment of tasks to selected ones of the node devices 1500 is essentially the same as the assignment of tasks embodiment 3A similarly, except that the compilation of the task routines 1211 of the analysis routine 1210 may occur within the selected node devices 1500 rather than within the coordinating device 1300. In particular, in deriving initial assignments from at least one initial on Given the analysis routine 1210 to the selected node devices 1500, the processor 1350 of the coordinator 1300 distributes the task routine(s) 1211 of the at least one initial task to the selected node devices 1500 instead of CPU 1571 or GPU 1671 task routines. The CPU 1550 of each of the selected nodes 1500 may execute the compilation routine 1440 to compile the distributed task routine(s) 1211 to generate the corresponding CPU task routine(s) 1571 and/or GPU task routine(s). ) 1671 within the selected node devices 1500 rather than the processor 1350 of the coordinating device 1300 doing so.

4A, 4B und 4C 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. 4A und 4B 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. 4C veranschaulicht die Verteilung der Taskroutinen 1211, 1571 und/oder 1671 an die ausgewählten Knotenvorrichtungen 1500. 4A , 4B and 4C 15 together illustrate one embodiment of an assignment of tasks to be performed as part of the execution of an analysis routine to selected ones of the node devices 1500 of the node device trellis 1005. 4A and 4B 12 illustrate the collection and use of data associated with an analysis routine 1210, the metadata 1135 of a dataset 1130, and/or node status 1535 provided by the node devices 1500 to derive the assignments. 4C Figure 12 illustrates the distribution of task routines 1211, 1571 and/or 1671 to the selected node devices 1500.

Unter Bezugnahme auf 4A, 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.With reference to 4A As illustrated, the control routine 1340 executed by the processor 1350 of the coordinator 1300 may include a monitor component 1345 to cause the processor 1350 to recurrently operate the network interface 1390 to receive the node statuses 1535 recurrently from each of node devices 1500 of node device lattice 1005 may be transmitted over network 1999. In some embodiments, each of the node devices 1500 may recurrently transmit a node status 1535 to the coordinating device 1300 at a regular time interval and independently of other ongoing activities as a form of "heartbeat signal" indicating continued functionality, as well as information about currently available resources and/or or current activities. In such embodiments, a failure to receive the node status 1535 by the coordinating device 1300 from a node device 1500, when expected, can be taken as an indication of a malfunction by the node device 1500, such that the resources of the node device can be considered unavailable and any task that is currently assigned can be assigned to another node device 1500.

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 1A), 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 1B), 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.As also illustrated, the control routine 1340 may also include an allocation component 1341 to cause the processor 1350 to allocate data set partitions 1131 of a data set 1130 along with analysis routine 1210 tasks performed on the allocated data set partitions 1131 to selected ones of the node devices 1500 of the node device lattice 1005 assigns. In preparation for such assignments, the processor 1350 can be caused to operate the network interface 1390 to retrieve the metadata 1135 of the data set 1130 and the analysis routine 1210 from one or more other devices via the network 1999 for use by the assignment component 1341. In embodiments where the distributed processing system 1000 includes one or more distinct storage devices 1100 (such as the example distributed processing system 1000 from 1A ), the metadata 1135 and/or the analysis routine 1210 may be provided to the coordination device 1300 via the network 1999 from the one or more storage devices 1100 . However, in embodiments where the distributed processing system 1000 does not include such disparate storage devices and the node devices 1500 provide distributed storage of data sets 1130 (such as the example distributed processing system 1000 of FIG 1B ), the metadata 1135 and/or the analysis routine 1210 may be provided to the coordinating device 1300 via the network 1999 from one or more of the node devices 1500.

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 1800 an die Koordinierungsvorrichtung 1300 sein.In still other embodiments, viewer 1800 may provide analysis routine 1210 to coordinator 1300 . In such embodiments, viewer 1800 may provide a user interface through which viewer 1800 may be controlled to transmit a command to coordinator 1300 over network 1999 to cause analysis routine 1210 to be executed in a distributed manner to perform an analysis with data record 1130. Part of transmitting the command to the coordinating device 1300 may include transmitting the analysis routine 1210 from the viewing device 1800 to the coordinating device 1300 .

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 hochgradig 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.As further illustrated, in embodiments where the scheduler 1300 is to compile the task routines 1211 of the analysis routine 1210, the compilation routine 1440 may be performed by the processor 1350 and may include an analysis component 1441 to identify those of the task routines 1211 that are amenable to conversion and compilation for highly parallel execution by one or more GPUs 1650. For this purpose, the analysis component 1441 can also access the received analysis routine 1210, as can the assignment component 1341 of the control routine 1340.

Unter Bezugnahme auf 4B, 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 derNutzung) jeder derartigen Ressource anzugeben.With reference to 4B , as illustrated, node states 1535 may indicate what processing, memory, and/or network access resources are integrated into each node device 1500. As previously noted, node statuses 1535 may be periodically updated to also reflect the current level of current availability (e.g., current percentage of use) of each such resource.

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.Illustratively, the node statuses 1535 may provide indications of quantities, types, versions, and/or other internal architectural details of the processors that may be integrated into each of the node devices 1500. Thus, for each node device 1500, the node statuses 1535 may indicate the amounts of CPUs 1550 and/or GPUs 1650 present, as well as type information for each processor including, but not limited to, instruction set compatibility, revision level, cache size(s), amount of processing cores . and/or amount of threads that can execute per processing core. As will be explained in more detail, the provision of such information can help support a heterogeneous set of node devices 1500 within the node device grid 1005 that utilize a variety of different processors among them. Along with information about processing resources embedded in each of the node devices 1500, the node states 1535 may be periodically updated to provide indications of the current usage levels of different processors (e.g., different CPUs 1550 and/or GPUs 1650 within a single node device 1500 ), current usage levels of threads, and/or current usage levels of other particular processing features (e.g., usage levels of any specialized processing cores, logic units, extensions to instruction sets, different levels of cache, etc.).

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.Also by way of example, node statuses 1535 may provide indications of storage capacities of volatile memory 1561 and/or 1661 and/or non-volatile memory 1563 that may be incorporated into each of node devices 1500 . Thus, for each node device 1500, node states 1535 may indicate amounts and/or various parameters of memory components used to implement each of memories 1561, 1661, and/or 1563, including, but not limited to, types of interfaces used, page and/or Line sizes, access speeds and/or latencies and/or storage technologies used. Along with information regarding the memory resources embedded in each of the node devices 1500, the node statuses 1535 may be periodically updated to provide indications of the current usage levels of various volatile and/or non-volatile memories.

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.For further example, the node statuses 1535 may provide indications of network access capabilities and/or bandwidths of the network interface(s) 1590 that may be integrated into each of the node devices 1500. Thus, for each node device 1500, node statuses 1535 may indicate supported wired and/or wireless network interfaces, supported protocols, input and/or output buffer sizes, and so forth. Along with information regarding network access resources built into each of the node devices 1500, the node statuses 1535 may be periodically updated to provide indications of the current usage levels of bandwidth and/or buffers for each interface.

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.As also illustrated, metadata 1135 may provide indications of various structural features by which data items within data set 1130 may be organized and/or accessed. For example, metadata 1135 may indicate the overall size, type of data structure of dataset 1130 (e.g., binary tree, multidimensional array, linked list, etc.), data type(s) of data items (e.g., floating point, integer, text character, etc.). ), aspects of the indexing scheme used to access data items (e.g. number of dimensions, labels used, etc.), and/or other structural aspects. Also, for example, metadata 1135 may include indications of various constraints on the manner in which data set 1130 may be partitioned into data set partitions 1131, such as any partitioning scheme in which the data elements of data set 1130 are already organized and/or or a minimum size of the smallest atomic unit of data in which the data set 1130 that still allows independent processing of the resulting data set partitions 1131 (e.g., size of a row or draw in a two-dimensional array, etc.). As is known to those skilled in the art, such limitations on the manner in which data set 1130 may be partitioned may impose an upper limit on the set of data set partitions 1131 into which data set 1130 may be partitioned, effectively imposing an upper limit may be imposed for the set of node devices 1500 over which the resulting data set partitions 1131 may be distributed.

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 hochgradig parallele Ausführung zugänglich zu machen.Analysis routine 1210 may be broken down into any number of task routines 1211, each including instructions specifying aspects of a respective task to be performed as a result of execution of that task routine 1211 as part of analysis routine 1210 execution. The instructions within each of the various task routines 1211 may indicate required processing resources (e.g., whether support is required for a particular extension to an instruction set) and/or storage capacity required to support data structures instantiated during execution , provide. Analysis routine 1210 may also provide indications of an order in which task routines 1211 should be executed. Alternatively or additionally, analysis routine 1210 may include definitions of inputs required to perform each task and/or definitions of outputs produced by each task, providing indications of an order in which task routines 1211 are performed may include indications of dependencies between task routines 1211, such as indications of where an output of one task routine 1211 is required as an input to another task routine 1211. The provision of indications of required inputs and/or outputs to be generated may be part of an implementation of a many task computing (MTC) architecture, in which the tasks of the analysis routine 1210 are each expressed independently, at least by their Inputs and outputs to make at least a subset of Analysis Routine 1210 tasks amenable to highly parallel execution.

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.The manner in which definitions of inputs and/or outputs, indications of the order of task execution, and/or indications of dependencies are provided may vary depending on attributes of the programming language(s) in which the analysis routine 1210 is generated. By way of example, in some embodiments, declaration headers for those of task routines 1211 that are written as callable functions in a manner that follows the conventions of a chosen programming language may be sufficient to provide such definitions. However, in other embodiments, a different file or other data structure may be created either within analysis routine 1210 or concomitantly with analysis routine 1210 to provide such definitions and/or displays. In particular, by way of example, an array may be generated in which each entry specifies required inputs, outputs to be generated, and/or a position within an order of execution. Regardless of the precise manner in which definitions of inputs and/or outputs and/or indications of dependencies and/or ordering in a file or other data structure are presented, in some embodiments such definitions and/or indications may represent a representation form a Directed Acyclic Graph (DAG) of the Analysis Routine 1210 tasks.

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, anfä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.When executing the assignment component 1341, the processor 1350 can be caused to use the node statuses 1535, the metadata 1135 and/or parts of the analysis routine 1210 to make initial assignments of at least one initial task of the analysis routine 1210 to selected ones of the node devices 1500 and an initial distribution of at least one data set partition 1131 to each of the selected ones of the node devices 1500. In deriving such initial assignments, processor 1350 may be caused to initially derive the manner in which data set 1130 should be partitioned into data set partitions 1131 based at least in part on any specified constraints thereon that may be present within metadata 1135. and/or on the number of node devices 1500 currently indicated in node statuses 1535 as having sufficient storage resources. The processor 1350 may alternatively or additionally be caused to analyze the executable instructions within one or more of the task routines 1211 of the analysis routine 1210 to identify one or more particular processing resources required (e.g., floating point math, single instruction multiple, Data (SIMD) instruction support, etc.), and may select one of the nodes 1500 to which to assign an initial task or tasks based on indications in the node statuses 1535 of those of the node devices 1500 that currently have such processing resources as available (en). Regardless of the exact logic involved in deriving the initial assignments of tasks and/or data set partitions 1131 to the selected ones of the node devices 1500, the processor 1350 may store indications of such initial assignments as part of the assignment data 1330.

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 hochgradig 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.In embodiments where the scheduler 1300 is to compile the task routines 1211 of the analysis routine 1210, the scheduler 1300 may store the compilation rules 1434 for use in the execution of the compilation routine 1440 by the processor 1350. Compilation Rules 1434 may specify various aspects of compiling task routines 1211 of analysis routines 1210 to produce CPU task routines 1571 for execution by one or more CPUs 1550 and/or GPU task routines 1671 for execution by one or more GPUs 1650 . Under what is specified by the Compilation Rules 1434, aspects of the transformation of Task Routines 1211 instructions that were not originally created to take advantage of the highly parallel execution capabilities of the GPUs 1650 (by providing a relatively large set of threads of execution ), in statements generated to do so. Thus, Compilation Rules 1434 may specify aspects of the conversion and compilation of Task Routine 1211 instructions originally generated for execution by CPUs 1550 into instructions generated for execution by GPUs 1650.

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 2), 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 hochgradig 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.Each of the one or more CPUs 1550 of each of the node devices 1500 may employ an internal processing architecture found well suited for the sequential processing of task routines 1211 that involve various input/output operations and/or branch operations that require the execution of various sets of Condition instructions within task routines 1211 on the results of various determinations. Each of the CPUs 1550 may each include one or more processing cores 1555 (referring to FIG 2 ), each capable of supporting a relatively limited degree of parallel execution of instructions on a relatively limited number of threads of execution. In contrast, the one or more GPUs 1650, which may be present in at least a subset of node devices 1500, may use an internal processing architecture deemed well suited for highly parallel processing of task routines 1211 that execute a relatively limited set of instructions for mathematical and/or bitwise operations that can be executed independently, so that there are no dependencies between numerous instances of a Task Routine 1211 executing in parallel. Indeed, in some embodiments, each of the GPUs 1650 may be capable of supporting parallel processing across hundreds, thousands, or even greater numbers of threads of execution.

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 hochgradig 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.If a Task Routine 1211's instructions are amenable to being converted for such parallel execution across such a large number of threads, the task performed by such a Task Routine 1211 may be executable in significantly less time. For example, a task of one of task routines 1211 that may take several days to perform using CPUs 1550 of node devices 1500 may instead take hours of a single day to perform using GPUs 1650. For tasks that can be implemented using the more limited instruction set of the GPUs 1650, a single one of the GPUs 1650 within a single one of the node devices 1500 can perform the equivalent work of numerous CPUs 1550 across numerous of the nodes 1500 in less time and at significantly less cost. Such an improvement in performance speed becomes even greater when multiple of the GPUs 1650 within multiple of the node devices 1500 operate in parallel to perform a task as a highly parallel task across the multiple threads supported by each, thereby providing an even higher parallel form of performing this task is provided.

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 hochgradig 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 hochgradig 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.However, there may be those of the task routines 1211 of the analysis routine 1210 that include particular instructions and/or perform particular operations that render the instructions of those task routines 1211 non-convertible and non-compilable for such highly parallel execution by the GPUs 1650. As previously mentioned, the GPUs 1650 can support a relatively limited instruction set. By way of example, many . Types of input/output operations are bound to be performed in a single-threaded fashion since various protocol handshakes and/or other features dictate sequential execution of steps. As a result, the Analysis Routine 1210 is intended to contain both Task Routines 1211, in which the instructions for conversion and compilation are accessible for highly parallel execution by the GPUs 1650, and Task Routines 1211, in which the instructions are not such as to be executed by which CPUs 1550 need to be compiled.

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 hochgradig 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 hochgradig 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.The Compilation Rules 1434 may include a list of instructions that, if present in a Task Routine 1211, at least do not prevent the conversion and compilation of the Task Routine 1211 instructions to create a corresponding GPU Task Routine 1671 in which the instructions perform cause the Task Routine 1211 task to be a highly parallel task using multiple threads of at least one GPU 1650 in execution. Alternatively or additionally, the compilation rules 1434 may include a list of instructions that, if present within a task routine 1211, prevent such conversion of the task routine 1211 to support such highly parallel execution by the GPUs 1650. Additionally, Compilation Rules 1434 may specify certain circumstances in which certain instructions that would not otherwise prevent such conversion may be used in a Task Routine 1211 (e.g., as part of an input/output operation or some other operation) that such a conversion is prevented.

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 hochgradig 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 hochgradig 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.For those of the task routines 1211 of the analysis routine 1210 that have instructions that may support conversion into other instructions that are compilable to perform the task(s) as highly parallel task(s) on the GPUs 1650, the compilation rules 1434 may be different Specify rules for performing such a conversion. Illustratively, Compilation Rules 1434 may include one or more rules for converting index values used in loops to be instantiated in a manner amenable to highly parallel execution that avoids index value collisions and dependencies between instances of a task that run in parallel can be avoided. Alternatively or additionally, there may be one or more rules for converting instructions implemented within a loop to cause an operation to be performed multiple times, sequentially, into instructions that cause multiple performances of that operation to be performed in parallel across multiple threads occur across at least one of the GPUs 1650. In some such casts involving a loop where the number of times the operation is performed may be large enough that they cannot all occur in parallel, the loop may not be eliminated and may instead be cast to use fewer iterations if a subset of performances of the operation occurs in parallel during each iteration. By way of example, Compilation Rules 1434 may be one or more rules for converting a data structure instantiated within a Task Routine 1211 whose data members are accessed sequentially into another data structure whose data members are accessed in parallel across multiple threads by at least one of the GPUs 1650 will include.

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.In some embodiments, the conversion may result in task routine 1211 instructions originally generated in a particular programming language being converted to different instructions generated in the same programming language. However, in some such embodiments, the instructions defined for use in each language may be supplemented by one or more additional instructions associated with aspects of the internal architecture specific to the GPU 1650 (e.g., .specific types of operands, specific types for returned values, organization of bits and/or bytes of variables for a register implementation, etc.). In other embodiments, the conversion may result in task routine 1211 instructions originally generated in one programming language being converted to different instructions generated in a different programming language. In some such embodiments, the other programming language may have been created by a vendor of the GPUs 1650 to provide a programming language configured to take full advantage of the features of the GPUs 1650.

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 DE102017213160B4_0001
The following is an example of a conversion of portions of a task routine 1211 that may be performed by the processor 1350 of the coordination device 1300 and/or by one or more CPUs 1550 of the node devices 1500. Shown first are portions of an example task routine 1211 generated in FCMP, a programming language offered in various products by SAS Institute Inc., Cary, NC, USA. In particular, for example, the declarations of the subroutine "income_statement_kernel" and the data structure "d_matrix_is" have been converted between the FCMP and C programming languages.
Figure DE102017213160B4_0001

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 DE102017213160B4_0002
Corresponding portions of a corresponding GPU task routine generated in the conversion process performed by the processor 1350 or by one or more of the CPUs 1550 are shown next. In particular, the above parts of the example task routine 1211 generated in FCMP have been transformed to use a programming language extension that is part of the Compute Unified Device Architecture (CUDA) programming model to invoke functions of GPUs (e.g. the GPUs 1650) developed by by Nvidia Corporation, Santa Clara, CA, USA, a supplier of GPUs that can be used as the GPUs 1650.
Figure DE102017213160B4_0002

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 hochgradig parallele Ausführung durch die GPUs 1650.As those skilled in the art can readily appreciate, it is often the case that programming code originally generated for execution using a first processing architecture is likely to be executed more efficiently by a first architecture processor than programming code originally generated for execution under generated using a second processing architecture and then converted for execution using the first processing architecture. Nevertheless, tests have confirmed that by converting the task routines 1211 by the compiler routine 1440, significant increases in the speed of execution of some tasks of an analysis routine 1210 can be realized, from generation for execution by CPUs 1550 to generation for highly parallel execution by the 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 1550innerhalb 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 hochgradig 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 hochgradig 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 Below is a table of execution time comparisons from testing an example stochastic calculation. Such a calculation may be a task implemented as one of the task routines 1211 within an example analysis routine 1210 . As illustrated, when the stochastic computation was implemented in SAS Macro Code (another programming language offered in various products by SAS Institute Inc.) for execution by a CPU (e.g., one of the CPUs 1550 of one of the nodes 1500) is written, the resulting amount of time required for execution is measured at approximately 93,600 seconds. If the same stochastic computation was instead written in FCMP for execution by multiple CPUs (e.g., multiple of the CPUs 1550 within one or more of the nodes 1500), the measured execution time was 763 seconds. However, when the same FCMP stochastic computation code was then converted to CUDA for highly parallel execution by one of the GPUs offered by Nvidia Corporation (e.g. one of the 1650 GPUs one of the 1500 nodes) resulted in a measured execution time of 73 seconds. Although 73 seconds is slower than the measured execution time of 11 seconds achieved when the same stochastic computation for highly parallel execution is written directly to CUDA by one of the GPUs offered by Nvidia Corporation, the measured execution time of 73 seconds is the achieved by using FCMP to CUDA conversion is still a very significant improvement over the measured execution time of 763 seconds achieved by running FCMP code through multiple CPUs. Technology used Stochastic calculation - time in seconds CPU SAS macro code 93,600 Code written in FCMP 763 GPU Code written in FCMP, and then converted to CUDA 73 Code written directly in CUDA 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 hochgradig 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 hochgradig parallelen Ausführung des Codes zu nutzen, den sie schreiben können.Thus, as can be seen from these measured execution times, such use of code conversion to allow compilation for such highly parallel execution allows personnel who do not have the skills or training to perform the task routines 1211 of the analysis routine 1210 write natively in CUDA while still taking advantage of highly parallel execution of the code they can write.

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 hochgradig 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.In embodiments where the coordinator 1300 is to compile the task routines 1211 of the analysis routine 1210, the processor 1350 may execute the analysis component 1441 as part of the derivation of the initial record partition assignments 1131 and the initial task(s). In particular, the processor 1350 can be caused by the analysis component 1441 to analyze each task routine 1211 of the analysis routine 1210 to identify those of the task routines 1211 where the instructions are amenable to conversion and compilation into corresponding GPU task routines 1671 in order to obtain a high-level allow the GPUs 1650 to perform their respective tasks in parallel. In this manner, the processor 1350 may be caused to use the indications within the compilation rules 1434 as to which instructions prevent such conversions and/or which instructions do not prevent such conversions. The processor 1350 can then be caused to use the results of such analysis of the task routines 1211 in the selection of node devices 1500 as part of the derivation of the initial assignments. In particular, if the analysis of the task routines 1211 results in a determination by the processor 1350 that none of the task routines 1211 can be compiled into corresponding GPU task routines 1671, the processor 1350 may limit the selection of the node devices 1500 to those that have one or more rere of the CPUs 1550, since no GPU task routines 1671 are generated from the task routines 1211. However, if analysis of task routines 1211 results in a determination that some of task routines 1211 can be compiled into corresponding GPU task routines 1671 while others cannot, then processor 1350 can limit the selection of node devices 1500 to those that both integrate one or more CPUs 1550 and one or more GPUs 1650 and therefore support the execution of both CPU 1571 task routines and GPU 1671 task routines spawned from different ones of the 1211 task routines. Furthermore, if the analysis of the task routines 1211 leads to a determination that all of the task routines 1211 can be compiled into the corresponding GPU task routines 1671, the processor 1350 can limit the selection of the node devices 1500 to those that integrate one or more of the GPUs 1650 .

Unter Bezugnahme auf 4C 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 1500zugewiesen ist/sind.With reference to 4C For example, in embodiments where the coordinator 1300 does not compile the task routines 1211 of the analysis routine 1210, the processor 1350 can be caused by the assignment component 1341 of the control routine 1340 to operate the network interface 1390 to map the task routine(s) 1211 of the assigned initial tasks to the to distribute selected node devices 1500. In such embodiments, each of the selected node devices 1500 may independently map the task routine(s) 1211 distributed to each of the selected nodes 1500 into the corresponding CPU task routine(s) 1571 and/or GPU task routine(s). ) 1671 in preparation for performing the initial task(s) assigned to each of the selected nodes 1500.

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.Alternatively, in embodiments where the coordinator 1300 is to compile the task routines 1211 of the analysis routine 1210 such that the coordinator 1300 stores the compiler routine 1440 for execution by the processor 1350, the compiler routine 1440 may include a compiler component 1444 for performing the compilation of the task routines 1211. In particular, the processor 1350 may be caused by the compiling component 1444 to compile at least the one or more task routines 1211 associated with the one or more initial tasks assigned to the selected ones of the node devices 1500 . For a task routine 1211 that has been determined by the processor 1350 (during execution of the analysis component 1441) as not accessible to be converted and compiled to produce a corresponding GPU task routine 1671, the processor 1350 can be caused to execute the task routine 1211 without compiling such a conversion to produce a corresponding CPU task routine 1571. For a task routine 1211 that has been determined by the processor 1350 to be amenable to conversion and compilation to produce a corresponding GPU task routine 1671, the processor 1350 can be caused to effect such conversion and compilation to produce the corresponding GPU task routine 1671 to produce.

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 12,11 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.In some embodiments where a task routine 1211 has been determined by the processor 1350 to be amenable to conversion and compilation to produce a corresponding GPU task routine 1671, the processor 1350 may be caused by the compiling component 1444 to perform more than one compilation of the same task routine 1211 to perform. For example, in some such embodiments, the processor 1350 may additionally compile the same task routine 1211 to also generate a corresponding CPU task routine 1571 in addition to the corresponding GPU task routine 1671 . This may be deemed desirable to address a situation where there may be an insufficient number of available node devices 1500 integrating one or more of the GPUs 1650 such that the task(s) of task routine 12,11 may be performed by one or more of the Node Devices 1500 must be performed based on the execution of the corresponding CPU Task Routine 1571 by one or more CPUs 1550. Alternatively or additionally, this may be deemed desirable to address a situation where a Node Device 1500 carrying one or integrates multiple GPUs 1650, fails to execute the corresponding GPU task routine 1650 and is assigned another node device 1500 to perform the task(s) of the task routine 1211 with the respective dataset partition(s) 1131 assigned to that node device 1500 must-be-that does not have a GPU 1650-integrated.

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.As another example of more than one compilation of the same task routine 1211, in some of these embodiments, the node device lattice 1005 may include a heterogeneous set of node devices 1500 that integrate different GPUs 1650 that do not share an instruction set, allowing the creation of a single corresponding GPU task routine 1671 for all different GPUs 1650 may not be possible. Thus, the processor 1350 can be caused to perform multiple conversions and compilations of the same task routine 1211 into each of the different versions of the GPU task routine 1671 required for each of the various GPUs 1650 required among the node devices 1500 of the node device trellis 1005.

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.However, in some of the embodiments in which the scheduler 1300 is to compile the task routines 1211 of the analysis routine 1210, whether analyzing the task routines 1211 to identify those responsible for a . Compilation accessible to one or more different GPUs 1650 takes place and/or whether such compilation takes place to generate corresponding GPU task routines 1671 are conditioned whether there are indications that there are any node devices 1500 that integrate a GPU 1650. In particular, in a situation where the current node statuses 1535 indicate that none of the node devices that integrate one or more of the GPUs 1650 are currently available to be assigned a task at all, the processor 1350 can be caused by the assignment component 1341 to refrain from performing an analysis of Task Routines 1211 to determine if any are amenable to compilation for execution by a GPU 1650. Alternatively or additionally, in embodiments where different node devices 1500 integrate different types of GPUs 1650 such that multiple compilations are required to generate GPU task routines 1671 for all of the different types of GPUs 1650, a situation may arise where the node states 1535 indicate that all of the 1650 GPUs of one of the types are currently unavailable to perform tasks. In such a situation, the processor 1350 may be caused by the allocation routine to desist from compiling any task routine 1211 in order to create a GPU task routine 1671 for execution by GPUs 1650 of that particular type.

Die Erzeugung der GPU-Taskroutinen 1671 in einer Weise, die die Umwandlung der Anweisungen der Taskroutinen 1211 in andere Anweisungen einschließt, die die hochgradig parallelen Verarbeitungsmerkmale der GPUs 1650 nutzen, gefolgt von der Kompilierung, kann als wünschenswert erachtet werden, um die Leichtigkeit zu verbessern, mit der hochgradig 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 hochgradig 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 hochgradig parallele Ausführung durch die GPUs 1650 ausgelegt ist. Zusätzlich kann, wenn das Knotehvorrichtungsgitter 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.The creation of the GPU 1671 task routines in a manner that includes the conversion of the task routine 1211 instructions into other instructions that take advantage of the highly parallel processing features of the GPUs 1650, followed by compilation may be deemed desirable to improve ease , which allows highly parallel features of the 1650 GPUs to be used. By using instruction transformations in this way, personnel may be enabled to utilize the GPUs 1650 that may be present in at least some of the node devices 1500 without the need to architect and write the task routines 1211 instructions in any way , designed for such highly parallel execution. In other words, these personnel may be spared the need to acquire the additional skills and experience to architect and write the instructions that implement the tasks of Analysis Routine 1210 in a manner designed for highly parallel execution by GPUs 1650 is. Additionally, if the node device lattice 1005 node devices 1500 . that integrate different ones of the GPUs 1650 that do not share an instruction set, such personnel are further spared the need to architect and write different versions of instructions that implement the tasks of the Analysis Routine 1210 in a manner appropriate for the different idiosyncrasies of the manner , in which highly parallel execution is provided by each of the different ones of the GPUs 1650.

5A und 5B veranschaulichen zusammen ein Ausführungsbeispiel der Durchführung von Aufgaben, die ausgewählten der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005 zugewiesen sind. 5A veranschaulicht Aspekte der Vorbereitung der Durchführung, die das Kompilieren einer Taskroutine 1211 innerhalb einer beispielhaften Knotenvorrichtung 1500 einschließen können, und 5B 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. 5A and 5B 10 together illustrate one embodiment of performing tasks assigned to selected ones of the node devices 1500 of the node device lattice 1005. FIG. 5A illustrates aspects of preparing to perform, which may include compiling a task routine 1211 within an example node device 1500, and 5B illustrates aspects of performing a task within the example node device 1500 by executing the corresponding CPU task routine 1571 or corresponding GPU task routine 1671.

Unter Bezugnahme auf 5A 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 1A), 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 1130bereitstellen (wie beispielsweise das beispielhafteverteilte Verarbeitungssystem 1000 aus 1B), 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.With reference to 5A As previously discussed, in embodiments in which the distributed processing system 1000 includes one or more different storage devices 1100 (such as the example distributed processing system 1000 from 1A ); Provide data sets 1130 (such as example distributed processing system 1000 in Fig 1B ), one or more data set partitions 1131 with which a task is to be performed within the example node device 1500 may already be stored within the example node device 1500 . Otherwise, such one or more dataset partitions 1131 may be provided to the example node device 1500 via the network 1999 from another one of the node devices 1500 .

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 dieCPU 1550 veranlasst werden, die Taskroutine 1211 ohne eine derartige Umwandlung zu kompilieren, um die entsprechende CPU-Taskroutine 1571 zu erzeugen.As previously discussed, in embodiments where the coordinator 1300 does not compile the task routines 1211 of the analysis routine 1210, the coordinator 1300 may distribute the one or more task routines 1211 of the one or more assigned initial tasks to the selected node devices 1500. In such embodiments, and as illustrated, each of the node devices 1500 may store the compilation routine 1440 for execution by a CPU 1550 of each of the node devices 1500. Thus, upon receipt of a task routine 1211 from the coordinating device 1300, a CPU 1550 of the example node device 1500 may execute the compile routine 1440 to first analyze the task routine 1211 to determine whether it is amenable to conversion and compilation to a corresponding GPU - Create task routine 1671. If so, the CPU 1550 may be caused to perform such conversion and compilation of the task routine 1211 so as to generate the corresponding GPU task routine 1671 for execution by a GPU 1650 of the example node device 1500. However, if task routine 1211 is not so accessible, CPU 1550 can be caused to compile task routine 1211 without such conversion to produce the corresponding CPU task routine 1571.

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.Alternatively, in embodiments in which the coordinator 1300 compiles the task routines 1211 of the analysis routine 1210, the coordinator 1300 may distribute the one or more corresponding CPU task routines 1571 and/or GPU task routines 1671 that are generated within the coordinator 1300 from the one or more Task Routines 1211 have been generated. As a result, example node 1500 may receive a CPU task routine 1571 to be executed by CPU 1550 or a GPU task routine 1671 to be executed by GPU 1650, rather than the corresponding task routine 1211 from which one is generated .

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.As illustrated, the control routine 1640 executed by the GPU 1650 may include an execution component 1641 to cause the GPU 1650 to execute the corresponding GPU task routine 1671 if the corresponding GPU task routine 1671 differs from the task routine 1211 of the initial task associated with the example node device 1500 may be created (whether within the coordinating device 1300 or the example node device 1500). However, as also illustrated, the control routine 1540 executed by the CPU 1550 may include an execution component 1541 to cause the CPU 1550 to execute the corresponding CPU task routine 1571 if the corresponding GPU task routine 1671 is not dependent on the task routine 1211 of the initial task assigned to the example node device 1500, such that the creation of the corresponding CPU task routine 1571 is necessary.

Unter Bezugnahme auf 5B, und unter kurzer Bezugnahme auf 2, 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 2 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.With reference to 5B , and with brief reference to 2 , where the GPU 1650 is caused by the execution component 1641 to execute the GPU task routine 1671 to perform the assigned initial task with a data set partition 1131, pages from both the GPU task routine 1671 and the data set partition 1131 can be stored between the non-volatile memory 1563 and the volatile memory 1661 to which the GPU 1650 is coupled. Alternatively, where the CPU 1550 is caused by the execution component 1541 to execute the CPU task routine 1571 to perform the assigned initial task with a data set partition 1131, pages from both the CPU task routine 1571 and the data set partition 1131 can be switched between the non-volatile memory 1563 and the volatile memory 1561 to which the CPU 1550 is coupled. As previously related to 2 discussed above, each of volatile memory 1561 and 1661 may allow substantially faster access than non-volatile memory 1563 to data and/or routines stored therein, allowing CPU 1550 and GPU 1650 to more efficiently execute routines and perform operations on data stored within volatile memories 1561 and 1661, respectively. However, each of the volatile memories 1561 and 1661 may have a storage capacity much smaller than that of the non-volatile memory 1563. As a result, the situation may repeatedly arise when significantly more (if not all) of a relatively large dataset partition 1131 is storable within non-volatile memory 1563, while only a relatively small portion of that dataset partition 1131 is storable within one of volatile memories 1561 and 1661. which requires the use of a page swap.

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 wiederkehrendaktualisierteAnzeigendes 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 2 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.As illustrated, the control routine 1540 may also include a status component 1543 to cause the CPU 1550 to operate the network interface 1590 of the example node 1500 to provide recurrently updated indications of the current status of the processing, memory, and/or network access resources of the example node 1500 as updated transmit instances of the node status 1535 to the coordination device 1300 . As previously related to 2 discussed above, the GPU 1650 within the graphics controller 1600 may not and/or cannot access the network interface 1590 do not run the necessary driver routines to operate the 1590 network interface directly. Thus, the CPU 1550 can be caused by the status component 1543 to periodically retrieve indications of the status of the GPU 1650 and/or the volatile memory 1661 from the GPU 1650 to add them to the indications of the status that are included in the transmitted node status 1535.

6 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 4A-B und 5B 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. 6 Figure 12 illustrates one embodiment of an assignment of next tasks to be performed as part of the execution of an analysis routine to selected ones of the node devices 1500 of the node device trellis 1005. As previously in connection with FIG 4A-B and 5B discussed, the processor 1350 of the coordinating device 1300 can be caused by the monitoring component 1545 to operate the network interface 1390 recurrently in order to receive the node statuses 1535, which are transmitted recurrently from the node devices 1500 of the node device grid 1005 over the network 1999.

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ührungsförmen, 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ögerungsdaten1335eingeschlossen werden.In some embodiments, the processor 1350 may also be caused by the monitoring component 1545 to maintain and recurrently update indications of the lengths of time required to complete tasks assigned to the node devices 1500 . In some such embodiments, the task delay data 1335 may include a discrete per-task completion time that is recurrently calculated as an average of the lengths of time required for each of the multiple node devices 1500 to complete the same task. In embodiments where the task may have been assigned to different ones of the node devices 1500, where it can be executed with different processor types (e.g. a CPU 1550 vs. a GPU 1650 or different types of GPUs 1650), within the task delay data 1335 different average times are maintained for each different type of processor used to perform a task. Alternatively or additionally, as a mechanism for accounting for differences in resources (including processing resources) between Node Devices 1500, averages of relative differences in the amount of time it takes for each Node Device 1500 to complete assigned tasks compared to other Node Devices 1500 in the Task Delay Data 1335 can be included.

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.In such embodiments, the processor 1350 can be caused by the assignment component 1541 to use the stored indications of the durations for the . Use completion of assigned tasks within the task delay data 1335 to derive one or more periods of time by which the processor 1350 may delay the assignment of a next task with a particular data set partition 1131 to a node device 1500 that does not already have the particular data set partition 1131 stored therein. With multiple time periods of delay, each of them may be based on a different average of the completion times stored within the task delay data 1335 for a different task. If differences in resources between the node devices 1500 are relative by averages. Accounting for differences in time durations, such averages may be used by processor 1350 to modify each of the time periods for the delay for a particular node device 1500.

7A, 7B und 7C, zusammen genommen in der Reihenfolge von 7A bis 7C, veranschaulichen ein Ausführungsbeispiel der Durchführung von Aufgaben unter mehreren ausgewählten der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005. Insbesondere stellen 7A-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. 7A , 7B and 7C , taken together in the order of 7A until 7C 15, 15 illustrate one embodiment of performing tasks among selected ones of the node devices 1500 of the node device trellis 1005. In particular, Figs 7A-C 12 depicts an example triplet of node devices 1500x, 1500y, and 1500z performing a first task on an example data set 1130a and then performing a second task in conjunction with the first task on the same example data set 1130a. In this manner, each of the example node devices 1500x-z shall generate another example data set 1130b and then yet another example data set 1130c. It should be noted that this example, based on the only three node devices 1500x-z and including the three data sets 1130a-c, which may be small enough in size to be distributed among the only three node devices 1500, is a deliberately simplified one example and discussed herein for purposes of explanation and understanding and should not be taken as a limitation. In particular, it is envisioned that embodiments are likely to involve performing tasks with significantly larger data sets 1130 and thus likely involving the use of significantly more node devices 1500 .

Ausgehend von 7A 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.Starting from 7A For example, each of the three node devices 1500x-z has been assigned to perform the first task on a corresponding one of three dataset partitions 1131ax-az of dataset 1130a to create a respective one of three dataset partitions 1131bx-bz of dataset 1130b. In addition, each of the three 1500x-z node devices was paired with its corresponding der three dataset partitions 1131ax-az of dataset 1130a from one or more storage devices 1100 via network 1999.

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 1131 ax, 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 1131 ax abgeschlossen wurde. Bei der Durchführung der ersten Aufgabe mit der Datensatzpartition 1131 ax, 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 nicht-flü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.As illustrated, one or more processors of node device 1500x (e.g., one or more CPUs 1550 and/or one or more GPUs 1650) are still performing the first task with dataset partition 1131 ax, such that dataset partition 1131bx is still in progress is generated within the node device 1500x. Additionally, it may be that performing the first task with data set partition 1131ax consumes sufficient processing and/or memory resources of node device 1500x that node device 1500x is deemed to have potentially insufficient processing and/or memory resources to be allocated. perform another task until the first task with record partition 1131 ax has been completed. In performing the first task on data set partition 1131 ax to create data set partition 1131 bx, at least a subset of each of those partitions may be stored within non-volatile memory 1563 of node device 1500x. In addition, pages of these two partitions can be swapped between the non-volatile memory 1563 and one or the other of the volatile memory 1561 or 1661, depending on whether the first task is performed by one or more CPUs 1550 or one or more GPUs 1650 of the node device 1500x is carried out.

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 1131 ay durchzuführen, um eine Datensatzpartition 1131 cy 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öglicher weise 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.As also shown, one or more processors of node device 1500y have already completed performing the first task with dataset partition 1131ay, so dataset partition 1131by has already been created within node device 1500y and then transferred to the one or more storage devices 1100 for storage. In addition, upon completion of this performance of the first task, the node device 1500y was assigned to perform the second task on the data set partition 1131 ay to create a data set partition 1131 cy of the data set 1130c. As shown, one or more processors of node device 1500y are still in progress performing the second task with record partition 1131ay; so that record partition 1131cy is still created within node device 1500y. Additionally, performing the second task with dataset partition 1131ay may consume sufficient processing and/or memory resources of node device 1500y that node device 1500y is deemed to have potentially insufficient processing and/or memory resources to allocate to perform another task until the second task is completed with record partition 1131ay. Since the first task was performed on dataset partition 1131ay to create dataset partition 1131by, at least a subset of partition 1131by may remain stored within non-volatile memory 1563 of node device 1500y for a limited period of time. In performing the second task on dataset partition 1131ay to create dataset partition 1131cy, at least a subset of each of those partitions may be stored within non-volatile memory 1563 of node device 1500x. In addition, pages of these two data set partitions can be exchanged between the non-volatile memory 1563 and one or the other of the volatile memory 1561 or 1661, depending on whether the second task is performed by one or more CPUs 1550 or one or more GPUs 1650 of the node device 1500y is carried out. Furthermore, as a result of such a swap, it may be unlikely that any page of the record partition 1131by is still stored within the volatile memory 1561 or 1661.

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 1 131az 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 1131 bz und infolge der Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131 az zur Erzeugung der Datensatzpartition 1131 cz 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 150Qz 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 1131 cz 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.As further illustrated, one or more processors of node device 1500z have already completed performing the first task with record partition 1131az, such that record partition 1131bz has already been created within node device 1500z and then transferred to the one or more storage devices 1100 for storage. Similarly, the one or more processors of node device 1500z have already completed performing the second task with dataset partition 1 131az, so dataset partition 1131cz is also already created within node device 1500z and then transferred to the one or more storage devices 1100 for storage became. Therefore, in contrast to node devices 1500x and 1500y, node device 1500z may be deemed to have sufficient available processing and memory resources for node device 1500z to be allocated to perform another task. As a result of performing the first task on data set partition 1131az to create data set partition 1131 bz and as a result of performing the second task on data set partition 1131 az to create data set partition 1131 cz, at least a subset of one or more of data set partitions 1131az, 1131bz and 1131cz may be a remain stored within non-volatile memory 1563 of node device 150Qz for a limited period of time. Also as a result of If the second task was performed more recently than the first task, pages from one or both of the data set partitions 1131az and 1131cz may still be stored within one or the other of the volatile memory 1561 or 1661 depending on whether the second task was completed one or more CPUs 1550 or one or more GPUs 1650 of node device 1500z. However, it may be unlikely that any page of partition 1131bz is still stored within volatile memory 1561 or 1661.

Somit ist die Knotenvorrichtung 1500z, unter den eben beschriebenen Umständen und wie anhand von gestrichelten Linien in 7B 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 1131 ax bereits innerhalb des nicht-flü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 1131 ax 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.Thus, under the circumstances just described and as indicated by dashed lines in FIG 7B shown, available so that it could be assigned to perform the second task on dataset partition 1131ax of dataset 1130a to create dataset partition 1131cx of dataset 1130c. However, as discussed just above, it is the node device 1500x that was originally provisioned with the data set partition 1131ax from the one or more storage devices 1100 . Therefore, the data set partition 1131ax is already stored within the non-volatile memory 1563 of the node device 1500x, so that the data set partition 1131ax would not have to be retransmitted over the network 1999 from the one or more storage devices 1100 if the node device 1500x could be allocated. to perform the second task with the dataset partition 1131ax. Also, as previously mentioned, as a result of the ongoing performance of the first task with the data set partition 1131 ax within the node device 1500x, there is currently a swapping of sides of the data set partition 1131 ax between the non-volatile memory 1563 and either the volatile memory 1561 or 1661. Thus, there are one or more pages of data set partition 1131ax currently stored within volatile memory 1561 or 1661 of node device 1500x, and the relatively quick assignment of performing the second task with data set partition 1131ax to node device 1500x after node device 1500x completes its performance of the first task, may take advantage of the temporary storage of those one or more pages within volatile memory 1561 or 1661, which may allow node device 1500x to begin performing the second task much faster.

Daher wird, wie anhand von gestrichelten Linien in 7B 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 6), 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 1131 ax abzuschließen.Therefore, as indicated by dashed lines in 7B shown, despite the availability of node device 1500z to be assigned to perform the second task with data set partition 1131ax, node device 1500z is not assigned to do so. Instead, processor 1350 of coordinator 1300 is prompted by allocation component 1341 (referring to FIG 6 ) to delay the assignment of performing the second task with dataset partition 1131ax to any one of node devices 1500x-z for a period of time to provide node device 1500x with an opportunity to complete its performance of the first task with dataset partition 1131ax.

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 7A-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.As previously discussed, in some embodiments, the duration of the time period of such a delay may be based on indications in the recurrently received node status 1535 of how long it took for one or more nodes to complete the same task for which allocation is being delayed (e.g., (e.g. based on an average generated from the lengths of time required for one or more nodes to complete the same task). However, as has also been discussed, the time period of the delay may also be based on determinations of differences in the amount of time it takes the node when given an opportunity to complete a task versus the amount of time it takes other nodes to complete the task complete the same task. As previously mentioned, accounting for such differences in time durations may be deemed desirable in order to account for differences that exist in the various resources integrated in different node devices 1500. Thus, in the example 7A-C the time period of delay to allow node device 1500x a chance to complete the first task with dataset partition 1131ax, the amount of time it took for one or both of node devices 1500y and 1500z to complete the first task with their respective dataset partitions 1131ay and 1131az to complete (e.g., an average thereof), and/or differences in the amount of time it takes for node device 1500x to complete tasks compared to the amount of time it takes for node devices 1500y and/or 1500z to complete the same complete tasks based.

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 1131 ax 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 6), 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 7C 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.Regardless of the precise manner in which the time period of delay in assigning one of the node devices 1550x-z to perform the second task with the data set partition 1131 ax is derived, the processor 1350 of the coordinating device 1300 may use a clock 1351 to monitor of the passage of time can be integrated into the processor 1350 (refer to FIG 6 ) to determine when the delay time period has fully expired. If the time period of delay has fully elapsed before node device 1500x can complete its performance of the first task with data set partition 1131ax, then processor 1350 can be caused by allocation component 1341 to perform the second task with data set partition 1131ax to the node device assign 1500z. If, as in 7C shown, but node device 1500x completes its performance of the first task with dataset partition 1131ax before the time period of the delay expires, then processor 1350 can be caused to assign performance of the second task with dataset partition 1131ax to node device 1500x. As previously mentioned, such assignment of the second task with data set partition 1131ax to node device 1500x may utilize at least the storage of at least a portion of data set partition 1131ax within non-volatile memory 1563, if not also the storage of one or more pages of the data set partition 1131ax within volatile memory 1561 or 1661.

8A, 8B und 8C, zusammen genommen in der Reihenfolge aus 8A bis 8C, veranschaulichen ein weiteres Ausführungsbeispiel der Durchführung von Aufgaben unter mehreren ausgewählten der Knotenvorrichtungen 1500 des Knotenvorrichtungsgitters 1005. Insbesondere stellen 8A-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 7A-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. 8A , 8B and 8C , taken together in order from 8A until 8C 15, 15 illustrate another embodiment of performing tasks among selected ones of the node devices 1500 of the node device trellis 1005. In particular, Figs 8A-C represents the same example triplet of node devices 1500x, 1500y, and 1500z performing a first task on example data set 1130a to create example data set 1130b, and then performing a second task on example data set 1130b generated by performing the first task is generated. In performing the second task on the example data set 1130b, each of the example node devices 1500x-z shall generate yet another example data set 1130c. As in 7A-C note that this example, based on only three node devices 1500 and including three data sets 1130a-c, which may be small enough in size to be distributed among only three node devices 1500x-z, is a deliberately simplified example and discussed herein for purposes of explanation and understanding and should not be taken as a limitation. As previously mentioned, it is envisioned that embodiments will likely involve performing tasks with significantly larger data sets 1130 and thus likely involving the use of significantly more of the node devices 1500 .

Ausgehend von 8A 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 Datensatzpartitionen1 131 ax-az des Datensatzes 1130a von der einen oder den mehreren Speichervorrichtungen 1100 über das Netz 1999 versehen.Starting from 8A For example, each of the three node devices 1500x-z has been assigned to perform the first task on a corresponding one of three dataset partitions 1131ax-az of dataset 1130a to create a respective one of three dataset partitions 1131bx-bz of dataset 1130b. As illustrated, all three of the node devices 1500x-z have completed their performances of the first task and each has transferred its corresponding one of the data set partitions 1131bx-bz to the one or more storage devices 1100 for storage as data set 1130b. To enable these performances of the first task, each of the three node devices 1500x-z was provided with its corresponding one of the three dataset partitions 1 131 ax-az of dataset 1130a from the one or more storage devices 1100 via network 1999.

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.After their completions of the first task, each of the node devices 1500y and 1500z was assigned to perform the second task with the data set partitions 1131by and 1131bz that the node devices 1500y and 1500z created as a result of their performances of the first task, respectively. However, upon completion of the first task, node device 1500x was assigned to perform a task of a different and unrelated analysis routine. As previously discussed, the assignment of tasks to different and unrelated analysis routines may occur in embodiments where the node device trellis 1005 is shared to the extent that multiple unrelated analysis routines are performed using the node devices 1500 concurrently.

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.As illustrated, one or more processors of node device 1500x (e.g., one or more CPUs 1550 and/or one or more GPUs 1650) are still performing the task of the unrelated analysis routine. Additionally, performing the unrelated analysis routine task may consume sufficient processing and/or memory resources of the node device 1500x that it is deemed that the node device 1500x may have insufficient processing and/or memory resources to be allocated a perform another task until the task of the unrelated parsing routine has completed. Since the first task was performed on dataset partition 1131ax to create dataset partition 1131bx, at least a subset of one or both of partitions 1131ax and 1131bx may remain stored within non-volatile memory 1563 of node device 1500x for a limited period of time. In performing the task of the unrelated analysis routine, an exchange of pages of an unrelated data set partition between the non-volatile memory 1563 and the one or other of volatile memories 1561 or 1661 depending on whether the unrelated analysis routine task was performed by one or more CPUs 1550 or one or more GPUs 1650 of node device 1500x. Furthermore, as a result of such an exchange, it may be unlikely that any page of the data set partitions 1131ax or 1131bx is still stored within the volatile memory 1561 or 1661.

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 1131 ay durchgeführt wurde, um die Datensatzpartition 1131 by zu erzeugen, kann wenigstens eine Teilmenge der Partition 1131 ay 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.As shown, one or more processors of node device 1500y is still in progress performing the second task with record partition 1131by, such that record partition 1131cy is still created within node device 1500y. In addition, it may be that performing the second task with the data set partition 1131by consumes sufficient processing and/or memory resources of the node device 1500y that the node device 1500y is deemed to have insufficient processing and/or memory resources to be allocated. perform another task until the second task is completed with record partition 1131ay. Since the first task was performed on data set partition 1131 ay to create data set partition 1131 by, at least a subset of partition 1131 ay may remain stored within non-volatile memory 1563 of node device 1500y for a limited period of time. In performing the second task on dataset partition 1131by to create dataset partition 1131cy, at least a subset of each of those partitions may be stored within non-volatile memory 1563 of node device 1500x. In addition, pages of these two data set partitions can be exchanged between the non-volatile memory 1563 and one or the other of the volatile memory 1561 or 1661, depending on whether the second task is performed by one or more CPUs 1550 or one or more GPUs 1650 of the node device 1500y is carried out. Furthermore, as a result of such an exchange, it may be unlikely that any page of the data set partition 1131ay is still stored within the volatile memory 1561 or 1661.

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 1131 bz und infolge der Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131 bz zur Erzeugung der Datensatzpartition 1131cz kann wenigstens eine Teilmenge von einer oder mehreren der Datensatzpartitionen 1131az, 1131 bz und 1131cz eine begrenzte Zeitperiode läng 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 Speicher1561 oder 1661 gespeichert sein, abhängigdavon, 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.As further illustrated, one or more processors of node device 1500z have already completed performing the second task with record partition 1131bz, such that record partition 1131cz has already been created within node device 1500z and then transferred to the one or more storage devices 1100 for storage. Therefore, in contrast to node devices 1500x and 1500y, node device 1500z may be deemed to have sufficient available processing and memory resources for node device 1500z to be allocated to perform another task. As a result of performing the first task on dataset partition 1131az to create dataset partition 1131 bz and as a result of performing the second task on dataset partition 1131 bz to create dataset partition 1131cz, at least a subset of one or more of dataset partitions 1131az, 1131bz, and 1131cz may be a remain stored within non-volatile memory 1563 of node device 1500z for a limited period of time. Even as a result of the second task being performed more recently than the first task, pages from one or both of the data set partitions 1131bz and 1131cz may still be stored within one or the other of the volatile memory 1561 or 1661, depending on whether the second task was performed by one or multiple CPUs 1550 or one or more GPUs 1650 of the node device 1500z. However, it may be unlikely that any page of partition 1131az is still stored within volatile memory 1561 or 1661.

Somit ist, unter den eben beschriebenen Umständen und wie anhand von gestrichelten Linien in 8B 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 1131 ex 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 1131 bx 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.Thus, under the circumstances just described and as indicated by dashed lines in 8B , node device 1500z is available to perform the second task with data set partition 1131bx of data set 1130b. could be allocated to create record partition 1131 ex of record 1130c. However, as discussed just above, it is node device 1500x that originally created record partition 1131bx. Therefore, the data set partition 1131bx is already stored within the non-volatile memory 1563 of the node device 1500x, so that the data set partition 1131bx would not have to be transferred over the network 1999 from the one or more storage devices 1100 (or from the node device 1500x) if the Node device 1500x could be assigned to perform the second task with record partition 1131bx. Thus, the relatively quick assignment of performing the second task with the dataset partition 1131bx to the node device 1500x after the node device 1500x completes its performance of the task of the unrelated analysis routine, the temporary storage of the dataset partition 1131bx within the non-volatile memory 1563 of the node device 1500x, which may allow the node device 1500x to start performing the second task much faster.

Daher wird, wie anhand von gestrichelten Linien in 8B dargestellt, trotz der Verfügbarkeit der Knotenvorrichtung 1500z, um zugewiesen zu werden, um die zweite Aufgabe mit der Datensatzpartition 1131 bx 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 6), 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 7A-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 6), die Durchführung der zweiten Aufgabe mit der Datensatzpartition 1131 bx an die Knotenvorrichtung 1500z zuzuweisen. Falls, wie in 8C 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.Therefore, as indicated by dashed lines in 8B shown, despite the availability of node device 1500z to be assigned to perform the second task with dataset partition 1131bx, node device 1500z is not assigned to do so. Instead, processor 1350 of coordinator 1300 is prompted by allocation component 1341 (referring to FIG 6 ) to delay the assignment of performing the second task with dataset partition 1131bx to any one of node devices 1500x-z for a period of time to provide node device 1500x with an opportunity to complete its performance of the unrelated analysis routine task. Similar to the embodiment 7A-C , if the time period of delay has fully expired before node device 1500x is able to complete its performance of the unrelated analysis routine task, then processor 1350 may be prompted by allocation component 1341 (referring to FIG 6 ) to assign the performance of the second task with the dataset partition 1131bx to the node device 1500z. If, as in 8C shown, but node device 1500x completes its performance of the unrelated analysis routine task before the time period of the delay expires, then processor 1350 may be caused to assign performance of the second task to data set partition 1131bx to node device 1500x.

9 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. 9 11 illustrates one embodiment of a logic flow 2100. Logic flow 2100 may be representative of some or all of the operations performed by one or more embodiments described herein. In particular, the logic flow 2100 may illustrate operations performed by the processor 1350 in executing the control routine 1340 and/or the compilation routine 1440 and/or other component(s) of the coordinator 1300.

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.At 2110, a processor of a coordinator of a distributed processing system (e.g., processor 1350 of coordinator 1300 of distributed processing system 1000) may analyze node states that the coordinator recurrently receives from node devices of a grid of node devices (e.g., node states 1535 of the node devices 1500 of the node device lattice 1005) to determine what processing resources are available within each of the node devices. As previously discussed, the node statuses 1535 that are recurrently transmitted by the node devices 1500 to the coordinating device 1300 may indicate what processing resources are integrated into each of the node devices 1500 (e.g., which CPU(s) 1500 and/or GPU(s ) 1600 are included, what processing features are provided by each, etc.) and/or to what extent these processing resources are currently available within each of the node devices 1500.

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.At 2120, the coordinating device processor may check whether the node statuses indicate any GPUs as sufficiently available within any of the node devices such that a task could be assigned to those node devices to be performed by such available GPUs. If no GPUs are so available, at 2122 the processor may compile all of the task routines of an analysis routine to be executed by the CPUs of the node devices (e.g., the task routines 1211 of an analysis routine 1210). At 2124, the processor may then prioritize the assignment of all of the analysis routine's tasks to node devices selected as integrating only one or more CPUs and/or integrating a combination of one or more CPUs and one or more GPUs.

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 CPU(s) 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.However, if there are GPUs that are deemed sufficiently available at 2120, then at 2130 the processor may analyze each of the analysis routine's task routines to determine whether any of the task routines are amenable to conversion of their instructions and compilation required by the GPUs of the node devices of the node device lattice to run. If at 2140 there are no such accessible task routines, then at 2122 the processor may compile all of the task routines of the analysis routine to be executed by the CPUs of the node devices. Then, at 2124, the processor may re-prioritize the assignment of all of the analysis routine's tasks to node devices that have been selected as integrating only one or more CPUs and/or integrating a combination of one or more CPUs and one or more GPUs. As previously discussed, if none of the task routines 1211 of an analysis routine 1210 are accessible for compilation for execution by a GPU 1650, prioritizing the assignment of the tasks of such analysis routine 1210 to node devices 1500 that only integrate CPU(s) 1550, if possible, and/or Node Devices 1500 that integrate a combination of the CPU(s) 1550 and the GPU(s) 1650, if required, may be deemed desirable to facilitate the assignment of tasks to Node Devices 1500, the GPUs 1650 to minimize if none of the tasks be run by a GPU 1650. This may help keep the GPUs 1650 of the node devices 1500 of the node device lattice 1005 more readily available for use in performing tasks of another analysis routine that can be performed by GPUs.

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.However, if at 2140 there is at least one task routine of the analysis routine that is accessible for such conversion and compilation, a check may be made at 2150 whether all of the task routines of the analysis routine are so accessible. If so, at 2152 the processor may compile all of the analysis routine's task routines to be executed by the GPUs of the node devices. At 2154, the processor may then prioritize the assignment of all of the analysis routine's tasks to node devices selected as integrating only one or more GPUs and/or integrating a combination of one or more CPUs and one or more GPUs.

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 kompilierendie,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.However, if at 2150 there is a mixture of task routines that are and are not accessible for such conversion and compilation, then at 2160 the processor may compile all of the analysis routine's task routines that are accessible to be executed by the GPUs of the node devices become. At 2162, the processor may compile all of the analysis routine's task routines that are not as accessible to be executed by the CPUs of the node devices. At 2164, the processor may then prioritize the assignment of all of the analysis routine's tasks to node devices that have been selected as integrating a combination of one or more CPUs and one or more GPUs.

10 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. 10 12 illustrates one embodiment of a logic flow 2200. Logic flow 2200 may be representative of some or all of the operations performed by one or more embodiments described herein. In particular, the logic flow 2200 may illustrate operations performed by the one or more CPUs 1550 in executing the control routine 1540 and/or the compilation routine 1440 and/or other component(s) of the node devices 1500.

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.At 2210, a CPU of a node device of a distributed processing system (e.g., a CPU 1550 of one of the node devices 1500 of the distributed processing system 1000) may analyze a task routine (e.g., a task routine 1211 of an analysis routine 1210) to determine whether it is conversion of its instructions and compilation is amenable to execution by the one or more GPUs of the node device (e.g., one or more of GPUs 1650). As previously discussed, in embodiments where the coordinating device 1300 does not compile the task routines 1211, one or more CPUs 1550 of each of the node devices 1500 may do so. Also, such compilation may include an analysis of each task routine 1211 received from each of the node devices 1500 that integrates one or more of the GPUs 1650 to determine whether the compilation is for execution by one or more CPUs 1550 or one or more GPUs 1650 to run.

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.If the task routine at 2220 is not so accessible, then at 2222 the CPU may compile the task routine of the analysis routine for execution by the one or more CPUs of the node device. However, if the task routine is so accessible at 2220, then at 2230 the CPU may compile the analysis routine's task routine to be executed by the one or more GPUs of the node device.

11 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. 11 11 illustrates one embodiment of a logic flow 2300. Logic flow 2300 may be representative of some or all of the operations performed by one or more embodiments described herein. In particular, the logic flow 2300 may illustrate operations performed by the processor 1350 in executing the control routine 1340 and/or other component(s) of the coordinator 1300.

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.At 2310, a processor of a coordinator of a distributed processing system (e.g., processor 1350 of coordinator 1300 of distributed processing system 1000) may receive metadata of a data set that is descriptive of a data set from one or more storage devices (e.g., metadata 1135 from one or more storage devices 1100). At 2312, the processor may receive an analysis routine that includes multiple task routines from the one or more storage devices and/or a viewing device (e.g., analysis routine 1210 that includes multiple task routines 1211 from the one or more storage devices 1100 or from the viewing device 1800 includes). At 2314, the processor may distribute the latest transmissions of node status data from node devices of a lattice of node devices th processing system (e.g., the node statuses 1535 of the node devices 1500 of the node device trellis 1005). As previously discussed, in embodiments in which the node devices 1500 also serve as storage devices of at least the one or more data sets 1130, the coordinating device 1300 may receive the metadata 1135 and/or the analysis routine from one of the node devices 1500.

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.At 2320, the processor may derive initial assignments of data set partitions (e.g., data set partitions 1131) and initial tasks, including a selection of a plurality of the node devices to which data set partitions are to be distributed, and initial assignments of the one or more initial tasks to be made . At 2322, the processor may transmit indications of the allocated distribution of the data set partitions to one or more storage devices and/or to the selected node devices. As previously discussed, the distribution of dataset partitions to the selected node devices from the one or more storage devices may be coordinated among the one or more storage devices, the selected node devices, and/or the coordinating device in any of a variety of ways, with any of a variety of protocols is used to cause the transfer of the data set partitions to the selected node devices.

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.At 2330, the processor may transmit to the selected node devices indications of the assignment of a first task to be performed on the selected node devices with corresponding ones of the data set partitions. As previously discussed, the assignment of task routines to the analysis routine or the assignment of CPU task routines and/or GPU task routines (e.g., task routines 1211, CPU task routines 1571, and/or GPU task routines 1671) to the selected node devices as part of the signaling of assignments of tasks to the selected node devices.

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.At 2340, the processor may receive from a first one of the selected node devices an indication of the first node device's completion of the first task with the first data set partition. As previously discussed, such indications may be transmitted as part of the periodic transmissions of node status 1535 to the coordinator.

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.At 2350, the processor may delay assignment of performance of a second task using a second data set partition to any of the selected node devices, including the first node device, for a predetermined time period of delay to allow a second one of the selected node devices in which the second record partition is already stored, giving a chance to become available. As previously discussed, such an imposition of a delay in the assignment of a next task with a particular dataset partition may be to allow a node device already storing that particular dataset partition to become available to store that particular dataset partition within that node device by assigning the next task with the particular dataset partition to that node device. As already mentioned, in this way the network bandwidth resources and the time needed for the transfer of the particular data set partition to another node device can be saved by waiting in this way for that node device to become available.

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.At 2360, the processor may check whether the second node device, in which the second data set partition is already stored, became available at the end of the delay time period. If the second node device became available within the time period of the delay, then the processor may transmit an indication of the assignment to perform the second task with the second dataset partition at 2362 to the second node device. However, if the second node device did not become available within the time period of the delay, then the processor may transmit an indication of the assignment to perform the second task with the second dataset partition at 2370 to the first node device.

12 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. 12 12 illustrates one embodiment of a logic flow 2400. Logic flow 2300 may be representative of some or all of the operations performed by one or more embodiments described herein. In particular, the logic flow 2400 may illustrate operations performed by the processor 1350 in executing the control routine 1340 and/or other component(s) of the coordinator 1400.

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.At 2410, a processor of a distributed processing system coordinator (e.g., processor 1350 of coordinator 1300 of distributed processing system 1000) may receive an indication from a node device of a node device grid of the distributed processing system (e.g., one of node devices 1500 of node device grid 1005). indicates that this node device has completed its execution of a task routine involving a dataset partition of a dataset (e.g., one of dataset partitions 1131 of dataset 1130). At 2412, the processor may determine the amount of time that has elapsed between its transmitting a signal to the node device to perform the task with the data set partition and receiving the indication from the node device of the completion of that task performance.

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.At 2420, the processor may compare the new elapsed time to previous elapsed times required by other node devices to perform the same task with their corresponding dataset partitions of the same dataset. At 2422, the processor may check whether the new elapsed time is similar to the previous elapsed times for those performances of the same task, within a predetermined threshold of similarity. If not, then the processor can use the new elapsed time along with the previous elapsed times to derive again a time period of delay by which a new task assignment should be delayed in order to allow another node to complete the task make possible. As previously discussed, such determinations of a time period of delay may result in an averaging of lengths of time required by different ones of the node devices 1500 to perform the same task.

13 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. 13 11 illustrates one embodiment of a logic flow 2500. Logic flow 2500 may be representative of some or all of the operations performed by one or more embodiments described herein. In particular, the logic flow 2500 may illustrate operations performed by the processor 1350 in executing the control routine 1340 and/or other component(s) of the coordinator 1300.

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.At 2510, a processor of a distributed processing system coordinator (e.g., processor 1350 of coordinator 1300 of distributed processing system 1000) may receive an indication from a first node device of a node device lattice of the distributed processing system (e.g., one of node devices 1500 of node device lattice 1005). completion of a first task with a first dataset partition of a dataset (e.g., one of dataset partitions 1131 of a dataset 1130) is received by the first node device. As previously discussed, such indications may be transmitted as part of the periodic transmissions of node status 1535 to the coordinator.

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 Knotenyorrichtung 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.At 2520, the processor may delay assignment of performance of a second task using a second dataset partition of the same dataset to any node-devices of the node-device lattice, including the first node-device, for a predetermined period of delay for a second node-device of the node-device lattice in which the second record partition is already stored, giving a chance to become available. At 2530, the processor may check whether the second node device, in which the second data set partition is already stored, became available at the end of the delay time period. If the second node device became available within the time period of the delay, then the processor may transmit an indication of the assignment to perform the second task with the second data set partition at 2532 to the second node device.

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.However, if the second node device did not become available within the time period of the delay at 2530, then the processor may check at 2540 whether there was another node device of the node device grid that was provisioned with the second record partition to prepare the other node device to act as a backup - serve as a node device for a task involving the second dataset partition. If no such other device is present, then the processor may transmit an indication of the assignment to perform the second task with the second dataset partition at 2542 to the first node device.

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ügharen Knotenorrichtung empfangen wurde, dann kann Prozessor eine Anzeige der Zuweisung der Durchführung der zweiten Aufgabe mit der zweiten Datensatzpartition bei 2552 an die andere Knotenvorrichtung übertragen.However, if such another node device is present at 2540, then the processor may check at 2550 whether an indication has been received that the other node device is currently available to be assigned a task. If not, then the processor can again display an indication of the assignment to perform the second task with the second data set partition transmitted at 2542 to the first node device. However, if such an indication of the other currently available node device was received, then the processor may transmit an indication of the assignment of performing the second task with the second dataset partition at 2552 to the other node device.

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 various embodiments, each of processors 1150, 1350, 1550, 1650, and 1850 may include any of a variety of commercially available processors. Furthermore, one or more of these processors may include multiple processors, a multi-threaded processor, a multi-core processor (whether the multiple cores co-exist on the same or separate dies), and/or a different type of multi-processor architecture by which multiple physically separate processors are connected are.

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.However, in a particular embodiment, the CPU 1550 of each of the one or more node devices 1500 may be selected to efficiently perform the analysis of multiple instances of job flows in parallel, at least in part. By way of example, the CPU 1550 may integrate a single-instruction-multiple-data (SIMD) architecture, may integrate multiple processing pipelines, and/or may integrate the ability to support multiple simultaneous threads of execution per processing pipeline.

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.Alternatively or additionally, in a particular embodiment, each GPU 1650 of the one or more node devices, which may include at least one of the GPUs 1650, may integrate multi-threaded capabilities and/or multiple processor cores to enable parallel execution of tasks. Illustratively, the GPU 1650 may incorporate an internal architecture designed to enable parallel execution of tasks that use a relatively limited instruction set across hundreds, thousands, tens of thousands, or even more threads of execution to support graphics applications that require relatively high-resolution images include.

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ätetFeibe 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 various embodiments, each of control routines 1140, 1340, 1540, 1840, and 1640, including the components that make up each, can be selected to be operable on any type of processor or processors selected to be applicable to the processors 1150, 1350, 1550, 1850 and/or 1650 within the corresponding one of the devices 1100, 1300, 1500 and/or the graphics controller 1600. In various embodiments, each of these routines may include one or more of an operating system, device drivers, and/or application-level routines (e.g., so-called "software suites" provided on disc media, "applets" provided by a remote servers are obtained, etc.). If an operating system is included, the operating system may be any of a variety of available operating systems suitable for the 1150, 1550, and/or 1850 processors. When one or more device files are included, these device drivers may provide support for any of a variety of other components, whether hardware or software components, of devices 1100, 1300, 1500, 1800, and/or 1600.

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 Speichertechnologue basieren, bestehen kann, due 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 various embodiments, each of the memories 1160, 1360, 1560, 1660, and 1860 may be based on any of a variety of information storage technologies, including volatile technologies that require the uninterrupted supply of electrical power and/or technologies that involve the use of machine-readable storage media, which may or may not be removable. Thus, each of these memories may include any of a variety of types (or combinations of types) of memory devices including, without limitation: read-only memory (ROM), random-access memory (RAM), Dynamic RAM (DRAM), Double-Data-Rate DRAM (DDR-DRAM), Synchronous DRAM (SDRAM), Static RAM (SRAM), Programmable ROM (PROM), Erasable Programmable ROM (EPROM). ), Electrically Erasable Programmable ROM (EEPROM), Flash memory, Polymer memory (e.g. ferroelectric polymer memory), Ovonic memory, Phase change or ferroelectric memory, Silicon Oxide Nitride Oxide Silicon (SONOS ) memory, magnetic or optical cards, one or more individual ferromagnetic disk drives, non-volatile storage class memory, or a plurality of storage devices organized into one or more arrays (e.g., B. multiple ferromagnetic disk drives organized in a redundant array of independent disks (Redundant Array of Independent Disks (RAID)). It should be noted that although each of these memories is illustrated as a single block, one or more of them may include multiple memory devices, which may be based on different memory technologies. Thus, for example, one or more of each of these memory shown is a combination of an optical drive or flash memory card reader, through which programs and/or data can be stored and transmitted on some form of machine-readable storage medium, a ferromagnetic disk drive, to store programs and/or data locally for a relatively long period of time , and one or more volatile solid-state memory devices that allow relatively fast access to programs and/or data (e.g., SRAM or DRAM). It should also be noted that each of these memories can be composed of several memory components based on an identical memory technology, but which can be managed separately due to the specialization in use (e.g. some DRAM devices are used as a main memory, while other DRAM devices are used as a different framebuffer of a graphics controller).

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.However, in a particular embodiment, in embodiments where the one or more of the storage devices 1100 provide for the storage of one or more data sets 1130, or in which the non-volatile memory 1563 in embodiments where the node devices 1500 provide for the storage of one or multiple data sets 1130 can be implemented with a redundant array of independent disks (RAID) of a RAID level selected to provide fault tolerance for the storage of one or more data sets 1130.

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, Eirigabestifte, 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 various embodiments, each of the input devices 1320 and 1820 may each be any of a variety of types of input device, each of which may use any of a variety of input detection and/or reception technologies. Examples of such input devices include, but are not limited to, microphones, remote controls, styluses, card readers, fingerprint readers, virtual reality interactive gloves, graphical input tablets, joysticks, keyboards, retina scanners, the tactile input components of touch screens, trackballs, environmental sensors, and/or either cameras or camera arrays Monitoring the movement of individuals to accept commands and/or data provided by those individuals via gestures and/or facial expressions.

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 various embodiments, each of the displays 1380 and 1880 can each be any of a variety of types of display device, each of which can use any of a variety of visual presentation technologies. Examples of such a display device include, but are not limited to, a cathode-ray tube (CRT), an electroluminescent (EL) panel, a liquid crystal display (LCD), a gas plasma display, etc. In some embodiments, the displays 1180 and/or or 1880 may each be a touch screen display such that input devices 1110 and/or 1810 may each be incorporated therein as touch-sensitive components thereof.

In verschiedenen Ausführungsformen kann jede der Netzschnittstellen 1190,1390, 1590 und 1890 beliebige einer Vielzahl von Kommunikationstechnologien verwenden, um diesen Vornchtungen zu ermöglichen,wie beschrieben mit anderen Vorcichtungen-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.1 1a, 802.11 ad, 802.1 1ah, 802.1 1ax, 802.1 1b, 802.1 1g, 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 various embodiments, each of network interfaces 1190, 1390, 1590, and 1890 may use any of a variety of communication technologies to enable these devices to interface with other devices as described. Each of these interfaces includes circuitry that provides at least some of the functionality required to enable such coupling. However, each of these interfaces may also be implemented, at least in part, with sequences of instructions executed by corresponding ones of the processors (e.g., to implement a protocol stack or other features). When electrically and/or optically conductive cabling is used, these interfaces may use timings and/or protocols that conform to any of a variety of industry standards including, without limitation, RS-232C, RS-422, USB, Ethernet (IEEE-802.3 ) or IEEE-1394. Where use of wireless transmissions is implied, these interfaces may use timings and/or protocols compliant with any of a variety of industry standards including, without limitation: IEEE 802.1 1a, 802.11 ad, 802.1 1ah, 802.1 1ax, 802.1 1b, 802.1 1g , 802.16, 802.20 (commonly referred to as "Mobile Broadband Wireless Access"); Bluetooth; ZigBee; or a cellular radiotelephone service such as GSM with 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, etc.

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.However, in a particular embodiment, one or more of network interfaces 1190, 1390, and/or 1590 may be implemented with multiple copper-based or fiber-optic-based network interface ports to provide redundant and/or parallel paths when interchanging one or more of the Record Partitions 1131, Task Routines 1211, CPU Task Routines 1571, and/or GPU Task Routines 1671.

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.In various embodiments, the distribution of processing and/or memory resources among the node devices 1300 and/or the API architectures used to support communication between the node devices and other devices may be designed and/or selected to work with any conform to a variety of distributed processing standards, including but not limited to IEEE P2413, AllJoyn, IoTivity, etc. Illustratively, a subset of API and/or other architectural features of one or more such standards may be used to provide the relatively minimal extent described herein Implement coordination to provide greater efficiency in parallelizing the processing of data, while at the same time minimizing exchange of coordinating information that can lead to undesirable instances of inter-process serialization. However, it should be noted that the parallelization of the storage, retrieval, and/or processing of portions of the records 1130 is not dependent on or limited by existing API architectures and/or supporting communication protocols. More generally, there is nothing in the manner in which data sets 1130 may be organized in storage, transmission, and/or distribution over network 1999 that is tied to existing API architectures or protocols.

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. Apache™ Hadoop® ist ein Open-Source-Software-Framework für verteiltes Rechnen.Some systems may use Hadoop®, an open-source framework for storing and analyzing big data in a distributed computing environment. Some systems may use cloud computing, which can enable ubiquitous, on-demand, convenient network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications, and services) that are rapidly provisioned with minimal management effort or minimal service provider interaction and can be released. Some grid systems may be implemented as multi-node Hadoop® clusters, as will be understood by those skilled in the art. Apache™ Hadoop® is an open source software framework for distributed computing.

Claims (14)

Computerimplementiertes Verfahren zur wenigstens teilweise parallelen Durchführung von Aufgaben von Analyseroutinen mittels einer Mehrzahl von Knotenvorrichtungen (1500), umfassend: Empfangen einer Analyseroutine, die ausführbare Anweisungen für eine oder mehrere Aufgaben in Form von Taskroutinen zur Ausführung durch wenigstens eine zentrale Verarbeitungseinheit (Central Processing Unit, CPU) einer Knotenvorrichtung umfasst, die mit wenigstens einem Datensatz durchgeführt werden sollen, Analysieren eines aktuellen Status von Ressourcen von wenigstens einer - Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen, um eine Verfügbarkeit von wenigstens einer Grafikverarbeitungseinheit (Graphics Processing Unit, GPU) der wenigstens einen Knotenvorrichtung zu bestimmen, wobei die genannten Ressourcen zumindest eine CPU und zumindest eine GPU umfassen, und . wenn das Bestimmen ergibt, dass wenigstens eine GPU der wenigstens einen Knotenvorrichtung für die Zuweisung einer ersten Aufgabe der Analyseroutine in Form einer ersten Taskroutine verfügbar ist, Analysieren der ersten Taskroutine, ob diese in eine GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU kompiliert werden kann, so dass die wenigstens eine GPU mehrere Instanzen der ersten Aufgabe der Analyseroutine wenigstens teilweise parallel durchführen kann, wobei das Analysieren umfasst, ob die erste Taskroutine eine Anweisung umfasst, die eine Kompilierung zur Erzeugung einer GPU-Taskroutine verhindert, und ob Eingaben und Ausgaben der ersten Taskroutine Abhängigkeiten aufweisen, die eine Kompilierung zur Erzeugung einer GPU-Taskroutine verhindern, wenn das Analysieren ergibt, dass die erste Taskroutine in eine GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU kompiliert werden kann, 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; Zuweisen einer Datensatzpartition des Datensatzes an die wenigstens eine Knotenvorrichtung, um Zugriff auf die Datensatzpartition durch die wenigstens eine GPU zu ermöglichen, und Zuweisen einer Durchführung der GPU-Taskroutine an die wenigstens eine Knotenvorrichtung, um die Durchführung der mehreren Instanzen der ersten Aufgabe mit der Datensatzpartition durch die wenigstens eine GPU mittels der GPU-Taskroutine zu ermöglichen.A computer-implemented method for performing analysis routine tasks, at least partially in parallel, using a plurality of node devices (1500), comprising: receiving an analysis routine comprising executable instructions for one or more tasks in the form of task routines for execution by at least one central processing unit (CPU) of a node device to be performed on at least one data set, analyzing a current status of resources of at least one node device of the plurality of node devices to determine an availability of at least one graphics processing unit (GPU) of the at least one node device, wherein said resources include at least one CPU and at least one GPU, and . if the determination reveals that at least one GPU of the at least one node device is available for assignment of a first task of the analysis routine in the form of a first task routine, Analyzing the first task routine to determine whether it can be compiled into a GPU task routine for execution by the at least one GPU, so that the at least one GPU can perform multiple instances of the first task of the analysis routine at least partially in parallel, wherein analyzing comprises whether the first task routine includes an instruction that prevents compilation to produce a GPU task routine and whether inputs and outputs of the first task routine have dependencies that prevent compilation to produce a GPU task routine, if the analyzing indicates that the first task routine can be compiled into a GPU task routine for execution by the at least one GPU, using a conversion rule to convert at least one instruction of the first task routine into at least one corresponding instruction of the GPU task routine; compiling the at least one corresponding GPU task routine instruction for execution by the at least one GPU; allocating a dataset partition of the dataset to the at least one node device to enable access to the dataset partition by the at least one GPU, and assigning the at least one node device to perform the GPU task routine to enable the at least one GPU to perform the multiple instances of the first task with the dataset partition. Computerimplementiertes Verfahren nach Anspruch 1, wobei die genannten Ressourcen Speicherplatzinnerhälb wenigsteris eines Speichers derwenigstens einen Knotenvorrichtung umfassen.Computer-implemented method claim 1 , said resources comprising storage space within at least one memory of the at least one node device. Computerimplementiertes Verfahren nach Anspruch 1 oder 2, wobei das Analysieren der ersten Taskroutine, ob diese in eine GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU kompiliert werden kann, 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 das Bestimmen, 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.Computer-implemented method claim 1 or 2 , wherein analyzing the first task routine for whether it can be compiled into a GPU task routine for execution by the at least one GPU comprises: determining whether the instruction of the first task routine is included in a set of instructions not included in at least one instruction executable by the at least one GPU; and in response to determining that the first task routine's instruction is not included in the set of instructions, determining whether the first task routine's instruction is used in the first task routine in a manner that prevents conversion to at least one instruction that is defined by which can run at least one GPU. Computerimplementiertes Verfahren nach Anspruch 1 oder 2, 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 verwendeten Umwandlungsregel umzuwandeln.Computer-implemented method claim 1 or 2 , wherein converting the at least one instruction of the first task routine into the at least one corresponding instruction of the GPU task routine comprises converting the at least one instruction of the first task routine from a first programming language into the at least one corresponding instruction in a second programming language according to the conversion rule used. Computerimplementiertes Verfahren nach Anspruch 2, 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 des Datensatzes 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.Computer-implemented method claim 2 wherein: the at least one memory of the at least one node device comprises a first volatile memory communicatively coupled to the at least one CPU and a second volatile memory communicatively coupled to the at least one GPU; assigning the data set partition of the data set to the at least one node device to enable access to the data set partition by the at least one GPU comprises causing the data set partition to be stored within the second volatile memory. Computerimplementiertes Verfahren nach Anspruch 5, wobei: wenn das Bestimmen ergibt däss keihe GPU der wenigstens einen Knotenvorrichtung für die Zuweisung einer ersten Aufgabe der Analyseroutine in Form einer ersten Taskroutine verfügbar ist, das Verfahren umfasst: Unterlassen des Analysierens der ersten Taskroutine, ob diese in eine GPU-Taskroutine zur Ausführung-durch die wenigstens eine GPU kompiliert werden kann; Zuweisen der Datensatzpartition des Datensatzes an die wenigstens eine Knotenvorrichtung, um eine Speicherung der Datensatzpartition innerhalb des ersten flüchtigen Speichers zu veranlassen und um 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 einer 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.Computer-implemented method claim 5 , wherein: if the determining indicates that no GPU of the at least one node device is available for assignment of a first task of the analysis routine in the form of a first task routine, the method comprises: refraining from analyzing the first task routine to determine whether to convert it into a GPU task routine for execution - by which at least one GPU can be compiled; assigning the data set partition of the data set to the at least one node device to cause storage of the data set partition within the first volatile memory and to allow access to the data set partition by the at least one CPU; compiling the first task routine for execution by the at least one CPU; and assigning the at least one node device to perform the first task of the analysis routine on the data set partition to enable the at least one CPU to perform the first task on the data set partition. Computerimplementiertes Verfahren nach Anspruch 1, 2 oder 6, 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 eines aktuellen Status von Ressourcen, um eine Verfügbarkeit von wenigstens einer GPU der wenigstens einen Knotenvorrichtung zu bestimmen, umfasst: das Identifizieren, durch die Koordinierungsvorrichtung, einer Knotenvorrichtung der Mehrzahl von Knotenvorrichtungen, die eine GPU umfasst, die im aktuellen Status als verfügbar angezeigt wird.Computer-implemented method claim 1 , 2 or 6 wherein: a coordination device coordinates the operation of the plurality of node devices; the coordinating device recurrently receiving updates for the current status of each node device of the plurality of node devices; and analyzing a current status of resources to determine an availability of at least one GPU of the at least one node device comprises: identifying, by the coordinating device, a node device of the plurality of node devices that includes a GPU that is available in the current status is shown. Computerimplementiertes Verfahren nach Anspruch 7, wobei das Zuweisen einer Datensatzpartition des Datensatzes an die wenigstens eine Knotenvorrichtung umfasst: Analysieren, durch die Koordinierungsvorrichtung, von Metadaten, die indikativ für strukturelle Merkmale des Datensatzes sind, um eine Beschränkung der Art und Weise zu identifizieren, wie der Datensatz in die Mehrzahl von Datensatzpartitionen aüfgeteilt werden känn,wobei die Beschränkung in einer Angabe einer kleinsten atomaren Einheit von Daten innerhalb des Datensatzes und/oder in einer Spezifikation eines Partitionierungsschemas besteht; und Ableiten einer Aufteilung des Datensatzes in die Mehrzahl von Datensatzpartitionen wenigstens teilweise basierend auf der Beschränkung.Computer-implemented method claim 7 , wherein allocating a dataset partition of the dataset to the at least one node device comprises: analyzing, by the coordinator, metadata indicative of structural features of the dataset to identify a limitation of the manner in which the dataset is divided into the plurality of data set partitions can be divided, the constraint being an indication of a smallest atomic unit of data within the data set and/or a specification of a partitioning scheme; and deriving a partition of the data set into the plurality of data set partitions based at least in part on the constraint. Computerimplementiertes Verfahren nach Anspruch 8, umfassend: Abrufen der Metadaten aus wenigstens einer Speichervorrichtung, in welcher der Datensatz gespeichert ist; und Übertragen, an die wenigstens eine Knotenvorrichtung oder die wenigstens eine Speichervorrichtung, einer Anzeige über die Zuweisung der Datensatzpartition, um eine Übertragung der Datensatzpartition von der wenigstens einen Speichervorrichtung an die wenigstens eine Knotenvorrichtung zu veranlassen.Computer-implemented method claim 8 comprising: retrieving the metadata from at least one storage device in which the data set is stored; and transmitting to the at least one node device or the at least one storage device an indication of the allocation of the data set partition to cause a transfer of the data set partition from the at least one storage device to the at least one node device. Computerimplementiertes Verfahren nach Anspruch 1 oder 2, umfassend: Analysieren einer zweiten Taskroutine der Analyseroutine, ob diese in eine GPU-Taskroutine zur Ausführung durch die wenigstens eine GPU kompiliert werden kann, so dass die wenigstens eine GPU mehrere Instanzen einer zweiten Aufgabe der Analyseroutine wenigstens teilweise parallel durchführen kann, wobei das Analysieren der zweiten Taskroutine umfasst, ob eine Abhängigkeit zwischen Eingaben und Ausgaben der mehreren Instanzen der zweiten Aufgabe vorhanden ist, die eine Kompilierung zur Erzeugung einer GPU-Taskroutine verhindert, wobei die zweite Taskroutine zur Ausführung durch die wenigstens eine CPU erzeugt wurde, um eine zweite Aufgabe der Analyseroutine durchzuführen; und wenn das Analysieren ergibt, dass die zweite Taskroutine nicht kompiliert werden kann, um die 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.Computer-implemented method claim 1 or 2 , comprising: analyzing a second task routine of the analysis routine to determine whether it can be compiled into a GPU task routine for execution by the at least one GPU such that the at least one GPU can perform multiple instances of a second task of the analysis routine at least partially in parallel, the analyzing the second task routine includes whether there is a dependency between inputs and outputs of the multiple instances of the second task that prevents compilation to generate a GPU task routine, the second task routine being generated for execution by the at least one CPU to perform a second task to perform the analysis routine; and if the analyzing determines that the second task routine cannot be compiled to generate the GPU task routine: compiling the second task routine for execution by the at least one CPU; and assigning the at least one node device to perform the second task of the analysis routine on the dataset partition to enable the at least one CPU to perform the second task on the dataset partitions. Computerimplementiertes Verfahren nach Anspruch 10, 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.Computer-implemented method claim 10 , comprising analyzing the analysis routine to determine an order of tasks of the analysis routine, the order of the tasks including a relative order of the first and second tasks. Computerprogrammprodukt, das in einem nicht-flüchtigen maschinenlesbaren Speichermedium ausgeführt ist, wobei das Computerprogrammprodukt Anweisungen umfasst, die in der Lage sind, einen Prozessor zu veranlassen, Operationen gemäß einem Verfahren nach einem der Ansprüche 1 bis 11 durchzuführen.A computer program product embodied in a non-transitory machine-readable storage medium, the computer program product comprising instructions capable of causing a processor to perform operations in accordance with a method according to any one of Claims 1 until 11 to perform. Vorrichtung, umfassend einen Prozessor und einen Speicher, um Anweisungen zu speichern, die, wenn sie durch den Prozessor ausgeführt werden, den Prozessor veranlassen, Operationen gemäß einem Verfahren nach einem der Ansprüche 1 bis 11 durchzuführen.Apparatus comprising a processor and a memory for storing instructions which when executed by the processor cause the processor to perform operations according to a method according to any one of Claims 1 until 11 to perform. Vorrichtung nach Anspruch 13, wobei: das Analysieren des aktuellen Status von Ressourcen der wenigstens einen Knotenvorrichtung, um eine Verfügbarkeit von wenigstens einer GPU der wenigstens einen Knotenvorrichtung zu bestimmen, das Analysieren durch eine CPU dieser Knotenvorrichtung umfasst, ob wenigstens eine GPU dieser Knotenvorrichtung aktuell verfügbar ist.device after Claim 13 , wherein: analyzing the current status of resources of the at least one node device to determine an availability of at least one GPU of the at least one node device comprises analyzing, by a CPU of that node device, whether at least one GPU of that node device is currently available.
DE102017213160.8A 2016-08-25 2017-07-31 Compilation for node device GPU-based parallel processing Active DE102017213160B4 (en)

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 2017-02-01
US15/422,285 US9760376B1 (en) 2016-02-01 2017-02-01 Compilation for node device GPU-based parallel processing

Publications (2)

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

Family

ID=59778869

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102017213160.8A Active DE102017213160B4 (en) 2016-08-25 2017-07-31 Compilation for node device GPU-based parallel processing

Country Status (9)

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

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111327921A (en) * 2018-12-17 2020-06-23 深圳市炜博科技有限公司 Video data processing method and device
CN109743453B (en) * 2018-12-29 2021-01-05 出门问问信息科技有限公司 Split screen display method and device
CN110163791B (en) * 2019-05-21 2020-04-17 中科驭数(北京)科技有限公司 GPU processing method and device of data computation flow graph
CN111984322B (en) * 2020-09-07 2023-03-24 北京航天数据股份有限公司 Control instruction transmission method and device
CN112783506B (en) * 2021-01-29 2022-09-30 展讯通信(上海)有限公司 Model operation method and related device

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110252411A1 (en) 2010-04-08 2011-10-13 The Mathworks, Inc. Identification and translation of program code executable by a graphical processing unit (gpu)

Family Cites Families (9)

* 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
DE102013208418A1 (en) * 2012-05-09 2013-11-14 Nvidia Corp. Method for producing executable data file in computer system, involves linking compiled device codes and host codes to generate linked device code and linked host code that are used for producing executable data file
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 (en) * 2013-12-23 2015-06-24 Deutsche Telekom AG System and method for mobile augmented reality task scheduling
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

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110252411A1 (en) 2010-04-08 2011-10-13 The Mathworks, Inc. Identification and translation of program code executable by a graphical processing unit (gpu)

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
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
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
BE1025002A1 (en) 2018-09-14
CN107783782B (en) 2019-03-15
CA2974556A1 (en) 2018-02-25
DK201770596A1 (en) 2018-03-12
DK179709B1 (en) 2019-04-09
CA2974556C (en) 2018-06-05
NO20171277A1 (en) 2018-02-26
NO343250B1 (en) 2018-12-27
DE102017213160A1 (en) 2018-03-01
BE1025002B1 (en) 2018-09-17
GB2553424A (en) 2018-03-07
GB2553424B (en) 2018-11-21
CN107783782A (en) 2018-03-09
HK1245439B (en) 2019-12-06
FR3055438B1 (en) 2022-07-29
FR3055438A1 (en) 2018-03-02
GB201712171D0 (en) 2017-09-13

Similar Documents

Publication Publication Date Title
DE102017213160B4 (en) Compilation for node device GPU-based parallel processing
DE102013208554B4 (en) Method and system for managing nested execution streams
DE102010044531B4 (en) Autonomous storage architecture
DE102012220267B4 (en) Arithmetic work distribution - reference counter
DE102010044529B4 (en) AUTONOMOUS MEMORY SUB SYSTEM WITH HARDWARE ACCELERATOR
DE112012002905T5 (en) Technique for compiling and executing programs in high-level languages on heterogeneous computers
DE102010055267A1 (en) Sharing resources between a CPU and GPU
DE112012002465T5 (en) Graphics processor with non-blocking concurrent architecture
DE102013114072A1 (en) System and method for hardware scheduling of indexed barriers
DE102017109239A1 (en) COMPUTER IMPLEMENTED PROCESS, COMPUTER READABLE MEDIA AND HETEROGICAL COMPUTER SYSTEM
DE102019103310A1 (en) ESTIMATE FOR AN OPTIMAL OPERATING POINT FOR HARDWARE WORKING WITH A RESTRICTION ON THE SHARED PERFORMANCE / HEAT
DE112011101391T5 (en) GPU-enabled database systems
DE112010003750T5 (en) Hardware for parallel command list generation
DE102013100179A1 (en) Method and system for resolving thread divergences
DE102021102589A1 (en) CALCULATION GRAPH OPTIMIZATION
DE102013205886A1 (en) Dynamic bank mode addressing for memory access
DE102013020966B4 (en) Power efficient attribute handling for tessellation and geometry shading units
DE102020101814A1 (en) EFFICIENT EXECUTION BASED ON TASK GRAPHS OF DEFINED WORKLOADS
DE102013020968A1 (en) Technique for accessing a content-addressable memory
DE102013020485A1 (en) A technique for performing memory access operations over texture hardware
DE102013019333A1 (en) REGISTER ASSIGNMENT FOR CLUSTER SUBSTANTIVE REGISTER DATA
DE102013208421A1 (en) Sharing a graphics processing unit among many applications
DE102020110655A1 (en) METHOD AND APPARATUS FOR IMPROVING THE USE OF A HETEROGENIC SYSTEM EXECUTING SOFTWARE
DE112020005789T5 (en) HIERARCHICAL PARTITIONING OF OPERATORS
DE112020000865T5 (en) STORAGE MANAGEMENT SYSTEM

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