US20040088705A1 - System and method for executing hybridized code on a dynamically configurable hardware environment - Google Patents
System and method for executing hybridized code on a dynamically configurable hardware environment Download PDFInfo
- Publication number
- US20040088705A1 US20040088705A1 US10/694,282 US69428203A US2004088705A1 US 20040088705 A1 US20040088705 A1 US 20040088705A1 US 69428203 A US69428203 A US 69428203A US 2004088705 A1 US2004088705 A1 US 2004088705A1
- Authority
- US
- United States
- Prior art keywords
- kernel code
- accelerator
- code segment
- kernel
- processor
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 70
- 230000015654 memory Effects 0.000 claims abstract description 100
- 238000012545 processing Methods 0.000 claims abstract description 28
- 230000008569 process Effects 0.000 claims description 36
- 238000012546 transfer Methods 0.000 claims description 12
- 230000000977 initiatory effect Effects 0.000 claims description 10
- 230000009977 dual effect Effects 0.000 claims description 3
- 230000006870 function Effects 0.000 description 32
- 238000013461 design Methods 0.000 description 22
- 238000010586 diagram Methods 0.000 description 18
- 238000003860 storage Methods 0.000 description 10
- 230000000694 effects Effects 0.000 description 8
- 238000012360 testing method Methods 0.000 description 7
- 238000013500 data storage Methods 0.000 description 5
- 230000006399 behavior Effects 0.000 description 4
- 238000000926 separation method Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 235000019800 disodium phosphate Nutrition 0.000 description 3
- 230000006386 memory function Effects 0.000 description 3
- 238000002360 preparation method Methods 0.000 description 3
- 230000011218 segmentation Effects 0.000 description 3
- 230000002123 temporal effect Effects 0.000 description 3
- 238000009826 distribution Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 239000007795 chemical reaction product Substances 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000006698 induction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- 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/44—Encoding
- G06F8/447—Target code generation
Definitions
- the present invention relates to the field of software run time operating systems.
- the present invention relates to a system and method for executing software code in a dynamically configurable hardware environment.
- the software which executes upon processors is a sequence of digital words known as machine code.
- This machine code is understandable by the hardware of the processors.
- programmers typically write programs in a higher-level language which is much easier for humans to comprehend.
- the program listings in this higher-level language are called source code.
- compilers In order to convert the human-readable source code into machine-readable machine code, several special software tools are known in the art. These software tools are compilers, linkers, assemblers, and loaders.
- a method and apparatus for processing a plurality of threads of program code begins by retrieving a first kernel code segment. Then the method may identify a first set of configuration information required to execute the first kernel code segment. The method then may build an entry in a kernel code execution table utilizing the first kernel code segment and the first configuration information. The method may then select a first accelerator set configured to execute said first kernel code segment; and initiate a direct memory access transfer to the first accelerator set.
- FIG. 1 is the overall chip architecture of one embodiment. This chip architecture comprises many highly integrated components.
- FIG. 2 is an eight bit multiple context processing element (MCPE) core of one embodiment of the present invention.
- MCPE multiple context processing element
- FIG. 3 is a data flow diagram of the MCPE of one embodiment.
- FIG. 4 shows the major components of the MCPE control logic structure of one embodiment.
- FIG. 5 is the finite state machine (FSM) of the MCPE configuration controller of one embodiment.
- FSM finite state machine
- FIG. 6 is a data flow system diagram of the preparation of run time systems tables by the temporal automatic place and route (TAPR) of one embodiment.
- FIG. 7A is a block diagram of exemplary MCPEs, according to one embodiment.
- FIG. 7B is a block diagram of exemplary digital signal processors (DSP), according to one embodiment.
- DSP digital signal processors
- FIG. 8 is a diagram of the contents of an exemplary run time kernel (RTK), according to one embodiment.
- RTK run time kernel
- FIG. 9A is a process chart showing the mapping of an exemplary single threaded process into kernel segments, according to one embodiment.
- FIG. 9B is a process chart showing the allocation of the kernel segments of FIG. 9A into multiple bins.
- FIG. 9C is a process chart showing the allocation of the kernel segments of two processes into multiple bins.
- FIG. 10 is an exemplary TAPR table, according to one embodiment.
- FIG. 11 is a diagram of a first exemplary variant of a design, according to one embodiment.
- FIG. 12 is a diagram of a second exemplary variant of a design, according to another embodiment.
- FIG. 13 is a diagram of an exemplary logical MCPE architecture, according to one embodiment.
- FIG. 14 is a diagram of an exemplary logical processor-based according to one embodiment.
- FIG. 15 is a flowchart of processor functions, according to one embodiment.
- FIG. 16 is a flowchart of the hardware accelerator behavior, according to one embodiment.
- FIG. 17 is a flowchart for a RTK processor, according to one embodiment.
- FIG. 18 is a table to support the operation of the RTK processor, according to one embodiment.
- FIG. 1 is the overall chip architecture of one embodiment.
- This chip architecture comprises many highly integrated components. While prior art chip architectures fix resources at fabrication time, specifically instruction source and distribution, the chip architecture of the present invention is flexible.
- This architecture uses flexible instruction distribution that allows position independent configuration and control of a number of multiple context processing elements (MCPEs) resulting in superior performance provided by the MCPEs.
- MCPEs multiple context processing elements
- the flexible architecture of the present invention uses local and global control to provide selective configuration and control of each MCPE in an array; the selective configuration and control occurs concurrently with present function execution in the MCPEs.
- the chip of one embodiment of the present invention is composed of, but not limited to, a 10 ⁇ 10 array of identical eight-bit functional units, or MCPEs 102 , which are connected through a reconfigurable interconnect network.
- the MCPEs 102 serve as building blocks out of which a wide variety of computing structures may be created.
- the array size may vary between 2 ⁇ 2 MCPEs and 16 ⁇ 16 MCPEs, or even more depending upon the allowable die area and the desired performance.
- a perimeter network ring, or a ring of network wires and switches that surrounds the core array, provides the interconnections between the MCPEs and perimeter functional blocks.
- MCPEs from the array.
- These specialized units can include large memory blocks called configurable memory blocks 104 .
- these configurable memory blocks 104 comprise eight blocks, two per side, of 4 kilobyte memory blocks.
- Other specialized units include at least one configurable instruction decoder 106 .
- the perimeter area holds the various interfaces that the chip of one embodiment uses to communicate with the outside world including: input/output (I/O) ports; a peripheral component interface (PCI) controller, which may be a standard 32-bit PCI interface; one or more synchronous but static random access memory (SRAM) controllers; a programming controller that is the boot-up and master control block for the configuration network; a master clock input and phase-locked loop (PLL) control/configuration; a Joint Test Action Group (JTAG) test access port connected to all the serial scan chains on the chip; and I/O pins that are the actual pins that connect to the outside world.
- I/O input/output
- PCI peripheral component interface
- SRAM synchronous but static random access memory
- PLL master clock input and phase-locked loop
- JTAG Joint Test Action Group
- context refers to the definition of what hardware registers in the hardware perform which function at a given point in time. In different contexts, the hardware may perform differently. A bit or bits in the registers may define which definition is currently active.
- configuration usually refers to the software bits that command the hardware to enter into a particular context. This set of software bits may reside in a register and define the hardware's behavior when a particular context is set.
- FIG. 2 is an eight bit MCPE core of one embodiment of the present invention.
- the MCPE core comprises memory block 210 and basic ALU core 220 .
- the main memory block 210 is a 256 word by eight bit wide memory, which is arranged to be used in either single or dual port modes. In dual port mode the memory size is reduced to 128 words in order to be able to perform two simultaneous read operations without increasing the read latency of the memory.
- Network port A 222 , network port B 224 , ALU function port 232 , control logic 214 and 234 , and memory function port 212 each have configuration memories (not shown) associated with them.
- the configuration memories of these elements are distributed and are coupled to a Configuration Network Interface (CNI) (not shown) in one embodiment. These connections may be serial connections but are not so limited.
- CNI Configuration Network Interface
- the CNI couples all configuration memories associated with network port A 222 , network port B 224 , ALU function port 232 , control logic 214 and 234 , and memory function port 212 thereby controlling these configuration memories.
- the distributed configuration memory stores configuration words that control the configuration of the interconnections.
- the configuration memory also stores configuration information for the control architecture.
- it can also be a multiple context memory that receives context selecting signals which have been broadcast globally and locally from a variety of sources.
- FIG. 3 is a data flow diagram of the MCPE of one embodiment.
- the structure of each MCPE allows for a great deal of flexibility when using the MCPEs to create networked processing structures.
- the major components of the MCPE include static random access memory (SRAM) main memory 302 , ALU with multiplier and accumulate unit 304 , network ports 306 , and control logic 308 .
- SRAM static random access memory
- the solid lines mark data flow paths while the dashed lines mark control paths; all of the lines are one or more bits wide in one embodiment.
- There is a great deal of flexibility available within the MCPE because most of the major components may serve several different functions depending on the MCPE configuration.
- the MCPE main memory 302 is a group of 256 eight bit SRAM cells that can operate in one of four modes. It takes in up to two eight bit addresses from A and B address/data ports, depending upon the mode of operation. It also takes in up to four bytes of data, which can be from four floating ports, the B address/data port, the ALU output, or the high byte from the multiplier.
- the main memory 302 outputs up to four bytes of data. Two of these bytes, memory A and B, are available to the MCPE's ALU and can be directly driven onto the level 2 network. The other two bytes, memory C and D, are only available to the network.
- the output of the memory function port 306 controls the cycle-by-cycle operation of the memory 302 and the internal MCPE data paths as well as the operation of some parts of the ALU 304 and the control logic 308 .
- the MCPE main memory may also be implemented as a static register file in order to save power.
- Each MCPE contains a computational unit 304 comprised of three semi-independent functional blocks.
- the three semi-independent functional blocks comprise an eight bit wide ALU, an 8 ⁇ 8 to sixteen bit multiplier, and a sixteen bit accumulator.
- the ALU block in one embodiment, performs logical, shift, arithmetic, and multiplication operations, but is not so limited.
- the ALU function port 306 specifies the cycle-by-cycle operation of the computational unit.
- the computational units in orthogonally adjacent MCPEs can be chained to form wider-word data paths.
- the MCPE network ports 306 connect the MCPE network to the internal MCPE logic (memory, ALU, and control). There are eight network ports 306 in each MCPE, each serving a different set of purposes.
- the eight network ports 306 comprise two address/data ports, two function ports, and four floating ports.
- the two address/data ports feed addresses and data into the MCPE memories and ALU.
- the two function ports feed instructions into the MCPE logic.
- the four floating ports may serve multiple functions. The determination of what function they are serving is made by the configuration of the receivers of their data.
- the MCPEs of one embodiment are the building blocks out of which more complex processing structures may be created.
- the structure that joins the MCPE cores into a complete array in one embodiment is actually a set of several mesh-like interconnect structures.
- Each interconnect structure forms a network, and each network is independent in that it uses different paths, but the networks do join at the MCPE input switches.
- the network structure of one embodiment of the present invention is comprised of a local area broadcast network (level 1), a switched interconnect network (level 2), a shared bus network (level 3), and a broadcast, or configuration, network.
- FIG. 4 shows the major components of the MCPE control logic structure of one embodiment.
- the Control Tester 602 takes the output of the ALU for two bytes from floating ports 604 and 606 , plus the left and right carryout bits, and performs a configurable test on them. The result is one bit indicating that the comparison matched. This bit is referred to as the control bit.
- This Control Tester 602 serves two main purposes. First, it acts as a programmable condition code generator testing the ALU output for any condition that the application needs to test for. Secondly, since these control bits can be grouped and sent out across the level 2 and 3 networks, this unit can be used to perform a second or later stage reduction on a set of control bits/data generated by other MCPE's.
- the level 1 network 608 carries the control bits.
- the level 1 network 608 consists of direct point-to-point communications between every MCPE and its 12 nearest neighbors. Thus, each MCPE will receive 13 control bits (12 neighbors and it's own) from the level 1 network. These 13 control bits are fed into the Control Reduce block 610 and the BFU input ports 612 .
- the Control Reduce block 610 allows the control information to rapidly effect neighboring MCPEs.
- the MCPE input ports allow the application to send the control data across the normal network wires so they can cover long distances.
- the control bits can be fed into MCPEs so they can be manipulated as normal data.
- the Control Reduce block 610 performs a simple selection on either the control words coming from the level 1 control network, the level 3 network, or two of the floating ports.
- the selection control is part of the MCPE configuration.
- the Control Reduce block 610 selection results in the output of five bits. Two of the output bits are fed into the MCPE configuration controller 614 . One output bit is made available to the level 1 network, and one output bit is made available to the level 3 network.
- the MCPE configuration controller 614 selects on a cycle-by-cycle basis which context, major or minor, will control the MCPE's activities.
- the controller consists of a finite state machine (FSM) that is an active controller and not just a lookup table.
- FSM finite state machine
- the FSM allows a combination of local and global control over time that changes. This means that an application may run for a period based on the local control of the FSM while receiving global control signals that reconfigure the MCPE, or a block of MCPEs, to perform different functions during the next clock cycle.
- the FSM provides for local configuration and control by locally maintaining a current configuration context for control of the MCPE.
- the FSM provides for global configuration and control by providing the ability to multiplex and change between different configuration contexts of the MCPE on each different clock cycle in response to signals broadcast over a network.
- This configuration and control of the MCPE is powerful because it allows an MCPE to maintain control during each clock cycle based on a locally maintained configuration context while providing for concurrent global on-the-fly reconfiguration of each MCPE.
- This architecture significantly changes the area impact and characterization of an MCPE array while increasing the efficiency of the array without wasting other MCPEs to perform the configuration and control functions.
- FIG. 5 is the FSM 502 of the MCPE configuration controller of one embodiment.
- control information 504 is received by the FSM 502 in the form of state information from at least, one surrounding MCPE in the networked array.
- This control information is in the form of two bits received from the Control Reduce block of the MCPE control logic structure.
- tile FSM 502 also has three state bits that directly control the major and minor configuration contexts for the particular MCPE.
- the FSM 502 maintains the data of the current MCPE configuration by using a feedback path 506 to feed back the current configuration state of the MCPE of the most recent clock cycle.
- the feedback path 506 is not limited to a single path.
- the FSM 502 selects one of the available configuration memory contexts for use by the corresponding MCPE during the next clock cycle in response to the received state information from the surrounding MCPEs and the current configuration data. This selection is output from the FSM 502 in the form of a configuration control signal 508 .
- the selection of a configuration memory context for use during the next clock cycle occurs, in one embodiment, during the execution of the configuration memory context selected for the current clock cycle.
- FIG. 6 is a data flow system diagram of the preparation of run time systems tables by the temporal automatic place and route (TAPR) of one embodiment.
- an application program in source code is selected.
- the application program is written in a procedural oriented language, C, but in other embodiments the application program could be written in another procedural oriented language, in an object oriented language, or in a dataflow language.
- the source code of step 650 is examined in decision step 652 . Portions of the source code are separated into overhead code and kernel code sections. Kernel code sections are defined as those routines in the source code which may be advantageously executed in a hardware accelerator. Overhead code is defined as the remainder of the source code after all the kernel code sections, are identified and removed.
- the separation of step 652 is performed by a software profiler.
- the software profiler breaks the source code into functions.
- the complete source code is compiled and then executed with a representative set of test data.
- the profiler monitors the timing of the execution, and then based upon this monitoring determines the function or functions whose execution consumes a significant portion of execution time.
- Profiler data from this test run may be sent to the decision step 652 .
- the profiler identifies these functions as kernel code sections.
- the profiler examines the code of the functions and then identifies a small number of functions that are anticipated to consume a large portion of the execution runtime of the source code.
- These functions may be identified by attributes such as having a regular structure, having intensive mathematical operations, having a repeated or looped structure, and having a limited number of inputs and outputs. Attributes which argue against the function being identified as kernel sections include numerous branches and overly complex control code.
- the compiler examines the code of the functions to determine the size of arrays traversed and the number of variables that are live during the execution of a particular block or function. Code that has less total memory used than that in the hardware accelerators and associated memories are classified as kernel code sections.
- the compiler may use well-understood optimization methods such as constant propagation, loop induction, in-lining and intra-procedural value range analysis to infer this information from the source code.
- kernel code section Those functions that are identified as kernel code section by one of the above embodiments of profiler, are then labeled, in step 654 , as kernel code sections.
- the remainder of the source code is labeled as overhead code.
- the separation of step 652 may be performed manually by a programmer.
- step 656 the FIG. 6 process creates hardware designs for implementing the kernel code sections of step 654 . These designs are the executable code derived from the source code of the kernel code sections. Additionally, the designs contain any necessary microcode or other fixed constant values required in order to run the executable code on the target hardware. The designs are not compiled in the traditional sense. Instead they are created by the process of step 656 which allows for several embodiments.
- the source code of the kernel code section is compiled automatically by one of several compilers corresponding to the available hardware accelerators.
- a programmer may manually realize the executable code from the source code of the kernel code sections, as shown by the dashed line from step 656 to step 650 .
- the source code of the kernel code sections is compiled automatically for execution on both the processors and the hardware accelerators, and both versions are loaded into the resulting binary.
- a hardware accelerator is synthesized into a custom hardware accelerator description.
- step 658 the hardware designs of step 656 are mapped to all available target hardware.
- the target hardware may be a processor, an MCPE, or a defined set of MCPEs called a bin.
- a bin may contain any number of MCPEs from one to the maximum number of MCPEs on a given integrated circuit. However, in one embodiment a quantity of 12 MCPEs per bin is used.
- the MCPEs in each bin may be geometrically neighboring MCPEs, or the MCPEs may be distributed across the integrated circuit. However, in one embodiment the MCPEs of each bin are geometrically neighboring.
- the microcode created in step 656 may be segmented into differing context-dependent portions.
- a given microcode design may be capable of loading and executing in either lower memory or upper memory of a given bin.
- the TAPR of step 660 may perform the segmentation in several different ways depending upon the microcode. If, for example, the microcode is fiat, then the microcode may only be loaded into memory in one manner. Here no segmentation is possible. Without segmentation one microcode may not be background loaded onto a bin's memory. The bin must be stalled and the microcode loaded off-line.
- memory is a resource which may be controlled by the configuration. It is possible for the TAPR of step 660 to segment microcode into portions, corresponding to differing variants, which correspond to differing contexts. For example, call one segmented microcode portion context 2 and another one context 3 . Due to the software separation of the memory of the bin it would be possible to place the context 2 and context 3 portions into lower memory and upper memory, respectively. This allows background loading of one portion while another portion is executing.
- the TAPR of step 660 supports two subsequent steps in the preparation of the source code for execution.
- a table is prepared for subsequent use by the run time system.
- the table of step 664 contains all of the three-tuples corresponding to allowable combinations of designs (from step 656 ), bins, and variants.
- a variant of a design or a bin is any differing implementation where the functional inputs and the outputs are identical when viewed from outside.
- the variants of step 664 may be variants of memory separation, such as the separation of memory into upper and lower memory as discussed above.
- variants may include differing geometric layouts of MCPEs within a bin, causing differing amounts of clock delays being introduced into the microcodes, and also whether or not the MCPEs within a bin are overlapping.
- a variant performs a function whose inputs and outputs are identical outside of the function.
- the entries in the table of step 664 point to executable binaries, each of which may each be taken and executed without further processing at run time.
- the table of step 664 is a set of all alternative execution methods available to the run time system for a given kernel section.
- step 660 The other step supported by the TAPR of step 660 is the creation of configurations, microcodes, and constants of step 662 . These are the executable binaries which are pointed to by the entries in the table of step 664 .
- the portions of the source code which were previously deemed overhead are sent to a traditional compiler 670 for compilation of object code to be executed on a traditional processor.
- the user may hand code the source program into the assembly language of the target processor.
- the overhead C code may also be nothing more than calls to kernel sections.
- the object code is used to create object code files at step 672 .
- the object code files of step 672 , the configurations, microcode, and constants of step 662 , and table of step 664 are placed together in a format usable by the run time system by the system linker of step 674 . Note that the instructions for the process of FIG. 6 may be described in software contained in a machine-readable medium.
- a machine-readable medium includes any mechanism for storing or transmitting information in a form readable by a machine (e.g. a computer).
- a machine-readable medium includes read only memory (ROM); random access memory (RAM); magnetic disk storage media; optical storage media; flash memory devices; and electrical, optical, acoustical, or other form of propagated signals (e.g. carrier waves, infrared signals, digital signals, etc.).
- FIG. 7A is a block diagram of exemplary MCPEs, according to one embodiment.
- Chip architecture 700 includes processing elements processor A 702 , processor B 720 , bin 0 706 , bin 1 708 , and bin 2 710 .
- the function of hardware accelerator may be assigned to the MCPEs, either individually or grouped into bins.
- a run-time kernel (RTK) 704 apportions the executable software among these processing elements at the time of execution.
- processor A 702 or processor B 720 may execute the overhead code identified in step 652 and created as object files in step 672 of the FIG. 6 process.
- Bin 0 706 , bin 1 708 , and bin 2 710 may execute the kernel code identified in step 652 .
- Each processing element processor A 702 and processor B 720 is supplied with an instruction port, instruction port 724 and instruction port 722 , respectively, for fetching instructions for execution of overhead code.
- Bin 0 706 , bin 1 708 , and bin 2 710 contain several MCPEs. In one embodiment, each bin contains 12 MCPEs. In alternate embodiments, the bins could contain other numbers of MCPEs, and each bin could contain a different number of MCPEs than the other bins.
- bin 0 706 , bin 1 708 , and bin 2 710 do not share any MCPEs, and are therefore called non-overlapping bins. In other embodiments, bins may share MCPEs. Bins which share MCPEs are called overlapping bins.
- RTK 704 is a specialized microprocessor for controlling the configuration of chip architecture 700 and controlling the loading and execution of software in bin 0 706 , bin 1 708 , and bin 2 710 .
- RTK 704 may move data from data storage 728 and configuration microcode from configuration microcode storage 726 into bin 0 706 , bin 1 708 , and bin 2 710 in accordance with the table 730 stored in a portion of data storage 728 .
- RTK 704 may move data from data storage 728 , without moving any configuration microcode from configuration microcode storage 726 .
- Table 730 is comparable to that table created in step 664 discussed in connection with FIG. 6 above.
- the RTK may also move data to and from IO port NNN and IO port MMM into the data memory 728 .
- FIG. 7B is a block diagram of exemplary digital signal processors (DSP), according to one embodiment.
- Chip architecture 750 includes processing elements processor A 752 , processor B 770 , DSP 0 756 , DSP 1 758 , and DSP 2 760 .
- the function of hardware accelerator may be assigned to the DSPs.
- DSP 0 756 , DSP 1 758 , and DSP 2 760 may be replaced by other forms of processing cores.
- a run-time kernel (RTK) 754 apportions the executable software among these processing elements at the time of execution.
- RTK run-time kernel
- processor A 752 or processor B 770 may execute the overhead code identified in step 652 and created as object files in step 672 of the FIG. 6 process.
- DSP 0 756 , DSP 1 758 , and DSP 2 760 may execute the kernel code identified in step 652 .
- Each processing element processor A 702 and processor B 720 is supplied with an instruction port, instruction port 724 and instruction port 722 , respectively, for fetching instructions for execution of overhead code.
- FIG. 7B embodiment lacks an equivalent to the configuration microcode storage 726 of FIG. 7A. No configuration microcode is required as the DSPs of FIG. 7B have a fixed instruction set (microcode) architecture.
- RTK 754 is a specialized microprocessor for controlling the configuration of chip architecture 750 and controlling the loading and execution of software in DSP 0 756 , DSP 1 758 , and DSP 2 760 .
- RTK 754 may move data from data storage 778 into DSP 0 756 , DSP 1 758 , and DSP 2 760 in accordance with the table 780 stored in a portion of data storage 778 .
- Table 780 is comparable to that table created in step 664 discussed in connection with FIG. 6 above.
- FIG. 8 is a diagram of the contents of an exemplary run time kernel (RTK) 704 , according to one embodiment.
- RTK 704 contains several functions in microcontroller form. In one embodiment, these functions include configuration direct memory access (DMA) 802 , microcode DMA 804 , arguments DMA 806 , results DMA 808 , and configuration network source 810 . RTK 704 utilizes these functions to manage the loading and execution of kernel code and overhead code on chip architecture 700 .
- Configuration DMA 802 , microcode DMA 804 , arguments DMA 806 , and results DMA 808 each comprise a simple hardware engine for reading from one memory and writing to another.
- Configuration DMA 802 writes configuration data created by the TAPR 660 in step 622 of the FIG. 6 process. This configuration data configures a bin to implement the behavior of the kernel code section determined in the table-making step 664 of FIG. 6. The configuration data transfers are under the control of RTK 704 and the configuration data itself is entered in table 730 . Configuration data is unchanged over the execution of the hardware accelerator.
- Microcode DMA 804 writes microcode data for each configuration into the bins. This microcode further configures the MCPEs with instruction data that allows the function of the hardware accelerator to be changed on a cycle-by-cycle basis while the hardware accelerator is executing. Each bin may have multiple microcode data sets available for use. Microcode data is stored in the configuration microcode storage 726 and written into memory within the MCPEs of each bin by microcode DMA 804 .
- Arguments DMA 806 and results DMA 808 set up transfers of data from data memory 728 into one of the bins bin 0 706 , bin 1 708 , or bin 2 710 .
- Argument data are data stored in a memory by a general purpose processor which requires subsequent processing in a hardware accelerator.
- the argument data may be considered the input data of the kernel code sections executed by the bins.
- Results data are data sent from the hardware accelerator to the general purpose processor as the end product of a particular kernel code 5 section's execution in a bin.
- the functional units arguments DMA 806 and results DMA 808 transfer this data without additional processor intervention.
- Configuration network source 810 controls the configuration network.
- the configuration network effects the configuration of the MCPEs of the bins bin 0 706 , bin 1 708 and bin 2 710 , and of the level 1, level 2, and level 310 interconnect described in FIG. 3 and FIG. 4.
- Configuration of the networks enables the RTK to control the transfer of configuration data, microcode data, arguments data, and results data amongst the data memory 728 , configuration memory 726 , and the MCPEs of bin 0 706 , bin 1 708 and bin 2 710 .
- RTK 704 may perform background loading of microcode and other data while the bins are executing kernel code. An example of this is discussed below in connection with FIG. 11.
- FIG. 9A is a process chart showing the mapping of an exemplary single threaded process into kernel segments, according to one embodiment.
- Source code 1 900 and source code 2 960 are two exemplary single threaded processes which may be used as the C source code 650 of the FIG. 6 process.
- source code 1 900 may contain overhead code 910 , 914 , 918 , 922 , 926 , and 930 , as well as kernel code 912 , 916 , 920 , 924 , and 928 .
- the identification of the overhead code and kernel code sections may be performed in step 652 of the FIG. 6 process.
- Overhead code 910 , 914 , 918 , 922 , 926 , and 930 may be executed in processor A 702 or processor B 720 of the FIG. 7 a embodiment.
- Kernel code 912 , 916 , 920 , 924 , and 928 may be executed in bin 0 706 , bin 1 708 , or bin 2 710 of the FIG. 7 a embodiment.
- the TAPR 660 of the FIG. 6 process may create the necessary configurations and microcode for the execution of the kernel code 912 , 916 , 920 , 924 , and 928 .
- FIG. 9B is a process chart showing the allocation of the kernel segments of FIG. 9A into multiple bins.
- RTK 704 may load and execute the overhead code 910 , 914 , 918 , 922 , 926 , and 930 and the kernel code 912 , 916 , 920 , 924 , and 928 into an available processor or bin as needed.
- RTK 704 loads the first overhead code 910 into processor A 702 for execution during time period 970 .
- RTK 704 then loads the first kernel code 912 into bin 0 706 for execution during time period 972 .
- RTK 704 may load overhead code 914 into processor A 702 for execution during time period 974 .
- RTK 704 may load kernel code 916 into bin 1 708 for execution during time period 976 .
- RTK 704 may continue to load and execute the overhead code and kernel code in an overlapping manner in the processors and the bins.
- RTK 704 may load the subsequent overhead code or kernel code but delay execution until the required completion.
- FIG. 9C is a process chart showing the allocation of the kernel segments of two processes into multiple bins.
- source code 1 900 and source code 2 960 may be the two exemplary single threaded processes of FIG. 9A.
- the kernel code and overhead code sections Prior to the execution of source code 1 900 and source code 2 960 in FIG. 9C, the kernel code and overhead code sections may be identified and processed in the FIG. 6 process or in an equivalent alternate embodiment process.
- RTK 704 may load and execute the overhead code 910 , 914 , 918 , and 922 , and the kernel code 912 , 916 , and 920 into an available processor or bin as needed.
- RTK 704 may load and execute the overhead code 950 , 954 , and 958 , and the kernel code 952 and 956 , into an available processor or bin as needed.
- RTK 704 loads the first overhead code 910 , 960 sections into processor A 702 and processor B 720 , respectively, for execution in time periods 980 and 962 , respectively.
- RTK 704 may load kernel code 912 into bin 0 706 for execution in time period 982 .
- kernel code 912 finishes executing, RTK 704 may load the next overhead code 914 into an available processor such as processor B 720 during time period 948 .
- RTK 704 may load kernel code 952 into available bin 1 708 for execution during time period 964 .
- kernel code 952 finishes executing RTK 704 may load the next overhead code 954 into processor A 702 for execution during time period 966 .
- multiple threads may be executed utilizing the designs, bins, and tables of various embodiments of the present invention.
- the overhead code and kernel code sections of the several threads may be loaded and executed in an overlapping manner among the several processors and bins available.
- FIG. 10 is an exemplary TAPR table, according to one embodiment.
- the TAPR table of FIG. 10 is a three dimensional table, containing entries that are three-tuples of the possible combinations of bins, designs, and variants.
- the TAPR table contains more than just a recitation of the designs of the kernel code segments mapped into the bins (hardware accelerators). Instead, the TAPR table includes the dimension of variants of the bins.
- Each combination of designs and bins may have multiple variants. Variants perform the identical function from the viewpoint of the inputs and outputs, but differ in implementation. An example is when bins are configured from a 3 by 4 array of MCPEs as versus a 4 by 3 array of MCPEs.
- differing timing requirements due to differing path lengths may require separate variants in the configuration and microcode data of the hardware accelerator.
- these variants may take the form of different microcode implementations of the design, or the variants may be differing signal routing paths among the MCPEs of the bins. Two additional exemplary variants are discussed below in connection with FIG. 11 and FIG. 12.
- FIG. 11 is a diagram of a first exemplary variant of a design, according to one embodiment.
- Memory available to a bin is a resource that may be controlled by the configuration.
- bin 0 706 may have a memory that is logically partitioned into a lower memory 1104 and an upper memory 1102 .
- Each memory area for example upper memory 1102 and lower memory 1104 , may be running a different context. For example, there could be a context 2 running in upper memory 1102 and an alternate context 3 loaded in lower memory 1104 .
- Bin 0 706 is configured in accordance with a design, but depending upon how the design is loaded in memory certain instructions such as jump and load may have absolute addresses embedded in them. Therefore the design may have a variant for loading in upper memory 1102 under the control of context 2 and a second variant for loading in lower memory 1104 under the control of context 3 . Having multiple variants in this manner advantageously allows any run-time engine such as RTK 704 to load the microcode for one variant in either upper memory 1102 or lower memory 1104 while execution is still proceeding in the alternate memory space under a different context.
- any run-time engine such as RTK 704 to load the microcode for one variant in either upper memory 1102 or lower memory 1104 while execution is still proceeding in the alternate memory space under a different context.
- FIG. 12 is a diagram of a second exemplary variant of a design, according to another embodiment.
- the memory available to bin 1 708 may be in two physically distinct areas on the chip.
- one section of memory may be at physical location 1202 with data path 1212
- another section of memory may be at physical location 1204 with data path 1214 . If data path 1214 is physically longer than data path 1212 then it may be necessary to insert additional clock cycles for a given design to run on bin 1 708 from memory at physical location 1202 in comparison with physical location 1204 .
- the two variants differ in the number of internal wait states in the microcode of the design.
- FIG. 13 is a diagram of an exemplary logical MCPE architecture 1300 , according to one embodiment. Included within architecture 1300 are main processor 1304 , run time kernel (RTK) processor 1316 , an instruction memory (IMEM) 1302 , a processor data memory 1306 with attached DMA 1308 , and a configuration memory 1310 with attached DMA 1312 .
- RTK processor 1316 is connected to a control bus 1314 , which controls the operation of DMA 1308 and DMA 1312 .
- DMA 1308 in turn generates an argument bus 1318
- DMA 1312 in turn generates a configuration bus 1328 .
- Architecture 1300 also includes several hardware accelerators 1320 , 1330 , 1340 .
- Each accelerator contains a local DMA for sending and receiving data to and from the argument bus 1318 and a DMA for receiving data from the configuration bus 1328 .
- accelerator 1320 has DMA 1322 for sending and receiving data to and from the argument bus 1318 and DMA 1324 for receiving data from the configuration bus 1328 .
- argument bus 1318 is a bi-directional bus that may carry instruction data, argument data, and results data.
- FIG. 14 is a diagram of an exemplary logical processor-based architecture, according to one embodiment. Included within architecture 1400 are main processor 1404 , run time kernel (RTK) processor 1416 , an instruction memory (IMEM) 1402 with attached DMA 1412 , and a processor data memory 1406 with attached DMA 1408 .
- RTK processor 1416 generates a control bus 1414 , which controls the operation of DMA 1408 , 1412 .
- DMA 1408 in turn generates an argument bus 1418
- DMA 1412 in turn generates an instruction bus 1428 .
- Architecture 1400 also includes several DSPs 1420 , 1430 , 1440 .
- Each DSP is connected to a DMA controller for receiving argument data from the argument bus 1418 and a data cache for temporary storage of the argument data.
- Each DSP is also connected to a DMA controller for receiving instruction data from the instruction bus 1418 and an instruction cache for temporary storage of the instruction data. Both sets of DMA controller receive control from the control bus 1414 .
- DSP 1420 has DMA controller 1428 for receiving data from the argument bus 1418 and data cache 1426 for temporary storage of the argument data.
- DSP 1420 also has DMA controller 1422 for receiving data from the instruction bus 1428 and instruction cache 1424 for temporary storage of the instruction data.
- argument bus 1418 carries argument data but does not carry instruction data.
- FIG. 15 is a flowchart of processor functions, according to one embodiment.
- the flowchart may describe operations of a main processor, such as the main processor 1304 of FIG. 13.
- the main processor executes a subthread, which may be a section of overhead code such as overhead code 910 of FIG. 9C.
- the processor assembles the arguments necessary for a hardware accelerator, such as hardware accelerator 1320 of FIG. 13.
- the processor sends a packet containing the arguments and other related data to a run time kernel processor, such as RTK processor 1316 of FIG. 13.
- the RTK may send the packet containing arguments over the argument bus to a hardware accelerator.
- the main processor selects a subsequent subthread for execution. This subthread may be another section of overhead code.
- step 1510 the main processor determines whether or not the results are ready from the hardware accelerator. If yes, then step 1502 is entered and the next subthread is executed. If no, however, the main processor then loads another thread and different subthread in step 1508 . In this manner the main processor continuously may select and execute only those subthreads whose arguments are ready.
- FIG. 16 is a flowchart of the hardware accelerator behavior, according to one embodiment.
- the flowchart may describe the operations of a hardware accelerator, such as hardware accelerator 1320 of FIG. 13 or DSP 1420 of FIG. 14.
- the hardware accelerator configures itself for operation by executing code and selecting configuration control information sent via a configuration bus, such as the configuration bus 1328 of FIG. 13.
- Step 1602 finishes by loading a new and subsequent set of code and configuration control information should this be required during execution.
- the hardware accelerator waits for the arguments data to be sent from a main processor memory under control of a run time kernel processor.
- step 1606 the arguments are loaded from a main processor memory into the hardware accelerator via DMA.
- the arguments are loaded from a processor data memory 1306 into a local DMA 1322 of hardware accelerator 1320 via an argument bus 1318 of FIG. 13.
- the argument bus 1318 may be under the control of a run time kernel processor, such as the RTK processor 1316 .
- the hardware accelerator then executes its code, including 10 kernel code segments.
- step 1608 the resulting arguments are sent back to the main processor via DMA.
- the arguments are loaded back into a processor data memory 1306 from a local DMA 1322 of hardware accelerator 1320 via an argument bus 1318 of FIG. 13.
- the argument bus 1318 15 may be under the control of a run time kernel processor, such as the RTK processor 1316 .
- step 1608 the hardware accelerator waits for a “go” signal to input new configuration data and code from a configuration bus, such as the configuration bus 1328 of FIG. 13. After receiving a “go” signal, the process 20 begins again at step 1602 .
- FIG. 17 is a flowchart for a RTK processor, according to one embodiment.
- the flowchart may describe the operations of a run time kernel processor, such as RTK processor 1316 of FIG. 13.
- the run time kernel processor examines the request queue and determines whether the request queue is empty. This request queue may contain kernel code segments of the FIG. 16 process. If the request queue is not empty, then there are kernel code segments which may be executed.
- step 1704 the run time kernel processor loads a request from the queue written by a main processor, such as main processor 1304 of FIG. 13. Then in step 1706 the run time kernel processor retrieves the configuration information needed to support execution of the requested kernel code segment. In step 1708 this information is used to build a new entry in a pending kernel code execution table. In step 1710 a hardware accelerator, which may be a bin of FIG. 7A, is selected for executing the kernel code segment. The identification of the selected hardware accelerator is added to the pending kernel code execution table. Then in step 1712 the execution is started by initiating the DMA transfer to the hardware accelerator. The process then returns to the decision step 1702 .
- a hardware accelerator which may be a bin of FIG. 7A
- step 1720 the run time kernel processor determines whether a DMA is pending. If a DMA is pending, then the process enters decision step 1722 . In decision step 1722 , the run time kernel processor polls the DMA devices to determine whether the DMA is done. If not, then the process loops back to decision step 1720 . If, however, in step 1722 the DMA devices are done, then, in step 1724 , the value of state in the pending kernel code execution table is incremented. In alternate embodiments, the polling may be replaced by an interrupt driven approach. Then in step 1726 a subsequent DMA may be started, and the process returns to decision step 1720 .
- step 1720 If, however, in step 1720 it is determined that no DMA is pending, then the process exits through a determination of other pending input/output activity in the flexible processing environment. In decision step 1730 it is determined whether any such pending input/output activity is present. If so, then in step 1732 the input/output activity is serviced. If, however, no input/output activity is present, then the process returns to the determination of the request queue status in determination step 1702 .
- FIG. 18 is a table 1800 to support the operation of the RTK processor, according to one embodiment.
- the table 1800 may serve as the pending kernel code execution table used in the FIG. 17 process.
- the table 1800 includes entries for hardware identification 1802 , state 1804 , hardware accelerator (bin) 1806 , DMA pending status 1808 , and unit done status 1810 .
- Entry 1820 indicates that the hardware accelerator whose hardware identification is 3 is currently in state 4 and being invoked on hardware accelerator (bin) 3 with DMA activity still pending.
- the state entry of table 1800 indicates a set of DMAs waiting to be performed in order to handle the configuration and argument loading onto the hardware accelerator and subsequent return back to data memory for processing by the main processor.
- states numbered 1 through n may indicate that there should be a load of configuration and static memory.
- States numbered n through m may indicate there should be an on load of arguments from the main processors memory, these states then existing until the unit completes execution of the kernel code segment.
- states numbered m through p may indicate a result return back to data memory for processing by the main processor.
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Stored Programmes (AREA)
Abstract
Description
- This application is a continuation of allowed Application No. 09/608,860 filed Jun. 30, 2000, the disclosure of which is incorporated fully herein by reference.
- The present invention relates to the field of software run time operating systems. In particular, the present invention relates to a system and method for executing software code in a dynamically configurable hardware environment.
- The software which executes upon processors is a sequence of digital words known as machine code. This machine code is understandable by the hardware of the processors. However, programmers typically write programs in a higher-level language which is much easier for humans to comprehend. The program listings in this higher-level language are called source code. In order to convert the human-readable source code into machine-readable machine code, several special software tools are known in the art. These software tools are compilers, linkers, assemblers, and loaders.
- Existing compilers, linkers, and assemblers prepare source code well in advance of their being executed upon processors. These software tools expect that the hardware upon which the resulting machine code executes, including processors, will be in a predetermined and fixed configuration for the duration of the software execution. If a flexible processing methodology were invented, then the existing software tools would be inadequate to support processors and other hardware lacking a predetermined and flexed configuration.
- Furthermore, once the software was prepared using replacements for these software tools, the existing run time operating systems would not be sufficient to execute the resulting software in a flexible processing environment.
- A method and apparatus for processing a plurality of threads of program code is disclosed. In one embodiment, the method begins by retrieving a first kernel code segment. Then the method may identify a first set of configuration information required to execute the first kernel code segment. The method then may build an entry in a kernel code execution table utilizing the first kernel code segment and the first configuration information. The method may then select a first accelerator set configured to execute said first kernel code segment; and initiate a direct memory access transfer to the first accelerator set.
- The features, aspects, and advantages of the present invention will become more fully apparent from the following detailed description, appended claims, and accompanying drawings in which:
- FIG. 1 is the overall chip architecture of one embodiment. This chip architecture comprises many highly integrated components.
- FIG. 2 is an eight bit multiple context processing element (MCPE) core of one embodiment of the present invention.
- FIG. 3 is a data flow diagram of the MCPE of one embodiment.
- FIG. 4 shows the major components of the MCPE control logic structure of one embodiment.
- FIG. 5 is the finite state machine (FSM) of the MCPE configuration controller of one embodiment.
- FIG. 6 is a data flow system diagram of the preparation of run time systems tables by the temporal automatic place and route (TAPR) of one embodiment.
- FIG. 7A is a block diagram of exemplary MCPEs, according to one embodiment.
- FIG. 7B is a block diagram of exemplary digital signal processors (DSP), according to one embodiment.
- FIG. 8 is a diagram of the contents of an exemplary run time kernel (RTK), according to one embodiment.
- FIG. 9A is a process chart showing the mapping of an exemplary single threaded process into kernel segments, according to one embodiment.
- FIG. 9B is a process chart showing the allocation of the kernel segments of FIG. 9A into multiple bins.
- FIG. 9C is a process chart showing the allocation of the kernel segments of two processes into multiple bins.
- FIG. 10 is an exemplary TAPR table, according to one embodiment.
- FIG. 11 is a diagram of a first exemplary variant of a design, according to one embodiment.
- FIG. 12 is a diagram of a second exemplary variant of a design, according to another embodiment.
- FIG. 13 is a diagram of an exemplary logical MCPE architecture, according to one embodiment.
- FIG. 14 is a diagram of an exemplary logical processor-based according to one embodiment.
- FIG. 15 is a flowchart of processor functions, according to one embodiment.
- FIG. 16 is a flowchart of the hardware accelerator behavior, according to one embodiment.
- FIG. 17 is a flowchart for a RTK processor, according to one embodiment.
- FIG. 18 is a table to support the operation of the RTK processor, according to one embodiment.
- In the following description, numerous specific details are set forth to provide a thorough understanding of the present invention. However, one having an ordinary skill in the art may be able to practice the invention without these specific details. In some instances, well-known circuits, structures, and techniques have not been shown in detail to not unnecessarily obscure the present invention.
- FIG. 1 is the overall chip architecture of one embodiment. This chip architecture comprises many highly integrated components. While prior art chip architectures fix resources at fabrication time, specifically instruction source and distribution, the chip architecture of the present invention is flexible. This architecture uses flexible instruction distribution that allows position independent configuration and control of a number of multiple context processing elements (MCPEs) resulting in superior performance provided by the MCPEs. The flexible architecture of the present invention uses local and global control to provide selective configuration and control of each MCPE in an array; the selective configuration and control occurs concurrently with present function execution in the MCPEs.
- The chip of one embodiment of the present invention is composed of, but not limited to, a 10×10 array of identical eight-bit functional units, or
MCPEs 102, which are connected through a reconfigurable interconnect network. The MCPEs 102 serve as building blocks out of which a wide variety of computing structures may be created. The array size may vary between 2×2 MCPEs and 16×16 MCPEs, or even more depending upon the allowable die area and the desired performance. A perimeter network ring, or a ring of network wires and switches that surrounds the core array, provides the interconnections between the MCPEs and perimeter functional blocks. - Surrounding the array are several specialized units that may perform functions that are too difficult or expensive to decompose into the array. These specialized units may be coupled to the array using selected MCPEs from the array. These specialized units can include large memory blocks called configurable memory blocks104. In one embodiment these configurable memory blocks 104 comprise eight blocks, two per side, of 4 kilobyte memory blocks. Other specialized units include at least one
configurable instruction decoder 106. - Furthermore, the perimeter area holds the various interfaces that the chip of one embodiment uses to communicate with the outside world including: input/output (I/O) ports; a peripheral component interface (PCI) controller, which may be a standard 32-bit PCI interface; one or more synchronous but static random access memory (SRAM) controllers; a programming controller that is the boot-up and master control block for the configuration network; a master clock input and phase-locked loop (PLL) control/configuration; a Joint Test Action Group (JTAG) test access port connected to all the serial scan chains on the chip; and I/O pins that are the actual pins that connect to the outside world.
- Two concepts which will be used to a great extent in the following description are context and configuration. Generally, “context” refers to the definition of what hardware registers in the hardware perform which function at a given point in time. In different contexts, the hardware may perform differently. A bit or bits in the registers may define which definition is currently active. Similarly, “configuration” usually refers to the software bits that command the hardware to enter into a particular context. This set of software bits may reside in a register and define the hardware's behavior when a particular context is set.
- FIG. 2 is an eight bit MCPE core of one embodiment of the present invention. Primarily the MCPE core comprises
memory block 210 andbasic ALU core 220. Themain memory block 210 is a 256 word by eight bit wide memory, which is arranged to be used in either single or dual port modes. In dual port mode the memory size is reduced to 128 words in order to be able to perform two simultaneous read operations without increasing the read latency of the memory.Network port A 222,network port B 224,ALU function port 232,control logic memory function port 212 each have configuration memories (not shown) associated with them. The configuration memories of these elements are distributed and are coupled to a Configuration Network Interface (CNI) (not shown) in one embodiment. These connections may be serial connections but are not so limited. The CNI couples all configuration memories associated withnetwork port A 222,network port B 224,ALU function port 232,control logic memory function port 212 thereby controlling these configuration memories. The distributed configuration memory stores configuration words that control the configuration of the interconnections. The configuration memory also stores configuration information for the control architecture. Optionally it can also be a multiple context memory that receives context selecting signals which have been broadcast globally and locally from a variety of sources. - FIG. 3 is a data flow diagram of the MCPE of one embodiment. The structure of each MCPE allows for a great deal of flexibility when using the MCPEs to create networked processing structures. The major components of the MCPE include static random access memory (SRAM)
main memory 302, ALU with multiplier and accumulateunit 304,network ports 306, andcontrol logic 308. The solid lines mark data flow paths while the dashed lines mark control paths; all of the lines are one or more bits wide in one embodiment. There is a great deal of flexibility available within the MCPE because most of the major components may serve several different functions depending on the MCPE configuration. - The MCPE
main memory 302 is a group of 256 eight bit SRAM cells that can operate in one of four modes. It takes in up to two eight bit addresses from A and B address/data ports, depending upon the mode of operation. It also takes in up to four bytes of data, which can be from four floating ports, the B address/data port, the ALU output, or the high byte from the multiplier. Themain memory 302 outputs up to four bytes of data. Two of these bytes, memory A and B, are available to the MCPE's ALU and can be directly driven onto thelevel 2 network. The other two bytes, memory C and D, are only available to the network. The output of thememory function port 306 controls the cycle-by-cycle operation of thememory 302 and the internal MCPE data paths as well as the operation of some parts of theALU 304 and thecontrol logic 308. The MCPE main memory may also be implemented as a static register file in order to save power. - Each MCPE contains a
computational unit 304 comprised of three semi-independent functional blocks. The three semi-independent functional blocks comprise an eight bit wide ALU, an 8×8 to sixteen bit multiplier, and a sixteen bit accumulator. The ALU block, in one embodiment, performs logical, shift, arithmetic, and multiplication operations, but is not so limited. TheALU function port 306 specifies the cycle-by-cycle operation of the computational unit. The computational units in orthogonally adjacent MCPEs can be chained to form wider-word data paths. - The
MCPE network ports 306 connect the MCPE network to the internal MCPE logic (memory, ALU, and control). There are eightnetwork ports 306 in each MCPE, each serving a different set of purposes. The eightnetwork ports 306 comprise two address/data ports, two function ports, and four floating ports. The two address/data ports feed addresses and data into the MCPE memories and ALU. The two function ports feed instructions into the MCPE logic. The four floating ports may serve multiple functions. The determination of what function they are serving is made by the configuration of the receivers of their data. - The MCPEs of one embodiment are the building blocks out of which more complex processing structures may be created. The structure that joins the MCPE cores into a complete array in one embodiment is actually a set of several mesh-like interconnect structures. Each interconnect structure forms a network, and each network is independent in that it uses different paths, but the networks do join at the MCPE input switches. The network structure of one embodiment of the present invention is comprised of a local area broadcast network (level 1), a switched interconnect network (level 2), a shared bus network (level 3), and a broadcast, or configuration, network.
- FIG. 4 shows the major components of the MCPE control logic structure of one embodiment. The
Control Tester 602 takes the output of the ALU for two bytes from floatingports Control Tester 602 serves two main purposes. First, it acts as a programmable condition code generator testing the ALU output for any condition that the application needs to test for. Secondly, since these control bits can be grouped and sent out across thelevel - The
level 1network 608 carries the control bits. Thelevel 1network 608 consists of direct point-to-point communications between every MCPE and its 12 nearest neighbors. Thus, each MCPE will receive 13 control bits (12 neighbors and it's own) from thelevel 1 network. These 13 control bits are fed into the Control Reduceblock 610 and theBFU input ports 612. TheControl Reduce block 610 allows the control information to rapidly effect neighboring MCPEs. The MCPE input ports allow the application to send the control data across the normal network wires so they can cover long distances. In addition the control bits can be fed into MCPEs so they can be manipulated as normal data. - The
Control Reduce block 610 performs a simple selection on either the control words coming from thelevel 1 control network, thelevel 3 network, or two of the floating ports. The selection control is part of the MCPE configuration. The Control Reduce block 610 selection results in the output of five bits. Two of the output bits are fed into theMCPE configuration controller 614. One output bit is made available to thelevel 1 network, and one output bit is made available to thelevel 3 network. - The
MCPE configuration controller 614 selects on a cycle-by-cycle basis which context, major or minor, will control the MCPE's activities. The controller consists of a finite state machine (FSM) that is an active controller and not just a lookup table. The FSM allows a combination of local and global control over time that changes. This means that an application may run for a period based on the local control of the FSM while receiving global control signals that reconfigure the MCPE, or a block of MCPEs, to perform different functions during the next clock cycle. The FSM provides for local configuration and control by locally maintaining a current configuration context for control of the MCPE. The FSM provides for global configuration and control by providing the ability to multiplex and change between different configuration contexts of the MCPE on each different clock cycle in response to signals broadcast over a network. This configuration and control of the MCPE is powerful because it allows an MCPE to maintain control during each clock cycle based on a locally maintained configuration context while providing for concurrent global on-the-fly reconfiguration of each MCPE. This architecture significantly changes the area impact and characterization of an MCPE array while increasing the efficiency of the array without wasting other MCPEs to perform the configuration and control functions. - FIG. 5 is the
FSM 502 of the MCPE configuration controller of one embodiment. In controlling the functioning of the MCPE, controlinformation 504 is received by theFSM 502 in the form of state information from at least, one surrounding MCPE in the networked array. This control information is in the form of two bits received from the Control Reduce block of the MCPE control logic structure. In one embodiment,tile FSM 502 also has three state bits that directly control the major and minor configuration contexts for the particular MCPE. TheFSM 502 maintains the data of the current MCPE configuration by using afeedback path 506 to feed back the current configuration state of the MCPE of the most recent clock cycle. Thefeedback path 506 is not limited to a single path. TheFSM 502 selects one of the available configuration memory contexts for use by the corresponding MCPE during the next clock cycle in response to the received state information from the surrounding MCPEs and the current configuration data. This selection is output from theFSM 502 in the form of aconfiguration control signal 508. The selection of a configuration memory context for use during the next clock cycle occurs, in one embodiment, during the execution of the configuration memory context selected for the current clock cycle. - FIG. 6 is a data flow system diagram of the preparation of run time systems tables by the temporal automatic place and route (TAPR) of one embodiment. In
step 650 an application program in source code is selected. In the FIG. 6 embodiment the application program is written in a procedural oriented language, C, but in other embodiments the application program could be written in another procedural oriented language, in an object oriented language, or in a dataflow language. - The source code of
step 650 is examined indecision step 652. Portions of the source code are separated into overhead code and kernel code sections. Kernel code sections are defined as those routines in the source code which may be advantageously executed in a hardware accelerator. Overhead code is defined as the remainder of the source code after all the kernel code sections, are identified and removed. - In one embodiment, the separation of
step 652 is performed by a software profiler. The software profiler breaks the source code into functions. In one embodiment, the complete source code is compiled and then executed with a representative set of test data. The profiler monitors the timing of the execution, and then based upon this monitoring determines the function or functions whose execution consumes a significant portion of execution time. Profiler data from this test run may be sent to thedecision step 652. The profiler identifies these functions as kernel code sections. - In an alternate embodiment, the profiler examines the code of the functions and then identifies a small number of functions that are anticipated to consume a large portion of the execution runtime of the source code. These functions may be identified by attributes such as having a regular structure, having intensive mathematical operations, having a repeated or looped structure, and having a limited number of inputs and outputs. Attributes which argue against the function being identified as kernel sections include numerous branches and overly complex control code.
- In an alternate embodiment, the compiler examines the code of the functions to determine the size of arrays traversed and the number of variables that are live during the execution of a particular block or function. Code that has less total memory used than that in the hardware accelerators and associated memories are classified as kernel code sections. The compiler may use well-understood optimization methods such as constant propagation, loop induction, in-lining and intra-procedural value range analysis to infer this information from the source code.
- Those functions that are identified as kernel code section by one of the above embodiments of profiler, are then labeled, in
step 654, as kernel code sections. The remainder of the source code is labeled as overhead code. In alternate embodiments, the separation ofstep 652 may be performed manually by a programmer. - In
step 656, the FIG. 6 process creates hardware designs for implementing the kernel code sections ofstep 654. These designs are the executable code derived from the source code of the kernel code sections. Additionally, the designs contain any necessary microcode or other fixed constant values required in order to run the executable code on the target hardware. The designs are not compiled in the traditional sense. Instead they are created by the process ofstep 656 which allows for several embodiments. - In one embodiment, the source code of the kernel code section is compiled automatically by one of several compilers corresponding to the available hardware accelerators. In an alternate embodiment, a programmer may manually realize the executable code from the source code of the kernel code sections, as shown by the dashed line from
step 656 to step 650. In a third embodiment the source code of the kernel code sections is compiled automatically for execution on both the processors and the hardware accelerators, and both versions are loaded into the resulting binary. In a fourth embodiment, a hardware accelerator is synthesized into a custom hardware accelerator description. - In
step 658 the hardware designs ofstep 656 are mapped to all available target hardware. The target hardware may be a processor, an MCPE, or a defined set of MCPEs called a bin. A bin may contain any number of MCPEs from one to the maximum number of MCPEs on a given integrated circuit. However, in one embodiment a quantity of 12 MCPEs per bin is used. The MCPEs in each bin may be geometrically neighboring MCPEs, or the MCPEs may be distributed across the integrated circuit. However, in one embodiment the MCPEs of each bin are geometrically neighboring. - In the temporal automatic place and route (TAPR) of
step 660, the microcode created instep 656 may be segmented into differing context-dependent portions. For example, a given microcode design may be capable of loading and executing in either lower memory or upper memory of a given bin. The TAPR ofstep 660 may perform the segmentation in several different ways depending upon the microcode. If, for example, the microcode is fiat, then the microcode may only be loaded into memory in one manner. Here no segmentation is possible. Without segmentation one microcode may not be background loaded onto a bin's memory. The bin must be stalled and the microcode loaded off-line. - In another example, memory is a resource which may be controlled by the configuration. It is possible for the TAPR of
step 660 to segment microcode into portions, corresponding to differing variants, which correspond to differing contexts. For example, call one segmentedmicrocode portion context 2 and another onecontext 3. Due to the software separation of the memory of the bin it would be possible to place thecontext 2 andcontext 3 portions into lower memory and upper memory, respectively. This allows background loading of one portion while another portion is executing. - The TAPR of
step 660 supports two subsequent steps in the preparation of the source code for execution. Instep 664, a table is prepared for subsequent use by the run time system. In one embodiment, the table ofstep 664 contains all of the three-tuples corresponding to allowable combinations of designs (from step 656), bins, and variants. A variant of a design or a bin is any differing implementation where the functional inputs and the outputs are identical when viewed from outside. The variants ofstep 664 may be variants of memory separation, such as the separation of memory into upper and lower memory as discussed above. Other variants may include differing geometric layouts of MCPEs within a bin, causing differing amounts of clock delays being introduced into the microcodes, and also whether or not the MCPEs within a bin are overlapping. In each case a variant performs a function whose inputs and outputs are identical outside of the function. The entries in the table ofstep 664 point to executable binaries, each of which may each be taken and executed without further processing at run time. The table ofstep 664 is a set of all alternative execution methods available to the run time system for a given kernel section. - The other step supported by the TAPR of
step 660 is the creation of configurations, microcodes, and constants ofstep 662. These are the executable binaries which are pointed to by the entries in the table ofstep 664. - Returning now to
decision step 652, the portions of the source code which were previously deemed overhead are sent to atraditional compiler 670 for compilation of object code to be executed on a traditional processor. Alternately, the user may hand code the source program into the assembly language of the target processor. The overhead C code may also be nothing more than calls to kernel sections. The object code is used to create object code files atstep 672. Finally, the object code files ofstep 672, the configurations, microcode, and constants ofstep 662, and table ofstep 664 are placed together in a format usable by the run time system by the system linker ofstep 674. Note that the instructions for the process of FIG. 6 may be described in software contained in a machine-readable medium. A machine-readable medium includes any mechanism for storing or transmitting information in a form readable by a machine (e.g. a computer). For example, a machine-readable medium includes read only memory (ROM); random access memory (RAM); magnetic disk storage media; optical storage media; flash memory devices; and electrical, optical, acoustical, or other form of propagated signals (e.g. carrier waves, infrared signals, digital signals, etc.). - FIG. 7A is a block diagram of exemplary MCPEs, according to one embodiment.
Chip architecture 700 includes processingelements processor A 702,processor B 720,bin 0 706,bin 1 708, andbin 2 710. In the FIG. 7A embodiment, the function of hardware accelerator may be assigned to the MCPEs, either individually or grouped into bins. A run-time kernel (RTK) 704 apportions the executable software among these processing elements at the time of execution. In the FIG. 7A embodiment,processor A 702 orprocessor B 720 may execute the overhead code identified instep 652 and created as object files instep 672 of the FIG. 6 process.Bin 0 706,bin 1 708, andbin 2 710 may execute the kernel code identified instep 652. - Each processing
element processor A 702 andprocessor B 720 is supplied with an instruction port,instruction port 724 andinstruction port 722, respectively, for fetching instructions for execution of overhead code. -
Bin 0 706,bin 1 708, andbin 2 710 contain several MCPEs. In one embodiment, each bin contains 12 MCPEs. In alternate embodiments, the bins could contain other numbers of MCPEs, and each bin could contain a different number of MCPEs than the other bins. - In the FIG. 7A embodiment,
bin 0 706,bin 1 708, andbin 2 710 do not share any MCPEs, and are therefore called non-overlapping bins. In other embodiments, bins may share MCPEs. Bins which share MCPEs are called overlapping bins. -
RTK 704 is a specialized microprocessor for controlling the configuration ofchip architecture 700 and controlling the loading and execution of software inbin 0 706,bin 1 708, andbin 2 710. In one embodiment,RTK 704 may move data fromdata storage 728 and configuration microcode fromconfiguration microcode storage 726 intobin 0 706,bin 1 708, andbin 2 710 in accordance with the table 730 stored in a portion ofdata storage 728. In alternate embodiments,RTK 704 may move data fromdata storage 728, without moving any configuration microcode fromconfiguration microcode storage 726. Table 730 is comparable to that table created instep 664 discussed in connection with FIG. 6 above. - Paragraph #2A:
- The RTK may also move data to and from IO port NNN and IO port MMM into the
data memory 728. - [If I didn't comment earlier, the RTK does not move data to processor A or processor B—page 19 line 2]
- FIG. 7B is a block diagram of exemplary digital signal processors (DSP), according to one embodiment.
Chip architecture 750 includes processingelements processor A 752,processor B 770,DSP 0 756,DSP 1 758, andDSP 2 760. In the FIG. 7B embodiment, the function of hardware accelerator may be assigned to the DSPs. In other embodiments,DSP 0 756,DSP 1 758, andDSP 2 760 may be replaced by other forms of processing cores. A run-time kernel (RTK) 754 apportions the executable software among these processing elements at the time of execution. - In the FIG. 7B embodiment,
processor A 752 orprocessor B 770 may execute the overhead code identified instep 652 and created as object files instep 672 of the FIG. 6 process.DSP 0 756,DSP 1 758, andDSP 2 760 may execute the kernel code identified instep 652. Each processingelement processor A 702 andprocessor B 720 is supplied with an instruction port,instruction port 724 andinstruction port 722, respectively, for fetching instructions for execution of overhead code. - One difference between the FIG. 7A and FIG. 7B embodiments is that the FIG. 7B embodiment lacks an equivalent to the
configuration microcode storage 726 of FIG. 7A. No configuration microcode is required as the DSPs of FIG. 7B have a fixed instruction set (microcode) architecture. -
RTK 754 is a specialized microprocessor for controlling the configuration ofchip architecture 750 and controlling the loading and execution of software inDSP 0 756,DSP 1 758, andDSP 2 760. In one embodiment,RTK 754 may move data fromdata storage 778 intoDSP 0 756,DSP 1 758, andDSP 2 760 in accordance with the table 780 stored in a portion ofdata storage 778. Table 780 is comparable to that table created instep 664 discussed in connection with FIG. 6 above. - FIG. 8 is a diagram of the contents of an exemplary run time kernel (RTK)704, according to one embodiment.
RTK 704 contains several functions in microcontroller form. In one embodiment, these functions include configuration direct memory access (DMA) 802,microcode DMA 804,arguments DMA 806,results DMA 808, andconfiguration network source 810.RTK 704 utilizes these functions to manage the loading and execution of kernel code and overhead code onchip architecture 700.Configuration DMA 802,microcode DMA 804,arguments DMA 806, and resultsDMA 808 each comprise a simple hardware engine for reading from one memory and writing to another. -
Configuration DMA 802 writes configuration data created by theTAPR 660 in step 622 of the FIG. 6 process. This configuration data configures a bin to implement the behavior of the kernel code section determined in the table-makingstep 664 of FIG. 6. The configuration data transfers are under the control ofRTK 704 and the configuration data itself is entered in table 730. Configuration data is unchanged over the execution of the hardware accelerator. -
Microcode DMA 804 writes microcode data for each configuration into the bins. This microcode further configures the MCPEs with instruction data that allows the function of the hardware accelerator to be changed on a cycle-by-cycle basis while the hardware accelerator is executing. Each bin may have multiple microcode data sets available for use. Microcode data is stored in theconfiguration microcode storage 726 and written into memory within the MCPEs of each bin bymicrocode DMA 804. -
Arguments DMA 806 andresults DMA 808 set up transfers of data fromdata memory 728 into one of thebins bin 0 706,bin 1 708, orbin 2 710. Argument data are data stored in a memory by a general purpose processor which requires subsequent processing in a hardware accelerator. The argument data may be considered the input data of the kernel code sections executed by the bins. Results data are data sent from the hardware accelerator to the general purpose processor as the end product of a particular kernel code 5 section's execution in a bin. The functionalunits arguments DMA 806 andresults DMA 808 transfer this data without additional processor intervention. -
Configuration network source 810 controls the configuration network. The configuration network effects the configuration of the MCPEs of thebins bin 0 706,bin 1 708 andbin 2 710, and of thelevel 1,level 2, and level 310 interconnect described in FIG. 3 and FIG. 4. Configuration of the networks enables the RTK to control the transfer of configuration data, microcode data, arguments data, and results data amongst thedata memory 728,configuration memory 726, and the MCPEs ofbin 0 706,bin 1 708 andbin 2 710. - In cases where there are multiple contexts,
RTK 704 may perform background loading of microcode and other data while the bins are executing kernel code. An example of this is discussed below in connection with FIG. 11. - FIG. 9A is a process chart showing the mapping of an exemplary single threaded process into kernel segments, according to one embodiment.
Source code 1 900 andsource code 2 960 are two exemplary single threaded processes which may be used as theC source code 650 of the FIG. 6 process. In one embodiment,source code 1 900 may containoverhead code kernel code step 652 of the FIG. 6 process.Overhead code processor A 702 orprocessor B 720 of the FIG. 7a embodiment.Kernel code bin 0 706,bin 1 708, orbin 2 710 of the FIG. 7a embodiment. TheTAPR 660 of the FIG. 6 process may create the necessary configurations and microcode for the execution of thekernel code - FIG. 9B is a process chart showing the allocation of the kernel segments of FIG. 9A into multiple bins. Utilizing the table780 produced in
step 664 of the FIG. 6 process,RTK 704 may load and execute theoverhead code kernel code RTK 704 loads the firstoverhead code 910 intoprocessor A 702 for execution duringtime period 970.RTK 704 then loads thefirst kernel code 912 intobin 0 706 for execution duringtime period 972. - Depending upon whether
overhead code 914 requires the completion ofkernel code 912,RTK 704 may loadoverhead code 914 intoprocessor A 702 for execution duringtime period 974. Similarly, depending upon whetherkernel code 916 requires the completion ofoverhead code 914 orkernel code 910,RTK 704 may loadkernel code 916 intobin 1 708 for execution duringtime period 976. - Depending upon requirements for completion,
RTK 704 may continue to load and execute the overhead code and kernel code in an overlapping manner in the processors and the bins. When overhead code or kernel code require the completion of a previous overhead code or kernel code,RTK 704 may load the subsequent overhead code or kernel code but delay execution until the required completion. - FIG. 9C is a process chart showing the allocation of the kernel segments of two processes into multiple bins. In the FIG. 9C embodiment,
source code 1 900 andsource code 2 960 may be the two exemplary single threaded processes of FIG. 9A. Prior to the execution ofsource code 1 900 andsource code 2 960 in FIG. 9C, the kernel code and overhead code sections may be identified and processed in the FIG. 6 process or in an equivalent alternate embodiment process. Utilizing the table 730 forsource code 1 900, produced instep 664 of the FIG. 6 process,RTK 704 may load and execute theoverhead code kernel code source code 2 960. In the FIG. 9C embodiment, by utilizing this equivalent table forsource code 2 960,RTK 704 may load and execute theoverhead code kernel code - In the exemplary FIG. 9C embodiment,
RTK 704 loads the firstoverhead code processor A 702 andprocessor B 720, respectively, for execution intime periods - When
overhead code 910 finishes executing,RTK 704 may loadkernel code 912 intobin 0 706 for execution intime period 982. Whenkernel code 912 finishes executing,RTK 704 may load the nextoverhead code 914 into an available processor such asprocessor B 720 during time period 948. - When
overhead code 950 finishes executing,RTK 704 may loadkernel code 952 intoavailable bin 1 708 for execution duringtime period 964. Whenkernel code 952finishes executing RTK 704 may load the nextoverhead code 954 intoprocessor A 702 for execution duringtime period 966. - Therefore, as shown in FIG. 9C, multiple threads may be executed utilizing the designs, bins, and tables of various embodiments of the present invention. The overhead code and kernel code sections of the several threads may be loaded and executed in an overlapping manner among the several processors and bins available.
- FIG. 10 is an exemplary TAPR table, according to one embodiment. The TAPR table of FIG. 10 is a three dimensional table, containing entries that are three-tuples of the possible combinations of bins, designs, and variants. The TAPR table contains more than just a recitation of the designs of the kernel code segments mapped into the bins (hardware accelerators). Instead, the TAPR table includes the dimension of variants of the bins. Each combination of designs and bins may have multiple variants. Variants perform the identical function from the viewpoint of the inputs and outputs, but differ in implementation. An example is when bins are configured from a 3 by 4 array of MCPEs as versus a 4 by 3 array of MCPEs. In this case differing timing requirements due to differing path lengths may require separate variants in the configuration and microcode data of the hardware accelerator. In one embodiment, these variants may take the form of different microcode implementations of the design, or the variants may be differing signal routing paths among the MCPEs of the bins. Two additional exemplary variants are discussed below in connection with FIG. 11 and FIG. 12.
- FIG. 11 is a diagram of a first exemplary variant of a design, according to one embodiment. Memory available to a bin is a resource that may be controlled by the configuration. In this embodiment,
bin 0 706 may have a memory that is logically partitioned into alower memory 1104 and anupper memory 1102. Each memory area, for exampleupper memory 1102 andlower memory 1104, may be running a different context. For example, there could be acontext 2 running inupper memory 1102 and analternate context 3 loaded inlower memory 1104. -
Bin 0 706 is configured in accordance with a design, but depending upon how the design is loaded in memory certain instructions such as jump and load may have absolute addresses embedded in them. Therefore the design may have a variant for loading inupper memory 1102 under the control ofcontext 2 and a second variant for loading inlower memory 1104 under the control ofcontext 3. Having multiple variants in this manner advantageously allows any run-time engine such asRTK 704 to load the microcode for one variant in eitherupper memory 1102 orlower memory 1104 while execution is still proceeding in the alternate memory space under a different context. - FIG. 12 is a diagram of a second exemplary variant of a design, according to another embodiment. The memory available to
bin 1 708 may be in two physically distinct areas on the chip. In FIG. 12 one section of memory may be atphysical location 1202 withdata path 1212, and another section of memory may be atphysical location 1204 withdata path 1214. Ifdata path 1214 is physically longer thandata path 1212 then it may be necessary to insert additional clock cycles for a given design to run onbin 1 708 from memory atphysical location 1202 in comparison withphysical location 1204. Here the two variants differ in the number of internal wait states in the microcode of the design. - FIG. 13 is a diagram of an exemplary
logical MCPE architecture 1300, according to one embodiment. Included withinarchitecture 1300 aremain processor 1304, run time kernel (RTK)processor 1316, an instruction memory (IMEM) 1302, aprocessor data memory 1306 with attachedDMA 1308, and aconfiguration memory 1310 with attachedDMA 1312.RTK processor 1316 is connected to acontrol bus 1314, which controls the operation ofDMA 1308 andDMA 1312.DMA 1308 in turn generates anargument bus 1318, andDMA 1312 in turn generates aconfiguration bus 1328. -
Architecture 1300 also includesseveral hardware accelerators argument bus 1318 and a DMA for receiving data from theconfiguration bus 1328. For example,accelerator 1320 hasDMA 1322 for sending and receiving data to and from theargument bus 1318 andDMA 1324 for receiving data from theconfiguration bus 1328. In the FIG. 13 embodiment,argument bus 1318 is a bi-directional bus that may carry instruction data, argument data, and results data. - FIG. 14 is a diagram of an exemplary logical processor-based architecture, according to one embodiment. Included within
architecture 1400 aremain processor 1404, run time kernel (RTK)processor 1416, an instruction memory (IMEM) 1402 with attachedDMA 1412, and aprocessor data memory 1406 with attachedDMA 1408.RTK processor 1416 generates acontrol bus 1414, which controls the operation ofDMA DMA 1408 in turn generates anargument bus 1418, andDMA 1412 in turn generates aninstruction bus 1428. -
Architecture 1400 also includesseveral DSPs argument bus 1418 and a data cache for temporary storage of the argument data. Each DSP is also connected to a DMA controller for receiving instruction data from theinstruction bus 1418 and an instruction cache for temporary storage of the instruction data. Both sets of DMA controller receive control from thecontrol bus 1414. For example,DSP 1420 hasDMA controller 1428 for receiving data from theargument bus 1418 and data cache 1426 for temporary storage of the argument data.DSP 1420 also hasDMA controller 1422 for receiving data from theinstruction bus 1428 andinstruction cache 1424 for temporary storage of the instruction data. In the FIG. 14 embodiment,argument bus 1418 carries argument data but does not carry instruction data. - FIG. 15 is a flowchart of processor functions, according to one embodiment. The flowchart may describe operations of a main processor, such as the
main processor 1304 of FIG. 13. Instep 1502, the main processor executes a subthread, which may be a section of overhead code such asoverhead code 910 of FIG. 9C. After the subthread has finished executing, instep 1504 the processor assembles the arguments necessary for a hardware accelerator, such ashardware accelerator 1320 of FIG. 13. Then instep 1506 the processor sends a packet containing the arguments and other related data to a run time kernel processor, such asRTK processor 1316 of FIG. 13. The RTK may send the packet containing arguments over the argument bus to a hardware accelerator. Instep 1508 the main processor selects a subsequent subthread for execution. This subthread may be another section of overhead code. - However, the main processor does not immediately begin execution of this subthread. In
decision step 1510, the main processor determines whether or not the results are ready from the hardware accelerator. If yes, then step 1502 is entered and the next subthread is executed. If no, however, the main processor then loads another thread and different subthread instep 1508. In this manner the main processor continuously may select and execute only those subthreads whose arguments are ready. - FIG. 16 is a flowchart of the hardware accelerator behavior, according to one embodiment. The flowchart may describe the operations of a hardware accelerator, such as
hardware accelerator 1320 of FIG. 13 orDSP 1420 of FIG. 14. Instep 1602, the hardware accelerator configures itself for operation by executing code and selecting configuration control information sent via a configuration bus, such as theconfiguration bus 1328 of FIG. 13.Step 1602 finishes by loading a new and subsequent set of code and configuration control information should this be required during execution. Then in step 1604 the hardware accelerator waits for the arguments data to be sent from a main processor memory under control of a run time kernel processor. - In
step 1606 the arguments are loaded from a main processor memory into the hardware accelerator via DMA. In one embodiment, the arguments are loaded from aprocessor data memory 1306 into alocal DMA 1322 ofhardware accelerator 1320 via anargument bus 1318 of FIG. 13. Theargument bus 1318 may be under the control of a run time kernel processor, such as theRTK processor 1316. The hardware accelerator then executes its code, including 10 kernel code segments. - Then, in
step 1608, the resulting arguments are sent back to the main processor via DMA. In one embodiment, the arguments are loaded back into aprocessor data memory 1306 from alocal DMA 1322 ofhardware accelerator 1320 via anargument bus 1318 of FIG. 13. Again theargument bus 1318 15 may be under the control of a run time kernel processor, such as theRTK processor 1316. - Finally, in
step 1608 the hardware accelerator waits for a “go” signal to input new configuration data and code from a configuration bus, such as theconfiguration bus 1328 of FIG. 13. After receiving a “go” signal, the process 20 begins again atstep 1602. - FIG. 17 is a flowchart for a RTK processor, according to one embodiment. The flowchart may describe the operations of a run time kernel processor, such as
RTK processor 1316 of FIG. 13. Indecision step 1702, the run time kernel processor examines the request queue and determines whether the request queue is empty. This request queue may contain kernel code segments of the FIG. 16 process. If the request queue is not empty, then there are kernel code segments which may be executed. - In
step 1704, the run time kernel processor loads a request from the queue written by a main processor, such asmain processor 1304 of FIG. 13. Then instep 1706 the run time kernel processor retrieves the configuration information needed to support execution of the requested kernel code segment. Instep 1708 this information is used to build a new entry in a pending kernel code execution table. In step 1710 a hardware accelerator, which may be a bin of FIG. 7A, is selected for executing the kernel code segment. The identification of the selected hardware accelerator is added to the pending kernel code execution table. Then instep 1712 the execution is started by initiating the DMA transfer to the hardware accelerator. The process then returns to thedecision step 1702. - If, however, the request queue is determined in
step 1702 to be empty then the process entersdecision step 1720. Instep 1720 the run time kernel processor determines whether a DMA is pending. If a DMA is pending, then the process entersdecision step 1722. Indecision step 1722, the run time kernel processor polls the DMA devices to determine whether the DMA is done. If not, then the process loops back todecision step 1720. If, however, instep 1722 the DMA devices are done, then, instep 1724, the value of state in the pending kernel code execution table is incremented. In alternate embodiments, the polling may be replaced by an interrupt driven approach. Then in step 1726 a subsequent DMA may be started, and the process returns todecision step 1720. - If, however, in
step 1720 it is determined that no DMA is pending, then the process exits through a determination of other pending input/output activity in the flexible processing environment. Indecision step 1730 it is determined whether any such pending input/output activity is present. If so, then instep 1732 the input/output activity is serviced. If, however, no input/output activity is present, then the process returns to the determination of the request queue status indetermination step 1702. - FIG. 18 is a table1800 to support the operation of the RTK processor, according to one embodiment. In the FIG. 18 embodiment, the table 1800 may serve as the pending kernel code execution table used in the FIG. 17 process. The table 1800 includes entries for
hardware identification 1802,state 1804, hardware accelerator (bin) 1806,DMA pending status 1808, and unit donestatus 1810. - An exemplary entry in table1800 is
entry 1820.Entry 1820 indicates that the hardware accelerator whose hardware identification is 3 is currently instate 4 and being invoked on hardware accelerator (bin) 3 with DMA activity still pending. - The state entry of table1800 indicates a set of DMAs waiting to be performed in order to handle the configuration and argument loading onto the hardware accelerator and subsequent return back to data memory for processing by the main processor. In one embodiment, states numbered 1 through n may indicate that there should be a load of configuration and static memory. States numbered n through m may indicate there should be an on load of arguments from the main processors memory, these states then existing until the unit completes execution of the kernel code segment. Finally, states numbered m through p may indicate a result return back to data memory for processing by the main processor.
- In the foregoing specification, the invention has been described with reference to specific embodiments thereof. It will however be evident that various modifications and changes can be made thereto without departing from the broader spirit and scope of the invention as set forth in the appended claims. The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense. Therefore, the scope of the invention should be limited only by the appended claims.
Claims (30)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/694,282 US7032103B2 (en) | 2000-06-30 | 2003-10-27 | System and method for executing hybridized code on a dynamically configurable hardware environment |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/608,860 US6675289B1 (en) | 2000-06-30 | 2000-06-30 | System and method for executing hybridized code on a dynamically configurable hardware environment |
US10/694,282 US7032103B2 (en) | 2000-06-30 | 2003-10-27 | System and method for executing hybridized code on a dynamically configurable hardware environment |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/608,860 Continuation US6675289B1 (en) | 2000-06-30 | 2000-06-30 | System and method for executing hybridized code on a dynamically configurable hardware environment |
Publications (2)
Publication Number | Publication Date |
---|---|
US20040088705A1 true US20040088705A1 (en) | 2004-05-06 |
US7032103B2 US7032103B2 (en) | 2006-04-18 |
Family
ID=24438342
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/608,860 Expired - Lifetime US6675289B1 (en) | 2000-06-30 | 2000-06-30 | System and method for executing hybridized code on a dynamically configurable hardware environment |
US10/694,282 Expired - Lifetime US7032103B2 (en) | 2000-06-30 | 2003-10-27 | System and method for executing hybridized code on a dynamically configurable hardware environment |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/608,860 Expired - Lifetime US6675289B1 (en) | 2000-06-30 | 2000-06-30 | System and method for executing hybridized code on a dynamically configurable hardware environment |
Country Status (4)
Country | Link |
---|---|
US (2) | US6675289B1 (en) |
EP (1) | EP1168161A3 (en) |
AU (1) | AU7886001A (en) |
WO (1) | WO2002003592A2 (en) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080189252A1 (en) * | 2006-08-25 | 2008-08-07 | Jeremy Branscome | Hardware accelerated reconfigurable processor for accelerating database operations and queries |
US7966343B2 (en) | 2008-04-07 | 2011-06-21 | Teradata Us, Inc. | Accessing data in a column store database based on hardware compatible data structures |
US8458129B2 (en) | 2008-06-23 | 2013-06-04 | Teradata Us, Inc. | Methods and systems for real-time continuous updates |
US20140130050A1 (en) * | 2012-11-06 | 2014-05-08 | International Business Machines Corporation | Main processor support of tasks performed in memory |
US8862625B2 (en) | 2008-04-07 | 2014-10-14 | Teradata Us, Inc. | Accessing data in a column store database based on hardware compatible indexing and replicated reordered columns |
US9424315B2 (en) | 2007-08-27 | 2016-08-23 | Teradata Us, Inc. | Methods and systems for run-time scheduling database operations that are executed in hardware |
CN108460199A (en) * | 2018-02-11 | 2018-08-28 | 西南电子技术研究所(中国电子科技集团公司第十研究所) | CNI modelings |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8027194B2 (en) | 1988-06-13 | 2011-09-27 | Samsung Electronics Co., Ltd. | Memory system and method of accessing a semiconductor memory device |
US20050050524A1 (en) * | 2003-08-25 | 2005-03-03 | Arm Limited | Generating software test information |
JP2007048019A (en) * | 2005-08-10 | 2007-02-22 | Sony Computer Entertainment Inc | Emulation method, emulator, computer embedded device, and program for emulator |
US7870307B2 (en) * | 2006-01-30 | 2011-01-11 | Sony Computer Entertainment Inc. | DMA and graphics interface emulation |
US7568189B2 (en) * | 2006-05-03 | 2009-07-28 | Sony Computer Entertainment Inc. | Code translation and pipeline optimization |
US7831801B1 (en) * | 2006-08-30 | 2010-11-09 | Xilinx, Inc. | Direct memory access-based multi-processor array |
US7830389B2 (en) * | 2006-10-03 | 2010-11-09 | Honeywell International Inc. | Dual processor accelerated graphics rendering |
US20100030927A1 (en) * | 2008-07-29 | 2010-02-04 | Telefonaktiebolaget Lm Ericsson (Publ) | General purpose hardware acceleration via deirect memory access |
US8438549B1 (en) * | 2009-09-15 | 2013-05-07 | Sandia Corporation | Data processing with microcode designed with source coding |
US9515658B1 (en) | 2014-10-09 | 2016-12-06 | Altera Corporation | Method and apparatus for implementing configurable streaming networks |
CN106557448B (en) * | 2015-09-24 | 2019-06-18 | 龙芯中科技术有限公司 | The kernel code read method and system of multi-node system |
US11119835B2 (en) | 2017-08-30 | 2021-09-14 | Intel Corporation | Technologies for providing efficient reprovisioning in an accelerator device |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4967340A (en) * | 1985-06-12 | 1990-10-30 | E-Systems, Inc. | Adaptive processing system having an array of individually configurable processing components |
US5388215A (en) * | 1989-05-17 | 1995-02-07 | Ibm Corporation | Uncoupling a central processing unit from its associated hardware for interaction with data handling apparatus alien to the operating system controlling said unit and hardware |
US5497498A (en) * | 1992-11-05 | 1996-03-05 | Giga Operations Corporation | Video processing module using a second programmable logic device which reconfigures a first programmable logic device for data transformation |
US5742180A (en) * | 1995-02-10 | 1998-04-21 | Massachusetts Institute Of Technology | Dynamically programmable gate array with multiple contexts |
US5778226A (en) * | 1989-10-20 | 1998-07-07 | Iomega Corporation | Kernels, description tables and device drivers |
US5787246A (en) * | 1994-05-27 | 1998-07-28 | Microsoft Corporation | System for configuring devices for a computer system |
US5915123A (en) * | 1997-10-31 | 1999-06-22 | Silicon Spice | Method and apparatus for controlling configuration memory contexts of processing elements in a network of multiple context processing elements |
US5949994A (en) * | 1997-02-12 | 1999-09-07 | The Dow Chemical Company | Dedicated context-cycling computer with timed context |
US5956518A (en) * | 1996-04-11 | 1999-09-21 | Massachusetts Institute Of Technology | Intermediate-grain reconfigurable processing device |
US6075939A (en) * | 1997-09-27 | 2000-06-13 | Lynx Real-Trime Systems, Inc. | Tightly coupled, scalable module based micro-kernel operating system architecture |
US6108760A (en) * | 1997-10-31 | 2000-08-22 | Silicon Spice | Method and apparatus for position independent reconfiguration in a network of multiple context processing elements |
US6122719A (en) * | 1997-10-31 | 2000-09-19 | Silicon Spice | Method and apparatus for retiming in a network of multiple context processing elements |
US6326806B1 (en) * | 2000-03-29 | 2001-12-04 | Xilinx, Inc. | FPGA-based communications access point and system for reconfiguration |
US6351846B1 (en) * | 1999-02-16 | 2002-02-26 | Conexant Systems, Inc. | Information server for kernel and passive mode systems |
-
2000
- 2000-06-30 US US09/608,860 patent/US6675289B1/en not_active Expired - Lifetime
-
2001
- 2001-06-29 WO PCT/US2001/020816 patent/WO2002003592A2/en not_active Application Discontinuation
- 2001-06-29 AU AU78860/01A patent/AU7886001A/en not_active Withdrawn
- 2001-07-02 EP EP01250247A patent/EP1168161A3/en not_active Ceased
-
2003
- 2003-10-27 US US10/694,282 patent/US7032103B2/en not_active Expired - Lifetime
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4967340A (en) * | 1985-06-12 | 1990-10-30 | E-Systems, Inc. | Adaptive processing system having an array of individually configurable processing components |
US5388215A (en) * | 1989-05-17 | 1995-02-07 | Ibm Corporation | Uncoupling a central processing unit from its associated hardware for interaction with data handling apparatus alien to the operating system controlling said unit and hardware |
US5778226A (en) * | 1989-10-20 | 1998-07-07 | Iomega Corporation | Kernels, description tables and device drivers |
US5497498A (en) * | 1992-11-05 | 1996-03-05 | Giga Operations Corporation | Video processing module using a second programmable logic device which reconfigures a first programmable logic device for data transformation |
US5787246A (en) * | 1994-05-27 | 1998-07-28 | Microsoft Corporation | System for configuring devices for a computer system |
US5742180A (en) * | 1995-02-10 | 1998-04-21 | Massachusetts Institute Of Technology | Dynamically programmable gate array with multiple contexts |
US5956518A (en) * | 1996-04-11 | 1999-09-21 | Massachusetts Institute Of Technology | Intermediate-grain reconfigurable processing device |
US5949994A (en) * | 1997-02-12 | 1999-09-07 | The Dow Chemical Company | Dedicated context-cycling computer with timed context |
US6075939A (en) * | 1997-09-27 | 2000-06-13 | Lynx Real-Trime Systems, Inc. | Tightly coupled, scalable module based micro-kernel operating system architecture |
US5915123A (en) * | 1997-10-31 | 1999-06-22 | Silicon Spice | Method and apparatus for controlling configuration memory contexts of processing elements in a network of multiple context processing elements |
US6108760A (en) * | 1997-10-31 | 2000-08-22 | Silicon Spice | Method and apparatus for position independent reconfiguration in a network of multiple context processing elements |
US6122719A (en) * | 1997-10-31 | 2000-09-19 | Silicon Spice | Method and apparatus for retiming in a network of multiple context processing elements |
US6351846B1 (en) * | 1999-02-16 | 2002-02-26 | Conexant Systems, Inc. | Information server for kernel and passive mode systems |
US6326806B1 (en) * | 2000-03-29 | 2001-12-04 | Xilinx, Inc. | FPGA-based communications access point and system for reconfiguration |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080189252A1 (en) * | 2006-08-25 | 2008-08-07 | Jeremy Branscome | Hardware accelerated reconfigurable processor for accelerating database operations and queries |
US7908259B2 (en) * | 2006-08-25 | 2011-03-15 | Teradata Us, Inc. | Hardware accelerated reconfigurable processor for accelerating database operations and queries |
US20110167083A1 (en) * | 2006-08-25 | 2011-07-07 | Teradata Us, Inc. | Hardware accelerated reconfigurable processor for accelerating database operations and queries |
US8224800B2 (en) * | 2006-08-25 | 2012-07-17 | Teradata Us, Inc. | Hardware accelerated reconfigurable processor for accelerating database operations and queries |
US8244718B2 (en) | 2006-08-25 | 2012-08-14 | Teradata Us, Inc. | Methods and systems for hardware acceleration of database operations and queries |
US9424315B2 (en) | 2007-08-27 | 2016-08-23 | Teradata Us, Inc. | Methods and systems for run-time scheduling database operations that are executed in hardware |
US8862625B2 (en) | 2008-04-07 | 2014-10-14 | Teradata Us, Inc. | Accessing data in a column store database based on hardware compatible indexing and replicated reordered columns |
US7966343B2 (en) | 2008-04-07 | 2011-06-21 | Teradata Us, Inc. | Accessing data in a column store database based on hardware compatible data structures |
US8458129B2 (en) | 2008-06-23 | 2013-06-04 | Teradata Us, Inc. | Methods and systems for real-time continuous updates |
US20140130050A1 (en) * | 2012-11-06 | 2014-05-08 | International Business Machines Corporation | Main processor support of tasks performed in memory |
US20140130051A1 (en) * | 2012-11-06 | 2014-05-08 | International Business Machines Corporation | Main processor support of tasks performed in memory |
US9104465B2 (en) * | 2012-11-06 | 2015-08-11 | International Business Machines Corporation | Main processor support of tasks performed in memory |
US9104464B2 (en) * | 2012-11-06 | 2015-08-11 | International Business Machines Corporation | Main processor support of tasks performed in memory |
CN108460199A (en) * | 2018-02-11 | 2018-08-28 | 西南电子技术研究所(中国电子科技集团公司第十研究所) | CNI modelings |
Also Published As
Publication number | Publication date |
---|---|
US6675289B1 (en) | 2004-01-06 |
AU7886001A (en) | 2002-01-14 |
EP1168161A3 (en) | 2005-02-02 |
US7032103B2 (en) | 2006-04-18 |
WO2002003592A2 (en) | 2002-01-10 |
EP1168161A2 (en) | 2002-01-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7249351B1 (en) | System and method for preparing software for execution in a dynamically configurable hardware environment | |
US7032103B2 (en) | System and method for executing hybridized code on a dynamically configurable hardware environment | |
US10409765B2 (en) | Method for providing subapplications to an array of ALUs | |
US11928512B2 (en) | Quiesce reconfigurable data processor | |
US5915123A (en) | Method and apparatus for controlling configuration memory contexts of processing elements in a network of multiple context processing elements | |
US6108760A (en) | Method and apparatus for position independent reconfiguration in a network of multiple context processing elements | |
US7996827B2 (en) | Method for the translation of programs for reconfigurable architectures | |
KR101082797B1 (en) | System and Method for translating high-level programming language code into Hardware Description Language code | |
TWI806550B (en) | Processor operation method, related computer system, and non-transitory computer-accessible storage medium | |
US20120089812A1 (en) | Shared resource multi-thread processor array | |
US20030126403A1 (en) | Method and apparatus for retiming in a network of multiple context processing elements | |
US20140137123A1 (en) | Microcomputer for low power efficient baseband processing | |
US20100088489A1 (en) | data transfer network and control apparatus for a system with an array of processing elements each either self-or common controlled | |
US20040236929A1 (en) | Logic circuit and program for executing thereon | |
JP2005508029A (en) | Program conversion method for reconfigurable architecture | |
US20240069770A1 (en) | Multiple contexts for a memory unit in a reconfigurable data processor | |
CN119201229A (en) | Macro instruction set architecture based on row-wise partitioning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
STCF | Information on status: patent grant |
Free format text: PATENTED CASE |
|
FEPP | Fee payment procedure |
Free format text: PAYER NUMBER DE-ASSIGNED (ORIGINAL EVENT CODE: RMPN); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY Free format text: PAYOR NUMBER ASSIGNED (ORIGINAL EVENT CODE: ASPN); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY |
|
AS | Assignment |
Owner name: BROADCOM CORPORATION, CALIFORNIA Free format text: MERGER;ASSIGNOR:SILICON SPICE, INC.;REEL/FRAME:022542/0758 Effective date: 20001005 Owner name: SILICON SPICE, INC., CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:ESLICK, IAN S.;WILLIAMS, MARK;FRENCH, ROBERT S.;REEL/FRAME:022542/0745;SIGNING DATES FROM 20000627 TO 20000628 |
|
AS | Assignment |
Owner name: QUALCOMM INCORPORATED, CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:BROADCOM CORPORATION;REEL/FRAME:022973/0107 Effective date: 20090610 Owner name: QUALCOMM INCORPORATED,CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:BROADCOM CORPORATION;REEL/FRAME:022973/0107 Effective date: 20090610 |
|
FPAY | Fee payment |
Year of fee payment: 4 |
|
FPAY | Fee payment |
Year of fee payment: 8 |
|
MAFP | Maintenance fee payment |
Free format text: PAYMENT OF MAINTENANCE FEE, 12TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1553) Year of fee payment: 12 |