Abstract:
A special purpose arithmetic boolean unit is capable of performing extremely parallel bit-level boolean operations, particularly bit matrix manipulations. The special purpose arithmetic boolean unit is especially adapted for use in traditional vector processors, thereby enabling a vector processor to effectively solve extremely parallel MIMD or SIMD boolean problems without requiring an array processor or massively parallel supercomputer.

Description:
RELATED APPLICATIONS 
     This application is a continuation-in-part of an application filed in the United States Patent and Trademark Office on Dec. 29, 1989, entitled CLUSTER ARCHITECTURE FOR A HIGHLY PARALLEL SCALAR/VECTOR MULTIPROCESSOR SYSTEM Ser. No. 07/459,083, and assigned to the assignee of the present invention, which is hereby incorporated by reference in the present application. This application is also related to a copending application filed in the United States Patent and Trademark Office concurrently herewith, entitled SCALAR/VECTOR PROCESSOR, Ser. No. 07/536,409, which is assigned to the assignee of the present invention, a copy of which is attached hereto as an appendix and is hereby incorporated by reference in the present application. 
    
    
     TECHNICAL FIELD 
     This invention relates generally to the field of arithmetic and logical functional units for use in computer and electronic logic systems. More particularly, the present invention relates to a method and apparatus for a special purpose arithmetic boolean unit for performing extremely parallel bit-level boolean operations and matrix manipulations. 
     BACKGROUND ART 
     In an effort to increase the processing speed and flexibility of traditional high-speed supercomputers that utilize vector processors in a minimally parallel computer processing system, the cluster architecture for highly parallel multiprocessors described in previously identified parent application, Ser. No. 07/459,083 provides a supercomputer architecture that extends the direct-connection methods of inter-processor communication of minimally parallel computer processing systems to encompass greater numbers of processors. While this architecture effectively addresses the problem of interprocessor communication and coordination for highly parallel computer processing systems, it does not offer an effective alternative to the massively parallel single-instruction, multiple-data (SIMD) or multiple-instruction, multiple data (MIMD) processor array systems that operate on extremely parallel problems. For these types of extremely parallel or very fine grain parallelism problems, the individual power of the processing element is not as important as the total number of processing elements that can be used in parallel. Because traditional vector processor supercomputers have a limited number of processors, they have generally not been used for these types of problems. 
     Another type of extremely parallel problem that cannot be efficiently solved with a traditional vector processor or an array processor, or a massively parallel computer processing system is extremely parallel bit-level boolean operations, particularly bit matrix manipulations. An example of such an extremely parallel bit manipulation problem is the transposition of an N×N bit array. Certain standalone, hardwired bit manipulation machines have been created for very specialized purposes that would be capable of efficiently performing this type of bit-level manipulation; however, none of the more general purpose computer processing systems have the capability to efficiently perform extremely parallel bit-manipulation operations. 
     Although some extremely parallel SIMD and MIMD problems can be solved using traditional massively parallel or array processor supercomputers, it would be desirable to provide a method and apparatus that would enable other types of supercomputers to also effectively work on these extremely parallel problems. More particularly, it would be advantageous to provide a method and apparatus that could efficiently solve extremely parallel bit-level boolean operations without requiring the use of a standalone, specialized hardwired processor that is independent from a general purpose computer processing system. 
     SUMMARY OF THE INVENTION 
     The present invention provides a new method and apparatus for a special purpose arithmetic boolean unit that is capable of performing extremely parallel bit-level boolean operations, particularly bit matrix manipulations. The special purpose arithmetic boolean unit is especially adapted for use in cooperation with traditional vector processors, thereby enabling a vector processor to effectively solve extremely parallel MIMD or SIMD boolean problems without requiring an array processor or massively parallel supercomputer. The boolean unit of the present invention is a user-programmable, fully pipelined, parallel bit manipulation device for transforming an N-bit wide operand into an N-bit wide result each clock cycle in a traditional vector processor. The bit manipulation device is programmed by loading an N×N bit state array from a vector register. This bit state array specifies the logical transformation that the bit manipulation device will apply to the operand bit stream from a vector register. The specified logical transformations are performed by the bit manipulation device when a vector register operand is applied to the boolean unit, with the results of the logical transformation stored in a vector register. 
     The boolean unit of the present invention allows a traditional vector processor to be effectively used on SIMD/MIMD extremely parallel problems, as well as extremely parallel bit-level manipulation and matrix problems. For SIMD/MIMD problems, such as signal processing, the bit state array can be programmed to filter the incoming data on a bit-by-bit level. In this sense, each of the bits in the N×N bit state array, paired with its individual bit manipulation means, operates as a single processing element. In the preferred embodiment, the boolean unit consists of 4096 such individual processing elements, together capable of transforming an 64-bit wide operand into an 64-bit wide result each clock cycle. 
     An objective of the present invention is to provide a method and apparatus for a special purpose boolean arithmetic unit that is especially adapted for performing parallel bit-level boolean operations. 
     Another objective of the present invention is to provide a method and apparatus for a special purpose boolean arithmetic unit that can solve extremely parallel SIMD problems without the use of traditional SIMD or MIMD array processors or massively parallel supercomputers. 
     A further objective of the present invention is to provide a special purpose boolean arithmetic unit that is capable of performing bit-level matrix manipulations in a traditional vector processor. 
     These and other objectives of the present invention will become apparent with reference to the drawings, the detailed description of the preferred embodiment and the appended claims. 
    
    
     DESCRIPTION OF THE DRAWINGS 
     FIG. 1 is a block diagram of a single scalar/vector processor with associated arbitration node providing a link to main memory, showing the present invention as a special purpose functional unit associated with the vector processing means. 
     FIG. 2 is a more detailed block diagram of the vector processing means shown in FIG. 1. 
     FIG. 3 is a block diagram of a portion of the boolean unit of the preferred embodiment of the present invention within the vector processing means. 
     FIGS. 4a-4g are schematic representations of data depicting various operations that the boolean unit of the present invention can perform. 
     FIG. 5 is an alternative embodiment of the boolean operator of the boolean unit of the present invention. 
     FIG. 6 illustrates the vector and scalar registers with the vector register unit and the input and output paths of the unit. 
    
    
     DESCRIPTION OF THE PREFERRED EMBODIMENTS 
     Referring now to FIG. 1, a block diagram showing a single processor 100 that comprises the environment for the preferred embodiment of the present invention will be described. It will be recognized that the special purpose boolean arithmetic unit of the present invention may be implemented in many kinds of processors and still be within the scope of the present invention. For example, the special purpose boolean arithmetic unit could be implemented in a single vector processor that did not have the capability of both vector and scalar processing. Although it is preferred that the boolean unit be used in conjunction with a vector processor, it is possible for the boolean unit to also be used with a scalar processor; however, the size of the bit state array that could be operated on by such a combination with a single instruction may be smaller because of the smaller size of the functional units associated with the scalar processor, or may be slower because of the need to load the bit state array directly from memory. 
     In the preferred embodiment, the processor 100 is logically and physically partitioned into a scalar processor 102 and a vector processor 104. Both the scalar processor 102 and the vector processor 104 have their own register sets and dedicated arithmetic resources as described in greater detail in the previously identified co-pending application entitled SCALAR/VECTOR PROCESSOR. All registers and data paths in the processor 100 are 64-bits (one word) wide. For the scalar processor 102, there are 64 scalar S registers and 512 local L registers. The vector processor 104 has 16 vector V registers. The architecture can support up to a total combination of 256 S and V registers per processor 100. Each processor 100 also has up to 256 control C registers (not shown) that are physically distributed throughout the processor 100 and are used to gather and set control information associated with the operation of the processor 100. 
     Unlike most prior scalar/vector processors, the scalar processor 102 and vector processor 104 that comprise the high-speed processor 100 of the preferred embodiment are capable of simultaneous operation. As shown in FIGS. 1 and 2, both the scalar processor 102 and the vector processor 104 include a plurality of arithmetic resources in the form of arithmetic functional units 106. For the scalar processor 102, the arithmetic functional units 106 include: Scalar Unit SU0 (divide, pop, and parity) 106a; Scalar Unit SU1 (floating point multiply, integer multiply, and logical operations) 106b; and Scalar Unit SU2 (floating point addition, integer addition, and shift operations) 106c. For the vector processor 104, the arithmetic functional units 106 include: Vector Unit VU0 (divide, pop, parity and the boolean unit of the present invention) 106d; Vector Units VU1 and VU2 (floating point multiply, integer multiply, and logical operations) 106e; and Vector Units VU3 and VU4 (floating point addition, integer addition, logical and shift operations) 106f. Internal paths 108 to each of the functional units 106 may be allocated independently in the scalar processor 102 and vector processor 104 and each of the functional units 106 can operate concurrently, thereby also allowing the scalar processor 102 and vector processor 104 to operate concurrently. No functional units 106 are shared between the scalar processor 102 and the vector processor 104. 
     Referring now to FIG. 3, the operation of the boolean unit 200 of the present invention will be described. The boolean unit 200 is within one of the functional units 106 associated the vector processor 104. In the preferred embodiment of the processor 100, the word size is 64 bits and, consequently, the boolean unit 200 is 64×64 bits. In this embodiment, the boolean unit 200 is associated with the VU0 functional unit 106d. It will be recognized that the size of the boolean unit 200 and its N×N state bit array, as well as the location of the boolean unit 200 in relation to the other functional units 106, are design choices dependent upon the word size of the processor 100, the size of the other processing elements in the processor 100 and the amount of circuitry that can be devoted to the boolean unit 200. For optimum efficiency, however, the boolean unit 200 should be located near and connected to a processor 100 such that it can easily receive as input words having significant bit length and easily return as output words of equal length. 
     For ease of representation, FIG. 3 shows the circuitry associated with only an 8×8 bit section of the boolean unit 200. Each state bit 202 represents a single state bit of the N×N state bit array, which is preferably 64×64. Prior to the operation of the bit manipulation logic circuitry 204 of the boolean unit 200, each of the 4096 state bits 202 of the N×N state bit array is sequentially loaded from a vector register using the LDBOOL instruction. Specifically, Row 0 is loaded from vector element 0, Row 1 is loaded from vector element 1, and so forth up to Row 63 which is loaded from vector element 63. In the preferred embodiment, the V registers are comprised of 64 elements. It will be recognized, however, that larger or smaller vector registers may be used in conjunction with the present invention. For example a V register having 128 elements could be used to provide input values to the boolean unit 200 with the vector length and vector offset control registers set appropriately to specify only 64 elements per transfer. 
     The state bit array specifies the logical transformation performed on the operand bit stream. This transformation occurs when the BOOL instruction is executed with a specified vector register operand and an output vector register (result). A copy of the specifications for the LDBOOL and BOOL instructions are attached to this application as Appendix A, which is hereby incorporated by reference. 
     The execution of the BOOL instruction by the vector processor 104 inputs a vector operand (vector element by vector element) from the input word 210 into the boolean unit 200. The boolean unit 200 performs the transformation using the bit manipulation logic circuitry 204 to produce a vector result (vector element by vector element) that is stored in the output word 212. In the preferred embodiment, the boolean unit 200 operates on the input word 210 at the rate of 64 bits per clock cycle, generating results to be stored in the output word 212 at the same rate. Both the input word 210 and the output word 212 are selectively connected by internal paths and appropriate muxes to each of the V registers of the vector processor 104. The state bits 202 are also connected by internal paths and appropriate muxes to each of the V registers of the vector processor 104. As a result, there is no dependence between the boolean unit 200 and any particular set or group of V registers in the vector processor 104. 
     Referring now to FIG. 6, the vector register unit 232 and its instruction control mechanisms will be described. 
     The vector control logic 130 interfaces with the instruction issue and memory interface logic. This logic includes multiplexors (not shown) for controlling ten 64-bit data path inputs 150 and the twelve 64-bit data path outputs 152 of the vector register unit 232. 
     The ten 64-bit data path inputs to the vector registers are coupled to 
     Memory load port 116-0 
     Memory load port 116-1 
     Memory load port 116-2 
     Memory load port 116-3 
     Scalar registers 120 
     Add, shift, and logical functional unit VU3 
     Add, shift, and logical functional unit VU4 
     Multiply and logical functional unit VU1 
     Multiply and logical functional unit VU2 
     Divide, pop count, parity, leading zero, and boolean functional units--VU0 
     The twelve 64-bit data path outputs from the vector registers are coupled to scaler registers 120 
     Memory store port 0/scalar registers 118-0 
     Memory store port 1/scalar registers 118-1 
     Divide, pop count, parity, leading zero, and boolean functional units VU0 
     Add, shift, and logical functional unit VU3 
     Add, shift, and logical functional unit VU4 
     Multiply and logical functional unit VU2/Gather and Scatter address ports (9 and 10) 
     Multiply and logical functional unit VU1 
     The unit 232 includes sixteen vector registers V0-V15, a group of scalar registers 154-0 to 154-4, one for each functional unit VU0 to VU4. A 16:1 multiplexor (not shown) couples register outputs to the j field inputs of the functional units VU0 to VU4, to the data write ports 118 and scalar registers 120 and to the scatter/gather ports. A 17:1 multiplexor couples V register outputs or the outputs of registers 154-0 to 154-4 to the k field inputs of the functional units VU0 to VU4 when one of the operands of a currently executing instruction is either vector or scalar respectively. A second set of scalar registers 156-0 to 156-4 is provided for scalar data of dependently initiated instructions in the queue of each respective functional unit VU0-VU4. As each dependently initiated instruction is advanced for execution in its functional unit, its scalar data is moved from its register 156n to the corresponding register 154n. These registers are filled from the 5 registers. 
     Each vector register (V0 to V15) may be read from and/or written to once per clock. This means that a single vector register cannot be supplying operands for more than one instruction at a time or be receiving results from more than one instruction at a time. A vector is &#34;reserved for reads&#34; if it is currently being read; this holds off the start of another instruction that will read that register. Similarly, a vector register is &#34;reserved for writes&#34; when it is the target result register of a currently executing instruction; this blocks the start of a subsequent instruction that would write to that register. 
     However, a single vector register may supply two operands to a single functional unit, if that register is specified by both j and k fields of a valid vector instruction. 
     The vector control logic 130 also provides the mechanism for chaining multiple vector instructions together. This means that an instruction to read from a vector register may initiate while another instruction is writing data into that register. Vector control ensures that the new instruction will not get ahead of the previous instruction which is supplying it with data. 
     If a vector register is &#34;reserved for reads,&#34; another instruction to write to that register is not initiated. When the previous read completes, there are several cycles of overhead and then the write into the vector register may start. 
     In the preferred embodiment as shown in FIG. 3, the logical transformation that is implemented by the bit manipulation logic circuitry 204 is an AND/XOR boolean function. Thus, the bit manipulation logic circuitry 204 utilizes an AND operator 220 for each bit in the row with an XOR operator 222 at the end of each row. The input word 210 is ANDED on a bit-by-bit basis with each row of the state bit array. The result of this AND logic operation is then exclusive-or (XOR) reduced for each row of the state bit array such that each row provide a single bit of output to be stored in the output word 212. The output word 212 is then delivered to the appropriate vector element in the V register as the result. It will be recognized that other boolean operators, such as AND, OR, XOR, NAND, or NOR, may also be combined together in the bit manipulation logic circuitry 204 of the present invention to produce other types of boolean logical results. For example, the XOR operator 222 might be replaced with an AND operator, and the AND operator 220 might be replaced with a XOR operator. This combination would be useful in searching a bit matrix for a particular bit pattern combination. 
     Referring now to FIGS. 4a-4g, some of the possible operations of the boolean unit 200 of the preferred embodiment of the present invention are shown. In these schematic representations, the contents of the bit state array 202 is shown first, followed by the contents of the input vector that is loaded on a vector element-by-vector element basis into the input word 210, and finally the contents of the output vector as it is stored in the output word 212 on a vector element-by-vector element basis. The notation for the contents of the input vector and output vector tables is such that &#34;e0.63&#34; refers to vector element 0, bit 63, &#34;e61. 62&#34; refers to vector element 61, bit 62, and so forth. 
     FIG. 4a shows an identity operation where the input vector is identically reproduced in the output vector. FIG. 4b shows a bit reverse operation where the order of the bits in the input vector are reversed on a row-by-row basis. FIG. 4c shows a field extraction operation where selected columns of the input vector are extracted (in this example, columns 0, 62 and 63). FIG. 4d shows a selection (packing) operation where selected columns are extracted and the remaining columns are right shifted to fill in the vacant columns. FIG. 4e shows a permutation operation where columns are &#34;randomly shuffled&#34; as specified by the input bit state array 202. FIG. 4f shows a rotate operation where the order of the bits of input vector is reversed on a column-by-column basis. It should be noted that for this operation, the operand vector is loaded into the bit state array 202, and the input vector is used to hold the constant bit state matrix used to create the desired logical operation. Finally, FIG. 4g shows a transpose operation where the all of the bits of the operand vector are reversed, both on a column and row basis. 
     FIG. 4g provides a good example of how the present invention is capable of performing parallel bit manipulations that would otherwise be very difficult for traditional vector processors or array processors will be described. The transpose operation is a common matrix operation that is used in signal or image processing where a complete transposition of the bit matrix is desired. 
     It will also be recognized that additional boolean operators other than the AND/XOR boolean function may be switchably connected to the bit manipulation logic circuitry 204 to provide selection among multiple logical transformation capabilities. As shown for example in FIG. 5, more than one logical transformation could be implemented in the circuitry associated with the bit manipulation logic circuitry 204. The desired logical transformation could then be specified in a subopcode field in the BOOL instruction. In this case, a BOOL instruction with a subopcode field=0 might select the AND/XOR boolean combination, while a BOOL instruction with a subopcode=1 might select an XOR/AND boolean combination. 
     Although the description of the preferred embodiment has been presented, it is contemplated that various changes could be made without deviating from the spirit of the present invention. Accordingly, it is intended that the scope of the present invention be dictated by the appended claims rather than by the description of the preferred embodiment. ##SPC1##