Performing arithmetic on composite operands

Abstract: Binary outcome operations are performed on composite operands. A composite operand (10) is an operand that includes plural multi-bit component data items (12,14,16). A binary outcome operation obtains, for each component, a flag bit (32,34,36) that depends on the numerical value of the component. A binary outcome operation can be performed by performing an arithmetic operation in parallel on a composite operand (10) in which each component includes more than one bit. The arithmetic operation can add a value, producing a carry signal if a component and the added value together exceed a maximum possible value. Or the arithmetic operation can subtract a value, producing a borrow signal if a component is less than the subtracted value. Also, if the arithmetic operation subtracts a value that is equal to the component, the resulting data item includes only zeros; an operation in parallel can then obtain a single flag bit that is a zero only if the resulting data item includes only zeros. The binary outcome operation can compare each component with a value or can determine whether each component is within a range.

Description: The present invention relates to techniques that perform operations on plural data items. Many conventional techniques perform operations on plural data items. Some examples arise in the field of image processing, in which each data item can relate to a pixel in an image. Mahoney, EP-A 460 970, describes hierarchical data analysis techniques that can be applied to pixel values. Fig. 7 shows a Connection Machine system that performs image processing by simulating a binary image jungle (BIJ). A front end processor can make calls to cause processing units in the Connection Machine to perform arithmetic and logical operations. Fig. 8 illustrates a part of an array of processing units in a Connection Machine, with a processing unit storing a pixel value. Fig. 15 illustrates how binary attributes, fullness and vacantness, can be encoded using a number indicating a level at which a transition takes place. Page 22 lines 18-19 mention that a downward attribute value could be produced by applying a criterion. Fig. 17 illustrates a technique in which an array is produced by comparing each value in an array with neighboring values. As described in relation to Figs. 18 and 19, chunks of an image that meet a validity criterion can be found by producing an exhaustive hierarcy of data items. As described in relation to Fig. 22, a saliency criterion, such as maximum or minimum attribute value, can be used to decide from which component a pixel should take a label. Selection criteria are described at page 28 and illustrated in Figs. 24 and 25. Page 31, beginning at line 15, describes extensions to handle color and gray shaded images. Jensen et al., EP-A-0 486 143 disclose a processing method wherein a plurality of operands are processed in parallel by packing the operands into a word with at least one cleared buffer bit between each operand. Following an arithmetic operation involving signed arithmetic a one bit may propagate from the most significant bits of a first operand into the adjacent buffer bit but not into the least significant bit of an adjacent second operand. A masking step clears the buffer bits so that for further arithmetic operations bit propagation from the first to the second operand is prevented. Bloomberg et al., EP-A 431 961, describe image reduction and enlargement techniques. Page 2 line 18-page 3 line 18 and page 5 line 50-page 6 line 31 describe methods of reducing a binary image by performing logical operations between bits. Page 3 lines 36-58 describe techniques for operating on very wide pixelwords that include shifting a pixelword and then logically combining the pixelword with a shifted version of itself The result is then compressed. Page 4 lines 43 and 44 define AND, OR, and XOR as logical operations carried out between two images on a pixel-by-pixel basis, while NOT is a logical operation carried out on a single image on a pixel-by-pixel basis. As Bloomberg et al. note in relation to Fig. 1, a scanner may provide a gray scale image with a plurality of bits per pixel. Page 12 line 46-page 13 line 11 describe an extension in which a grayscale image is reduced to obtain a reduced grayscale image with the same number of bits/pixel by replacing the four pixel values in each 2 x 2 square by a single pixel with an approximate average value. Bloomberg et al. note at page 14 lines 35-38 that their algorithms lend themselves to parallelism, with many processors independently performing thresholded reduction on parts of an image, such as bands of a given number of scanlines. The invention deals with a problem in processing multi-bit data items, such as gray scale or color pixel values. Operations on multi-bit data items are often conditional. For example, an item of data may be manipulated in one way if it exceeds a threshold and in another way if not. Or a data item may be manipulated only if it is equal to a given value or falls within a range. Therefore, it is often necessary to perform an operation that produces a binary value, referred to herein as a "binary outcome operation," to determine whether a data item meets a criterion. Binary outcome operations are also useful for other purposes. For example, data items that meet a criterion can be counted by summing binary logical results over an array of data items. Conventional techniques can be used to perform a binary outcome operation on a data item. For example, a microprocessor can perform an operation to compare two data items to determine whether they are equal or to determine whether one exceeds the other. But in conventional techniques, a single processor can operate on only one multi-bit data item at a time. A processor cannot conventionally perform binary outcome operations in parallel on several multi-bit data items, each narrower than the processor. The invention strives to provide an improved technique that performs a binary outcome operation in parallel on a composite operand that includes plural multi-bit component data items. The component data items could, for example, be gray scale or color pixel values. Accordingly, the present invention provides a method as set out in claims 1 and 8. The technique uses an arithmetic operation to produce data indicating a binary outcome for each component. The arithmetic operation could, for example, be addition or subtraction. The technique can be implemented by operating a processor to perform an arithmetic operation on a composite operand that includes plural multi-bit component data items. The arithmetic operation produces a resulting data item for each component. A flag bit is also obtained for each component. Each flag bit indicates a binary outcome for its component. The technique can be implemented in an article of manufacture. The article includes a data storage medium and instruction data stored by the data storage medium, which could be a magnetic storage medium, an optical storage medium, a semiconductor memory, or other memory medium. The article can be used in a system that includes memory, a storage medium access device, and a processor. The memory stores multi-bit data items; each data item could, for example, relate to a pixel of an image. The instruction data indicate arithmetic operation instructions a processor can execute to perform an arithmetic operation in parallel on a composite operand that includes more than one multi-bit component data item. Each component is in a respective subarray of processing positions in the processor, and the arithmetic operation obtains a respective resulting data item in each subarray. The instruction data also indicate flag bit instructions the processor can execute to obtain, for each component, a flag bit indicating a result of a binary outcome operation on the component. The instruction data can be, for example, code that can be executed by a microprocessor such as the CPU of a conventional workstation or other computer. The arithmetic operation can be addition. If each component data item includes K bits, the maximum value is 2 K . To compare with a threshold value T≤2 K , a component's value can be added to (2 K -T): After the resulting data item is obtained in the component's subarray, a carry signal will be provided by the subarray's most significant bit position only if the component is greater than T. If the bit position receiving the carry signal was OFF before the addition operation, it is ON after the operation, so that it contains a binary outcome or flag bit. To avoid interaction between components, a buffer bit adjacent the most significant bit position of each subarray can store the flag bit in response to the carry signal. The arithmetic operation can also be subtraction. Adding (2 K -T) in K bits is arithmetically equivalent to subtracting T in K bits, so that a borrow signal can be used to obtain a binary outcome or flag bit just as a carry signal from addition can be used. To determine whether a component's value is in a range bounded by T 1 and T 2 , two thresholds can be applied, (T 1 + 1) and T 2 , where T 2 >T 1 . The binary outcome can be ON only if the result with T 2 is OFF and the result with (T 1 + 1) is ON. The binary outcome can be obtained by inverting the result from T 2 and then ANDing with the result from (T 1 + 1). Another way to determine whether a component's value is in a range is to subtract T 1 , set all buffer bits, and subtract T 2 - T 1 from the result of the first subtraction. If a component's buffer bit is OFF, the component is in the range bounded by T 1 and T 2 . Subtraction can also be used to compare component values with a constant or other value for equality. If the result of subtracting a constant C from a component's value is zero, the component is equal to C. The binary outcome can then be obtained by horizontally subsampling the image, ORing pairs of bits at each level of subsampling. Only components equal to C will have an OFF result. Or the binary outcome can be obtained by an arithmetic operation that produces buffer bits holding the result of the equality comparison. The technique of the invention is advantageous because it permits efficient binary outcome operations in parallel on composite operands that include plural multi-bit component data items. The present invention will be described further, by way of examples, with reference to the accompanying drawings, in which:- Fig. 1 is a schematic flow diagram showing examples of how an arithmetic operation can be performed in parallel to obtain flag bits indicating a result of a binary outcome operation; Fig. 2 is a schematic block diagram showing components of a system in which a processor can execute instructions from a software product to obtain flag bits by performing an arithmetic operation in parallel; Fig. 3 is a flow chart showing general acts in obtaining flag bits by performing an arithmetic operation in parallel; Fig. 4 is a flow chart showing operations that implement the acts in Fig. 3 to obtain sign flag bits comparing a component data item with a constant; Fig. 5 is a flow chart showing operations that implement the acts in Fig. 3 to obtain sign flag bits comparing two component data items; Fig. 6 is a schematic flow diagram showing operations that implement the acts in Fig. 3 to obtain zero flag bits with subsampling operations; Fig. 7 is a schematic flow diagram showing operations that implement the acts in Fig. 3 to obtain zero flag bits with arithmetic and logic operations; Fig. 8 is a flow chart showing operations that implement the acts in Fig. 3 to obtain range flag bits; and Fig. 9 is another flow chart showing operations that implement the acts in Fig. 3 to obtain range flag bits. The term "composite operand" used below is an operand that includes two or more data items, referred to as "component data items" or "components." A processor or other circuitry performing an arithmetic operation on a composite operand may produce an "inter-component signal." An inter-component signal is a signal like a carry signal, a borrow signal, or a shifted bit that may cause an operation on one component to affect results obtained for another component. A. General Features Figs. 1-3 illustrate general features of the invention. Fig. 1 shows schematically a composite operand that includes plural multi-bit component data items; an arithmetic operation can obtain, for each component, a flag bit indicating a result of a binary outcome operation on the component. Fig. 2 shows a software product with instruction data indicating instructions a processor can perform in accordance with a technique like that in Fig. 1. Fig. 3 shows general acts in a method of operating a processor to perform an arithmetic operation in obtaining flag bits indicating results of a binary outcome operation. In Fig. 1, composite operand 10 includes component data items 12, 14, and 16, each including two bits. Component 12 has the value 10, component 14 the value 01, and component 16 the value 00. In operand 10, each component has a cleared bit adjacent its most significant bit. Constant operand 20 is made up of repetitions of the value 11, with one repetition aligned with each component data item in composite operand 10, and with a cleared bit adjacent its most significant bit. Adding the value 11 to a two-bit value to obtain a two-bit result is equivalent to subtracting the value 01 from the two-bit value, because (2 2 - 1) = 3. But adding 11 to the two-bit value also produces a carry bit from the more significant bit if the two bit value is 01 or more. When operand 20 is added to operand 10, two useful types of results can be obtained, as illustrated by operand 30. Bits 32, 34, and 36 indicate respectively whether components 12, 14, and 16 are at least as great as the value 01. Resulting data item 38 has the value 00, indicating that component 14 is equal to the value 01. Bits 32, 34, and 36 are therefore flag bits, each indicating a result of a binary outcome operation on the respective one of components 12, 14, and 16. The binary outcome operation compares each component with the threshold value 01. Since component 12 is greater than 01, bit 32 has the value one. Since component 14 is equal to 01, bit 34 also has the value one. But component 16 is less than 01, so that bit 36 has the value zero. Resulting data item 38 includes two bits, so that further acts must be performed to obtain a flag bit from it. Operand 40, obtained by shifting operand 30 leftward one bit position, includes shifted data item 42 with the same value as resulting data item 38, but with its less significant bit aligned with the more significant bit of resulting data item 38. ORing operands 30 and 40 produces operand 50, with bit 52 a flag bit indicating a result of a binary outcome operation on component 14. The binary outcome operation compares component 14 with the value 01 for equality, and the value zero in bit 52 indicates equality. Similarly, bits 54 and 56 are flag bits with the value one indicating that components 12 and 16 are not equal to the value 01 Fig. 2 shows software product 60, an article of manufacture that can be used in a system that includes components like those shown in Fig. 2. Software product 60 includes data storage medium 62 that can be accessed by storage medium access device 64. Data storage medium 62 could, for example, be a magnetic medium such as a set of one or more floppy disks, an optical medium such as a set of one or more CD-ROMs, semiconductor memory, or any other appropriate medium for storing data. Data storage medium 62 stores data that storage medium access device 64 can provide to processor 66, which could for example be a microprocessor. Processor 66 is connected for receiving data from input circuitry 70. The data could be obtained from any appropriate source, such as a facsimile (fax) machine; a scanner, which could be the scanner of a digital copier or an input/output device of a computer; an editor, which could be a forms editor or other interactive image editor controlled by user input devices such as a keyboard and mouse or a pen- or stylus-based input device; or a network, which could be a local area network or other network capable of transmitting data. The data could relate to an image. Processor 66 is also connected for providing data to output circuitry 72. The data could in turn be provided to a fax machine, a printer, a display, or a network. The printer could be the printer of a digital copier or an input/output device of a computer. In addition to data storage medium 62, software product 60 includes data stored by storage medium 62. The stored data include instruction data indicating arithmetic operation instructions 80 and flag bit instructions 82. Processor 66 can execute instructions 80 to obtain a resulting data item for each of plural component data items in a composite operand. Processor 66 can execute instructions 82 to obtain a flag bit from each resulting data item indicating a result of a binary outcome operation on the respective component. Processor 66 can obtain the component data items on which the arithmetic operation is performed by accessing memory 84. Each item of data can, for example, relate to a pixel of an image. The items of data can each include more than one bit. The data stored by storage medium 62 could also include data indicating instructions processor 66 can execute to store data items received from input circuitry 70 in memory 84, to retrieve data items from memory 84 for an operation or to be provided to output circuitry 72, or to store data items resulting from an operation in memory 84. Processor 66 includes processing circuitry 90 with plural processing positions 92. Processor 66 could, for example, be a conventional microprocessor. Each of processing positions 92 can perform an operation on one bit. Processing circuitry 90 includes position connecting circuitry 94 connecting processing positions 92 in pairs to form an array. A signal from one processing position in a pair can be transferred by position connecting circuitry 94 to the other processing unit. Each component data item in a composite operand on which an arithmetic operation is being performed can be in a respective subarray of processing positions 92. Processor 66 can execute arithmetic operation instructions 80 to obtain a resulting data item in each component's subarray. Processor can execute flag bit instructions 82 to obtain a flag bit from each resulting data item. Fig. 3 shows general acts in a method of operating a processor with processing circuitry like processing circuitry 90 in Fig. 2. The act in box 110 provides a composite operand to processing circuitry 90, with each component data item being provided to a respective subarray of processing positions 92. The act in box 112 operates processing circuitry 90 to perform an arithmetic operation in parallel on the composite operand to obtain a resulting data item in each subarray. The act in box 114 obtains, for each component, a flag bit indicating a result of a binary outcome operation on the component. The acts in boxes 112 and 114 may occur in a single cycle, because the flag bit may be produced directly by the arithmetic operation. B. Implementations The general features described above in relation to Figs. 1-3 could be implemented in many different ways with a wide variety of components and with various operations. For example, some of the general features described above have been implemented with conventional processors while others could be implemented with specially designed processors. Figs. 4-8 illustrate implementations of the general steps shown in Fig. 3 that are applicable for processing units that can operate in parallel on more than one data item; a number of such processing units could be used in parallel with or without position connecting circuitry between them. 1. Sign Flag Bits Figs. 4 and 5 illustrate implementations of the general acts described in relation to Fig. 3 that obtain flag bits that indicate the sign of the result of an arithmetic operation. In Fig. 4, such flag bits also indicate a result of an arithmetic operation that compares a component data item with a threshold. In Fig. 5, such flag bits also indicate a result of an arithmetic operation comparing two components. In Fig. 4, the act in box 150 obtains data items. Each data item could, for example, relate to a pixel of an image. The act in box 152 forms a composite operand that includes component data items obtained in box 150 and a buffer bit adjacent the most significant bit of each component data item; if the component data items were obtained from previous image processing operations, they may be obtained in box 150 in a composite operand already having this form. The act in box 152 also obtains a constant operand that includes a constant value, occurring once for each component data item in the composite operand. Each occurrence of the constant value is aligned with and of the same length as a respective component data item in the composite operand. Therefore, an arithmetic operation that subtracts the constant operand from the composite operand subtracts a threshold T from each component data item in the composite operand. The constant operand also includes a buffer bit adjacent the most significant bit of each occurrence of the constant value, aligned with the buffer bit adjacent the respective component data item in the composite operand. The buffer bits in the composite operand and the constant operand should have values so that the results of an arithmetic operation performed on them are useful. For example, all buffer bits in the composite operand could have the value one and all buffer bits in the constant operand could have the value zero, so that the constant operand can be subtracted from the composite operand without producing inter-component signals that could invalidate results. The act in box 154 performs an arithmetic operation subtracting the constant operand from the composite operand, so that T is subtracted from each component data item. The act in box 154 therefore produces, for each component data item that is at least as great as T, a resulting data item with an adjacent buffer bit having the value one, and, for each component data item that is less than T, a resulting data item with an adjacent buffer bit having the value zero as a result of a borrow signal. The act in box 154 could be replaced by an arithmetic operation adding a constant to the composite operand. For example, adding (2 K -T) to a K-bit component would produce a sum that is the same as the difference produced by subtracting T from the component. In this case, however, the buffer bits in both operands should have the value zero before the operation. This would produce, for each component data item that is at least as great as T, a resulting data item with an adjacent buffer bit having the value one as a result of a carry signal, and, for each component data item that is less than T, a resulting data item with an adjacent buffer bit having the value zero. The act in box 156 uses the buffer bits adjacent the resulting data items produced in box 154 as flag bits. This act can be implemented in a number of ways. To obtain a result that includes only the buffer bits, a subsampling operation, such as reduction, can be performed on the resulting data items. If each component data item with buffer bit includes K bits, then a (K + 1):1 reduction could be performed, or log 2 (K + 1) 2:1 reductions could be performed, each saving the more significant bit of each pair of bits. The buffer bits thus form a bitmap having a one in each bit relating to a pixel for which the component data item was at least as great as T and a zero in each bit for which the component data item was less than T. To obtain a result that can be used to control further processing of multi-bit component data items, the buffer bits can be used to generate a mask, using techniques like those described in EP-A-0 602 886. In Fig. 5, the act in box 170 obtains pairs of data items. For example, two data items could be paired because both relate to the same pixel of an image, or they could be paired because the pixels to which they relate are from two different images but are aligned when one image is superimposed on the other during image processing. The act in box 172 forms first and second composite operands, with each pair of data items obtained in box 170 being divided, one in the first composite operand and the other in the second. Each composite operand includes component data items and a buffer bit adjacent the most significant bit of each component data item; if the component data items were obtained from previous image processing operations, they may be received in box 170 in composite operands having this form. Paired component data items are aligned with each other and of the same length so that an arithmetic operation that subtracts the second operand from the first operand subtracts each component data item in the second operand from its paired component data item in the first operand. The buffer bits are similarly aligned and have the value one in the first operand and zero in the second operand. As noted in relation to Fig. 4, if an equivalent addition is performed, all buffer bits should have the value zero. The act in box 174 performs an arithmetic operation subtracting the second operand from the first operand, so that each component data item in the second operand is subtracted from its paired component data item in the first operand. The act in box 174 therefore produces, for each component data item in the first operand that is at least as great as its paired component data item, a resulting data item with an adjacent buffer bit having the value one, and, for each component data item in the first operand that is less than its paired component data item, a resulting data item with an adjacent buffer bit having the value zero, as a result of a borrow signal. The act in box 176 uses the buffer bits adjacent the resulting data items produced in box 174 as flag bits. This act can be implemented as described above in relation to box 156 in Fig. 4. In particular, to obtain the maximum of each pair of component data items, a first mask can be produced from the buffer bits so that the mask includes zeros in the positions where the component data item in the second operand is equal to or greater than its paired component data item and one in positions where the component data item in the first operand is greater. The first mask can be ANDed with the first operand to produce a masked version of the first operand. The first mask can also be inverted to produce a second mask that is ANDed with the second operand to produce a masked version of the second operand. The masked versions of the first and second operands can then be ORed to obtain a result with the maximum in each position. Conversely, the first mask can be ANDed with the second operand and the second mask with the first operand, to produce masked versions that can be ORed to obtain a result with the minimum in each position. 2. Zero Flag Bits Figs. 6 and 7 illustrate two implementations of the general acts described in relation to Fig. 3 that obtain flag bits that indicate whether the result of an arithmetic operation is zero. In Fig. 6, such flag bits are obtained by reduction. In Fig. 7, such flag bits are obtained by an additional operation in parallel. Figs. 6 and 7 can both begin with results obtained from the act in box 154 in Fig. 4. In other words, in both implementations, a constant operand is subtracted from a composite operand to obtain a result. The result will have a value with all zeros only in positions where a component data item is equal to the constant, and will have values with all ones or with mixed ones and zeros elsewhere. The adjacent buffer bit will have a one if the component data item was at least as great as the constant and a zero elsewhere. The result can then be used to obtain flag bits as illustrated in Figs. 6 and 7. In Fig. 6, operand 180 includes resulting data items 182, 184, and 186, with respective buffer bits 192, 194, and 196. As shown, data item 182 resulted from subtracting the constant value from a greater component data item, with data item 182 indicating a difference not equal to zero and with buffer bit 192 indicating a positive result. Similarly, data item 184 resulted from subtracting the constant value from an equal component data item, with data item 184 indicating a difference equal to zero and with buffer bit 194 indicating a positive result. And data item 186 resulted from subtracting the constant value from a smaller component data item, with data item 186 indicating a difference not equal to zero and with buffer bit 196 indicating a negative result. To invert buffer bits, an XOR operation is performed on operand 180 and operand 200, in which bits 202, 204, and 206 and all other bits aligned with buffer bits have the value ON and all bits not aligned with buffer bits have the value OFF. The XOR operation therefore produces operand 210, in which data items 212, 214, and 216 have the same values respectively as data items 182, 184, and 186 in operand 180, but in which buffer bits 222, 224, and 226 are the inverses respectively of buffer bits 192, 194, and 196. The implementation of Fig. 6 performs a subsampling operation on operand 210 to obtain operand 230. The subsampling operation can include shifting operand 210 one bit position leftward, then ORing operand 210 with the shifted version as discussed above in relation to Fig. 1, then subsampling the result with a 2:1 reduction selecting the more significant bit of each pair to obtain operand 230. Subsampling can also be performed using operand 210 as an index into a table that contains operand 230. Bit 232 is obtained by ORing buffer bit 222 with the most significant bit of component 212. Bit 234 is obtained by ORing the two least significant bits of component 212. Bit 236 is obtained by ORing buffer bit 224 with the most significant bit of component 214. Bit 237 is obtained by ORing the two least significant bits of component 214. Bit 238 is obtained by ORing buffer bit 226 with the most significant bit of component 216. Bit 239 is obtained by ORing the two least significant bits of component 216. Then, the implementation of Fig. 6 performs another subsampling operation on operand 230 to obtain operand 240. Bit 242 is obtained by ORing bits 232 and 234; bit 244 by ORing bits 236 and 237; and bit 246 by ORing bits 238 and 239. Bits 242, 244, and 246 are flag bits indicating that resulting data item 184 indicated a zero result while data items 182 and 186 indicated results not equal to zero. Operand 250 in Fig. 7 is identical to operand 210 in Fig. 6, with data items 252, 254, and 256 and buffer bits 262, 264, and 266. Operand 250 is first ANDed with mask 270, which has OFF values 272 to clear the buffer bits and ON values 274 elsewhere. Therefore, operand 280 has cleared buffer bits 282, 284, and 286. Operand 280 is then added to a constant operand 290 with cleared buffer bits 292 and with constant values 294 that include all ones. Operand 300 includes the resulting data items and buffer bits 302, 304, and 306, which are flag bits having the same values respectively as bits 232, 234, and 236 in Fig. 6. These flag bits could be used as described above in relation to box 156 in Fig. 4. Since it does not need information from buffer bits to obtain flag bits and does not use buffer bits as flag bits, the implementation of Fig. 6 could also be applied to resulting data items without buffer bits, which could be obtained using some of the techniques described in EP-A-0 062 888. The implementation of Fig. 7 does not require information from the buffer bits, but uses buffer bits as flag bits, so that if resulting data items do not have buffer bits, buffer bits must be inserted. If each resulting data value plus buffer bit included K bits, it would also be possible to obtain buffer bit flags by a series of (K - 1) shift and OR operations of the type discussed above in relation to Fig. 1. In comparison, the implementation of Fig. 6 can be performed in log 2 K shift and OR operations and log 2 K subsampling operations, which is advantageous for larger values of K if rapid subsampling operations are available. And the implementation of Fig. 7 can be performed in two operations as shown provided that operands 270 and 290 are available. The choice of how to implement operations obtaining zero flag bits can therefore be based on considerations that include processor capabilities and efficiency. 3. Range Flag Bits Figs. 8 and 9 illustrate two implementations, each of which obtains range flag bits indicating whether each component data item is in a range. In Fig. 8, the act in box 320 performs two operations as described above in relation to Fig. 4 on a composite operand to obtain first and second sign flag bits for each component data item. One operation uses a constant value (T 1 + 1) and the other a constant value T 2 , where T 2 >T 1 . As a result, a component's first flag bit indicates whether the component is as great as (T 1 + 1) and its second flag bit indicates whether the component is as great as T 2 . The first flag bits of the components in the composite operand are in a first operand and the second flag bits are in a second operand. The act in box 322 inverts the second operand. A component whose inverted second flag bit has a value of one is less than T 2 , while a component whose first flag bit has a value of one is greater than T 1 . The act in box 324 ANDs the first operand and the inverted second operand to produce range flag bits, each indicating whether a component is in the range between T 1 and T 2 . A component's range flag bit has a value of one if the component is in the range and a value of zero if it is not. The constant values (T 1 + 1) and T 2 can be used in the implementation of Fig. 8 to obtain range flag bits for an open range bounded by T 1 and T 2 , a closed range bounded by (T 1 + 1) and (T 2 - 1), or a range that is open at one end and closed at the other. In Fig. 9, the act in box 340 performs an operation as described above in relation to Fig. 4 on a composite operand to obtain a first operand with a sign flag bit for each component data item. The operation uses a constant value T 1 , subtracting it from each component data item. As a result, a component's flag bit in the first operand indicates whether the component is as great as T 1 . In addition, each component's resulting data item in the first operand has a value that is shifted downward by T 1 , with components that were less than T 1 being shifted to values between 2 K and (2 K - T 1 ). The act in box 342 operates on the first operand to set all the buffer bits to the value one. This prepares for a subtraction operation. The act in box 344 then performs another operation as described in relation to Fig. 4 to obtain a second operand with a sign flag bit for each component data item. This operation subtracts the constant value (T 2 - T 1 ) from each component's resulting data item in the first operand, as modified by box 342. As a result, a component's flag bit in the second operand indicates whether the component is in the range between T 1 and T 2 , where T 2 >T 1 . If a component is in the range, its sign flag bit in the second operand has the value zero, because of a borrow signal. If the component is above or below the range, its sign flag bit in the second operand has the value one. As in Fig. 8, the implementation of Fig. 9 could be used with open or closed ranges. C. Applications The general implementation features described above could be used in a wide variety of data processing applications. They are expected to be particularly useful, however, in performing some types of image processing more rapidly than they could be performed serially on each data item. In particular, the features described above could be used to implement techniques similar to those described in Serra, J., Image Analysis and Mathematical Morphology, Academic Press, 1982 and Serra, J., Image Analysis and Mathematical Morphology, Volume 2: Theoretical Advances, Academic Press, 1988. Such techniques may be used, for example, to provide document services, such as removal of noise or other non-informative features, skew correction, data encoding, extraction of segments for automatic form or control sheet creation, and printer specific correction. Such document services can be used in digital copying machines, including fax machines and photocopying machines, in machines that produce data defining an image for a printer or other image output device, in machines that operate on data defining an image received from a scanner or other image input device, and in other machines that perform image processing. The features described above can be used to obtain flag bits for gray scale or color pixel values during a wide variety of image processing operations. The general implementation features described above may also be useful in various other applications, such as searching an image database for images containing a particular set of features; scanning envelopes for addresses; interpreting forms from a high-speed scanner; machine vision; and process-specific print image correction and verification. The invention could also be applied to perform various other image processing operations, such as pixel counting, gray scale morphology, gray scale rotation, generating error-diffused images, and skew detection. The invention could also be used with data that does not relate to an image. The invention could be used, for example, to perform finite difference analysis or simulations of physical phenomena. D. Miscellaneous The invention has been described in relation to several implementations. The invention might also be implemented by using two or more of the implementations together or by performing logic operations on flag bits obtained from two or more implementations to obtain combined flag bits. The invention has been described in relation to implementations in which component data items in a composite operand are separated by single buffer bits. The invention could also be implemented with plural buffer bits between components. The invention has been described in relation to implementations that obtain flag bits using addition and subtraction. It might also be possible to obtain flag bits using other arithmetic operations. The invention has been described in relation to implementations that operate on data relating to images, but might also be implemented to operate on data that do not relate to an image. The invention has been described in relation to implementations with conventional microprocessors, but the invention might also be implemented with reduced instruction set (RISC) chips or with any other processor, including the processor of a mainframe computer, minicomputer, supercomputer, or any other computing device. The invention has been described in relation to a software product for use in a system that includes a processor and memory, with the software product storing data indicating instructions the processor can execute to perform operations on data from memory. The system's memory can, of course, include the software product when in use in the system, and instructions and data can, in general, be arbitrarily stored in any memory device accessible by the processor; for example, the invention can readily be implemented with data indicating instructions stored in memory rather than in a software product. The invention has been described in relation to composite operands with simple structures. In the examples described above, all component data items are of the same length and the components within a composite operand need not be related to each other. The invention could also be implemented with composite operands with additional structure, within the limitations of processor width. For example, a composite operand could include component data items of different widths, provided that other operands are aligned with components of the same widths in the same positions. Also, the component data items could be arranged in groups of two or more, with the components in each group being related: If the components in each group relate to the same pixel, each component could hold a value for a respective threshold reduction. More generally, if the components in each group relate to the same location in a physical simulation space, one component could hold a value for the location and the other locations could hold derivatives at the location. Although the invention has been described in relation to various implementations, together with modifications, variations, and extensions thereof, other implementations, modifications, variations, and extensions are within the scope of the invention. The invention is therefore not limited by the description contained herein or by the drawings, but only by the claims.

