IL209244A

Parallel computation of dependency problems

Abstract

This record has no abstract on file.

Term

No projected expiry on record.

  1. Priority
  2. Filed
  3. Published
  4. Today

50 claims: 26 independent, 24 dependent

  1. 1
    209244/3 CLAIMS 1. A computing method, comprising:defining a library of atomic operation types;accepting a definition of a computing task, which comprises multiple atomic 5 Processing Elements (PEs) having execution dependencies, each execution dependency specifying that a respective first PE is to be executed before a respective second PE;compiling the computing task for concurrent execution on a multiprocessor device, which comprises multiple processors that are capable of executing a first number of the PEs simultaneously, by arranging the PEs of the computing task, without violating the execution 10 dependencies, in an invocation data structure comprising a second number of execution sequences that is greater than one but does not exceed the first number;and invoking the multiprocessor device to run software code that executes the execution sequences in parallel on the multiple processors, each processor executing one or more of the sequences, so as to produce a result of the computing task, 15 wherein the compiling of the computing task includes: identifying the types of the atomic PEs of the computing task;and arranging the atomic operations of the computing task in warps, at least some of which include a plurality of operations, such that the operations in each warp all perform the same specific atomic task, and 20 arranging the warps in the sequences of PEs.
  2. 8
    The method according to any one of claims 1-7, wherein the multiple processors are arranged in groups having a shared cache memory for the processors of the group, wherein invoking the multiprocessor device comprises providing each execution sequence as a respective block of threads that is to be executed by the processors within one of the groups, wherein compiling the computing task comprises causing the PEs in a given execution 15 sequence to exchange data via a shared memory of a group of the processors that is assigned to execute the given execution sequence.
  3. 9
    The method according to any one of the preceding claims, wherein each processor operates a thread comprising code that is able to run each of the defined types of operations and wherein the actual atomic task to be performed is determined responsively to data read by 20 the thread.
  4. 10
    The method according to any one of claims 1-7, wherein arranging the PEs in the invocation data structure comprises arranging the PEs into a number of execution sequences which can be executed by the multiprocessor device simultaneously.
  5. 11
    The method according to any one of claims 1-7, wherein a given execution dependency 25 specifies that a driving PE is to be executed before a driven PE, and wherein arranging the PEs in the invocation data structure comprises placing the driven PE subsequent to the driving PE in a given execution sequence.
  6. 12
    The method according to any one of claims 1-7, wherein a given execution dependency specifies that a driving PE is to be executed before a driven PE, and wherein arranging the PEs 30 in the invocation data structure comprises placing the driving PE in a first execution sequence, placing the driven PE in a second execution sequence, different from the first execution 46 209244/3 sequence, and inserting into the second execution sequence a synchronization element that halts execution of the second execution sequence until the given driving PE is fully executed.
  7. 13
    The method according to any one of claims 1-7, wherein compiling the computing task comprises extracting from the computing task multiple a-cyclic sub-graphs, and compiling the 5 multiple sub-graphs to produce for each a-cyclic sub-graph, a respective data structure of sequences of PEs ,
  8. 14
    The method according to any one of claims 1-7, wherein arranging the PEs in the invocation data structure comprises defining an order in which the PEs are to be selected for placement in the execution sequences, and populating the execution sequences with the PEs in 10 accordance with the order.
  9. 18
    The method according to any one of claims 1-7, wherein arranging the PEs in the invocation data structure comprises, for a given PE and for a set of potential positions within the execution sequences, computing respective allocation costs that would be incurred by 47 209244/3 placing the given PE at the potential positions, and placing the given PE at one of the potential position having a lowest allocation cost.
  10. 20
    The method according to any one of claims 1-7, wherein arranging the PEs in the invocation data structure comprises arranging the PEs within each execution sequence in warps, each warp comprises one or more PEs of a given type.
  11. 21
    The method according to any one of claims 1-7, wherein compiling the computing task comprises, for a given execution sequence, defining a deterministic caching pattern of fetching 20 variables from a device memory of the multiprocessor device into a cache memory and discarding at least some of the variables from the cache memory during execution of the given execution sequence, and causing the multiprocessor device to carry out the deterministic caching pattern when executing the given execution sequence.
  12. 28
    The method according to any one of claims 1-7, wherein compiling the computing task comprises causing a first execution sequence to provide one or more variables as input to a second execution sequence by accessing a device memory of the multiprocessor device.
  13. 29
    The method according to any one of claims 1-7, wherein compiling the computing task comprises producing multiple invocation data structures, each comprising one or more execution sequences, and causing at least some of the execution sequences to exchange variables between different invocation data structures by accessing a device memory of the multiprocessor device, accessible by all processors of the multiprocessor device.
  14. 36
    The method according to any one of claims 1-7, wherein compiling the computing task and invoking the multiprocessor device comprise running an event-driven simulation that simulates the computing task.
  15. 37
    The method according to any one of claims 1-7, wherein arranging the PEs in the 25 invocation data structure comprises placing the PEs in sequences of initially empty slots in accordance with at least one factor selected from a group of factors consisting of:lengths of respective longest chains of the execution dependencies that begin at the PEs;respective occupancy levels of the sequences of slots;and 30 synchronization elements that are incurred by placement of the PEs. 50 209244/3
  16. 38
    A computing method, comprising:accepting a definition of a computing task, which comprises multiple atomic Processing Elements (PEs) having execution dependencies, each execution dependency specifying that a respective first PE is to be executed before a respective second PE;compiling the computing task for concurrent execution on a multiprocessor device, which comprises multiple processors operating in parallel and schedules the PEs for execution by the processors according to a built-in scheduling policy of the microprocessor device, by identifying the types of the atomic PEs of the computing task, arranging the atomic operations of the computing task in warps, at least some of which include a plurality of operations, such that the operations in each warp all perform the same specific atomic task, arranging the PEs, without violating the execution dependencies, in an invocation data structure comprising multiple execution sequences;and invoking the multiprocessor device to run software code that executes the execution sequences in parallel responsively to the invocation data structure and irrespective of the scheduling policy of the multiprocessor device, so as to produce a result of the computing task.
  17. 39
    A computing apparatus, comprising:an interface, which is coupled to accept a definition of a computing task, which comprises multiple atomic Processing Elements (PEs) having execution dependencies, each execution dependency specifying that a respective first PE is to be executed before a respective second PE;and a Central Processing Unit (CPU), which is arranged to compile the computing task for concurrent execution on a multiprocessor device, which includes multiple processors that are capable of executing a first number of the PEs simultaneously, by identifying the types of the atomic PEs of the computing task, arranging the atomic operations of the computing task in warps, at least some of which include a plurality of operations, such that the operations in each warp all perform the same specific atomic task, arranging the PEs, without violating the execution dependencies, in an invocation data structure comprising a second number of execution sequences that is greater than one but does not exceed the first number, and to invoke the multiprocessor device to run software code that executes the execution sequences in parallel responsively to the invocation data structure so as to produce a result of the computing task.
  18. 41
    The apparatus according to any one of claims 39-40, wherein the multiple processors 5 are arranged in groups, each of the groups assigned to execute one or more blocks of threads provided to the multiprocessor device, and wherein the CPU is arranged to provide each execution sequence to the multiprocessor device as a respective block of threads that is to be executed by the processors within one of the groups.
  19. 42
    The apparatus according to any one of claims 39-41, wherein the CPU is arranged to 10 minimize a length of a longest execution sequence in the invocation data structure, while not exceeding the first number and without violating the execution dependencies.
  20. 43
    The apparatus according to any one of claims 39-42, wherein a given execution dependency specifies that a driving PE is to be executed before a driven PE, and wherein the CPU is arranged to place the driven PE subsequent to the driving PE in a given execution 15 sequence.
  21. 44
    The apparatus according to any one of claims 39-43, wherein a given execution dependency specifies that a driving PE is to be executed before a driven PE, and wherein the CPU is arranged to place the driving PE in a first execution sequence, to place the driven PE in a second execution sequence, different from the first execution sequence, and to insert into the 20 second execution sequence a synchronization element that halts execution of the second execution sequence until the given driving PE is fully executed.
  22. 45
    The apparatus according to any one of claims 39-44, wherein the CPU is arranged to define an order in which the PEs are to be selected for placement in the execution sequences, and to populate the execution sequences with the PEs in accordance with the order.
  23. 47
    The apparatus according to any one of claims 39-45, wherein the CPU is arranged to produce multiple invocation data structures, each comprising one or more execution 30 sequences, and to cause at least some of the execution sequences to exchange variables between different invocation data structures by accessing a device memory of the multiprocessor device. 52 209244/3
  24. 48
    A computing apparatus, comprising:an interface, which is coupled to accept a definition of a computing task, which comprises multiple atomic Processing Elements (PEs) having execution dependencies, each execution dependency specifying that a respective first PE is to be executed before a 5 respective second PE;and a Central Processing Unit (CPU), which is arranged to compile the computing task for concurrent execution on a multiprocessor device, which comprises multiple processors operating in parallel and schedules the PEs for execution by the processors according to a built-in scheduling policy of the microprocessor device, by identifying the types of the atomic 10 PEs of the computing task, arranging the atomic operations of the computing task in warps, at least some of which include a plurality of operations, such that the operations in each warp all perform the same specific atomic task, arranging the PEs, without violating the execution dependencies, in an invocation data structure comprising multiple execution sequences, and to invoke the multiprocessor device to run software code that executes the execution sequences 15 in parallel responsively to the invocation data structure and irrespective of the scheduling policy of the multiprocessor device so as to produce a result of the computing task.
  25. 49
    A computer software product, the product comprising a computer-readable medium, in which program instructions are stored, which instructions, when read by a computer, cause the computer to accept a definition of a computing task, which comprises multiple atomic 20 Processing Elements (PEs) having execution dependencies, each execution dependency specifying that a respective first PE is to be executed before a respective second PE, to compile the computing task for concurrent execution on a multiprocessor device, which includes multiple processors that are capable of executing a first number of the PEs simultaneously, by identifying the types of the atomic PEs of the computing task, arranging 25 the atomic operations of the computing task in warps, at least some of which include a plurality of operations, such that the operations in each warp all perform the same specific atomic task, arranging the PEs, without violating the execution dependencies, in an invocation data structure comprising a second number of execution sequences that is greater than one but does not exceed the first number, and to invoke the multiprocessor device to run software code 30 that executes the execution sequences in parallel responsively to the invocation data structure so as to produce a result of the computing task.
  26. 50
    A computer software product, the product comprising a computer-readable medium, in which program instructions are stored, which instructions, when read by a computer, cause the 53 209244/3 computer to accept a definition of a computing task, which comprises multiple atomic Processing Elements (PEs) having execution dependencies, each execution dependency specifying that a respective first PE is to be executed before a respective second PE, to compile the computing task for concurrent execution on a multiprocessor device, which 5 comprises multiple processors operating in parallel and schedules the PEs for execution by the processors according to a built-in scheduling policy of the microprocessor device, by identifying the types of the atomic PEs of the computing task, arranging the atomic operations of the computing task in warps, at least some of which include a plurality of operations, such that the operations in each warp all perform the same specific atomic task, arranging the PEs, 10 without violating the execution dependencies, in an invocation data structure comprising multiple execution sequences, and to invoke the multiprocessor device to run software code that executes the execution sequences in parallel responsively to the invocation data structure and irrespective of the scheduling policy of the multiprocessor device so as to produce a result of the computing task. 15 20 D. Kligler IP Service s Ltd. Ref. 1072-1003.6 54
Independent claims26