Claims
- 1. A streaming vector processor comprising:
a plurality of functional units, each functional unit having at least one input and an output, each input being operable to receive an input data value and an associated input data validity tag and the output being operable to provide an output data value and an associated output data validity tag; and an interconnection switch comprising one or more links, each link operable to couple the output of a functional unit to an input of the at least one input of a functional unit; wherein the input data validity tag is indicative of the validity of the associated input data value and the output data validity tag is indicative of the validity of the associated output data value.
- 2. A streaming vector processor in accordance with claim 1, further comprising at least one data sink coupled to the interconnection switch, wherein the at least one data sink is operable to receive a data value and an associated data validity tag and to commit the data value to memory only if the data validity tag indicates the received data value is valid.
- 3. A streaming vector processor in accordance with claim 2, wherein a data sink of the at least one data sink includes a sink iteration counter indicative of the number of remaining data values to be committed, wherein the data value is committed only if the sink iteration counter indicates that there remains at least one data value to be committed.
- 4. A streaming vector processor in accordance with claim 3, wherein a data sink of the at least one data sinks is an output stream unit, operable to receive a data value and an associated data validity tag from the interconnection switch and to provide an output data value to a memory interface only if the data validity tag indicates the received data is valid.
- 5. A streaming vector processor in accordance with claim 2, further comprising:
a controller coupled to and operable to control the interconnection switch, the functional units and the at least one data sink, wherein the at least one data sink provides a signal to the controller indicative of whether or not all valid data values have been committed to memory.
- 6. A streaming vector processor in accordance with claim 1, further comprising:
an input stream unit coupled to the interconnection switch and operable to retrieve a data value from a data memory and to output the retrieved data value and an associated output data validity tag to the interconnection switch.
- 7. A streaming vector processor in accordance with claim 6, wherein the input stream unit includes a source iteration counter indicative of the number of remaining valid data values in the data memory, and wherein the output data validity tag is dependent upon the source iteration counter.
- 8. A streaming vector processor in accordance with claim 7, further comprising:
a controller coupled to and operable to control the interconnection switch, the functional units and the input stream unit, wherein the input stream unit provides a signal to the controller indicative of whether or not any valid data values remain in the data memory.
- 9. A streaming vector processor in accordance with claim 1, wherein a functional unit of the plurality of functional units includes an output register for storing a data value and an associated data validity tag.
- 10. A streaming vector processor in accordance with claim 1, wherein a functional unit of the plurality of functional units includes an input register for storing a data value and an associated data validity tag for each input of the functional unit.
- 11. A streaming vector processor in accordance with claim 1, wherein a data value comprises a plurality of sub-words and wherein a data validity tag is associated with each of the plurality of sub-words.
- 12. A streaming vector processor in accordance with claim 1, wherein the interconnection switch is re-configurable.
- 13. A method for executing a pipelined program loop having a loop body but no prolog instructions on a processor, the processor comprising a plurality of functional units coupled through an interconnection switch and controlled by a controller, each functional unit of the plurality of functional units having at least one input for receiving an input data value and an associated input data validity tag the method comprising:
executing the loop body for a plurality of iterations; and at each iteration of a plurality of iterations:
determining if the input data values are valid by checking the associated input data validity tags.
- 14. A method in accordance with claim 13, wherein a functional unit of the plurality of functional units includes a result register for storing an intermediate result and an associated output data validity tag, the method further comprising:
at each iteration of the plurality of iterations:
if all of the input data values are valid, performing a functional operation on the input data values, storing the result of the functional operation in the result register and setting the associated output data validity tag to indicate that the intermediate result is valid; and if any of the input data values is invalid, setting the associated output data validity tag to indicate that the intermediate result is invalid.
- 15. A method in accordance with claim 14, further comprising initializing an output data validity tag in the result register of each of the plurality of functional units to indicate that the associated intermediate result is invalid.
- 16. A method in accordance with claim 15, further comprising:
storing output data values only if the associated output data validity tag indicates that the data is valid.
- 17. A method in accordance with claim 15, wherein the processor further comprises at least one data source unit, each with an associated source iteration counter, the method further comprising:
initializing each source iteration counter; and at each iteration of the specified number of iterations for which a data value is to be read by a data source unit:
determining from the source iteration counter associated with the data source unit if all data values have been retrieved from memory; if not all data values have been retrieved from memory, adjusting the source iteration counter, retrieving a data value from a data memory and setting the associated data validity tag to indicate that the result is valid; and if all data values have been retrieved from memory, setting the output data validity tag to indicate that the result is invalid.
- 18. A method in accordance with claim 17, further comprising each data source unit signaling the controller when the associated source iteration counter indicates that all data values have been retrieved from memory.
- 19. A method in accordance with claim 15, wherein the pipelined program loop has no epilog instructions and the processor further comprises at least one data sink, each data sink being associated with a sink iteration counter and operable to receive an output data value and an associated output data validity tag from the interconnection switch, the method further comprising:
initializing the sink iteration counter of each data sink; and at each iteration of the specified number of iterations:
determining the validity of the output data from the associated output data validity tag; if the output data is valid:
determining from the sink iteration counter if all data values have been committed to memory; adjusting the sink iteration counter associated with the data sink unit if not all data values have been committed to memory; committing the output data value to memory if not all data values have been committed to memory; and signaling the controller if all data values have been committed to memory.
- 20. A method for executing a pipelined program loop having a loop body but no epilog instructions on a processor comprising a plurality of functional units and at least one data sink coupled through an interconnection switch and controlled by a controller, each data sink being associated with a sink iteration counter, the method comprising:
initializing each sink iteration counter; executing the loop body for a specified number of iterations; and at each iteration of the specified number of iterations for which a data value is to be sunk by a data sink unit:
determining if the sink iteration counter indicates that all data values have been committed to memory.
- 21. A method in accordance with claim 20, further comprising committing the data value to memory if not all data values have been committed to memory.
- 22. A method in accordance with claim 20, further comprising adjusting the sink iteration counter associated with the data sink unit if not all data values have been committed to memory.
- 23. A method as in claim 20, further comprising each data sink unit signaling the controller when the associated sink iteration counter indicates that all data values have been committed to memory.
- 24. A method as in claim 23, further comprising terminating the execution of the pipelined program loop after all data sink units have signaled to the controller that all their data values have been committed to memory.
CROSS REFERENCE TO RELATED APPLICATIONS
[0001] This application is continuation-in-part of related application Ser. No. 10/184,772 (CML00108D) titled “Scheduler for Streaming Vector Processor”, filed Jun. 28, 2002 and application Ser. No. 10/184,583 (CML00107D) titled “Reconfigurable Streaming Vector Processor”, filed Jun. 28, 2002.
Continuation in Parts (2)
|
Number |
Date |
Country |
Parent |
10184772 |
Jun 2002 |
US |
Child |
10652135 |
Aug 2003 |
US |
Parent |
10184583 |
Jun 2002 |
US |
Child |
10652135 |
Aug 2003 |
US |