DE102017213160B4 - Compilation for node device GPU-based parallel processing - Google Patents
Compilation for node device GPU-based parallel processing Download PDFInfo
- 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
Links
- 238000012545 processing Methods 0.000 title claims abstract description 95
- 238000005192 partition Methods 0.000 claims abstract description 257
- 238000004458 analytical method Methods 0.000 claims abstract description 165
- 238000006243 chemical reaction Methods 0.000 claims abstract description 36
- 238000000034 method Methods 0.000 claims abstract description 20
- 230000015654 memory Effects 0.000 claims description 176
- 230000004044 response Effects 0.000 claims description 5
- 238000012546 transfer Methods 0.000 claims description 4
- 238000000638 solvent extraction Methods 0.000 claims description 2
- 238000004590 computer program Methods 0.000 claims 2
- 238000005516 engineering process Methods 0.000 description 25
- 230000006870 function Effects 0.000 description 15
- 230000008901 benefit Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 8
- 230000005540 biological transmission Effects 0.000 description 6
- 230000003111 delayed effect Effects 0.000 description 6
- 230000005294 ferromagnetic effect Effects 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 239000008186 active pharmaceutical agent Substances 0.000 description 4
- 238000009795 derivation Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 230000001934 delay Effects 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 238000002360 preparation method Methods 0.000 description 3
- 230000009466 transformation Effects 0.000 description 3
- 238000010207 Bayesian analysis Methods 0.000 description 2
- 241000282412 Homo Species 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 239000000872 buffer Substances 0.000 description 2
- 238000007405 data analysis Methods 0.000 description 2
- 238000013501 data transformation Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000005291 magnetic effect Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000010606 normalization Methods 0.000 description 2
- 230000002853 ongoing effect Effects 0.000 description 2
- 239000002245 particle Substances 0.000 description 2
- 230000000737 periodic effect Effects 0.000 description 2
- 229920000642 polymer Polymers 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000000844 transformation Methods 0.000 description 2
- HRANPRDGABOKNQ-ORGXEYTDSA-N (1r,3r,3as,3br,7ar,8as,8bs,8cs,10as)-1-acetyl-5-chloro-3-hydroxy-8b,10a-dimethyl-7-oxo-1,2,3,3a,3b,7,7a,8,8a,8b,8c,9,10,10a-tetradecahydrocyclopenta[a]cyclopropa[g]phenanthren-1-yl acetate Chemical compound C1=C(Cl)C2=CC(=O)[C@@H]3C[C@@H]3[C@]2(C)[C@@H]2[C@@H]1[C@@H]1[C@H](O)C[C@@](C(C)=O)(OC(=O)C)[C@@]1(C)CC2 HRANPRDGABOKNQ-ORGXEYTDSA-N 0.000 description 1
- 238000012935 Averaging Methods 0.000 description 1
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 101150107341 RERE gene Proteins 0.000 description 1
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- -1 Silicon Oxide Nitride Chemical class 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 230000001143 conditioned effect Effects 0.000 description 1
- 229910052802 copper Inorganic materials 0.000 description 1
- 239000010949 copper Substances 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000008921 facial expression Effects 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000009533 lab test Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
- 230000003340 mental effect Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000012913 prioritisation Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 210000001525 retina Anatomy 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 229910052814 silicon oxide Inorganic materials 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 241000894007 species Species 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000007619 statistical method Methods 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 238000012800 visualization Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation 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/5044—Allocation 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent 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]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation 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/5055—Allocation 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5072—Grid computing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/06—Management of faults, events, alarms or notifications
- H04L41/0654—Management of faults, events, alarms or notifications using network fault recovery
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
- H04L67/1004—Server selection for load balancing
- H04L67/1008—Server selection for load balancing based on parameters of servers, e.g. available memory or workload
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/561—Adding application-functional data or data for application control, e.g. adding metadata
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/509—Offload
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.
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.
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
Figurenlistecharacter list
Die vorliegende Offenbarung wird in Verbindung mit den beigefügten Figuren beschrieben:
-
1A und1B veranschaulichen jeweils ein Ausführungsbeispiel eines verteilten Verarbeitungssystems. -
2 veranschaulicht ein Ausführungsbeispiel eines Seitenaustauschs. -
3A und3B veranschaulichen jeweils ein Ausführungsbeispiel der Zuweisung der Durchführung von Aufgaben einer Analyseroutine an Knotenvorrichtungen eines verteilten Verarbeitungssystems. -
4A ,4B und4C veranschaulichen zusammen ein Ausführungsbeispiel einer Zuweisung von Datensatzpartitionen und Aufgaben. -
5A und5B 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 und7C veranschaulichen zusammen ein Ausführungsbeispiel einer Verzögerung der Zuweisung einer Datensatzpartition und einer Aufgabe. -
8A ,8B und8C 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.
-
1A and1B each illustrate an embodiment of a distributed processing system. -
2 illustrates an embodiment of a page swap. -
3A and3B 12 each illustrate an embodiment of assigning node devices of a distributed processing system to perform tasks of an analysis routine. -
4A ,4B and4C 10 together illustrate one embodiment of an assignment of record partitions and tasks. -
5A and5B 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 and7C 10 together illustrate one embodiment of deferring the allocation of a record partition and a task. -
8A ,8B and8C 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.
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
Unter Bezugnahme auf
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
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
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
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
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
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
Wie in
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
Unter Rückbezug auf
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,
Unter Bezugnahme auf
Unter Bezugnahme auf beide Ausführungsformen der beiden
Unter Bezugnahme auf
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
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
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
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
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
Unter Bezugnahme auf
Unter Bezugnahme auf
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
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,
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
Unter Bezugnahme auf
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
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,
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
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,
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
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
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
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
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
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
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
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
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
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
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. The following is an example of a conversion of portions of a task routine 1211 that may be performed by the
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. Corresponding portions of a corresponding GPU task routine generated in the conversion process performed by the
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
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.
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
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
Unter Bezugnahme auf
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
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
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
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
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
Unter Bezugnahme auf
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
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
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
Unter Bezugnahme auf
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
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
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
Ausgehend von
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
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
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
Somit ist die Knotenvorrichtung 1500z, unter den eben beschriebenen Umständen und wie anhand von gestrichelten Linien in
Daher wird, wie anhand von gestrichelten Linien in
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
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
Ausgehend von
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
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
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
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
Somit ist, unter den eben beschriebenen Umständen und wie anhand von gestrichelten Linien in
Daher wird, wie anhand von gestrichelten Linien in
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.,
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
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
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.
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
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.
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.,
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.,
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
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.
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.,
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
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.,
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
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
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
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
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
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
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
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
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
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
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
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)
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)
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)
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)
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 |
-
2017
- 2017-07-26 CA CA2974556A patent/CA2974556C/en active Active
- 2017-07-27 BE BE2017/5528A patent/BE1025002B1/en active IP Right Grant
- 2017-07-28 GB GB1712171.6A patent/GB2553424B/en active Active
- 2017-07-28 FR FR1757193A patent/FR3055438B1/en active Active
- 2017-07-31 DE DE102017213160.8A patent/DE102017213160B4/en active Active
- 2017-08-01 NO NO20171277A patent/NO343250B1/en unknown
- 2017-08-01 DK DKPA201770596A patent/DK179709B1/en active IP Right Grant
- 2017-08-01 CN CN201710647374.6A patent/CN107783782B/en active Active
-
2018
- 2018-04-04 HK HK18104475.6A patent/HK1245439B/en unknown
Patent Citations (1)
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)
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 |