Claims: A method of operating a processor (66) that includes an array of processing positions (92), each for performing operations on one bit, comprising: (A) providing to the array of processing positions (92) a composite operand (10; 280) that includes two or more component data items (12, 14, 16), each including more than one bit; each component data item being provided to a respective subarray of the processing positions; and (B) operating the processor (66) to perform an arithmetic operation in parallel on the composite operand (10; 280); the arithmetic operation producing, in each component data item's subarray, a respective resulting data item (38) that includes more than one bit; characterized in that adjacent subarrays are separated by at least one buffer bit position and in that each component data item's subarray has a buffer bit position (282, 284, 286) adjacent to an end of the subarray; the arithmetic operation further obtaining, for each component data item (12, 14, 16) a flag bit (32, 34, 36; 302, 304, 306) indicating a result of a binary outcome operation on the component data item; the arithmetic operation obtaining the flag bit in the buffer bit position adjacent to the end of the subarray. A method as claimed in claim 1 in which the subarray of each component data item (12, 14, 16) includes a most significant bit position at an end of the subarray; each subarray's most significant bit position having an adjacent buffer bit position (282, 284, 286); the subarray's flag bit (32, 34, 36; 302, 304, 306) being obtained in the buffer bit position adjacent to the most significant bit position of the subarray. A method as claimed in claim 1 or 2 in which the binary outcome operation compares a component data item with a threshold, or determines whether a component data item is in a range, or compares a component data item with a value for equality. A method as claimed in one of claims 1 to 3, wherein the arithmetic operation is addition and in which each resulting data item includes a most significant bit; the flag bit for each component data item indicating whether a carry occurred from the most significant bit of the respective resulting data item. A method as claimed in one of claims 1 to 3, wherein the arithmetic operation is addition and each component data item includes K bits; the binary outcome operation comparing each component data item with a value T; the arithmetic operation adding (2 K -T) to each component data item. A method as claimed in one of claims 1 to 3, wherein the arithmetic operation is subtraction and each resulting data item includes a most significant bit; the flag bit for each component data item indicating whether a borrow occurred from the most significant bit of the respective resulting data item. A method as claimed in one of claims 1 to 3, wherein the arithmetic operation is subtraction and each component data item includes K bits; the binary outcome operation comparing each component data item with a value T; the arithmetic operation subtracting T from each component data item. A method of operating a processor (66) that includes an array of processing positions (92), each for performing operations on one bit, comprising: (A) operating the processor (66) to perform an arithmetic operation in parallel on a composite operand (10) that includes plural component data items in respective subarrays (12, 14, 16), each including more than one bit; the arithmetic operation producing, for each component data item, a respective resulting data item (38; 182, 184, 186; 252, 254, 256) that includes more than one bit; and (B) obtaining, for each component data item (12, 14, 16), a flag bit (52, 54, 56; 242, 244, 246; 302, 304, 306) indicating a result of a binary outcome operation on the component data item; characterized in that (B) comprises: operating the processor (66) to use the resulting data item (38; 182, 184, 186; 252, 254, 256) in each component data item's subarray to obtain a flag bit (52, 54, 56; 242, 244, 246; 302, 304, 306) indicating a result of the binary outcome operation on the component data item. A method as claimed in claim 8 in which the processor (66) performs subsampling on the resulting data item (38; 182, 184, 186) in each component data item's subarray to obtain the flag bit (52, 54, 56; 242, 244, 246). A method as claimed in claim 8 in which the processor (66) obtains a second composite operand (280) that includes the resulting data items, each in a respective subarray of the processing positions (92), with each resulting data item's subarray having a buffer bit position (282, 284, 286) adjacent to an end of the subarray; the processor further performing a second arithmetic operation on the second composite operand to obtain the flag bits (302, 304, 306) in the buffer bit positions.

Inventors: DAVIES DANIEL, DAVIES, DANIEL
Applicants: XEROX CORP, XEROX CORPORATION
Application year: 1993
Main classification: G06F7
IPC codes: G06F15, G06F7