Methods and Apparatus For Attaching Application Specific Functions Within An Array Processor
A multi-node video signal processor (VSPN) is describes that tightly couples multiple multi-cycle state machines (hardware assist units) to each processor and each memory in each node of an N node scalable array processor. VSPN memory hardware assist instructions are used to initiate multi-cycle state machine functions, to pass parameters to the multi-cycle state machines, to fetch operands from a node's memory, and to control the transfer of results from the multi-cycle state machines.
Latest ALTERA CORPORATION Patents:
- Techniques for generating a PAM eye diagram in a receiver
- Circuits And Methods For Receiving Data Signals Having Different Common-Mode Voltages
- Active Interposers For Migration Of Packages
- Techniques For Storing States Of Signals In Configurable Storage Circuits
- Techniques For Configuring Computing Nodes In A Computing System
The present application is continuation of U.S. Ser. No. 13/037,824 filed on Mar. 1, 2011 which is a continuation of U.S. Ser. No. 11/736,788 filed on Apr. 18, 2007 and claims the benefit of U.S. Provisional Application No. 60/795,140, filed Apr. 26, 2006 which are incorporated by reference herein in its entirety.
FIELD OF THE INVENTIONThe present invention relates generally to improvements in parallel data processing architectures for video processing and more particularly to apparatus and methods for attaching application specific functions within an array processor.
BACKGROUND OF THE INVENTIONIncreasing demand for high definition TV products, including interactive TV in a HD format and HD video compression encoding and decoding, requires increasing sophistication, flexibility, and performance in the supporting electronics. The sophistication, flexibility, and performance requirements for HD TV exceeds the capabilities of current generations of processor architectures by, in many cases, orders of magnitude.
The demands of video encoding for HD formats are both memory and data processing intensive, requiring efficient and high bandwidth memory organizations coupled with compute intensive capabilities. In addition, a video encoding product must be capable of supporting multiple standards each of which includes multiple optional features which can be supported to improve image quality and further reductions in compression bandwidth. Due to these multiple demands, a flexible parallel processing approach must be found to meet the demands in a cost effective manner.
A number of algorithmic capabilities are generally common between multiple video encoding standards, such as MPEG-2, H.264, and SMPTE-VC-1. Motion estimation/compensation and deblocking filtering are two examples of general algorithms that are required for video encoding. To efficiently support motion estimation algorithms and other complex programmable functions which may vary in requirements across the multiple standards, a processor by itself would require significant parallelism and very high clock rates to meet the requirements. A processor of this capability would be difficult to develop in a cost effective manner for commercial products.
An array processor typically requires short pipelines to minimize the complexity of having a large number of processor elements on a single chip. The short pipelines will typically have a minimum number of execution stages, such as a single execution stage or two to four execution stages, since each pipeline stage adds complexity to the processor element and the array processor. As a consequence, simple execution functions are typically defined in the array processor instruction set architecture.
In addition to pipeline control, there are other complexities in an array processor. For example, to meet performance requirements the array processor may need to have a large number of processor elements on a single chip. A large number of processor elements typically limits the operational clock rate due to chip size and wire length constraints. Even when more complex instruction execution functions are defined, such as adding a two-cycle execution function instead of a single cycle execution function, the complex instructions are defined within the constraint of the processor architecture. The more complex functions will typically utilize architectural features in the same manner as the simple execution functions. For example, the fetching of source operands for the more complex function will be accomplished in the same manner as the simpler functions. In a reduced instruction set computer (RISC) processor, the source operands are provided from a central register file and this access method will be used by the more complex function to maintain the programming model for the new instructions added. For memory intensive functions and functions of greater complexity, these standard approaches are inadequate.
SUMMARY OF THE INVENTIONIn one or more of its several aspects, the present invention addresses problems such as those described above. In one of its aspects, the present invention describes an apparatus that tightly couples a memory hardware assist unit to each processor and memory node of a scalable array processor.
In one aspect of one embodiment of the present invention an apparatus is described for providing a memory assist function. At least one processing element (PE) and at least one memory directly associated with the at least one PE are used. An instruction decode function decodes a memory hardware assist instruction that is an instruction in the instruction set architecture of the at least one processing element and causes control signals to be generated to initiate the memory hardware assist function. A memory hardware assist unit having a memory interface to the at least one memory and a PE interface to the at least one PE, the memory hardware assist unit , after being initiated, iteratively fetches source operands over the memory interface from the at least one memory in parallel with PE operations in the at least one PE and generates at least one result operand that is selectively stored over the memory interface in the at least one memory.
In another embodiment of the present invention a method for providing a multi-cycle memory assist function is described. Receiving a hardware assist instruction in at least one processing element (PE) having an attached multi-cycle memory hardware assist unit and a memory directly associated with the at least one PE. Decoding in the PE a memory hardware assist instruction that is an instruction in the instruction set architecture of the at least one processing element to generate control signals that initiate the multi-cycle memory assist function in the multi-cycle memory hardware assist unit. Generating a memory address to be used in the multi-cycle memory hardware assist unit, wherein the memory address is the start address of source operands to be fetched from the memory associated with the multi-cycle memory hardware assist unit
These and other features, aspects, techniques and advantages of the present invention will be apparent to those skilled in the art from the following detailed description, taken together with the accompanying drawings and claims.
The present invention will now be described more fully with reference to the accompanying drawings, in which several embodiments of the invention are shown. This invention may, however, be embodied in various forms and should not be construed as being limited to the embodiments set forth herein. Rather, these embodiments are provided so that this disclosure will be thorough and complete, and will fully convey the scope of the invention to those skilled in the art.
Sixteen processor engines (PEs) 110-125 are partitioned in groups of four PEs per cluster as a 4×4 array organization. Each PE provides programmable processing and hardware assist functions. SP/PE0 110 is unique as compared to the other fifteen PEs 111-125, having an array controlling function combined with the PE function of PE0. The common features of the sixteen PEs 110-125 include a set of instruction execution units including a multiply accumulate unit (MAU) 130, an arithmetic logic unit (ALU) 131, a store unit (SU) 132, a load unit (LU) 133, a hardware assist (HA) 134, a data select unit (DSU) 135, a 256×5 slot very long instruction word memory (VIM) 136, a local PE register file 137, and a data memory 138 local to each PE and HA. Each PE also contains local pipeline controls, decode logic, and control logic appropriate for each PE. All VSP16 instructions are executed in a simple pipeline with a majority of instructions requiring a single execution stage and a few instructions requiring two execution stages that are pipelined.
The unique SP/PE0 110 combines a controlling function sequence processor (SP) combined with PE0 functions. To support the SP and PE0, a separate SP register file and a separate PE0 register file, illustrated in one block as SP/PE0 register files 140 are used to maintain the processing context of the SP and PE0. Though not limited to this, the SP/PE0 shares a single VIM 141. To control the VSP16 the SP has a single thread of control supported by an SP instruction memory 142 and an SP data memory 144. The SP provides program control, contains instruction and data address generation units, supports interrupts, provides DMA control, and dispatches instructions to the PEs 110-125. The SP executes branches and controls the fetching an issuing of instructions, such as load VLIW and execute VLIW instructions. The load VLIW instruction provides an indirect VIM address and is used to load the instruction slots at the specified VIM address. The execute VLIW instruction causes a VLIW to be selected at a specified indirect VIM address and executed.
The single SP thread of control supports 4×4 sub-threads which operate synchronously in lock step single instruction multiple data (SIMD) fashion. Each sub-thread uses very long instruction words (VLIWs) which are indirectly selected and executed by the single SP thread. Each VLIW in each PE at the same VIM address may be different but all unmasked PEs access the same VIM address when executing a VLIW. Five 32-bit instruction slots are provided in each PE, such that with 16 PEs 80 32-bit instructions can execute simultaneously. In addition single, dual, quad, and octal packed data operations may be specified independently by each slot instruction thereby supporting up to 8*80=640 instruction specified operations per cycle. As an example of the processing power this provides, a VSP16 operating at 250 Mhz may achieve 640*250 Mhz=160 Giga operations per second.
The VSP16 processor also uses an interconnection network cluster switch 105 providing single cycle data transfers between PEs within clusters and between PEs in orthogonal clusters. The communication operations are controlled by a DSU instruction which can be included in a VLIW thereby overlapping communications with computations which with proper software pipelining the communication latency can be reduced to zero. The communication operations operate independently of the DMA which may operate in the background to stream data between the local PE memories and the external memories.
To support additional processing capability for application specific functions such as motion estimation/compensation, deblocking filters, and other high compute functions, a hardware assists unit (HAU) with advantageous separate connections to local PE memory is provided. A HAU has one or more multi-cycle tightly coupled state machine functions which provide memory intensive application specific operational capability to each of the PEs in the VSP16. To provide a scalable mechanism for adding multiple HAUs, a novel tightly coupled interface is provided by the load unit (LU) and data select unit (DSU) of each PE. For example, HAU 147 interfaces with DSU 148 and LU 149 and the local data memory associated with PE4 114 as a transform engine 150.
Write multiplexing 418 is shown for the five memory blocks 404-408 including support for direct memory assist (DMA) write 420, PE store 421, and, for example, four hardware assist write operation paths 422-425. An exemplary fourth hardware assist unit HA4 438 may also use a path to a PE compute register file 444 or miscellaneous register file 445, for example, for result storage. Read multiplexing 426 is shown for six units including DMA read 426, PE load 427, and for example, four hardware assist read operations 428-431. A PE 435 initiates operations on a hardware assist unit, such as HA unit 438, when the PE 435 receives a hardware assist instruction 440. The PE 435 interfaces with the HA unit 438 through a command and data interface 442. Examples of command/controls include unique decode control signals that select a HA unit from a grouping of multiple HA units. Examples of data that may be used on the command and data interface 442 include a start address for HA memory operations, HA parameter control such as stride and hold specification, block size, and type of operations which more suitably are provided through register passing from the PE 435 compute register file 444. The hardware assist units provide their own state machine control for memory addressing as initiated and controlled by the PE and operate independently of the PE once operations have been started. Status of hardware assist operations may include the setting of arithmetic control flags (ACFs) F1-F7 flags 448, such as setting F1 when HA-1 operation is complete, setting F2 when HA-2 operation is complete, . . . , setting F7 when an HA-7, if used, operation is complete and setting F0 as a logical OR of the F1-F7 flags 448.
While the present invention has been disclosed in the context of various specific illustrative embodiments, it will be recognized that the invention may be suitably applied to other environments and applications consistent with the claims which follow.
Claims
1. An apparatus for providing additional processing capability to a processor, the apparatus comprising:
- a first data memory having a first plurality of memory blocks and a second data memory having a second plurality of memory blocks;
- a processing element (PE) selectively coupled to the first data memory and configured to access a first plurality of data values that are a power of two data type from the first plurality of memory blocks; and
- a first hardware assist (HA) unit separately coupled to the PE, selectively coupled to the second data memory, and configured by the PE to access a second plurality of data values that are not a power of two data type from the second plurality of memory blocks in parallel with operations on the PE.
2. The apparatus of claim 1, wherein the PE is selectively coupled to the second data memory, the first HA unit is selectively coupled to the first data memory, and the first HA unit is configured by the PE to access a third plurality of data values that are not a power of two data type from the first plurality of memory blocks in parallel with the PE accessing a fourth plurality of data values that are a power of two data type from the second plurality of memory blocks.
3. The apparatus of claim 1, wherein the memory blocks are K×W-bit memory blocks with K and W power of two values.
4. The apparatus of claim 1, wherein the second plurality of data values that are not a power of two data type are a plurality of 10-bit pixel values.
5. The apparatus of claim 1, wherein the second plurality of data values that are not a power of two data type are a plurality of 12-bit pixel values.
6. The apparatus of claim 1, wherein the first plurality of data values that are a power of two data type are a plurality of 8-bit pixel values.
7. The apparatus of claim 1, wherein the first HA unit further comprises:
- a multi-cycle state machine initiated by the PE to execute a high compute function.
8. The apparatus of claim 7, wherein the high compute function is a motion estimation and compensation function.
9. The apparatus of claim 7, wherein the high compute function is a deblocking filter.
10. The apparatus of claim 1 further comprises:
- a third data memory having a third plurality of memory blocks; and
- a second hardware assist (HA) unit separately coupled to the PE, selectively coupled to the third data memory, and configured by the PE to access a third plurality of data values that are not a power of two data type from the third plurality of memory blocks in parallel with operations on the PE.
11. The apparatus of claim 10, wherein the second HA unit operates in parallel with the first HA unit.
12. The apparatus of claim 1, wherein the PE further comprises:
- an execution unit that is configured by an instruction that specifies an operation on the data values that are not a power of two data type.
13. The apparatus of claim 1, wherein the first HA unit is configured by the PE through a transfer of parameters from the PE to the first HA unit over a command and data interface.
14. A method for providing additional processing capability to a processor, the method comprising:
- receiving control information in a hardware assist (HA) unit from a processing element (PE) to configure a state machine in the HA unit for a high compute function; and
- operating the state machine to fetch a first plurality of data values that are not a power of two data type from a first plurality of memory blocks in a first data memory in parallel with the PE accessing a second plurality of data values that are a power of two data type from a second plurality of memory blocks in a second data memory.
15. The method of claim 14 further comprising:
- operating on the first plurality of data values that are not a power of two in the HA unit to provide a high compute function and generate results that are not a power of two data type; and
- operating on at least one result of the generated results in the PE by an execution unit that is configured by an instruction that specifies an operation on data that is not a power of two data type.
16. The method of claim 15, wherein the high compute function is a video algorithm.
17. The method of claim 14, further comprising:
- operating a direct memory access (DMA) controller to selectively transfer the first plurality of data values that are not a power of two data type from an external memory to the first plurality of memory blocks in the first data memory.
18. An apparatus for providing additional processing capability to a processor, the apparatus comprising:
- a first processing element (PE) directly coupled to a first hardware assist (HA) unit, the first PE selectively coupled to a first data memory, the first HA unit selectively coupled to a second data memory, wherein the first PE accesses a first plurality of data values that are a power of two data type from the first data memory in parallel with the first HA unit accesses of a second plurality of data values that are not a power of two data type from the second data memory;
- a second PE directly coupled to a second HA unit, the second PE selectively coupled to a third data memory, the second HA unit selectively coupled to a fourth data memory, wherein the second PE accesses a third plurality of data values that are a power of two data type from the third data memory in parallel with the second HA unit accesses of a fourth plurality of data values that are not a power of two data type from the fourth data memory; and
- an array controlling function configured to dispatch instructions to the first PE and to the second PE that control operations on the first HA unit and the second HA unit.
19. The apparatus of claim 18, wherein the first HA unit receives first control information from the first PE to configure a first state machine in the first HA unit for a first high compute function and wherein the second HA unit receives second control information from the second PE to configure a second state machine in the second HA unit for a second high compute function.
20. The apparatus of claim 18, wherein the second plurality of data values that are not a power of two data type are a plurality of 10-bit pixel values and the fourth plurality of data values that are not a power of two data type are a different plurality of 10-bit pixel values.
Type: Application
Filed: Jun 11, 2013
Publication Date: Oct 24, 2013
Applicant: ALTERA CORPORATION (San Jose, CA)
Inventors: Gerald George Pechanek (Cary, NC), Mihailo M. Stojancic (San Jose, CA)
Application Number: 13/914,687
International Classification: G06F 15/80 (20060101);