US 20040255284 A1 Abstract To provide a compiler apparatus which makes it easy to describe arithmetic operations in source programs, makes it simple to write source programs, and reduces bugs, when performing block floating-point operations in software.
When the compiler apparatus is fed a source program containing computing expressions written using block floating variables, it detects computing expressions for addition in the source program, expands that part of the detected computing expressions which involves addition into instruction codes which specify addition for data blocks corresponding to a plurality of block floating variables to be subjected to addition, embeds the instruction codes in the object program to be generated, and outputs the object program.
Claims(20) 1.-92. (Cancelled). 93. An object program generating method for translating a given source program into an object program when the source program contains computing expressions which are written using
block floating variables of a Block Floating data type, characterized in that: each of the block floating variables constitutes a data block containing one or more data items and the data block is a variable which represents a data structure containing a block scale factor of the data block; and the object program generating method comprises a computing expression detecting step of detecting the computing expressions in the source program, a computing expression expanding step of expanding the computing expressions detected in the computing expression detecting step into predetermined instruction codes, and an instruction code conversion step of converting the instruction codes produced in the computing expression expanding step into the object program. 94. The object program generating method according to the computing expression detecting step detects operators in the expressions-, the data type of input operand for the operators, and the data type of output operand for the operators as detection results; and the computing expression expanding step operates based on the operators and data type information about input operand for the operators in the detection results produced in the computing expression detecting step, generating instruction codes which specify a process of calculating an operational block scale factor from the block scale factors of input data blocks if input operand contain block floating type data, and generating instruction codes which specify a process of feeding block floating type data into a computing unit for performing a shifting process based on either or both of the operational block scale factor and/or the block scale factor of an input operand if the input operand is block floating type data. 95. The object program generating method according to the computing expression expanding step expands any block floating type data fed to a computing unit into instruction codes which specify a computational process based on the operators; and the computing expression expanding step produces instruction codes which specify a data output process for calculating an interim block scale factor from the block scale factors of input data blocks, normalizing computational results which correspond to an output operand, and calculating block scale factors from the interim block scale factor if the output operand is block floating type data. 96. An object program generating method for translating a given source program into an object program when the source program contains computing expressions which are written using block floating variables of a Block Floating data type, characterized in that:
each of the block floating variables constitutes a data block containing one or more data groups, each of which in turn contains one or more data items and one group scale factor, the data block being a variable which represents a data structure containing a block scale factor of the data block; and the object program generating method comprises a computing expression detecting step of detecting the computing expressions in the source program, a computing expression expanding step of expanding the computing expressions detected in the computing expression detecting step into predetermined instruction codes, and an instruction code conversion step of converting the instruction codes produced in the computing expression expanding step into the object program. 97. The object program generating method according to the computing expression detecting step detects operators in the expressions, the data type of input operand for the operators, and the data type of output operand for the operators as detection results; and the computing expression expanding step operates based on the operators and data type information about input operand for the operators in the detection results produced in the computing expression detecting step, generating instruction codes which specify a process of calculating an operational block scale factor from the block scale factors of input data blocks if input operand contain block floating type data, and generating instruction codes which specify a process of feeding block floating type data into a computing unit for performing a shifting process based on either or both of the operational block scale factor and/or the block scale factor of an input operand as well as on the group scale factor if the input operand is block floating type data. 98. The object program generating method according to the computing expression expanding step expands any block floating type data fed to a computing unit into instruction codes which specify a computational process based on the operators; and the computing expression expanding step produces instruction codes which specify a data output process for calculating an interim block scale factor from the block scale factors of input data blocks, group-normalizing computational results which correspond to an output operand, calculating final group scale factors based on either or both of updated group scale factors calculated as a result of the group normalization and/or the interim block scale factor, and calculating a block scale factor from the calculated group scale factors if the output operand is block floating type data. 99. An object program generating method for translating a given source program into an object program when the source program contains computing expressions which are written using block floating variables, characterized in that:
each of the block floating variables constitutes a data block containing one or more data items and the data block is a variable which represents a data structure containing a block scale factor of the data block; and the object program generating method comprises a computing expression detecting step of detecting the computing expressions for multiplication or division in the source program, a computing expression expanding step of expanding the computing expressions detected in the computing expression detecting step into predetermined instruction codes, and an instruction code embedding step of embedding the instruction codes produced in the computing expression expanding step in the object program; of the computing expressions detected in the computing expression detecting step, the computing expression expanding step expands that part which involves multiplication or division into instruction codes which specify multiplication or division for data blocks corresponding to the block floating variables to be subjected to multiplication or division; and the process specified by the instruction codes performs multiplication or division on data in the data blocks, produces the computational result as a computational-result data block, and calculates the block scale factor of the computational-result data block based on the block scale factors of the data blocks. 100. An object program generating method for translating a given source program into an object program when the source program contains computing expressions which are written using block floating variables and fixed-point variables, characterized in that:
each of the block floating variables constitutes a data block containing one or more data items and the data block is a variable which represents a data structure containing a block scale factor of the data block; each of the fixed-point variables represents a data structure which constitutes a data block containing one or more data items; the object program generating method comprises a computing expression detecting step of detecting the computing expressions for multiplication or division in the source program, a computing expression expanding step of expanding the computing expressions detected in the computing expression detecting step into predetermined instruction codes, and an instruction code embedding step of embedding the instruction codes produced in the computing expression expanding step in the object program; of the computing expressions detected in the computing expression detecting step, the computing expression expanding step expands that part which involves multiplication or division into instruction codes which specify multiplication or division for data blocks corresponding to the block floating variables and fixed-point variables to be subjected to multiplication or division; and the process specified by the instruction codes performs multiplication or division on data in the data blocks which correspond to the block floating variables and data in the data blocks which correspond to the fixed-point variables, produces the computational result as a computational-result data block, and calculates the block scale factor of the computational-result data block based on the block scale factors of the data blocks which correspond to the block floating variables. 101. An object program generating method for translating a given source program into an object program when the source program contains computing expressions which are written using block floating variables, characterized in that:
each of the block floating variables constitutes a data block containing one or more data groups, each of which in turn contains one or more data items, the data block being a variable which represents a data structure containing the group scale factors of the respective data groups and the block scale factor of the data block; the object program generating method comprises a computing expression detecting step of detecting the computing expressions for multiplication or division in the source program, a computing expression expanding step of expanding the computing expressions detected in the computing expression detecting step into predetermined instruction codes, and an instruction code embedding step of embedding the instruction codes produced in the computing expression expanding step in the object program; of the computing expressions detected in the computing expression detecting step, the computing expression expanding step expands that part which involves multiplication or division into instruction codes which specify multiplication or division for data blocks corresponding to the block floating variables to be subjected to multiplication or division; and the process specified by the instruction codes performs multiplication or division on data in each data group of the data block, produces the computational result as a computational-result data block, and calculates the block scale factor of the computational-result data block based on the block scale factor of the data block. 102. An object program generating method for translating a given source program into an object program when the source program contains computing expressions which are written using block floating variables, characterized in that:
each of the block floating variables constitutes a data block containing one or more data items and the data block is a variable which represents a data structure containing a block scale factor of the data block; the object program generating method comprises a computing expression detecting step of detecting the computing expressions for addition or subtraction in the source program, a computing expression expanding step of expanding the computing expressions detected in the computing expression detecting step into predetermined instruction codes, and an instruction code embedding step of embedding the instruction codes produced in the computing expression expanding step in the object program; of the computing expressions detected in the computing expression detecting step, the computing expression expanding step expands that part which involves addition or subtraction into instruction codes which specify addition or subtraction for data blocks corresponding to the block floating variables to be subjected to addition or subtraction; and the process specified by the instruction codes selects the block scale factor of the data block containing data with the maximum absolute value as a common block scale factor, scales data in the data blocks based on the common block scale factor, and performs addition or subtraction on the scaled data in the data blocks. 103. An object program generating method for translating a given source program into an object program when the source program contains computing expressions which are written using block floating variables and fixed-point variables, characterized in that:
each of the block floating variables constitutes a data block containing one or more data items and the data block is a variable which represents a data structure containing a block scale factor of the data block; each of the fixed-point variables represents a data structure which constitutes a data block containing one or more data items; the object program generating method comprises a computing expression detecting step of detecting the computing expressions for addition or subtraction in the source program, a computing expression expanding step of expanding the computing expressions detected in the computing expression detecting step into predetermined instruction codes, and an instruction code embedding step of embedding the instruction codes produced in the computing expression expanding step in the object program; of the computing expressions detected in the computing expression detecting step, the computing expression expanding step expands that part which involves addition or subtraction into instruction codes which specify addition or subtraction for data blocks corresponding to the block floating variables and fixed-point variables to be subjected to addition or subtraction; and the process specified by the instruction codes calculates a virtual block scale factor of fixed-point data blocks as a constant, selects the block scale factor of the data block containing data with the maximum absolute value as a common block scale factor from among the block scale factors of the data blocks which correspond to the block floating variables and the virtual block scale factor, scales data in the data blocks based on the common block scale factor, and performs addition or subtraction on the scaled data in the data blocks and data in the data blocks which correspond to the fixed-point variables. 104. An object program generating method for translating a given source program into an object program when the source program contains computing expressions which are written using block floating variables, characterized in that:
each of the block floating variables constitutes a data block containing one or more data groups, each of which in turn contains one or more data items, the data block being a variable which represents a data structure containing the group scale factors of the respective data groups and the block scale factor of the data block; the object program generating method comprises a computing expression detecting step of detecting the computing expressions for addition or subtraction in the source program, a computing expression expanding step of expanding the computing expressions detected in the computing expression detecting step into predetermined instruction codes, and an instruction code embedding step of embedding the instruction codes produced in the computing expression expanding step in the object program; of the computing expressions detected in the computing expression detecting step, the computing expression expanding step expands that part which involves addition or subtraction into instruction codes which specify addition or subtraction for data blocks corresponding to the block floating variables to be subjected to addition or subtraction; and the process specified by the instruction codes selects the block scale factor of the data block containing data with the maximum absolute value as a common block scale factor, scales data in the data groups in each data block based on scale factors consisting of differences between the group scale factors of the respective data groups and the common block scale factor, and performs addition or subtraction on the scaled data in the data blocks. 105. An object program generating method for translating a given source program into an object program when the source program contains computing expressions which are written using block floating variables, characterized in that:
the object program generating method comprises a computing expression detecting step of detecting the computing expressions for multiplication-accumulation in the source program, a computing expression expanding step of expanding the computing expressions detected in the computing expression detecting step into predetermined instruction codes, and an instruction code embedding step of embedding the instruction codes produced in the computing expression expanding step in the object program; of the computing expressions detected in the computing expression detecting step, the computing expression expanding step expands that part which involves multiplication-accumulation into instruction codes which specify multiplication-accumulation for a first data block and second data block which correspond to two block floating variables to be subjected to multiplication and a third data block which corresponds to a block floating variable to be subjected to addition or subtraction; and the process specified by the instruction codes comprises a first scaling process for scaling data in the first data block based on a given scale factor, a second scaling process for scaling data in the third data block based on a given scale factor, a multiplication process for multiplying the second data block by the first data block from the first scaling process, and a computational process for performing addition or subtraction using the multiplication-result data block from the multiplication process and the third data block from the second scaling process, further calculates a corrective block scale factor which is a difference between a multiplication-result block scale factor and the block scale factor of the third data block, the multiplication-result block scale factor being the sum of the block scale factors of the first data block and the second data block, and gives the corrective block scale factor to the first scaling process, feeds data from the first data block to the first scaling process, gives no scale factor to the second scaling process, and feeds data from the third data block to the second scaling process. 106. The object program generating method according to a first scale correction process for giving the corrective block scale factor to the first scaling process, feeding data from the first data block to the first scaling process, giving no scale factor to the second scaling process, and feeding data from the third data block to the second scaling process; or a second scale correction process for giving the corrective block scale factor to the second scaling process, feeding data from the third data block to the second scaling process, giving no scale factor to the first scaling process, and feeding data from the first data block to the first scaling process. 107. The object program generating method according to the process specified by the instruction codes selectively performs either the first scale correction process or the second scale correction process based on magnitude relation between the multiplication-result block scale factor and the block scale factor of the third data block. 108. The object program generating method according to the first scaling process shifts inputted data to lower-order bits by a shift amount equivalent to a given scale factor; the second scaling process shifts inputted data to lower-order bits by a shift amount equivalent to a given scale factor; and the process specified by the instruction codes performs the first scale correction process when the block scale factor of the third data block is larger than the multiplication-result block scale factor, and performs the second scale correction process when the multiplication-result block scale factor is larger than the block scale factor of the third data block. 109. The object program generating method according to the first scaling process shifts inputted data to higher-order bits by a shift amount equivalent to a given scale factor; the second scaling process shifts inputted data to higher-order bits by a shift amount equivalent to a given scale factor; and the process specified by the instruction codes performs the second scale correction process when the block scale factor of the third data block is larger than the multiplication-result block scale factor, and performs the first scale correction process when the multiplication-result block scale factor is larger than the block scale factor of the third data block. 110. An object program generating method for translating a given source program into an object program when the source program contains computing expressions which are written using block floating variables, characterized in that:
each of the block floating variables constitutes a data block containing one or more data groups, each of which in turn contains one or more data items, the data block being a variable which represents a data structure containing the group scale factors of the respective data groups and the block scale factor of the data block; the object program generating method comprises a computing expression detecting step of detecting the computing expressions for multiplication-accumulation in the source program, a computing expression expanding step of expanding the computing expressions detected in the computing expression detecting step into predetermined instruction codes, and an instruction code embedding step of embedding the instruction codes produced in the computing expression expanding step in the object program; of the computing expressions detected in the computing expression detecting step, the computing expression expanding step expands that part which involves multiplication-accumulation into instruction codes which specify multiplication-accumulation for a first data block and second data block which correspond to two block floating variables to be subjected to multiplication and a third data block which corresponds to a block floating variable to be subjected to addition or subtraction; and the process specified by the instruction codes comprises a first scaling process for scaling data in the first data block based on a given scale factor, a second scaling process for scaling data in the third data block based on a given scale factor, a multiplication process for multiplying the second data block by the first data block from the first scaling process, and a computational process for performing addition or subtraction using the multiplication-result data block from the multiplication process and the third data block from the second scaling process, calculates a corrective block scale factor which is a difference between a multiplication-result block scale factor and the block scale factor of the third data block, the multiplication-result block scale factor being the sum of the block scale factors of the first data block and the second data block, and adds the corrective block scale factor to the scale factor consisting of the difference between the group scale factor of each data group in the first data block and the block scale factor of the first data block, gives the sum to the first scaling process, and feeds data in the data group to the first scaling process as well as gives the scale factor consisting of the difference between the group scale factor of each data group in the third data block and the block scale factor of the third data block to the second scaling process and feeds data in the data group to the second scaling process. 111. The object program generating method according to a first scale correction process for adding the corrective block scale factor to the scale factor consisting of the difference between the group scale factor of each data group in the first data block and the block scale factor of the first data block, giving the sum to the first scaling process, and feeding data in the data group to the first scaling process as well as giving the scale factor consisting of the difference between the group scale factor of each data group in the third data block and the block scale factor of the third data block to the second scaling process and feeding data in the data group to the second scaling process; or a second scale correction process for adding the corrective block scale factor to the scale factor consisting of the difference between the group scale factor of each data group in the third data block and the block scale factor of the third data block, giving the sum to the second scaling process, and feeding data in the data group to the second scaling process as well as giving the scale factor consisting of the difference between the group scale factor of each data group in the first data block and the block scale factor of the first data block to the first scaling process and feeding data in the data group to the first scaling process. Description [0001] The present invention relates to an apparatus, program, and method which translate a source program into an object program. More particularly, it relates to a compiler apparatus, compiler program, and object program generating method which make it easy to describe arithmetic operations in source programs, make it simple to write source programs, and reduce bugs, when performing block floating-point operations in software. [0002] Numeric representations in digital signal processing include fixed-point representation and floating-point representation. [0003] In the floating-point representation, each data item has an exponent part and mantissa. This has the advantage of ensuring high accuracy and wide dynamic range, but has the problem of requiring complex, large-scale hardware. On the other hand, the fixed-point representation requires only simple hardware and small-scale circuits, but has the problem of low computational accuracy. [0004] As a solution to the problem with the floating-point representation, a format called block floating-point has been proposed. This format treats a predetermined number (e.g., m) of data items as one data block, gives one block scale factor to each data block, and scales the m data items in the data block equally, thereby making effective use of a limited dynamic range and preventing deterioration in accuracy. [0005] To implement block floating-point operations in software, a source program is written in a predetermined programming language (e.g., in the C language), the source program is translated into an object program using an appropriate compiler, and the object program is executed on a computer. [0006] However, to implement block floating-point operations in software, it is necessary to organize one or more data items into a data group and organize two or more data groups into a data block, which handles a data structure that contains the group scale factors of individual data groups and the block scale factor of the data block. Thus, when writing a source program, the data structure must be defined as a structure. This means that a lot of preparation is required before describing block floating-point operations. [0007] Also, defining a structure makes it possible to use structured data as a cohesive variable for arithmetic operations, but there are certain limits, and the structured data is useful only for simple substitutions or arithmetic operations among structure variables. The simple arithmetic operations here mean arithmetic operations among the same type of structure variables, i.e., among data in the same data group or among scale factors. To implement block floating-point operations, it is necessary to perform arithmetic operations by scaling data according to scale factors. Thus, simple arithmetic operations among structure variables are not enough and a unique function must be created for each type of arithmetic operation. Suppose, for example, functions bfp_add (x [0008] This makes it cumbersome to write a source program and difficult to create a program which contain a small number of bugs. [0009] Furthermore, to perform addition across two or more data blocks at the execution level of an object program, it is necessary to align digit places among the data blocks during the addition because the data in the data blocks have been scaled. For example, when adding data from two different data blocks, data A “0.1” with a group scale factor of “2” and data B “0.11” with a group scale factor of “3,” data A is changed to “0.001” by a two-bits right shift and data B is changed to “0.00011” by a three-bits right shift before the addition. Then, the computational result is normalized again to finally obtain data “0.111” with a group scale factor of “2”. [0010] Thus, to perform addition across data blocks, the data items in each data block must be normalized, and then the data items must be normalized across the data blocks, complicating arithmetic processing. This causes such problems as increased computational load, decreased computing speed, and increase in the number of circuit element. The same is true for subtraction across two or more data blocks. [0011] Furthermore, when performing multiplication-accumulation (arithmetic operations which involve adding multiplication results to obtain their total sum; the same applies hereinafter) across two or more data blocks at the execution level of an object program, specifically, for example, when multiplying data in data blocks A and B and adding data in data block C to the multiplication results, it is necessary to go through three processes: (1) multiplication of data in data blocks A and B, (2) digit place alignment (scaling) between the multiplication results and the data in data block C, and (3) addition of data in data block C to the multiplication results. However, for scaling after the multiplication, a longer bit length must be assigned to structured variables than during the multiplication to avoid cancellation of significant digits by scaling. This not only increases data capacity required for arithmetic operations, but also involves bit length conversion, which may lower computational efficiency. [0012] The present invention has been made in view of unsolved problems with conventional techniques such as those described above. Its first object is to provide a compiler apparatus, compiler program, and object program generating method which make it easy to describe arithmetic operations in source programs, make it simple to write source programs, and reduce bugs, when performing block floating-point operations in software. Its second object is to provide a compiler apparatus, compiler program, and object program generating method which simplify arithmetic processing when performing addition or subtraction in block floating-point format using software. Its third object is to provide a compiler apparatus, compiler program, and object program generating method which decrease data capacity required for arithmetic operations and improve computational efficiency when performing multiplication-accumulation in block floating-point format using software. [0013] To achieve the above objects, claim [0014] With this configuration, the compiler apparatus handles block floating-point variables in compilation. [0015] Claim [0016] With this configuration, the compiler apparatus generate such instruction codes as to calculate an operational block scale factor based on a computing expression and on information about operand of the computing expression; and perform a shifting process based on the operational block scale factor and on block scale factors and feed data to a computing unit, in the case of block floating-point variables. [0017] Claim [0018] With this configuration, the compiler apparatus generates such instruction codes as to calculate an interim scale factor based on a computing expression and on information about operand of the computing expression; and normalize computational results and calculate block scale factors based on updated group scale factors updated as a result of the normalization and on the interim scale factor, in the case of block floating-point output variables. [0019] Claim [0020] With this configuration, the compiler apparatus handles hierarchical block floating-point variables in compilation. [0021] Claim [0022] With this configuration, the compiler apparatus generates such instruction codes as to calculate an operational block scale factor based on a computing expression and on information about operand of the computing expression; and perform a shifting process based on the operational block scale factor, block scale factors, and group scale factors and feed data to a computing unit, in the case of hierarchical block floating-point variables. [0023] Claim [0024] With this configuration, the compiler apparatus generates such instruction codes as to calculate an interim scale factor based on a computing expression and on information about operand of the computing expression; and in the case of hierarchical block floating-point output variables, group-normalize computational results, calculate final group scale factors based on the group scale factors updated as a result of the group normalization and on the interim scale factor, and calculate a block scale factor from the calculated group scale factors. [0025] Claim [0026] With this configuration, the compiler apparatus generates such instruction codes, in the case of multiplication or division, as to calculate a block scale factor of multiplication results based on block scale factors of block floating-point variables. [0027] Claim [0028] With this configuration, the compiler apparatus generates such instruction codes, in the case of multiplication or division, as to calculate a block scale factor of multiplication results based on block scale factors of block floating-point variables. [0029] Claim [0030] With this configuration, the compiler apparatus generates such instruction codes, in the case of multiplication or division, as to calculate block scale factors of computational results based on block scale factors of hierarchical block floating-point variables. [0031] Claim [0032] With this configuration, the compiler apparatus generates such instruction codes, in the case of addition or subtraction, as to select a common block scale factor based on comparison of block scale factors of block floating-point variables; scale data in data blocks based on the common scale factor; and perform addition or subtraction on the scaled data. [0033] Claim [0034] With this configuration, the compiler apparatus generates such instruction codes, in the case of addition or subtraction, as to select a common block scale factor based on comparison between a block scale factor of a block floating-point variable and a virtual block scale factor of a fixed-point variable given by a constant; scale data in data blocks based on the common scale factor; and perform addition or subtraction on the scaled data. [0035] Claim [0036] With this configuration, the compiler apparatus generates such instruction codes, in the case of addition or subtraction, as to select a common block scale factor based on comparison of block scale factors of hierarchical block floating-point variables; scale data in data groups based on differences between the common scale factor and group scale factors of the respective data groups; and perform addition or subtraction on the scaled data. [0037] Claim [0038] With this configuration, the compiler apparatus generates such instruction codes, in the case of addition or subtraction, as to select a common block scale factor based on comparison of block scale factors of block floating-point variables; scale data in data blocks based on the common scale factor; and perform addition or subtraction on the scaled data. [0039] Claim [0040] With this configuration, the compiler apparatus generates such instruction codes, in the case of addition or subtraction, as to: select a common block scale factor based on comparison of block scale factors of block floating-point variables; scale data in data blocks based on the common scale factor; and perform addition or subtraction on the scaled data. [0041] Claim [0042] With this configuration, the compiler apparatus generates such instruction codes, in the case of addition or subtraction, as to select a common block scale factor based on comparison of block scale factors of hierarchical block floating-point variables; scale data in data groups based on differences between the common scale factor and group scale factors of the respective data groups; and perform addition or subtraction on the scaled data. [0043] Claim [0044] With this configuration, the compiler apparatus performs arithmetic operations on block floating variables to be subjected to multiplication out of multiplication-accumulation, accumulates multiplication results to complete multiplication-accumulation, produces the computational result as a computational-result data block, and calculates a computational-result block scale factor based on block scale factors. [0045] Claim [0046] With this configuration, the compiler apparatus performs arithmetic operations on block floating variables and fixed-point variables to be subjected to multiplication out of multiplication-accumulation, accumulates multiplication results to complete multiplication-accumulation, produces the computational result as a computational-result data block, and calculates a computational-result block scale factor based on block scale factors. [0047] Claim [0048] With this configuration, the compiler apparatus scales data of hierarchical block floating variables to be subjected to multiplication out of multiplication-accumulation using a scale factor consisting of a difference between group scale factor and block scale factor, performs arithmetic operations on the scaled data, accumulates multiplication results to complete multiplication-accumulation, produces the computational result as a computational-result data block, and calculates a computational-result block scale factor based on block scale factors. [0049] Claim [0050] With this configuration, given a source program containing computing expressions written using block floating variables, the computing expression detecting means detects the computing expressions in the source program, the computing expression expanding means expands the detected computing expressions into predetermined instruction codes, and the instruction code conversion means converts the produced instruction codes into an object program. [0051] Here, the sentence “if input operand contain block floating type data” means a situation in which there are two or more input operand to be operated upon and at least one of them is block floating type data. This also applies to the compiler program according to claim [0052] Also, the sentence “if the input operand is block floating type data” means a situation in which there is one input operand to be operated upon (i.e., arithmetic operations are to be performed within the data block) and the input operand is of the Block Floating type. This also applies to the compiler program according to claim [0053] Also, the interim block scale factor corresponds to the common scale factor according to claim [0054] Also, the operational block scale factor corresponds to the common scale factor according to claim [0055] Claim [0056] With this configuration, the computing expression detecting means detects operators in the expressions, the data type of input operand for the operators, and the data type of output operand for the operators as detection results. Then, the computing expression expanding means operates based on the operators and data type information about input operand for the operators in the detection results produced by the computing expression detecting means, generating instruction codes which specify a process of calculating an operational block scale factor from the block scale factors of input data blocks if input operand contain block floating type data, and generating instruction codes which specify a process of feeding block floating type data into a computing unit for performing a shifting process based on either or both of the operational block scale factor and/or the block scale factor of an input operand if the input operand is block floating type data. [0057] Claim [0058] With this configuration, the computing expression expanding means expands any block floating type data fed to a computing unit into instruction codes which specify a computational process based on the operators. If output operand are block floating type data, the computing expression expanding means produces instruction codes which specify a data output process for calculating an interim block scale factor from the block scale factors of input data blocks, normalizing computational results which correspond to the output operand, and calculating block scale factors from the interim block scale factor. [0059] Claim [0060] With this configuration, given a source program containing computing expressions written using block floating variables, the computing expression detecting means detects the computing expressions in the source program, the computing expression expanding means expands the detected computing expressions into predetermined instruction codes, and the instruction code conversion means converts the produced instruction codes into an object program. [0061] Here, the sentence “if input operand contain block floating type data” means a situation in which there are two or more input operand to be operated upon and at least one of them is block floating type data. This also applies to the compiler program according to claim [0062] Also, the sentence “if the input operand is block floating type data” means a situation in which there is one input operand to be operated upon (i.e., arithmetic operations are to be performed within the data block) and the input operand is of the Block Floating type. This also applies to the compiler program according to claim [0063] Also, the interim block scale factor corresponds to the common scale factor according to claim [0064] Also, the operational block scale factor corresponds to the common scale factor according to claim [0065] Claim [0066] With this configuration, the computing expression detecting means detects operators in the expressions, the data type of input operand for the operators, and the data type of output operand for the operators as detection results. Then, the computing expression expanding means operates based on the operators and data type information about input operand for the operators in the detection results produced by the computing expression detecting means, generating instruction codes which specify a process of calculating an operational block scale factor from the block scale factors of input data blocks if input operand contain block floating type data, and generating instruction codes which specify a process of feeding block floating type data into a computing unit for performing a shifting process based on either or both of the operational block scale factor and/or the block scale factor of an input operand as well as on the group scale factor if the input operand is block floating type data. [0067] Claim [0068] With this configuration, the computing expression expanding means expands any block floating type data fed to a computing unit into instruction codes which specify a computational process based on the operators. If output operand are block floating type data, the computing expression expanding means produces instruction codes which specify a data output process for calculating an interim block scale factor from the block scale factors of input data blocks, group-normalizing computational results which correspond to the output operand, calculating final group scale factors based on either or both of updated group scale factors calculated as a result of the group normalization and/or the interim block scale factor, and calculating a block scale factor from the calculated group scale factors if the output operand is block floating type data. [0069] Claim [0070] With this configuration, given a source program containing computing expressions written using block floating variables, the computing expression detecting means detects the computing expressions for multiplication or division in the source program, the computing expression expanding means expands that part of the detected computing expressions which involves multiplication or division into instruction codes which specify multiplication or division for data blocks corresponding to the block floating variables to be subjected to multiplication or division, and instruction code embedding means embeds the produced instruction codes in the object program. [0071] Thus, when the object program is executed, in relation to that part of the computing expressions which involves multiplication or division, multiplication or division is performed on data in the data blocks. Then, the computational result is produced as a computational-result data block, and the block scale factor of the computational-result data block is calculated based on the block scale factors of the data blocks. [0072] Examples of the scale factor here include a shift amount used to bit-shift data. In this case, scaling is performed by bit-shifting data by a shift amount equivalent to a given scale factor. This also applies to the compiler apparatus according to claims [0073] Also, the object program may be an executable program containing instruction codes which can be executed directly by a processing unit such as a CPU or DSP (Digital Signal Processor) or an intermediate file such as a text file which represents a program written in a lower-level language than a language used for the source program. This also applies to the compiler apparatus according to claims [0074] Also, the data blocks corresponding to the block floating variables to be subjected to multiplication or division may be two or more different data blocks or a single data block. That is, multiplication or division may be performed either across different data blocks or within the same data block. This also applies to the compiler apparatus according to claim [0075] Claim [0076] With this configuration, given a source program containing computing expressions written using block floating variables and fixed-point variables, the computing expression detecting means detects the computing expressions for multiplication or division in the source program, the computing expression expanding means expands that part of the detected computing expressions which involves multiplication or division into instruction codes which specify multiplication or division for data blocks corresponding to the block floating variables and fixed-point variables to be subjected to multiplication or division, and instruction code embedding means embeds the produced instruction codes in the object program. [0077] Thus, when the object program is executed, in relation to that part of the computing expressions which involves multiplication or division, multiplication or division is performed on data in the data blocks which correspond to the block floating variables and data in the data blocks which correspond to the fixed-point variables. Then, the computational result is produced as a computational-result data block, and the block scale factor of the computational-result data block is calculated based on the block scale factors of the data blocks which correspond to the block floating variables. [0078] Claim [0079] With this configuration, given a source program containing computing expressions written using block floating variables, the computing expression detecting means detects the computing expressions for multiplication or division in the source program, the computing expression expanding means expands that part of the detected computing expressions which involves multiplication or division into instruction codes which specify multiplication or division for data blocks corresponding to the block floating variables to be subjected to multiplication or division, and instruction code embedding means embeds the produced instruction codes in the object program. [0080] Thus, when the object program is executed, in relation to that part of the computing expressions which involves multiplication or division, multiplication or division is performed on each data in the data blocks. Then, the computational result is produced as a computational-result data block, and the block scale factor of the computational-result data block is calculated based on the block scale factors of the data blocks. [0081] Claim [0082] With this configuration, given a source program containing computing expressions written using block floating variables, the computing expression detecting means detects the computing expressions for addition or subtraction in the source program, the computing expression expanding means expands that part of the detected computing expressions which involves addition or subtraction into instruction codes which specify addition or subtraction for data blocks corresponding to the block floating variables to be subjected to addition or subtraction, and instruction code embedding means embeds the produced instruction codes in the object program. [0083] Thus, when the object program is executed, the block scale factor of the data block containing data with the maximum absolute value is selected as a common block scale factor in relation to that part of the computing expressions which involves addition or subtraction. Then, data in the data blocks is scaled based on the common block scale factor and addition or subtraction is performed on the scaled data in the data blocks. [0084] Also, the data blocks corresponding to the block floating variables to be subjected to addition or subtraction may be two or more different data blocks or a single data block. That is, addition or subtraction may be performed either across different data blocks or within the same data block. This also applies to the compiler apparatus according to claim [0085] Claim [0086] With this configuration, given a source program containing computing expressions written using block floating variables and fixed-point variables, the computing expression detecting means detects the computing expressions for addition or subtraction in the source program, the computing expression expanding means expands that part of the detected computing expressions which involves addition or subtraction into instruction codes which specify addition or subtraction for data blocks corresponding to the block floating variables and fixed-point variables to be subjected to addition or subtraction, and instruction code embedding means embeds the produced instruction codes in the object program. [0087] Thus, when the object program is executed, in relation to that part of the computing expressions which involves addition or subtraction, a virtual block scale factor given as a constant is calculated for fixed-point data blocks, the block scale factor of the data block containing data with the maximum absolute value as a common block scale factor is selected from among the block scale factors of the data blocks which correspond to the block floating variables and the virtual block scale factor, data in the data blocks are scaled based on the common block scale factor. Then, addition or subtraction is performed on the scaled data in the data blocks and data in the data blocks which correspond to the fixed-point variables. [0088] Claim [0089] With this configuration, given a source program containing computing expressions written using block floating variables, the computing expression detecting means detects the computing expressions for addition or subtraction in the source program, the computing expression expanding means expands that part of the detected computing expressions which involves addition or subtraction into instruction codes which specify addition or subtraction for data blocks corresponding to the block floating variables to be subjected to addition or subtraction, and instruction code embedding means embeds the produced instruction codes in the object program. [0090] Thus, when the object program is executed, the block scale factor of the data block containing data with the maximum absolute value is selected as a common block scale factor in relation to that part of the computing expressions which involves addition or subtraction. Then, data in the data groups in each data block are scaled based on scale factors consisting of differences between the group scale factors of the respective data groups and the common block scale factor, and addition or subtraction is performed on the scaled data in the data blocks. [0091] Claim [0092] With this configuration, given a source program containing computing expressions written using block floating variables, the computing expression detecting means detects the computing expressions for multiplication-accumulation in the given source program, the computing expression expanding means expands that part of the detected computing expressions which involves multiplication-accumulation into instruction codes which specify multiplication-accumulation for a first data block and second data block which correspond to two block floating variables to be subjected to multiplication and a third data block which corresponds to a block floating variable to be subjected to addition or subtraction, and instruction code embedding means embeds the produced instruction codes in the object program. [0093] Thus, when the object program is executed, in relation to that part of the computing expressions which involves multiplication-accumulation, a corrective block scale factor is calculated as a difference between a multiplication-result block scale factor and the block scale factor of the third data block and scale correction processes for digit place alignment among the data blocks are performed to align digit places before performing addition or subtraction in a multiplication process. [0094] When a scale correction process is started, the process gives the corrective block scale factor to the first scaling process and feeds data from the first data block to the first scaling process. The process scales the data in the first data block based on the corrective block scale factor. Then, the multiplication process multiplies the second data block by the first data block from the first scaling process and feeds the result to the computational process as a multiplication-result data block. Thus, the data in the multiplication-result data block are corrected by means of scaling with respect to the first data block before multiplication so that their digit places will be aligned with those of the data in the third data block. [0095] On the other hand, since no scale factor is given to the second scaling process and data from the third data block is fed to the second scaling process, the data in the third data block are fed to the computational process without scaling. In the final addition or subtraction, the computational process performs addition or subtraction using the multiplication-result data block from the multiplication process and the third data block from the second scaling process, with the digit places aligned. [0096] Claim [0097] With this configuration, when the object program is executed, in relation to multiplication-accumulation out of the computing expressions, a corrective block scale factor is calculated as a difference between a multiplication-result block scale factor and the block scale factor of the third data block and either the first scale correction process or second scale correction process is performed. [0098] When the first scale correction process is started, the process gives the corrective block scale factor to the first scaling process and feeds data from the first data block to the first scaling process. The process scales the data in the first data block based on the corrective block scale factor by the first scaling process. Then, the multiplication process multiplies the second data block by the first data block from the first scaling process and feeds the result to the computational process as a multiplication-result data block. Thus, the data in the multiplication-result data block are corrected by means of scaling with respect to the first data block before multiplication so that their digit places will be aligned with those of the data in the third data block. [0099] On the other hand, since no scale factor is given to the second scaling process and data from the third data block is fed to the second scaling process, the data in the third data block are fed to the computational process without scaling. In the final addition or subtraction, the computational process performs addition or subtraction using the multiplication-result data block from the multiplication process and the third data block from the second scaling process, with the digit places aligned. [0100] When the second scale correction process is started, the process gives the corrective block scale factor to the second scaling process and feeds data from the third data block to the second scaling process. The second scaling process scales the data in the third data block based on the corrective block scale factor and feeds the result to the computational process. Thus, the data in the third data block are corrected by means of scaling so that their digit places will be aligned with those of the data in the multiplication-result data block. [0101] On the other hand, since no scale factor is given to the first scaling process and data from the first data block is fed to the first scaling process, the data in the first data block are fed to the multiplication process without scaling. Then, the multiplication process multiplies the second data block by the first data block from the first scaling process and feeds the result to the computational process as a multiplication-result data block. In the final addition or subtraction, the computational process performs addition or subtraction using the multiplication-result data block from the multiplication process and the third data block from the second scaling process, with the digit places aligned. [0102] Claim [0103] With this configuration, the compiler apparatus selectively performs either the first scale correction process or the second scale correction process based on magnitude relation between the multiplication-result block scale factor and the block scale factor of the third data block. [0104] Claim [0105] With this configuration, when the block scale factor of the third data block is larger than the multiplication-result block scale factor, the compiler apparatus performs the first scale correction process. On the other hand, when the multiplication-result block scale factor is larger than the block scale factor of the third data block, the compiler apparatus performs the second scale correction process. That is, the first scaling process or second scaling process shifts the data in the smaller of the block scale factors—the block scale factor of the third data block and the multiplication-result block scale factor—to lower-order bits by a bit quantity equivalent to the corrective block scale factor (hereinafter referred to simply as right-shifting). [0106] Claim [0107] With this configuration, when the block scale factor of the third data block is larger than the multiplication-result block scale factor, the compiler apparatus performs the second scale correction process. On the other hand, when the multiplication-result block scale factor is larger than the block scale factor of the third data block, the compiler apparatus performs the first scale correction process. That is, the first scaling process or second scaling process shifts the data in the smaller of the block scale factors—the block scale factor of the third data block and the multiplication-result block scale factor—to higher-order bits by a bit quantity equivalent to the corrective block scale factor (hereinafter referred to simply as left-shifting). [0108] Claim [0109] With this configuration, given a source program containing computing expressions written using block floating variables, the computing expression detecting means detects the computing expressions for multiplication-accumulation in the given source program, the computing expression expanding means expands that part of the detected computing expressions which involves multiplication-accumulation into instruction codes which specify multiplication-accumulation for a first data block and second data block which correspond to two block floating variables to be subjected to multiplication and a third data block which corresponds to a block floating variable to be subjected to addition or subtraction, and instruction code embedding means embeds the produced instruction codes in the object program. [0110] Thus, when the object program is executed, in relation to that part of the computing expressions which involves multiplication-accumulation, a corrective block scale factor is calculated as a difference between a multiplication-result block scale factor and the block scale factor of the third data block and scale correction processes for digit place alignment among the data blocks are performed to align digit places before performing addition or subtraction in a multiplication process. [0111] When a scale correction process is started, the process adds the corrective block scale factor to the scale factor consisting of the difference between the group scale factor of each data group in the first data block and the block scale factor of the first data block, gives the sum to the first scaling process, and feeds data in the data group to the first scaling process. Then, the first scaling process scales data in the first data block based on the group scale factors, block scale factor, and corrective block scale factor. Then, the multiplication process multiplies the second data block by the first data block from the first scaling process and feeds the result to the computational process as a multiplication-result data block. Thus, the data in the multiplication-result data block are corrected by means of scaling with respect to the first data block before multiplication so that their digit places will be aligned with those of the data in the third data block. [0112] On the other hand, the process feeds the scale factors consisting of the differences between the group scale factors of data groups in the third data block and the block scale factor of the third data block to the second scaling process together with data in the data groups. Then, the second scaling process scales the data in the third data block based on the group scale factors and block scale factor and feeds the result to the computational process. In the final addition or subtraction, the computational process performs addition or subtraction using the multiplication-result data block from the multiplication process and the third data block from the second scaling process, with the digit places aligned. [0113] Claim [0114] With this configuration, when the object program is executed, in relation to multiplication-accumulation out of the computing expressions, a corrective block scale factor is calculated as a difference between a multiplication-result block scale factor and the block scale factor of the third data block and either the first scale correction process or second scale correction process is performed. [0115] When the first scale correction process is started, the process adds the corrective block scale factor to the scale factor consisting of the difference between the group scale factor of each data group in the first data block and the block scale factor of the first data block, gives the sum to the first scaling process, and feeds data in the data group to the first scaling process. Then, the first scaling process scales data in the first data block based on the group scale factors, block scale factor, and corrective block scale factor. Then, the multiplication process multiplies the second data block by the first data block from the first scaling process and feeds the result to the computational process as a multiplication-result data block. Thus, the data in the multiplication-result data block are corrected by means of scaling with respect to the first data block before multiplication so that their digit places will be aligned with those of the data in the third data block. [0116] On the other hand, the second scale correction gives the scale factor consisting of the difference between the group scale factor of each data group in the third data block and the block scale factor of the third data block to the second scaling process and feeds data in the data group to the second scaling process. Then, the second scaling process scales the data in the third data block based on the group scale factors and block scale factor and feeds the result to the computational process. In the final addition or subtraction, the computational process performs addition or subtraction using the multiplication-result data block from the multiplication process and the third data block from the second scaling process, with the digit places aligned. [0117] When the second scale correction process is started, the process adds the corrective block scale factor to the scale factor consisting of the difference between the group scale factor of each data group in the third data block and the block scale factor of the third data block, gives the sum to the second scaling process, and feeds data in the data group to the second scaling process. Then, the second scaling process scales the data in the third data block based on the group scale factors, block scale factor, and corrective block scale factor and feeds the result to the computational process. Thus, the data in the third data block are corrected by means of scaling so that their digit places will be aligned with those of the data in the multiplication-result data block. [0118] On the other hand, the process feeds the scale factors consisting of the differences between the group scale factors of data groups in the first data block and the block scale factor of the first data block to the first scaling process together with data in the data groups. Then, the first scaling process scales the data in the first data block based on the group scale factors and block scale factor and feeds the result to the multiplication process. Then, the multiplication process multiplies the second data block by the first data block from the first scaling process and feeds the result to the computational process as a multiplication-result data block. In the final addition or subtraction, the computational process performs addition or subtraction using the multiplication-result data block from the multiplication process and the third data block from the second scaling process, with the digit places aligned. [0119] On the other hand, to achieve the above objects, claim [0120] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0121] Claim [0122] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0123] Claim [0124] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0125] Claim [0126] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0127] Claim [0128] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0129] Claim [0130] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0131] Claim [0132] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0133] Claim [0134] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0135] Claim [0136] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0137] Claim [0138] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0139] Claim [0140] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0141] Claim [0142] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0143] Claim [0144] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0145] Claim [0146] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0147] Claim [0148] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0149] Claim [0150] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0151] Claim [0152] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0153] Claim [0154] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0155] Claim [0156] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0157] Claim [0158] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0159] Claim [0160] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0161] Claim [0162] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0163] Claim [0164] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0165] Claim [0166] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0167] Claim [0168] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0169] Claim [0170] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0171] Claim [0172] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0173] Claim [0174] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0175] Claim [0176] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0177] Claim [0178] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0179] Claim [0180] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0181] Claim [0182] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0183] Claim [0184] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0185] Claim [0186] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0187] Claim [0188] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0189] Claim [0190] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0191] Claim [0192] With this configuration, when the program is read and executed by the computer, it performs operation equivalent to that of the compiler apparatus according to claim [0193] On the other hand, to achieve the above objects, claim [0194] Claim [0195] Claim [0196] Claim [0197] Claim [0198] Claim [0199] Claim [0200] Claim [0201] Claim [0202] Claim [0203] Claim [0204] Claim [0205] Claim [0206] Claim [0207] Claim [0208] Claim [0209] Claim [0210] Claim [0211] Claim [0212] Claim [0213] Claim [0214] Claim [0215] Claim [0216] Claim [0217] Claim [0218] Claim [0219] Claim [0220] Claim [0221] Claim [0222] Claim [0223] Claim [0224] Claim [0225] Claim [0226] Claim [0227] Claim [0228] Claim [0229] Claim [0230] Compiler apparatus, compiler programs, and object program generating methods for use to achieve the above objects have been described above, but they are not restrictive and first to third compiler apparatus described below may also be proposed. [0231] The first compiler apparatus is a compiler apparatus which translates a given source program into an object program when the source program contains computing expressions which are written using block floating variables of a Block Floating data type, characterized in that: [0232] each of the block floating variables constitutes a data block containing one or more data groups, each of which in turn contains one or more data items and one group scale factor, the data block being a variable which represents a data structure containing a block scale factor of the data block; [0233] the compiler apparatus comprises computing expression detecting means for detecting the computing expressions in the source program, computing expression expanding means for expanding the computing expressions detected by the computing expression detecting means into predetermined instruction codes, and instruction code conversion means for converting the instruction codes produced by the computing expression expanding means into the object program; [0234] the computing expression detecting means detects operators in the expressions, the data type of input operand for the operators, and the data type of output operand for the operators as detection results; and [0235] the computing expression expanding means operates based on the operators and data type information about input operand for the operators in the detection results produced by the computing expression detecting means, [0236] generating instruction codes which specify a process of calculating either or both of an operational block scale factor and/or interim block scale factor from the block scale factors of input data blocks if input operand contain block floating type data, [0237] generating instruction codes which specify a process of feeding block floating type data into a computing unit for performing a shifting process based on either or both of the operational block scale factor and/or the block scale factor of an input operand as well as on the group scale factor if the input operand is block floating type data, [0238] expanding any block floating type data fed to a computing unit into instruction codes which specify a computational process based on the operators, and [0239] generating instruction codes which specify a data output process for group-normalizing computational results which correspond to an output operand, calculating final group scale factors based on either or both of updated group scale factors calculated as a result of the group normalization and/or the interim block scale factor, and calculating a block scale factor from the calculated group scale factors if the output operand is block floating type data. [0240] Here, the sentence “if input operand contain block floating type data” means a situation in which there are two or more input operand to be operated upon and at least one of them is block floating type data. [0241] Also, the sentence “if the input operand is block floating type data” means a situation in which there is one input operand to be operated upon (i.e., arithmetic operations are to be performed within the data block) and the input operand is of the Block Floating type. [0242] Also, the interim block scale factor corresponds to the common scale factor according to claim [0243] Also, the operational block scale factor corresponds to the common scale factor according to claim [0244] The second compiler apparatus is the first compiler apparatus, characterized in that: [0245] the operators in the computing expressions indicate addition or subtraction; [0246] the instruction codes which specify a process of calculating the operational block scale factor are not generated if the input operand are of the Block Floating type and are from the same data block; and [0247] the process of feeding data into the computing unit involves a shifting process which is based on the difference between block scale factor and group scale factor. [0248] The third compiler apparatus is the first compiler apparatus, characterized in that: [0249] the operators in the computing expressions indicate addition or subtraction; [0250] the computing expression expanding means produces instruction codes which specify a process of calculating the block scale factor of the data block containing data with the maximum absolute value as the operational block scale factor if the input operand are of the Block Floating type and are from a plurality of different data blocks; and [0251] the process of feeding data into the computing unit involves a shifting process which is based on the difference between the operational block scale factor and group scale factor. [0252]FIG. 1 is a block diagram showing a configuration of a computer; [0253]FIG. 2 is a diagram showing a data structure in block floating-point format; [0254]FIG. 3 is a flowchart showing a block floating compiling process; [0255]FIG. 4 is a flowchart showing an example of the process specified by the instruction codes produced in Step S [0256]FIG. 5 is a flowchart showing an example of the process specified by the instruction codes produced in Step S [0257]FIG. 6 shows a source program which describes a multiplication formula in block floating-point format; [0258]FIG. 7 shows an object program obtained by compiling the source program shown in FIG. 6; [0259]FIG. 8 shows a source program which describes a multiplication formula in block floating-point format; [0260]FIG. 9 shows an object program obtained by compiling the source program shown in FIG. 8; [0261]FIG. 10 shows a source program which describes a multiply-accumulate formula in block floating-point format; [0262]FIG. 11 shows an object program obtained by compiling the source program shown in FIG. 10; [0263]FIG. 12 shows a source program which describes a multiply-accumulate formula in block floating-point format; [0264]FIG. 13 shows an object program obtained by compiling the source program shown in FIG. 12; and [0265]FIG. 14 is a block diagram showing a configuration of a DSP. [0266] A preferred embodiment of the present invention will be described with reference to the drawings. FIGS. [0267] In this embodiment, a compiler apparatus, compiler program, and object program generating method according to the present invention are applied to a case in which a source program containing computing expressions written in block floating-point format is translated on a computer [0268] First, configuration of the computer [0269] As shown in FIG. 1, the computer [0270] I/F [0271] The storage device [0272] Block floating variables are characterized in that they specify data structure in block floating-point format without indicating the group scale factors and block scale factor explicitly. Suppose, for example, the number of data groups in a data block is “3” and the number of data items in each data group is “2,” a block floating variable can be defined in a source program using Equation (3) below. In this case, the data block contains three group scale factors and one block scale factor, but there is no need to indicate them explicitly in the source program. This makes it simple to write the source program. bfloat A[3][2]; (3) [0273] The CPU [0274] The block floating compiling process is the process of compiling a given source program when the source program contains computing expressions written using block floating variables. It is performed by the CPU [0275] In Step S [0276] In Step S [0277] Then, the CPU [0278] Then, the CPU [0279] On the other hand, if it is found in Step S [0280] On the other hand, if it is found in Step S [0281] Next, the process specified by the instruction codes produced in Step S [0282] The process specified by the instruction codes constitutes part of the object program and results from expanding that part of the computing expressions in block floating-point format which involves addition. It is performed by a DSP, beginning with Step S [0283] In Step S [0284] In Step S [0285] In Step S [0286] In Step S [0287] In Step S [0288] Incidentally, the normalization in Step S [0289] Next, the process specified by the instruction codes produced in Step S [0290] The process specified by the instruction codes constitutes part of the object program and results from expanding that part of the computing expressions in block floating-point format which involves multiplication-accumulation. It is performed by the DSP, beginning with Step S [0291] In Step S [0292] In Step S [0293] In Step S [0294] In Step S [0295] In Step S [0296] In Step S [0297] In Step S [0298] On the other hand, if it is found in Step S [0299] Next, operation of the above embodiment will be described. [0300] First, description will be given of procedures for compiling a source program which describes the addition formula given by Equation (4). [0301] On the computer [0302] Thus, when the object program is executed, the CPU [0303] Next, description will be given of procedures for compiling a source program which describes the multiply-accumulate formula given by Equation (6). [0304] On the computer [0305] Thus, when the object program is executed, the CPU [0306] The first scale correction process is performed when the data block C contains data with a larger absolute value. In the first scale correction process, the CPU [0307] Also, the CPU [0308] On the other hand, the second scale correction process is performed when the data block C does not contain data with a larger absolute value. In the second scale correction process, the CPU [0309] Also, the CPU [0310] In this way, when this embodiment is fed a source program containing computing expressions written using block floating variables, it detects computing expressions for addition in the source program, expands that part of the detected computing expressions which involves addition into instruction codes which specify addition for data blocks corresponding to a plurality of block floating variables to be subjected to addition, embeds the instruction codes in the object program to be generated, and outputs the object program. [0311] This makes it possible to implement addition in block floating-point format by simply implementing addition formulas using block floating variables without any special programming operation such as defining a structure or creating a special function in the source program. This makes it easier to describe arithmetic operations in source programs and simpler to write the source programs. [0312] Furthermore, according to this embodiment, the process specified by the instruction codes produced as a result of compiling an addition formula involves selecting the block scale factor of the data block containing data with the maximum absolute value from among the block scale factors of plural data blocks as a common block scale factor, scaling data in the data groups in each of the data blocks based on scale factors consisting of differences between the group scale factors of the respective data groups and the common block scale factor, and performing addition on the scaled data in the data blocks. [0313] This makes it possible to normalize data within each data block and across data blocks at the same time by performing scaling once per data item in an execution process of an object program, and thus relatively simplify arithmetic processing. [0314] Furthermore, when this embodiment is fed a source program containing computing expressions written using block floating variables, it detects computing expressions for multiplication-accumulation in the source program, expands that part of the detected computing expressions which involves multiplication-accumulation into instruction codes which specify multiplication-accumulation for a first data block and second data block which correspond to two block floating variables to be subjected to multiplication and a third data block which corresponds to a block floating variable to be subjected to addition, and embeds the instruction codes in the object program to be generated, and outputs the object program. [0315] This makes it possible to implement multiplication-accumulation in block floating-point format by simply describing multiply-accumulate formulas using block floating variables without any special programming operation such as defining a structure or creating a special function in the source program. This makes it easier to describe arithmetic operations in source programs and simpler to write the source programs. [0316] Furthermore, according to this embodiment, the process specified by the instruction codes produced as a result of compiling a multiply-accumulate formula involves calculating a corrective block scale factor, calculating a differential scale factor consisting of the difference between the group scale factor of each data group in the first data block and the block scale factor of the first data block before multiplication when the block scale factor of the third data block is larger than the multiplication-result block scale factor, and right-shifting each data item in the data group based on the differential scale factor plus the corrective block scale factor. [0317] Thus, in an execution process of an object program, scaling is performed before multiplication. This eliminates the need to assign an extra bit length to variables to avoid cancellation of significant digits, and thus relatively reduces data capacity required for arithmetic operations. Also, this relatively decreases the possibility of lowering computational efficiency because no bit length conversion is involved. [0318] In the above embodiment, Step S [0319] In the above embodiment, Step S [0320] Also, in the above embodiment, Steps S [0321] Also, in the above embodiment, Steps S [0322] Incidentally, as shown in FIG. 2, the above embodiment has adopted a data structure in block floating-point format according to which k data items are organized into a data group and two or more data groups are organized into a data block, which contains the group scale factors of individual data groups and the block scale factor of the data block, but this is not restrictive and it is also possible to adopt a data structure which does not contain any data group or group scale factor. According to such a data structure, a data block is composed of two or more data items and contains a block scale factor. Such a data structure operates in the same manner and offers the same effects as the above embodiment. [0323] In that case, Step S [0324] Also, Step S [0325] Also, Steps S [0326] Also, Steps S [0327] Besides, in the above embodiment, the process shown in FIG. 4 has been cited as an example of the process which constitutes part of the object program and results from expanding that part of the computing expressions in block floating-point format which involves addition. In this case, since the scaling and addition of the data blocks A, B, and C are separate from each other, the results of scaling must be saved once in memory or the like. The following processes may be employed alternatively. [0328] A first process involves performing a sequence of processes on all the data groups in the data blocks A, B, and C, where the sequence of processes consists of scaling of data within each data group in the data block A, scaling of data within each data group in the data block B, scaling of data within each data group in the data block C, addition of data in these data groups, and normalization of the results of addition. [0329] A second process involves performing a sequence of processes on all the data groups in the data blocks A, B, and C, where the sequence of processes consists of scaling of data within each data group in the data block A, scaling of data within each data group in the data block B, addition of data in these data groups, scaling of data within each data group in the data block C, addition of the scaled data in the data group in the data block C to the addition results of the data groups in the data blocks A and B, and normalization of the results of addition. [0330] This makes it possible to perform arithmetic operations without storing data in memory or the like, and thereby improve computational efficiency. [0331] Besides, although what is compiled in the above embodiment is an addition formula and multiply-accumulate formula in block floating-point format, this is not restrictive and it is also possible to compile a multiplication formula in block floating-point format. For example, a source program such as the one shown in FIG. 6 may be compiled into an object program such as the one shown in FIG. 7. [0332] The source program in FIG. 6 implements a multiplication formula given by Equation (7) below and consists of processes in Steps S [0333] Steps S [0334] Steps S [0335] The object program in FIG. 7 results from compiling the source program shown in FIG. 6 and consists of processes in Steps S [0336] Steps S [0337] Steps S [0338] Step S [0339] Step S [0340] In this case, Step S [0341] Besides, although in the example described above, all the variables a, b, c, and r are block floating variables, this is not restrictive and it is also possible to implement arithmetic operations for a mixture of block floating variables and fixed-point variables. For example, a source program such as the one shown in FIG. 8 may be compiled into an object program such as the one shown in FIG. 9. [0342] The source program in FIG. 8 implements a multiplication formula given by Equation (7) above and consists of processes in Steps S [0343] Steps S [0344] Steps S [0345] The object program in FIG. 9 results from compiling the source program shown in FIG. 8 and consists of processes in Steps S [0346] Steps S [0347] Steps S [0348] Step S [0349] Step S [0350] Step S [0351] Step S [0352] Step S [0353] In this case, Step S [0354] Besides, what is compiled in the above embodiment is an addition formula and multiply-accumulate formula in block floating-point format. Regarding compilation of a multiply-accumulate formula, more specifically, it is also possible to compile a source program such as the one shown in FIG. 10 into an object program such as the one shown in FIG. 11. [0355] The source program in FIG. 10 implements a multiply-accumulate formula given by Equation (8) below and consists of processes in Steps S [0356] Step S [0357] The object program in FIG. 11 results from compiling the source program shown in FIG. 10 and consists of processes in Steps S [0358] In Step S [0359] In Step S [0360] In Step S [0361] In Step S [0362] In Step S [0363] In Step S [0364] On the other hand, if it is found in Step S [0365] On the other hand, if it is found in Step S [0366] Besides, although in the example described above, all the variables a, b, and r are block floating variables, this is not restrictive and it is also possible to implement arithmetic operations for a mixture of block floating variables and fixed-point variables. For example, a source program such as the one shown in FIG. 12 may be compiled into an object program such as the one shown in FIG. 13. [0367] The source program in FIG. 12 implements a multiply-accumulate formula given by Equation (9) below and consists of processes in Steps S [0368] Step S [0369] The object program in FIG. 13 results from compiling the source program shown in FIG. 12 and consists of processes in Steps S [0370] In Step S [0371] In Step S [0372] In Step S [0373] In Step S [0374] In Step S [0375] In Step S [0376] On the other hand, if it is found in Step S [0377] On the other hand, if it is found in Step S [0378] Besides, although what is compiled in the above embodiment is a source program which describes an addition formula using block floating variables, this is not restrictive and it is also possible to compile a source program which describes an addition formula using block floating variables and a fixed-point variable as with the above example of multiplication which uses block floating variables and a fixed-point variable (FIGS. 8 and 9). [0379] In this case, Step S [0380] Besides, although in the above embodiment, a source program which describes an addition formula using block floating variables is compiled to implement addition in block floating-point format, this is not restrictive and it is also possible to compile a source program which describes a subtraction formula using block floating variables in the same manner as in the above embodiment to implement subtraction in block floating-point format. [0381] Also, although in the above embodiment, a source program which describes a multiplication formula using block floating variables is compiled to implement multiplication (multiplication out of multiplication-accumulation) in block floating-point format, this is not restrictive and it is also possible to compile a source program which describes a division formula using block floating variables in the same manner as in the above embodiment to implement division in block floating-point format. [0382] Also, although in the above embodiment, each block floating variable is defined by specifying a variable name, the number of data groups, and the number of data items in each data group as shown in Equation (3), this is not restrictive and it is possible to define block floating variables by specifying only variable names without specifying the number of data groups or the number of data items in each data group if the number of data groups or the number of data items are defined commonly or in a fixed manner. This will make it simpler to write source programs. [0383] Also, although in the above embodiment, the object programs generated are executable by the computer [0384] Also, although in the above embodiment, digit places are aligned by right-shifting each data item in the data block with a smaller block scale factor out of two data blocks to be subjected to addition, this is not restrictive and it is also possible to align digit places by left-shifting each data item in the data block with a larger block scale factor out of two data blocks to be subjected to addition. [0385] In this case, Steps S [0386] Also, although in the above embodiment, the control program prestored in the ROM [0387] The storage medium here maybe any storage medium, provided it is computer-readable, regardless of what reading method it uses: electronic, magnetic, or optical. It may be a semiconductor storage medium such as RAM or ROM; magnetic storage medium such as an FD or HD; optical storage medium such as a CD, CDV, LD, or DVD; or magneto-optical storage medium such as an MO. [0388] Also, although in the above embodiment, a compiler apparatus, compiler program, and object program generating method according to the present invention are applied to a case in which a source program containing computing expressions written in block floating-point format is translated on a computer [0389] As described above, the compiler apparatus according to claims [0390] Furthermore, the compiler apparatus according to claims [0391] Furthermore, the compiler apparatus according to claims [0392] Furthermore, the compiler apparatus according to claims [0393] Furthermore, the compiler apparatus according to claims [0394] Furthermore, the compiler apparatus according to claims [0395] Furthermore, the compiler apparatus according to claims [0396] On the other hand, the compiler programs according to claims [0397] Furthermore, the compiler programs according to claims [0398] Furthermore, the compiler programs according to claims [0399] Furthermore, the compiler programs according to claims [0400] Furthermore, the compiler programs according to claims [0401] Furthermore, the compiler programs according to claims [0402] Furthermore, the compiler programs according to claims [0403] On the other hand, object program generating methods according to claims [0404] Furthermore, object program generating methods according to claims [0405] Furthermore, object program generating methods according to claims [0406] Furthermore, object program generating methods according to claims [0407] Furthermore, object program generating methods according to claims [0408] Furthermore, object program generating methods according to claims [0409] Furthermore, object program generating methods according to claims Referenced by
Classifications
Legal Events
Rotate |