The present invention relates to processing architectures and instruction processing for electrical computers and digital data processing systems and, more particularly, to MIMD array processors.
With many commercial computing applications, most of the hardware/processor resources remain unused during computations. This happens because of horizontal and vertical wasting. Vertical wasting occurs, e.g., when a processor unit capable of executing several disjunctive functions is only used for one function in each cycle. Here, the hardware resources owned by the other functions are not used, resulting in poor processor space utilization. In the case of horizontal wasting, processor resources are underutilized in terms of operand length, e.g., using a 32-bit integer unit for operations on 8-bit operands. This results in poor time utilization, since an 8-bit integer unit would execute an 8-bit operation must faster than would a 32-bit integer unit. For small resources, horizontal and vertical wasting can be ignored, but a low degree of utilization for large and expensive resources (like memory caches) contributes to an overall inefficiency for the entire microchip/processor.
Sharing resources wherever possible in a processor can increase overall performance considerably. For example, it is known that the cache in a processor can comprise more than 50% of the total area of the chip. If by increasing resource sharing the utilization degree of the cache doubles, the processor will run with the same performance as when the cache size is doubled.
For increasing the degree of resource sharing and overall computational efficiency, some processors are based on MIMD (multiple instruction multiple data) designs. MIMD is a type of parallel computing architecture where many functional units perform different operations on different data. MIMD machines typically contain multiple processing elements and multiple shared resources (e.g., memory caches and I/O), all connected (directly or indirectly) via an interconnection network. Each processing unit typically includes an execution unit (e.g., control unit, registers, ALU, floating point unit) integral with other resources such as storage/memory and instruction decoders. Because data has to be shared/transmitted between the multiple processing elements and shared resources through the interconnection network, the degree to which the MIMD design improves processor resource sharing and efficiency will depend on the nature and configuration of the processing elements and shared resources, as well as the manner in which they intercommunicate.
An embodiment of the present invention relates to an MIMD machine/microprocessor for Java- and .Net (“dot net”)-based processing. (Java and Net are programming languages that provide “built in” support for multithreading, i.e., for processing multiple sequences of instructions at the same time.) For example, the processor could be used as a processor or microcontroller in an embedded real-time system. Instead of having multiple integrated processing elements, the MIMD machine includes a plurality of “half-processors” and a plurality of separate execution units. Thus, each half-processor is an MIMD processing element but excluding execution resources, i.e., the execution unit/resources are removed and provided as separate elements. The half-processors each include resources for instruction fetch and decode, and for instruction stream context management. By “separating” the execution resources from the remainder of the processing elements (i.e., by providing separate half-processors and execution units), the execution resources can be shared by all the half-processors. This results in an important increase in the degree of resource utilization, which in turn results in an overall increase in performance.
The MIMD machine further includes a plurality of memory caches. The execution units and memory caches are shared between all the half-processors using two interconnection networks and a priority based communications scheme. The two interconnection networks increase the utilization degree of the shared resources, resulting in a higher overall performance. Also, depending on the application running, this architecture can be scaled with a very fine grain in terms of number of thread slots (which depends on the degree of parallelism in the running application), the number and type of execution units (which depends on the type of computation required by the application), and the cache and stack cache size (both of which depend on target performance). As should be appreciated, this architecture thereby provides a high degree of flexibility. Also, the MIMD machine is able to process multiple instruction streams that can be easily associated with threads at the software level.
The MIMD machine uses a “Java/.Net” instruction set, by which it is meant that the MIMD machine uses a Java and/or Net instruction set and is capable of running both separate and combined Java and .Net instructions. Most of the instructions are directly executed using hardware resources. The Java/.Net instruction set results in an even higher level of processing flexibility, and provides another layer of scalability. In particular, using a platform-independent instruction set like Java and/or Net is advantageous because of the virtualization of hardware resources. The processor architecture can be scaled into a large range of products that are capable of running the same applications (e.g., software programs), with the overall performance level depending on allocated resources. For example, because the Java Virtual Machine Specification uses a stack instead of a register file, this helps with scaling the hardware resources allocated for the operands stack, depending on the performance/costs of the target products.
The present invention will be better understood from reading the following description of non-limiting embodiments, with reference to the attached drawings, wherein below:
With reference to
The MIMD processor 20 further includes a storage area 26. First and second interconnection networks 28, 30 operably selectively interconnect the storage area 26, the execution units 24a-24e, and the half-processors 22. The execution and storage resources are shared by all the half-processors 22, with concurrent requests for access to the same shared resource by multiple half-processors 22 being controlled by a priority based communications scheme in place on the interconnection networks 28, 30. The two interconnection networks increase the utilization degree of the shared resources, resulting in a higher overall performance. Also, depending on the application/program running on the processor, this architecture can be scaled with a very fine grain in terms of number of thread slots (which depends on the degree of parallelism in the running application), the number and type of execution units (which depends on the type of computation required by the application), and the cache and stack cache size (both of which typically depend on target performance).
The MIMD processor 20 can be characterized as having three main areas, the storage area 26, a context area 32, and an execution area 34. The context area 32 contains the half-processors 22 arranged, e.g., in an array. The number of half-processors 22 provided depends on the needs of the application/program using the processor 20. The storage area 26 contains expensive shared resources such as a data cache 36 for storing data locally, an instruction cache 38 for storing program instructions locally (e.g., the instruction cache may contain a subset of the program instructions stored elsewhere in RAM or other memory), and interpretation resources 40 (e.g., memory, lookup tables, decoders, or the like for interpreting complex instructions). These shared resources can be scaled (in terms of modifying the size of the caches) depending on the needs of the application. The execution area 34 contains the execution units 24a-24e, which may include a load store unit 24a, a data parallel machine 24b, an integer unit 24d, and a multiply unit 24e, among others. The execution units 24a-24e can be scaled in terms of number and type (e.g., different numbers or types of execution units), again, depending on the needs of the application. The half-processors 22 share the resources in the storage area 26 and execution area 34, e.g., they share the cache units 36, 38, the interpretation resources 40, and the execution units 24a-24e (collectively, “shared resources”).
Each interconnection network 28, 30 is a point-to-multipoint connector implemented using a network of multiplexers 44 (see
The interconnection networks 28, 30 are believed to be the most efficient way to connect the array of half-processors 22 to the shared storage and execution resources 26, 34. Further examples of ways in which to connect the half-processors 22 to the shared resources can be derived from U.S. Pat. No. 6,560,629 entitled “MULTI-THREAD PROCESSING” to Harris, which is incorporated by reference herein in its entirely.
The processor 20 may use a “Java/.Net” instruction set, by which it is meant a Java and/or .Net instruction set including the capability of running both separate and combined Java and .Net instructions. In such a case, the half-processors 22 will be configured to support (process) individual Java/.Net instruction streams, and possibly including hardware support for fetching, decoding, and executing a Java/.Net instruction stream. Typically, each instruction stream will be associated with a Java/.Net thread in the application or software program running on or otherwise utilizing the processor 20.
The decode and folding unit 52 is shown in
The decode unit 58, shown in
The interpretation sequencer unit 64 is configured to determine if the lookup tables 66 failed to successfully decode any of the microinstructions. This might happen, e.g., if the instruction to be decoded is complex and/or very infrequently used. In order to decode these complex and/or infrequently used instructions, the interpretation sequencer unit 64 sends a request to the interpretation resources 40. The result of this request is passed on to the folding unit 62. Also, the interpretation sequencer unit 62 handles any exceptions thrown from the execution units 24a-24e in the execution area 34. To do so, the interpretation sequencer unit 62 waits until the end of the current instruction (if any are in progress) and then executes a jump instruction to a fixed address from where the exception will be handled by the associated handler. Exceptions are transmitted over an exception bus 70.
The folding unit 62 includes a microcode dispatcher 74, which has the role of combining the microinstructions from the decode unit 58 and the microinstruction(s) from the interpretation sequencer unit 64. The resultant microinstructions are processed by an array of “ProducerConsumerDetector” units 76. The folding operation involves combining two or three decoded microinstructions into a single decoded microinstruction. The folding rules are based on the operations that are performed by each of the two or three microinstructions relative to the operands stack. The ProducerConsumerDetector units 76 indicate the kinds of operations that are performed by each microinstruction on the operands stack.
The table in
Switching from one instruction set to another (for example from exclusively Java to exclusively Net) requires the replacement of the simple instruction lookup tables 66, ProducerConsumerDetector units 76, and interpretation resources 40, although these can all be configured for a Java/.Net instruction set as well.
With reference back to
Since certain changes may be made in the above-described highly scalable MIMD machine (processor architecture) for Java and .Net processing without departing from the spirit and scope of the invention herein involved, it is intended that all of the subject matter of the above description or shown in the accompanying drawings shall be interpreted merely as examples illustrating the inventive concept herein and shall not be construed as limiting the invention.