Patent ID: 9696996
Date: 2017-07-04
CPC Classifications: G06F

Claim:
1. A method, in a data processing system having a processor and a memory, for extracting data dependencies during runtime, comprising: executing, in the processor, a portion of code having a loop; generating, for the loop, a first parallel execution group comprising a subset of iterations of the loop less than a total number of iterations of the loop; associating, by the processor, each iteration in the subset of iterations with a separate vector slot of a vector register of the processor, wherein the separate vector slot stores operand data for one or more instructions of an associated iteration, and wherein each iteration in the subset of iterations is associated with a separate vector slot in the vector register; executing, by the processor, the first parallel execution group by executing each iteration in the subset of iterations in parallel with other iterations of the subset of iterations, wherein the first parallel execution group is executed by executing each iteration in parallel using operand data stored in a corresponding associated separate vector slot in the vector register; storing store data for each iteration, in the subset of iterations, that performs a store operation, in a corresponding store cache of a plurality store caches of the processor associated with the vector slot associated with the iteration, wherein each store cache in the plurality of store caches is coupled to and associated with a separate vector slot in the plurality of vector slots; determining, by dependency checking logic of the processor, for each iteration in the subset of iterations, whether the iteration has a data dependence; and committing, by the processor, store data from the plurality store caches to the memory only for iterations in the subset of iterations for which no data dependence is determined by the dependency checking logic, wherein: if a data dependence is detected for an iteration in the subset of iterations, then that iteration and all subsequent iterations in the first parallel execution group are masked using a mask vector with values in the mask vector being set so that any store data associated with the iteration and all subsequent iterations are not committed to the memory, masking the iteration and all subsequent iterations in the first parallel execution group comprises using a mask vector that comprises a mask value for each of the vector slots, and each of the mask values is set to a first value if the iteration corresponding to the vector slot does not have a data dependence and a second value if the iteration corresponding to the vector slot has a data dependence or has a greater data parallel identifier (DPID) than a vector slot whose corresponding iteration has a data dependence.