WO2012023185A1 - 試験方法、演算処理装置、試験プログラム、試験プログラム生成方法、試験プログラム生成装置、及び試験プログラム生成プログラム - Google Patents
試験方法、演算処理装置、試験プログラム、試験プログラム生成方法、試験プログラム生成装置、及び試験プログラム生成プログラム Download PDFInfo
- Publication number
- WO2012023185A1 WO2012023185A1 PCT/JP2010/063935 JP2010063935W WO2012023185A1 WO 2012023185 A1 WO2012023185 A1 WO 2012023185A1 JP 2010063935 W JP2010063935 W JP 2010063935W WO 2012023185 A1 WO2012023185 A1 WO 2012023185A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- instruction
- branch
- random number
- number data
- unit
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2205—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
- G06F11/2236—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
Definitions
- the present invention relates to a test method, an arithmetic processing device, a test program, a test program generation method, a test program generation device, and a test program generation program.
- test method for an arithmetic processing device there is a method for judging the validity of an execution result by causing an arithmetic processing device to be tested to execute a test program.
- the validity determination of the execution result is performed, for example, by comparing the result of causing the test processing unit to execute the test program and the expected value of the test program.
- the test includes, for example, a logic simulation test to confirm whether the logic circuit of the designed arithmetic processing unit is designed according to the design specification, and the actual arithmetic processing unit manufactured operates according to the operation specification. There is an actual machine operation test to confirm whether or not to do.
- the test of the arithmetic processing unit if the unlimited access to the entire storage area of the memory is enabled, the test result is written in an unspecified area of the memory beyond the test area, and the test becomes impossible. Therefore, in the test, an instruction for accessing a storage area of a memory limited to a predetermined test area range is used. However, since an actual arithmetic processing unit can use the entire storage area of the memory beyond the range of the test area, the test limited to the test area range is not sufficient as a test of the arithmetic processing unit. . Therefore, an instruction that designates only a limited storage area cannot sufficiently test the operation of an actual arithmetic processing device.
- the disclosed test method speculatively executes random data that is not limited to a test protocol such as a test area range using a speculative execution function of an arithmetic processing unit as a subsequent instruction of a branch success instruction.
- a test protocol such as a test area range
- a speculative execution function of an arithmetic processing unit as a subsequent instruction of a branch success instruction.
- the disclosed test method includes a storage unit that stores an instruction, a branch history unit that stores a branch history in which an address of a branch instruction is associated with a branch destination address of the branch instruction, an instruction reading unit that reads an instruction from the storage unit, An arithmetic unit that executes an instruction read by the instruction reading unit, and a branch control unit that invalidates an execution result of the speculatively executed branch destination instruction when the speculative execution of the branch destination instruction of the branch instruction fails
- a test method for testing a processing device wherein the instruction reading unit reads a branch instruction from the storage unit, and if the branch history of the read branch instruction is not in the branch history unit, the branch control unit Instructing the instruction reading unit to read a subsequent instruction of the branch instruction, and the instruction reading unit is not limited to a test protocol according to the instruction.
- the disclosed test method can test the operation of the arithmetic processing unit not limited to the test protocol as speculative execution.
- test restriction based on the test protocol will be described by taking [1.1] memory access instruction, [1.2] operation instruction, and [1.3] branch instruction as examples.
- test program shown below is demonstrated using the instruction set prescribed
- FIG. 1 is a diagram showing an example of a memory access instruction according to the test protocol.
- the memory access instruction shown in FIG. 1 is a double precision floating point store (STDF) instruction.
- STDF floating point store
- the memory area stored by the memory access instruction according to the test protocol and the memory access instruction is generated so as not to deviate from the test target memory space.
- the REG0 to 7 memory access registers that point to the test target memory space are defined from the general-purpose registers, and the defined memory access registers are defined by the pointer address of “rs (resister source) 1” and the distance value of “rs2”.
- a memory success instruction for selecting is generated. That is, a register indicating the test memory space is defined in advance, and the registers defined at the time of instruction generation are set in the registers (rs1, rs2) of the memory access instruction, thereby eliminating the generation of the memory access instruction outside the test memory space. I can do it.
- FIG. 2 is a diagram illustrating an example of an arithmetic instruction according to the test protocol.
- the arithmetic instruction shown in FIG. 2 is a floating-point multiply and divide (FMULD) instruction.
- FMULD floating-point multiply and divide
- the operation exception includes, for example, an overflow exception processing of IEEE (The Institute of Electrical and Electronics Engineers, Inc.) 754.
- IEEE The Institute of Electrical and Electronics Engineers, Inc.
- a test protocol is defined unless a floating-point arithmetic exception interrupt is generated, only a register having normalized data that does not cause an arithmetic exception can be selected as an input of the arithmetic instruction.
- the register that stores the operation result changes every time the operation is repeated, and there is a possibility that the data that can cause a floating-point operation exception interrupt at the end. Cannot be used for input registers.
- the input of floating point arithmetic instructions is limited to registers that are dedicated to input and that store normalized data. Accordingly, as shown in FIG. 2, the input-only register and the output-only register are defined. For example, the most significant bits of the operation inputs “rs1” and “rs2” are always 0 and can be set to 1. Similarly, the top of rd, which is the operation output, is fixed at 1 and cannot be set to 0.
- FIG. 3 is a diagram showing an example of a branch instruction according to the test protocol.
- the test instruction shown in FIG. 3 is a call (CALL) instruction that is a relative branch instruction.
- CALL call
- the branch instruction according to the test protocol is generated so that the branch destination of the branch instruction does not exceed the test memory space in order to guarantee normal operation.
- a call instruction can branch to an address (specified by disp30) that is a maximum of ⁇ 2 gigabytes away, but in order to cover all bit patterns of relative branching, it is not possible to prepare a test instruction space of 4 gigabytes or more. Not realistic. For example, when a maximum branch is made in a 64 MB instruction space, up to 24 bits of disp30 are used, but a call instruction is generated so that 1 is not set in any more bits.
- test command is generated according to the test protocol.
- the operation when the arithmetic processing unit actually executes the instruction cannot be verified. Therefore, in the test method according to the embodiment, as shown below, the operation of the arithmetic processing unit that is not limited to the test protocol is tested by speculatively executing a test command that does not comply with the test protocol on the random number data.
- the test program includes a branch instruction and random number data that is not limited to the test protocol after the branch instruction.
- the arithmetic processing unit speculatively executes random number data not limited to the test protocol until immediately before the memory access, and after the branch is confirmed, invalidates the execution result of the speculative execution and tests the speculative execution operation not limited to the test protocol.
- FIG. 4 is a diagram showing an example of speculative execution operation of random number data that does not follow the test protocol by the arithmetic processing unit.
- 10 is an example of a test program
- 20 is a time chart showing pipeline processing by the arithmetic processing unit when the test program 10 is executed.
- pipeline processing is executed by dividing one instruction into stages of instruction fetch (IF), instruction decode (RF), instruction execution (EX), operand fetch (MEM), and write back (WB). This is a process of executing a plurality of instructions in parallel.
- the instruction fetch stage fetches an instruction from the instruction cache.
- the instruction decode stage decodes the fetched instruction.
- the instruction execution stage executes an instruction based on the decoding result and the fetched register value. For example, when executing a branch instruction, the branch destination address is calculated.
- the operand fetch stage loads data corresponding to the address calculated in the instruction execution stage from the data cache.
- the write back stage stores the result calculated in the instruction execution stage or the operand fetched in the operand fetch stage in a register. For store operation, write to data cache.
- the instructions at addresses 1, 2, and 5 of the test program 10 are instructions according to the test protocol.
- the branch instruction at the address 3 is a branch instruction that speculatively executes the subsequent instruction random number data and fails the branch prediction.
- the random number data at the address 4 is random number data that does not follow the test protocol.
- the test protocol is a protocol determined in advance for clarifying the verification of the malfunction of the arithmetic processing device after the test is executed.
- the test rules include (1) no operation exception, (2) input / output register specification restriction, and (3) main memory test target storage area restriction. Details of the test protocol will be described later in “[2] Random number data not complying with test protocol”.
- the arithmetic processing unit executes the write-back stage from the instruction fetch stage. Since the instructions 1 and 2 are data according to the test protocol, the data is stored in the test target storage area of the main memory by the write back.
- the branch destination address of the branch instruction is determined at the instruction execution stage after 2 cycles. Therefore, in order to avoid a stall, the random number data at the address 4 is used. Speculative execution is predicted as a branch destination instruction.
- the arithmetic processing unit calculates the branch destination address of the branch instruction at the instruction execution stage, it is determined that the branch destination address is address 5, so that the branch at address 5 which is the branch destination address as shown by arrow 15 Execute the first instruction.
- the arithmetic processing unit invalidates the execution result without performing write-back to store the execution result of the random number data in the memory so as to be displayed by hunting. .
- Random number data not limited to the test protocol is speculatively executed as a subsequent instruction of the branch instruction until immediately before the memory access, and after the branch is confirmed, the execution result of the speculative execution is invalidated. Therefore, the execution of the test program 10 is limited to the test protocol. Actions that are not performed can be tested as speculative executions.
- FIG. 5 is a diagram illustrating an example of an information processing device.
- the information processing apparatus 500 includes an arithmetic processing device 510, a main storage device 520, a communication unit 530, an external storage device 540, a drive device 550, and an I / O controller 560.
- the arithmetic processing unit 510 includes an arithmetic processing unit 100, an L2 cache controller 512, an L2 cache memory 514, and a memory access control unit 516.
- the arithmetic processing device 510 is connected to the communication unit 530, the external storage device 540, and the drive device 550 via the I / O controller 560.
- Arithmetic processing unit 510 executes a program stored in main storage unit 520 to load data from main storage unit 520, calculate the loaded data, and store the operation result in main storage unit 520 It is.
- the arithmetic processing unit 510 is, for example, a CPU (Central Processing Unit).
- the memory access control unit 516 is a unit that loads data from the main storage device 520 to the L2 cache memory 514, stores data from the L2 cache controller 512 to the main storage device 520, and the like.
- the L2 cache memory 514 holds a part of data stored in the main storage device 520.
- the L2 cache memory 514 includes data held by the L1 cache memory (L1 Cache Memory) 110 included in the arithmetic processing unit 100.
- the L2 cache controller 512 operates to store data with high access frequency from the arithmetic processing unit 100 in the L2 cache memory 514 and to drive data with low access frequency from the L2 cache memory 514 to the main storage device 520.
- the arithmetic processing unit 100 is, for example, a processor core and has the arithmetic function of the arithmetic processing device 510 described above. Details of the arithmetic processing unit 100 will be described later with reference to FIGS.
- the number of arithmetic processing units shown in FIG. 5 is one, but is not limited to this number.
- one arithmetic processing unit operates as a master and executes a test program, and causes another arithmetic processing unit as a slave to share and execute the test program To work.
- Such a master operation may be described as an instruction sequence in the test program and executed by executing the instruction sequence.
- the I / O controller 560 is an input / output control device that controls connection between the arithmetic processing unit 510 and other units.
- the I / O controller 560 operates according to a standard such as PCI Express (Peripheral Component Interconnect Express), for example.
- the main storage device 520 is a device that stores data and programs.
- the arithmetic processing unit 510 can access the main storage device 520 without going through the I / O controller 560.
- the main storage device 520 is, for example, a DRAM (Dynamic Random Access Memory).
- External storage device 540 is a non-volatile storage device that stores programs and data stored in main storage device 520.
- the external storage device 540 is a disk array using a magnetic disk, an SSD (Solid State Drive) using a flash memory, or the like.
- the communication device 530 is connected to the network 1100 as a communication path, and transmits / receives data between the information processing device 500 and another information processing device connected to the network 1100.
- the communication device 530 is, for example, a NIC (Network Interface Controller).
- the drive device 550 is a device that reads and writes a storage medium 590 such as a floppy (registered trademark) disk, a CD-ROM (Compact Disc Only Memory), a DVD (Digital Versatile Disc), and the like.
- the drive device 550 includes a motor that rotates the storage medium 590, a head that reads and writes data on the storage medium 590, and the like.
- the storage medium 590 can store a program.
- the storage medium 590 can store a test program generation program 910 and a test program 920 described later.
- the drive device 550 reads a program from the storage medium 590 set in the drive device 550.
- the arithmetic processing device 510 stores the program read by the drive device 550 in the main storage device 520 or the secondary storage device 540.
- FIG. 6 is a diagram illustrating an example of the arithmetic processing unit. As illustrated in FIG. 6, the arithmetic processing unit 100 includes an L1 cache memory 110, an instruction reading unit 120, a branch history unit 130, an instruction execution unit 140, a pipeline control unit 190, and a register 250.
- the L1 cache memory 110 is a storage device that stores instructions or data.
- the L1 cache memory 110 stores a part of data stored in the main storage device 520.
- the L1 cache memory 110 is provided inside the arithmetic processing unit 100 and is located closer to the arithmetic processing unit 100 than the main storage device 520.
- cache hit data stored in the L1 cache memory 110
- the arithmetic processing unit 100 can access the target data in a short time.
- cache miss data not stored in the cache memory
- L2 cache memory 514 in the lower hierarchy of the L1 cache memory 110 or the main storage device 520 Since the data is read, the access time to the target data becomes long. Therefore, in order to prevent a cache miss, an instruction or data having a high access frequency from the arithmetic processing unit 100 is stored in the L1 cache memory 110.
- the L1 cache memory 110 is, for example, an SRAM (Static Random Access Memory).
- the branch history unit 130 receives the branch instruction address and the branch destination address as the branch instruction execution history from the instruction execution unit 140, and stores the branch instruction address and the branch destination address in association with each other. To do.
- the branch history unit 130 receives a branch instruction from the instruction reading unit 120, the branch history unit 130 outputs the branch destination address of the branch instruction to the instruction reading unit 120 if it stores a branch history related to the received branch instruction.
- the instruction reading unit 120 reads an instruction from the L1 cache memory 110.
- the instruction reading unit 120 confirms in the branch history unit 130 whether or not the execution history of the read branch instruction is in the branch history unit 130.
- the instruction reading unit 120 receives the branch destination address from the branch history unit 130, and reads the instruction stored in the branch destination address from the L1 cache memory 110.
- the instruction execution unit 140 executes the process specified by the instruction on the data stored in the register 250.
- the processing specified by the instruction includes, for example, floating point arithmetic, integer arithmetic, address generation, branch instruction execution, store operation for storing data stored in the register 250 in the L1 cache memory 110, and stored in the L1 cache memory 110. This is a load operation for loading data to the register 250.
- the instruction execution unit 140 includes an execution unit that performs a floating point operation, an integer operation, an address generation, a branch instruction execution, and a store or load operation, and executes the instruction processing using these execution units.
- the pipeline control unit 190 executes processing related to each unit included in the arithmetic processing unit 100 in synchronization with a cycle as shown in FIG. 4 in order to execute a plurality of instructions in the same unit in an overlapping manner. To control.
- the pipeline control unit 190 invalidates the execution result of the speculative execution predicted to fail the speculative execution of the branch destination instruction of the branch instruction, and when the speculative execution is successful, the execution result is stored in the register 250 or the L1 cache memory. It operates as a branch control unit that performs speculative execution control stored in 110.
- the register 250 is a kind of memory for storing data.
- the register 250 stores the calculation result of the instruction execution unit 140, the address when reading and writing to the main storage device 520, the operation state of the arithmetic processing unit 100, and the like.
- FIG. 7 is a diagram showing an example of the branch history part.
- the branch history unit 130 includes a branch history storage unit 132, a comparison circuit 134, a return address calculation unit 136, a return address storage unit 137, and a selection circuit 138.
- the branch history storage unit 132 includes a branch instruction storage unit 132-1, a branch destination instruction storage unit 132-2, and a branch type information storage unit 132-3.
- the branch history storage unit 132 is, for example, a branch history table (BHT: Branch History Table), and receives the execution result of the branch instruction from the instruction execution unit 140.
- the execution result of the branch instruction includes a branch instruction address that is an address of the branch instruction, a branch destination address of the branch instruction, and branch type information.
- the branch instruction address is an address that specifies the storage location of the branch instruction in the main storage device 520.
- the branch destination address is an address indicating the storage location of the branch destination instruction of the branch instruction in the main storage device 520.
- the branch type information is, for example, information specifying a call instruction for calling a subroutine, a return instruction for returning from the subroutine to the main routine, and other branch instructions.
- the branch history storage unit 132 stores the branch instruction upper address, which is the upper address of the branch instruction address, in the branch instruction storage unit 132-1, the branch destination address in the branch destination instruction storage unit 132-2, and the branch type information in the branch type information. Each is stored in the storage unit 132-3. When storing each piece of information, the branch history storage unit 132 uses a branch instruction lower address, which is a lower address of the branch instruction address, as an index address.
- the branch history storage unit 132 When the branch history storage unit 132 receives the branch instruction address from the instruction reading unit 120, the branch history storage unit 132 compares the branch instruction upper address as a result of indexing the entry of the branch instruction storage unit 132-1 with the lower address of the received branch instruction address. It outputs to 134.
- the branch history storage unit 132 When the branch history storage unit 132 receives the branch instruction address from the instruction reading unit 120, the branch history storage unit 132 selects the branch destination address from the entry of the branch destination instruction storage unit 132-2 specified by the lower address of the branch instruction. And output to the return address calculation unit 136.
- the branch history storage unit 132 stores the branch type information of the call instruction in the entry of the branch type information storage unit 132-3 specified by the lower address of the branch instruction received from the instruction reading unit 120.
- the call hit signal is output to the return address storage unit 137.
- the branch history storage unit 132 returns a return hit. The signal is output to the selection circuit 138.
- the comparison circuit 134 sends a cache hit signal to the selection circuit 138. Output.
- the return address calculation unit 136 calculates the address immediately after the branch destination address and adds 4 bytes, which is the size of one instruction, to the branch destination address. Is output to the return address storage unit 137 as a return address.
- the reason why the address immediately after the branch destination address is output as the return address is that the return address is the address of the instruction immediately after the call instruction, unlike the branch destination address stored in the branch history storage unit 132. It is.
- the return address storage unit 137 When the return address storage unit 137 receives the call hit signal from the branch history storage unit 132, the return address storage unit 137 stores the return address output from the return address calculation unit 136.
- the branch history unit 130 outputs the return address stored in the return address calculation unit 136 to the selection circuit 138 when the return instruction of the subroutine is read.
- the selection circuit 138 receives a cache hit signal from the comparison circuit 134, a branch destination address and a return hit signal from the branch history storage unit 132, and a return address from the return address storage unit 137. For example, when the signal level of the cache hit signal is “1” and the signal level of the return hit signal is “0”, the selection circuit 138 sends the branch destination address received from the branch history storage unit 132 to the instruction reading unit 120. Output. For example, when the signal level of the cache hit signal is “1” and the signal level of the return hit signal is “1”, the selection circuit 138 uses the return address received from the return address storage unit 137 as the instruction reading unit 120. Output to.
- the branch history unit 130 outputs the branch destination address to the instruction reading unit 120 according to the type of branch instruction received from the instruction reading unit 120.
- FIG. 8 is a diagram illustrating an example of an instruction reading unit and an instruction execution unit.
- the instruction execution unit 140 includes an instruction buffer 150, an instruction word register 160, and an instruction decoder 170.
- the instruction execution unit 140 further includes a branch reservation station (RSBR: Reservation Station for Branch) 182.
- the instruction execution unit 140 further includes a reservation station for floating point arithmetic (RSF) 184.
- the instruction execution unit 140 further includes an integer arithmetic reservation station (RSE: Reservation Station for Execution) 186.
- RSE Reservation Station for Execution
- the instruction execution unit 140 further includes an address generation reservation station (RSA: Reservation Station for Address generation) 188.
- RSA Reservation Station for Address generation
- the instruction execution unit 140 further includes a floating point arithmetic unit 210, an integer arithmetic unit 220, an address generation unit 230, and a load / store queue 240.
- the floating point arithmetic unit 210, the integer arithmetic unit 220, the address generation unit 230, and the load / store queue 240 are hereinafter referred to as “arithmetic unit”.
- the pipeline control unit 190 controls the processing related to each unit included in the arithmetic processing unit 100 to be executed for each of a plurality of stages included in the pipeline.
- the units controlled by the pipeline control unit 190 are the instruction reading unit 120, the instruction buffer 150, the instruction word register 160, the instruction decoder 170, the reservation stations 182 to 188, the execution units 210 to 240, the register 250, and the like.
- the L1 cache memory 110 shown in FIG. 6 is shown as a separate cache memory having an L1 instruction cache memory 110A and an L1 data cache memory 110B.
- the L1 instruction cache memory 110A is an L1 cache memory that stores instructions.
- the L1 data cache memory 110B is an L1 cache memory that stores data.
- the register 250 shown in FIG. 6 is shown as a commit stack entry (CSE) 250A, a control register 250B, a floating-point register 250C, and a general-purpose register 250D.
- CSE commit stack entry
- the instruction reading unit 120 reads out an instruction stored in the L1 instruction cache memory 110A by fetching it.
- the instruction reading unit 120 reads an instruction specified by an address on the main storage device 520 indicated by a program counter described later from the L1 instruction cache memory 110A.
- the instruction reading unit 120 outputs the branch instruction to the branch history unit 130.
- the branch history unit 130 has a branch history of the branch instruction output from the branch history unit 130
- the instruction reading unit 120 receives the branch destination address of the branch instruction from the branch history unit 130.
- the instruction reading unit 120 reads the instruction at the conditional branch destination address received from the branch history unit 130 from the L1 instruction cache memory 110A and outputs it to the instruction buffer 150. Then, the instruction reading unit 120 can cause the instruction execution unit 140 to start executing the branch destination instruction of the branch instruction before the execution of the branch instruction is completed. In this way, executing the instruction predicted as the branch destination before the branch destination address of the branch instruction is determined using the branch history unit 130 is referred to as “speculative execution”.
- the CSE 250A is a register that manages instructions being executed from the issue of an instruction to the instruction decoder 170 by the instruction execution unit 140 until the execution of the floating point arithmetic unit 210 and the like is completed.
- the CSE 250A has a plurality of entries, and stores data such as identification information and execution status corresponding to the output instruction in the entry when the instruction decoder 170 outputs the instruction.
- the entry data of the CSE 250A is erased by receiving an execution completion signal indicating instruction commit (confirmation) from the arithmetic unit.
- the pipeline control unit 190 determines whether the instruction is confirmed based on the branch prediction result. If the speculative execution fails, the speculative execution result is invalidated.
- the execution result is stored in the memory. .
- Data erased from the entry of the CSE 250A by the execution completion signal is stored in the register 250, the L1 cache memory 110, etc., and used for execution of other instructions.
- an instruction invalidated by the pipeline control unit 190 due to a speculative execution failure or the like is erased from the entry of the CSE 250A or a resource such as a reservation station and is stored in the register 250, the L1 cache memory 110, or the like. Neither is it used to execute other instructions.
- the control register 250B includes, for example, a register that stores an address space identifier (ASI: Address Space Identifier) that uniquely specifies an address space to which a virtual address to be used belongs, and a main storage device that stores instructions to be executed next A program counter for designating an address of 520.
- ASI Address Space Identifier
- the floating point register 250C is a register for storing the execution result of the floating point arithmetic unit 210.
- the general-purpose register 250D is a register that stores an execution result of the integer arithmetic unit 220.
- the instruction buffer 150 is a buffer that temporarily stores instructions output from the instruction reading unit 120.
- the instruction buffer 150 can store the instruction output from the instruction reading unit 120 even when the execution operation by the floating point arithmetic unit 210, the integer arithmetic unit 220, the address generation unit 230, or the like is stopped, for example.
- the instruction word register 160 stores a plurality of instructions that are executed simultaneously among the instructions stored in the instruction buffer 150 by the instruction reading unit 120 at the same timing. For example, the instruction word register 160 stores four instructions at the same timing.
- the instruction decoder 170 decodes a plurality of instructions stored in the instruction word register 160.
- a partial bit string of the instruction is called an instruction code (opcode) and indicates the type of instruction.
- the other part is a field for specifying an operand.
- An operand is an operand and indicates a value or variable that is a target of an operation specified by an instruction code.
- the operand is, for example, an address of a register that stores an input value to be operated, and an address of a register that stores an operation result.
- the instruction decoder 170 outputs the decoded instruction to any reservation station corresponding to the decoded instruction code.
- the reservation station is a buffer circuit that stores the decoding result of the instruction output to each arithmetic unit and inputs the stored instruction decoding result and operand to the arithmetic unit or the like at a predetermined timing, and has a plurality of entries. Each entry stores the decoding result of the instruction output from the instruction decoder 170 and the operand output from the register address specified by the instruction.
- the pipeline control unit 190 outputs the operand to the associated execution unit when all of the instruction decode results and operands are stored in the entry in the reservation station and the arithmetic unit can be executed.
- RSF 184 is a reservation station corresponding to the floating point arithmetic unit 210.
- the RSE 186 is a reservation station corresponding to the integer arithmetic unit 220.
- the RSA 188 is a reservation station corresponding to the address generation unit 230.
- the RSBR 182 associates and stores the instruction identification information included in the result of decoding the branch instruction and the instruction identification information of the instruction that generates a condition code (Condition Code) that controls branching of the branch instruction or the instruction that has executed speculative execution.
- a reservation station having a plurality of entries.
- the pipeline control unit 190 compares the branch destination address of the branch instruction with the address of the speculatively executed instruction. When the branch destination address of the branch instruction matches the address of the speculatively executed instruction (hereinafter referred to as “speculative execution success”), the branch instruction entry and the branch destination instruction entry in the CSE 250A are completed by commit. To do.
- the branch instruction entry in the CSE 250A is completed by the commit, but the speculatively executed The entry of the branch destination instruction is canceled. Thereafter, the instruction immediately after the branch instruction is stored in the CSE 250A, and the instruction immediately after the branch instruction is executed by the arithmetic unit.
- the pipeline control unit 190 outputs the branch destination address of the branch instruction to the instruction reading unit 120 as the execution result of the speculative execution, so that the instruction reading unit 120 executes the instruction from the correct branch destination address. Can be read and the branch destination instruction of the branch instruction is executed.
- Integer operation unit 220 executes addition / subtraction logic operation, shift operation, multiplication / division and the like on the integer according to the instruction code.
- the floating point arithmetic unit performs addition, subtraction, multiplication, division, square root operation, and the like on the floating point according to the instruction code.
- the address generation unit 230 generates an address for memory access according to an instruction code related to memory access such as a load instruction or a store instruction.
- the load store queue 240 has a plurality of entries for storing memory access instructions and addresses. A plurality of entries in the load / store queue 240 are secured in accordance with the instruction execution order of the instruction decoder 170.
- the load / store queue 240 receives decode information related to a memory access instruction from the instruction decoder 170 in accordance with the instruction execution order.
- the load / store queue 240 accesses the L1 data cache memory 110B according to the instruction execution order from the instruction decoder. .
- FIG. 9 is a diagram illustrating an example of a main storage device. 9 stores a test program generation program 910, a test program 920, an instruction conversion table 930, a parameter table 940, a test result 950, and test log data 960.
- the test program generation program 910 is a program that causes a computer such as the information processing apparatus 500 to generate the test program 920.
- a computer such as the information processing apparatus 500
- the test program generation program 910 the information processing apparatus 500 operates as a test program generation apparatus that generates the test program 920.
- the test program 920 is a program for testing the operation of the arithmetic processing unit. For example, when the arithmetic processing unit 510 of the information processing apparatus 500 illustrated in FIG. 5 executes the test program 920, the information processing apparatus 500 operates as a test program control apparatus. Details of the test program will be described later.
- FIG. 10 is a diagram showing an example of the instruction conversion table.
- a test instruction is generated by multiplying the AND data or OR data of the instruction conversion table 112 by a random number.
- the test program includes a random command and random number data.
- a random instruction is an instruction that matches a predetermined instruction code and is generated according to a test protocol.
- Random number data includes random number instructions that are composed only of random numbers and those that do not follow the test protocol, but in which part of random number data is replaced with instruction codes.
- the instruction conversion table is used to generate a random instruction and a random instruction. An example of random number command generation will be described later with reference to FIGS. 16, 18, and 20.
- FIG. 10A is a diagram illustrating an example of an instruction conversion table.
- the instruction conversion table 930 illustrated in FIG. 10A includes an instruction code column 931, a first AND data column 932, a second AND data column 933, a first OR data column 934, and a second OR data column 935.
- An instruction code and first AND data, second AND data, first OR data, and second OR data associated with the instruction code are input to each line of the instruction conversion table 930.
- the first AND data and the first OR data are used to generate a random instruction.
- the first AND data is data used in an AND operation to set the instruction code part and the bit part subject to the test protocol restriction to “0”.
- the first OR data is data used in the OR operation in order to set at least a part of the bit portion subject to the test protocol restriction corresponding to the instruction code to “1” in order to generate the instruction code after the AND operation. It is.
- the second AND data and the second OR data are used to generate a random number instruction.
- the second AND data is data used in an AND operation to set a bit portion corresponding to the instruction code to “0”.
- the second OR data is data used in the OR operation to set at least a part of the bit portion corresponding to the instruction code to “1” in order to generate the instruction code after the AND operation.
- FIG. 10B is a diagram illustrating an example of AND / OR data used to generate a random instruction of a branch instruction or a random instruction.
- Reference numeral 700 denotes an instruction format of the branch instruction.
- 31 and 30 bits are “0”, and 24 to 22 bits are “010”. Further, it is assumed that the upper 4 bits of “disp22” indicating the branch destination address are set to “0” as a test rule.
- FIG. 10C is a diagram for explaining an example of AND / OR data used for generation of a random instruction or random instruction of a memory access instruction.
- Reference numeral 720 denotes an instruction format of a memory access instruction.
- 31 and 30 bits are “1”, 24 bits are “0”, and 21 bits are “0”. Further, as test rules, it is assumed that the upper 3 bits of “rs1” are “0” and the upper 2 bits of rs2 are “0”.
- the first AND data 721 for memory access is data in which the instruction code part of the memory access instruction and the test protocol part of the memory access instruction are “0”. Further, the memory access second AND data 722 is data in which only the instruction code portion of the memory access instruction is “0”.
- the first OR data and the second OR data for the memory access instruction are data in which only 31 and 30 bits of the instruction format are set to “1”, and therefore both have the same format.
- FIG. 10D is a diagram for explaining an example of AND / OR data used for generation of a random instruction or a random instruction of an addition instruction.
- Reference numeral 740 denotes an instruction format of an addition instruction which is one of arithmetic instructions.
- 31 and 30 bits are “10”, 24 bits are “0”, and 21 to 19 bits are “0”. Further, as test rules, it is assumed that the upper 3 bits of “rs1” are “0” and the upper 2 bits of rs2 are “0”.
- the first AND data 741 for the addition instruction is data in which the instruction code part of the addition instruction and the test protocol part of the branch instruction are “0”. Further, the second AND data 742 for addition instruction is data in which only the instruction code part of the addition instruction is “0”. Since the first OR data for addition instruction and the second OR data are data in which only 31 bits of the instruction format are set to “1”, both have the same format.
- the operation rate of the calculation unit when one test program is executed can be improved.
- the random number data may match a predetermined instruction format even if it is not rewritten using the second AND data and the second OR data. Therefore, the test program generation program does not need to rewrite all random number data by AND and OR operations in the computer that executes the program.
- examples of random number data and random number instructions in which random number data is changed to a predetermined instruction format by AND and OR operations will be described later with reference to FIGS. 26 and 28.
- the input values of the first AND data, the second AND data, the first OR data, and the second OR data shown in FIG. 10 are referred to in the description of the random instruction generation and the random instruction generation described later.
- FIG. 11 is a diagram illustrating an example of a parameter table.
- the parameter table 940 is a table in which parameters used during the test program execution process flow are set.
- the parameters included in the parameter table 940 are referred to by the arithmetic processing device when the test instruction is generated by the arithmetic processing device.
- the 11 includes a parameter name column 941 and a parameter value column 942.
- the parameter name column 941 includes a seed value S, an instruction generation number N, a trap instruction generation interval C, a random data generation interval R, and a random data instruction number D.
- the parameter value column 942 corresponds to the parameter name. The parameter value is entered. In each row of the parameter table 940, a parameter corresponding to the parameter name is input.
- the seed value S is a seed value used for random number data generation. As shown in FIG. 11, the seed value S is “1”, for example.
- the instruction generation number N is the number of instructions generated. As shown in FIG. 11, the instruction generation number N is, for example, “100000”.
- the trap instruction generation interval C indicates the number of instructions between the trap instruction and a trap instruction generated after the trap instruction.
- the trap instruction is an instruction for outputting the value of the register 250 after execution of the test instruction and the test result 950 written in the main storage device 520 to the main storage device 520 as test log data 960.
- the trap instruction generation interval C is “512”
- the test program generation apparatus further generates a trap instruction after 512 instructions of the generated trap instruction.
- the random number data generation interval R is an interval between the random number data and the random number data in the test instruction sequence by the test program generation device.
- the test program generation device stores the instruction count indicated by the instruction counter when the random number data was generated last time, and the current instruction counter increases from the stored instruction count to the instruction count obtained by adding the random number data generation interval. When counting up, the test program generation device generates random number data again. As shown in FIG. 11, the random number data generation interval R is, for example, “256”.
- the D is the number of random data. Note that the number D of random number data is an initial value, and the test program generation device can change the number of random number data to be generated by changing the number of random number data in the range of 1 to 64. As illustrated in FIG. 11, the random number data D is “3”, for example, and indicates that three statements that are random number data are generated.
- the parameter values shown in FIG. 11 are referred to in the description of the test program generation processing by the test program generation device described later.
- the test result 950 shown in FIG. 9 is an execution result of the test program output from the arithmetic processing unit 510 to the main memory 520 as a result of the arithmetic processing unit 510 executing the test program 920.
- An area in the main storage device 520 in which the test result 950 is stored is referred to as a “test area”.
- the “test area” is a storage area to which an execution result is output by a test instruction sequence.
- the test area is limited to a predetermined storage area in the main storage device so that execution of the test program 920 does not change data stored in other main storage devices.
- the test log data 960 shown in FIG. 9 has been moved to the storage area of the test log data 960 and the data stored in the register 250 after execution of the test instruction generated when the arithmetic processing unit executes the trap instruction.
- the test program 920 may be executed multiple times by the arithmetic processing unit 510.
- the arithmetic processing unit 510 executes the trap instruction a plurality of times, so that the test results are stored in different storage areas together with the number of tests of the test program.
- the arithmetic processing unit 510 executes the trap instruction so that the test program is stored in the storage area together with identification information for uniquely identifying the execution result of the test program.
- the information processing apparatus 500 operates as a “test program generation apparatus” by executing the test program generation program 910 stored in the main storage device 520. Further, the information processing apparatus 500 operates as a “test control apparatus” that performs a test on its own arithmetic processing unit 510 by executing a test program 920 stored in the main storage device 520. Thus, one information processing apparatus 500 can operate as a “test program generation apparatus” and a “test control apparatus”.
- test program generation device and the “test control device” are different information processing devices will be described.
- FIG. 12 is a diagram illustrating an example of a test program generation device and a test control device.
- Information processing apparatuses 500A and 500B illustrated in FIG. 12 may have the same configuration as the information processing apparatus illustrated in FIG.
- the information processing apparatus 500A executes the test program generation program 910 to generate the test program 920, and operates as a test program generation apparatus that transmits the generated test program 920 to the information processing apparatus 500B via the network 1100.
- the information processing apparatus 500B operates as a test control apparatus that tests the arithmetic processing unit 510 of the information processing apparatus 500B by executing the test program 920.
- the generation of the test program and the execution of the test program may be performed by the two information processing apparatuses 500.
- FIG. 13 is a diagram illustrating an example of a main storage device of the test control apparatus.
- the main storage device 520B of the information processing device 500B shown in FIG. 13 receives the test program 920 from the information processing device 500A
- the main storage device 520B stores the test program 920 in the main storage device 520B and executes the test program 920 on the arithmetic processing device.
- the test result 950 and test log data 960 are stored in the device 520B.
- the generation of the test program and the execution of the test program can also be performed using two information processing apparatuses.
- test command is generated according to the test protocol in order to verify the validity of the test execution result.
- the execution of the test instruction according to the test protocol it is impossible to verify the operation when the arithmetic processing unit actually executes the command, and therefore random number data not limited to the test protocol is generated.
- the test program may include not only random number data consisting only of random numbers but also instructions in which part of random number data is replaced with instruction codes.
- a part of the random number is replaced with an instruction code, and an instruction that is not limited by the test protocol is referred to as a random instruction. This is because if the instruction not restricted by the test protocol is random number data consisting only of random numbers, the instruction decoder 170 cannot divide the random number data into instruction codes and operands according to the instruction set of the arithmetic processing unit 510. This is to avoid this.
- FIG. 14 is a diagram illustrating an example of a flow of generating a random number instruction.
- the arithmetic processing unit that executes the test program generation program generates random number data based on the seed value (S1201). Since the seed value is included in the parameter table 940, the arithmetic processing device acquires the seed value from the parameter table 940 of the main storage device and generates random number data.
- the arithmetic processing unit randomly selects an instruction code (S1202).
- the arithmetic processing unit searches the instruction conversion table 930 for the selected instruction code, and acquires AND data and OR data corresponding to the selected instruction code (S1203).
- the arithmetic processing unit performs an operation of multiplying the random number data generated in step S1201 by the AND data acquired in step S1203 under an AND condition (S1204).
- the arithmetic processing unit executes the operation multiplied by the OR condition with the OR data acquired in step S1203 on the random number data multiplied by the AND condition of step S1204 (S1205) to generate a random instruction, The flow of random number instruction generation is terminated.
- FIG. 15 is a diagram illustrating an example of a branch instruction.
- An instruction format 700 shown in FIG. 15 is an instruction format of a branch instruction as an instruction set of SPARC (registered trademark).
- a table 710 illustrated in FIG. 15 is a table illustrating an example of a branch instruction and a branch condition.
- the instruction format 700 of the branch instruction specifies the operation code of the branch instruction by “op” of 31 to 30 bits and “op2” of 24 to 22 bits.
- the 29-bit “a” is an instruction invalid bit
- the 28 to 25-bit “cond” is a bit for specifying a specific branch instruction. For example, when the invalid bit is “1”, “cond” executes the instruction immediately after the branch instruction when the branch is established, and does not execute the instruction immediately after the branch instruction when the branch is not established. Indicates that the instruction immediately following the branch instruction is invalidated.
- “Disp22” of 21 to 0 bits specifies a branch destination address.
- Line number 1 in Table 710 describes “BA (branch always)” which is one of branch establishment instructions.
- “cond” When the value of “cond” is “1000”, it indicates that the operation code is “BA”.
- BA is an unconditional branch instruction that instructs to branch to a branch destination address unconditionally without referring to a condition code.
- “BA” is an example of a branch establishment instruction shown in FIGS. 21A to 26 described later.
- Line number 2 in Table 710 describes “BN (branch never)”, which is one of the branch failure instructions. “Cond” of “0000” indicates “BN”. “BN” is a non-branch instruction that instructs not to branch to a branch address unconditionally without referring to a condition code. “BN” is an example of a branch failure instruction shown in FIGS. 21A to 26 described later.
- Line numbers 3 to 8 are examples of conditional branch instructions.
- Line number 3 in Table 710 describes “BNE (branch on not Equal)”. “Cond” of “1001” indicates “BNE”. “BNE” is an instruction for instructing branching when a branching condition “the condition code indicates that the operation result is not zero” is satisfied.
- Line number 4 in Table 710 describes “BE (branch on Equal)”. “Cond” of “0001” indicates “BE”. “BE” is an instruction for instructing branching when the branching condition “condition code indicates that the operation result is zero” is satisfied.
- Line number 5 in Table 710 describes “BGU (Branch on Greeter Unsigned)”. “Cond” of “1100” indicates “BGU”. “BGU” is an instruction for instructing branching when a branch condition “the condition code indicates that there is no carry in the operation result or the operation result is not zero” is satisfied.
- Line number 6 in Table 710 describes “BLEU (Branch on Less or Equal Unsigned)”. “Cond” of “0100” indicates “BLEU”. “BLEU” is an instruction for instructing branching when the branch condition “condition code indicates that the operation result has a carry or the operation result is zero” is satisfied.
- Line number 7 in Table 710 describes “BCS (Branch on Carry Set)”. “Cond” of “1100” indicates “BCS”. “BCS” is an instruction for instructing a branch when a branch condition “the condition code indicates that there is a carry in the operation result” is satisfied.
- Line number 8 in Table 710 describes “BVC (Branch on Overflow Clear)”. “Cond” of “1100” indicates “BCS”. “BCS” is an instruction for instructing branching when the branching condition “condition code indicates that there is an overflow in the operation result” is satisfied.
- the 31 to 30-bit “op” and the 24 to 22-bit “op2” of the branch instruction are specified by an AND operation and an OR operation corresponding to the branch instruction, and a 29-bit “a” and a 28 to 25-bit “ By specifying “cond” with a random number, various branch instructions are generated based on the random number.
- FIG. 16 is a diagram illustrating an example of a branch instruction generation method. A flow for generating a branch instruction from random number data according to the instruction generation flow shown in FIG. 14 will be described with reference to FIG. In step S1211 shown in FIG. 16, random number data 712 is generated by the arithmetic processing unit. The random number data 712 is “0x8bec860”.
- the test control device selects an instruction code to be generated (S1212).
- the selected instruction is a branch instruction.
- the arithmetic processing unit acquires AND data and OR data corresponding to the selected instruction code from the instruction conversion table 930 (S1213).
- the AND data is data that sets the bit string corresponding to the instruction code to “0”. Therefore, the AND data is “3e3fffff” in which 31 to 30 bits and 24 to 22 bits are “0” and the other bits are “1” in the instruction format.
- the OR data is data for converting the bit string corresponding to the instruction code into the instruction selected in step S1202. Accordingly, the OR data is “0x00700000” in which 31 to 30 bits are “00”, 24 to 22 bits are “010”, and the other bits are “0” in the instruction format.
- the test control apparatus multiplies “0x8bec860”, which is random number data 712, and “0x3e3fffff”, which is AND data (S1214).
- the data 714 generated by multiplication is “0x0a3ec860”.
- the test control apparatus multiplies the data “0x0a3ec860” after the AND operation by “0x00700000” that is OR data (S1215).
- the data 716 generated by the multiplication is “0x0abec860”.
- test control device generates an instruction code that the instruction decoder 170 can interpret as a branch instruction.
- FIG. 17 is a diagram illustrating an example of a memory access instruction.
- An instruction format 720 illustrated in FIG. 17 is an instruction format of an integer load instruction which is one of memory access instructions as an instruction set of SPARC (registered trademark).
- a table 730 illustrated in FIG. 17 is a table illustrating an example of an integer load instruction and an execution operation.
- “op” of 31 to 30 bits and “0” of 24 and 21 bits specify an integer load instruction.
- “Op” of 31 to 30 bits and “op3” of 24 to 19 bits specify the opcode of the integer load instruction.
- “Rs1” in the field of 18 to 14 bits and “rs2” in the field of 4 to 0 bits indicate the address of the input register.
- “Rd” in the 29 to 25-bit field indicates an address of the output register.
- Line number 1 in Table 730 describes “LDSB (LoaD Signed Byte)” which is an opcode of an integer load instruction. “Op3” of “001001” indicates “LDSB”. “LDSB” specifies an execution operation of loading one signed byte.
- Line number 2 in Table 730 describes “LDSH (LoaD Signed Halfword)” which is the opcode of the integer load instruction. “Op3” of “001010” indicates “LDSH”. “LDSH” specifies an execution operation of loading two signed bytes.
- Line number 3 in Table 730 describes “LDUB (LoaD Unsigned Byte)” which is an opcode of the integer load instruction. “Op3” of “000001” indicates “LDUB”. “LDUB” specifies an execution operation of loading one unsigned byte.
- Line number 4 in Table 730 describes “LDUH (LoaD Unsigned Halfword)” which is an opcode of the integer load instruction. “Op3” of “000010” indicates “LDUH”. “LDUH” specifies an execution operation of loading two unsigned bytes.
- FIG. 18 is a diagram illustrating an example of a method for generating a memory access instruction. The flow of generating an integer load instruction from random number data according to the instruction generation flow shown in FIG. 14 will be described with reference to FIG. In step S1221 shown in FIG. 18, random number data 732 is generated by the arithmetic processing unit. The random number data 732 is “0x8bec860”.
- the test control device selects an instruction code to be generated (S1222).
- the selected instruction is an integer load instruction in the example of FIG.
- the arithmetic processing unit obtains AND data and OR data corresponding to the selected instruction code from the instruction conversion table 930 (S1223).
- the acquired data is AND data “0x3edffff” and OR data “0xc0000000” corresponding to the instruction code indicated by row number 605 of the instruction conversion table shown in FIG. 10A.
- AND data is data that sets the bit string corresponding to the instruction code to “0”. Therefore, the acquired AND data “0x3e3fffff” has 31 to 30 bits and 24 and 21 bits are “0”.
- OR data is data that makes the bit string corresponding to the instruction code the instruction selected in step S1212. Accordingly, in the acquired OR data “0xc0000000”, 31 to 30 bits are “10” and 24 and 21 bits are “0” in the instruction format.
- the test control apparatus multiplies “0x8bec860” which is random number data 732 by “0x3e3ffff” which is AND data (S1224).
- the data 734 generated by multiplication is “0x0a9ec860”.
- the test control device multiplies the data “0x0a9ec860” after the AND operation by “0xc0000000” that is the OR data (S1225).
- the data 736 generated by multiplication is “0xca9ec860”.
- test control device generates an instruction code that the instruction decoder 170 can interpret as an integer load instruction.
- FIG. 19 is a diagram illustrating an example of the operation instruction.
- An instruction format 740 shown in FIG. 19 is an instruction format of an addition instruction that is one of arithmetic instructions as an instruction set of SPARC (registered trademark).
- a table 750 illustrated in FIG. 19 is a table illustrating an example of an addition instruction and an execution operation.
- “op” of 31 to 30 bits and “0” of 24 and 21 to 19 bits specify the addition instruction.
- the 31 to 30-bit “op” and the 24 to 19-bit “op3” specify the operation code of the addition instruction.
- “Rs1” in the field of 18 to 14 bits and “rs2” in the field of 4 to 0 bits indicate the address of the input register.
- “Rd” in the 29 to 25-bit field indicates an address of the output register.
- Line number 1 in Table 750 describes “ADD” which is the operation code of the addition instruction. “Op3” of “000000” indicates “ADD”. “ADD” specifies an execution operation in which the value in “rs2” is added to the value in “rs1” of the input register.
- Line number 2 in Table 750 describes “ADDcc (Add and modify icc (integer condition code: integer condition code))” which is the operation code of the addition instruction. “Op3” of “010000” indicates “ADDcc”. “ADDcc” specifies an execution operation of addition and rewriting of the integer condition code based on the addition result.
- the integer condition code is a condition code specified in bits in the processor state register. Condition codes are used in conditional branch instructions.
- Line number 3 in Table 750 describes “ADDX” which is the operation code of the addition instruction. “Op3” of “000001” indicates “ADDX”. “ADDX” specifies an execution operation called addition with carry.
- Line number 4 in Table 750 describes “LDUH (LoaD Unsigned Halfword)” which is the operation code of the addition instruction. “Op3” of “000010” indicates “LDUH”. “LDUH” specifies an execution operation of loading two unsigned bytes.
- FIG. 20 is a diagram illustrating an example of an instruction generation method for arithmetic instructions. A flow for generating an addition instruction from random number data according to the instruction generation flow shown in FIG. 14 will be described with reference to FIG. In step S1231 shown in FIG. 20, random number data 752 is generated by the arithmetic processing unit. The random number data 752 is “0x8bec860”.
- the test control device selects an instruction code to be generated (S1232).
- the selected instruction is an addition instruction in the example of FIG.
- the arithmetic processing unit acquires AND data and OR data corresponding to the selected instruction code from the instruction conversion table 930 (S1233).
- the acquired data is AND data “0x3ec7fff” and OR data “0x70000000” corresponding to the instruction code “addition instruction” indicated by row number 605 of the instruction conversion table shown in FIG. 10A.
- AND data is data that sets the bit string corresponding to the instruction code to “0”. Therefore, the acquired AND data “0x3ec7ffff” has 31 to 30 bits and 21 to 19 bits “0”.
- OR data is data for converting the bit string corresponding to the instruction code into the instruction selected in step S1232. Therefore, in the acquired OR data “0x70000000”, 31 to 30 bits are “10” and 21 to 19 bits are “0” in the instruction format.
- the test control device multiplies “0x8bec860” which is the random number data 752 by “0x3ec7ffff” which is the AND data (S1234).
- the data 754 generated by the multiplication is “0x0a86c860”.
- the test control device multiplies the data “0x8bec860” after the AND operation by “0x70000000” which is the OR data (S1235).
- the data 756 generated by multiplication is “0x8a6cc860”.
- test control device generates an instruction code that the instruction decoder 170 can decipher from the addition instruction.
- FIG. 21A is a diagram illustrating a first example of the instruction execution order of the test program.
- the test program P1000 includes a branch establishment instruction at the address a1, a random instruction at the tip of the address a1, random number data P1010 immediately after the address a1, and a random instruction at the address x1.
- a random command is a command generated according to the above-described test protocol.
- the branch establishment instruction at address a1 is an instruction that establishes a branch.
- the branch establishment instruction for example, there is an unconditional branch establishment instruction that unconditionally branches without referring to a condition code, or a conditional branch instruction establishment instruction.
- the random number data P1010 immediately after the address a1 is data generated by random numbers. Since the random number data is data generated by random numbers, the random number data is not limited to the above test rules.
- FIG. 21B is a diagram illustrating a first example of processing of the arithmetic processing device that executes the test program.
- random number data execution processing by the arithmetic processing device will be described with reference to FIGS. 21A and 21B.
- the instruction reading unit 120 reads an instruction stored in the L1 instruction cache memory 110A, and reads a branch establishment instruction at the address a1 (S1001). Since the read instruction is a branch instruction, the instruction read unit 120 refers to the branch destination address of the branch instruction from the branch history unit 130. However, since there is no branch history, the instruction read unit 120 is immediately after the branch establishment instruction. The random number data P1010 is read (S1002). Note that the processing in S1002 is described by the arrow P1001 in FIG. 21A. As described above, the instruction reading unit 120 speculatively executes the instruction immediately after the branch instruction when the branch history unit 130 has no branch history.
- the integer operation unit 220 calculates the branch destination address of the branch establishment instruction and executes the random number data P1010 (S1003).
- the pipeline control unit 190 compares the branch destination address with the address of the random number data P1010 immediately after the branch establishment instruction, and since these addresses are different, the execution of the random number data P1010 is invalidated (S1004).
- the arithmetic unit 210 and the like execute the random instruction at the branch destination address (S1005). Note that the processing in S1005 is described by the arrow P1002 in FIG. 21A.
- the RSBR 182 outputs the branch history to the branch history unit 130 (S1006).
- the pipeline control unit 190 outputs the value stored in the register to the main storage device (S1007).
- random number data is not limited by the test rules
- problems such as access to a memory other than the test space or exception processing, causing failure in test execution by the arithmetic processing unit There is.
- the invalidation of the execution result due to the speculative execution failure in step S1004 is erased from the entry of the CSE 250A and the resource such as the reservation station, and is not stored in the register 250, the L1 cache memory 110, etc. Also not used. Therefore, the execution of random number data does not cause a state in which a memory other than the test space is accessed or exceptional processing occurs.
- the execution of random number data does not limit the address input to the register, and does not limit the input data or the register address used.
- FIG. 22 is a diagram illustrating an example of an arithmetic processing device that operates by executing a test program.
- the floating point arithmetic unit 210, the integer arithmetic unit 220, the address generation unit 230, the load / store queue 240, the floating point register 250C, and the general-purpose register 250D are displayed by hatching. These hatched configurations have been verified for operation by allowing exception handling and not restricting the use of register addresses.
- an execution unit such as the floating point arithmetic unit 210 can perform exception processing, and by using a register address that is not limited to the test memory area, an execution operation that cannot be verified by a test according to the test protocol is verified.
- FIG. 23A is a diagram illustrating a second example of instruction execution processing of a test program.
- the second example is a second execution example of the test program executed in FIG. 21A by the arithmetic processing unit.
- the test program P1000 shown in FIG. 23A is the same as the test program P1000 shown in FIG.
- FIG. 23B is a diagram illustrating a second example of processing of the arithmetic processing device that executes the test program.
- the random number data execution processing by the arithmetic processing device will be described.
- the branch history unit 130 stores that the branch destination address of the branch instruction at the address a1 is the address x1 by executing the test program shown in FIG. 21B.
- the instruction reading unit 120 reads the instruction stored in the L1 instruction cache memory 110A and reads the branch establishment instruction at the address a1 (S1011). Since the read instruction is a branch instruction, the instruction reading unit 120 refers to the branch destination address of the branch instruction from the branch history unit 130. Since there is a branch history from the branch instruction address a1 to the branch destination address x1, the instruction reading unit 120 reads the instruction at the branch destination address x1 (S1012). The arithmetic unit executes a random instruction at the branch destination address x1 (S1013). Note that the processing in S1013 is described by the arrow P1013 in FIG. 23A.
- the pipeline control unit 190 outputs the value stored in the register to the main storage device (S1014).
- the random number data P1010 is not executed. However, processes other than the execution of the random number data P1010 are the same as the execution of the first test program P1000 described with reference to FIGS. 21A and 21B. Therefore, if the value of the register stored in the main storage device in step S1006 and the value of the register stored in the main storage device in step S1014 are compared, there is no difference between the two values. Can be determined to be normal.
- test program including random number data at branch destination of branch instruction [5.2.2 Test program including random number data at branch destination of branch instruction]
- FIG. 24A is a diagram showing a third example of the instruction execution order of the test program.
- FIG. 24B is a diagram illustrating a third example of the process of the arithmetic processing unit that executes the test program.
- the test program P1100A includes a branch establishment instruction at addresses a2 and a3, a random instruction before address a2, a random instruction P1130 immediately after address a2, a random instruction P1131 at address x2, and a random instruction at address x3. .
- the branch destination of the branch establishment instruction at address a2 is address x2, as indicated by arrow P1122.
- the branch destination of the branch establishment instruction at address a3 is address x3 as indicated by arrow P1123.
- the test program P1100A does not include random number data, but in the example shown in FIGS. 24A and 24B, a branch history is left by executing a branch instruction. Note that even if P1130 is speculatively executed as shown in FIG. 24A, the execution result is invalidated, and may therefore be random number data P1010 shown in FIG. 23A.
- the branch history unit 130 When executing the test program P1100A, in the initial state, it is assumed that the branch history unit 130 does not have a branch instruction execution history.
- the instruction reading unit 120 reads an instruction stored in the L1 instruction cache memory 110A, and reads a branch establishment instruction at the address a2 (S1101). Since the branch history unit 130 has no branch history, the instruction reading unit 120 reads the random instruction P1130 immediately after the branch establishment instruction (S1102). Note that the processing in S1102 is described by an arrow P1121 in FIG. 24A.
- the integer arithmetic unit 220 calculates the branch destination address of the branch establishment instruction at the address a2 (S1103).
- the pipeline control unit 190 invalidates the execution of the random instruction P1130 because the branch destination address and the address of the random number data immediately after the branch establishment instruction are different (S1104).
- the computing unit executes the random instruction P1131 at the branch destination address x2 of the branching instruction at the address a2 (S1105). Note that the processing in S1105 is described by an arrow P1124 in FIG. 24A.
- the RSBR 182 outputs the branch history to the branch history unit 130 (S1105).
- the instruction reading unit 120 reads the branch establishment instruction at the address a3 (S1106). Since the branch history unit 130 does not have a branch history related to the branch instruction at the address a3, the instruction reading unit 120 reads the random instruction P1131 immediately after the branch establishment instruction at the address a3 (S1107). Note that the processing in S1107 is described by the arrow P1124 in FIG. 24A.
- the integer arithmetic unit 220 calculates the branch destination address of the branch establishment instruction at the address a3 (S1108).
- the pipeline control unit 190 compares the calculated branch destination address of the branch instruction with the address of the random number data immediately after the branch establishment instruction at the address a3. Since both are different in this example, the pipeline control unit 190 invalidates the execution of the random instruction (S1109).
- the arithmetic unit executes the random instruction P1131 at the branch destination address x3 that is the branch destination of the branch establishment instruction a3 (S1110). Note that the processing in S1110 is described by an arrow P1122 in FIG. 24A.
- the RSBR 182 outputs the branch history to the branch history unit 130 (S1111).
- the pipeline control unit 190 outputs the value stored in the register to the main memory (S1112).
- the execution of the random instruction P1130 is invalidated.
- the random instruction P1131 is executed twice in steps S1105 and S1108. However, since the second execution is invalidated in step S1109, the random instruction P1131 is executed only once in the execution of the test program P1100A. It is running. Therefore, in the execution of the test program P1100A, the random instructions P1130 and P1131 are executed once.
- FIG. 25A is a diagram showing a fourth example of the instruction execution order of the test program.
- a test program P1100B shown in FIG. 25A is a test program obtained by changing a part of the test program 1100A shown in FIG. 24A.
- the test program 1100B changes the branch establishment instruction at the address a2 to a branch failure instruction. Since the instruction at address a2 becomes a branch failure instruction, in the test program P1100B shown in FIG. 25A, if the instruction immediately after the branch instruction at address a2 is random data, the random data is changed to a random instruction. .
- a branch failure instruction is an instruction in which a branch is not established.
- the branch failure instruction includes, for example, an unconditional branch failure instruction that does not branch unconditionally without referring to a condition code, or a conditional branch instruction failure instruction. If an unconditional branch failure instruction is generated as a branch failure instruction, a branch is not established regardless of the condition code setting instruction generated before the unconditional branch failure instruction. There are no restrictions. On the other hand, when a conditional branch instruction is generated as a branch failure instruction, the condition code setting instruction generated before the conditional branch instruction is generated so that the branch condition of the conditional branch instruction is not satisfied. .
- FIG. 25B is a diagram showing a fourth example of processing of the arithmetic processing unit that executes the test program.
- FIG. 25A and FIG. 25B the execution processing of random number data by the arithmetic processing unit will be described.
- the branch history unit 130 When executing the test program P1100B, the branch history unit 130 has a branch history from the address a2 to the address x2 and a branch history from the address a3 to the address x3.
- the instruction reading unit 120 reads an instruction stored in the L1 instruction cache memory 110A and reads a branch failure instruction at the address a2 (S1151). Since the branch history unit 130 has a branch history from the address a2 to the address x2, the instruction reading unit 120 reads the random number data P1132 at the address x2 (S1152). Note that the processing in S1152 is described by an arrow P1122 in FIG. 25A.
- the integer operation unit 220 calculates the branch destination address of the branch failure instruction at the address a2 (S1153).
- the pipeline control unit 190 invalidates the execution of the random number data P1132, because the calculated branch destination address x2 is different from the address of the random instruction immediately after the branch failure instruction (S1154).
- the arithmetic unit executes the random instruction P1130 immediately after the branch failure instruction (S1155). Note that the processing in S1155 is described by an arrow P1124 in FIG. 25A.
- the instruction reading unit 120 After execution of P1130, the instruction reading unit 120 reads the branch establishment instruction at the address a3 (S1156). Since the branch history unit 130 has a branch history related to the branch instruction at the address a3, the instruction reading unit 120 reads the random instruction at the address x3 at the branch destination of the branch establishment instruction (S1157). Note that the processing in S1157 is described by the arrow P1123 in FIG. 25A.
- the integer arithmetic unit 220 calculates the branch destination address of the branch establishment instruction at the address a3 (S1158).
- the RRBR 182 outputs the branch history to the branch history unit 130 (S1159).
- the pipeline control unit 190 outputs the value stored in the register to the main memory (S1160).
- random number data is not executed.
- the random instruction execution processing other than the random data execution is the same as the execution of the test program P1100B described with reference to FIGS. 25A and 25B in that the random instruction P1131 is executed once. Therefore, if there is no difference between the values stored in the test space related to the execution of the test program P1100A and the values stored in the test space related to the execution of the test program P1100B, the arithmetic processing unit Can be determined to be normal.
- step S1112 If the value of the register stored in the main storage device in step S1112 and the value of the register stored in the main storage device in step S1160 are compared, and there is no difference between the two values, the operation of the arithmetic processing unit is performed. Can be determined to be normal.
- the arrangement position of the random number data in the test program is not limited to immediately after the branch instruction, but may be a branch destination.
- FIG. 26 is a diagram showing an example of changing the number of instructions of random number data.
- FIG. 26 shows a case where the number of instructions of the random number data P1010 shown in the test program P1000 is changed and executed repeatedly.
- the random number data P1010A of the test program P1000A shown in FIG. 26 is random number data in which the number of random number data is increased by three with respect to the random number data P1010 shown in FIG. 21A.
- the random number data P1010B of the test program P1000B shown in FIG. 26 is random number data in which the number of random number data is increased by nine with respect to the random number data P1010A shown in FIG. 21A.
- the execution of the ⁇ first time> test program P1000 shown in FIG. 26 is the same as the execution of P1000 shown in FIG. 21A.
- the test program P1000A is executed after the execution history of the branch establishment instruction at the address a1 in the branch history unit 130 is deleted after the test program P1000 shown in FIGS. 23A and 23B is executed twice. That is, it is a test program used for the third test program execution test.
- the test program P1000B is executed after erasing the execution history of the branch establishment instruction at the address a1 in the branch history unit 130 after executing the test program P1000A. That is, this is the fourth test program execution test.
- the number of instructions in the random number data P1132 shown in FIG. 25A is changed so as to increase from the number of instructions executed last time. Even a test program with random number data at the branch destination of a branch instruction can perform tests with different numbers of random data instructions.
- FIG. 27 is a diagram illustrating an example of an instruction sequence including a branch establishment instruction.
- 800 is an example of a test instruction sequence including a branch establishment instruction.
- the test instruction sequence 800 is an example in which the test program P1000 shown in FIG. 21A is indicated by a command sentence defined by the command specification of SPARC (registered trademark).
- the test instruction sequence 800 has instruction data 802 specified by an address 801.
- a decode instruction 803 shown in FIG. 27 is an instruction obtained by decoding the instruction data 802.
- the branch establishment instruction 810 corresponds to the branch establishment instruction at the address a1 in FIG. 21A.
- the random number data instruction sequence 811 corresponds to the random number data P1010 shown in FIG. 21A.
- the rewritten random number data 812 is an example of random number data that is rewritten by performing an AND operation and an OR operation on the instruction portion of the random number data described with reference to FIGS.
- the branch establishment instruction 810 is an unconditional branch establishment instruction “BA, a 0x1004ec” with the address “0x1004ec” at the address “0x1004ac” as a branch destination address.
- the random number data instruction sequence 811 “15” instructions are generated. Seven instructions in the random number data instruction sequence 811 are rewritten to predetermined instructions by AND operation and OR operation so that the instruction decoder can decode them. In the example shown in FIG. 27, the rewritten and generated instructions are all branch instructions, and “BCS”, “BE”, “BGU”, “BNE”, “BLEU” described using the table 710 shown in FIG. "," BVC ".
- 813 in FIG. 27 indicates an instruction that cannot be decoded.
- the instruction decoder 170 changes an instruction that cannot be decoded to data “unknown”. “Unknown” is the same as the “NOP (No Operation)” instruction, and the execution unit does not execute any instruction when “unknown” is read. However, when the “unknown” instruction is generated, the program counter and the instruction number counter are incremented by one. As described above, it is understood that the “unknown” data is reduced by rewriting the predetermined instruction by AND operation and OR operation so that the instruction decoder can decode.
- FIG. 28 is a diagram illustrating an example of an instruction string including a branch unsuccessful instruction.
- Reference numeral 850 is an example of a test instruction sequence including a branch establishment instruction.
- the test instruction sequence 850 is an example in which the test program P1100B shown in FIG. 25A is indicated by a command sentence defined by the SPARC (registered trademark) instruction specifications.
- the test instruction sequence 850 includes instruction data 852 specified by an address 851.
- the decode instruction 853 shown in FIG. 28 is an instruction obtained by decoding the instruction data 852.
- the branch failure instruction 860 corresponds to the branch failure instruction at the address a2 in FIG. 25A.
- the random instruction sequence 861 corresponds to the random instruction P1131 in FIG. 25A.
- the branch establishment instruction 862 corresponds to the branch establishment instruction at the address a3 in FIG. 25A.
- the branch failure instruction 860 is an unconditional branch failure instruction “BE”.
- the rewritten random number data 864 is an example of random number data that is rewritten by performing an AND operation and an OR operation on the command portion of the random number data described with reference to FIGS.
- the number of random number data instructions is “5” instructions.
- Five instructions in the random number data instruction sequence 863 are rewritten into predetermined instructions by AND operation and OR operation so that the instruction decoder can decode them.
- the rewritten and generated instructions are all branch instructions, and are “BL”, “BVC”, “BCS”, and “BA”.
- Test Program Generation Processing executes the test program generation program 910 to generate the test program 920 in the storage area of the main storage device 520.
- FIG. 29A and FIG. 29B are diagrams showing an example of test program generation processing.
- the test program generation device acquires parameters from the parameter table 940 (S1301).
- the test program generation device generates random number data (S1302).
- the test program generation device generates random number data using the seed value S of the parameter table 940, and writes the random number data in the storage area of the main storage device 520 that stores the test program.
- the test program generation device determines whether the instruction number counter is a number for generating a trap instruction (S1303).
- the instruction number counter is integer data indicating the number of generated instructions.
- the instruction number counter is stored in a register such as the control register 250B shown in FIG. Further, whether or not the instruction counter is a number that generates a trap instruction is determined by whether or not the number of instructions from the previously generated trap instruction is “512” that is the trap instruction generation interval C in the parameter table 940.
- the test program generation device If the instruction counter is the number that generates a trap instruction (S1303 Yes), the test program generation device generates a trap instruction (S1331), and further executes step S1332.
- the test program generating apparatus determines whether the instruction number counter is the number of instructions for generating random number data (S1304). Whether the instruction counter is the number of instructions for generating random number data is determined based on whether or not the number of instructions from the branch instruction immediately before the previously generated random number data has reached the random number data generation interval R.
- the test program generation device selects an instruction code of an instruction to be arbitrarily generated from the instruction conversion table 930. (S1305).
- the test program generation apparatus acquires AND data and OR data corresponding to the selected instruction code from the instruction conversion table 930, and rewrites the random number data written in the arithmetic processing unit 510 with the acquired AND data and OR data ( S1306).
- S1305 By rewriting step S1305, as described with reference to FIGS. 1 to 3, a random instruction according to the test protocol is generated.
- the test program generation device updates the counter (S1307).
- the number of instructions to be added to the counter by the counter update processing in S1307 is the number of instructions generated in S1305 to S1306, for example, “1”.
- the test program generation device executes Step S1332.
- test program generation device determines to generate a branch success instruction sequence (S1311: Yes)
- the test program generation device generates a branch success instruction (S1312).
- the branch establishment instruction generated is, for example, a branch establishment instruction 810 shown in FIG.
- the test program generation device selects random number data of the number of instructions D from random number data stored in the main storage device 520 (S1313).
- the random number data of the instruction number D selected in step S1313 is, for example, the random number data instruction sequence 811 shown in FIG.
- the test program generating device rewrites the random number data of the selected D command statements by AND and OR operations (S1314).
- the random number data rewritten in step S1314 is, for example, the rewritten random number data 812 shown in FIG.
- the test program generation device updates the instruction counter (S1315).
- the number of instructions to be added to the instruction counter by the instruction counter update processing in S1315 is the number of instructions generated in S1312 and S1313.
- the instruction number “1” of the branch establishment instruction and the instruction number D of the random number data This is a number obtained by adding 1 to the number obtained by adding “3”.
- the test program generation device executes Step S1332.
- the test program generation device determines whether to generate a branch success instruction sequence ( S1311).
- An example that is not a branch success instruction sequence that is, an example of a branch failure establishment sequence, is a branch failure establishment instruction at address a2 of the test program P1100B of FIG. 25A.
- the test program P1100B of FIG. 25A is generated, the test program P1100A has already been executed once by the test control device.
- the test program generation device refers to the number of test executions of the test log data 960, etc., and determines that the test program being generated is the test program P1100B to be executed next to the test program P1100A. Is determined to be generated.
- test program generation device When it is determined that the test program generation device generates an instruction sequence with branch failure (S1311: No), the test program generation device generates a branch failure instruction (S1321).
- the generated branch failure instruction is, for example, a branch failure instruction 860 shown in FIG.
- the test program generation device generates a random instruction having the number of instructions D (S1322).
- the generated random instruction of the number D of instructions is, for example, a random instruction sequence 861 shown in FIG.
- the test program generation device generates a branch establishment instruction (S1323).
- the branch establishment instruction generated is, for example, the branch establishment instruction 862 shown in FIG.
- the test program generation device selects a random number instruction having the number of instructions D (S1324).
- the selected random number instruction D is, for example, the random number data instruction sequence 863 shown in FIG.
- the test program generating device rewrites the random number data of the selected D command statement by AND and OR operations (S1325).
- the random number data rewritten in step S1325 is, for example, the rewritten random number data 864 shown in FIG.
- the test program generation device updates the instruction counter (S1326).
- the number of instructions to be added to the instruction counter by the instruction counter update processing in S1326 is the number of instructions generated in S1321 to S1324.
- the number of instructions for branch establishment instructions is 1, the number of instructions for random instructions D, and the establishment of branches. This is a number obtained by further adding 1 to the number obtained by adding the instruction number 1 of the instruction and the instruction number D of the random number data instruction.
- the test program generation device executes step S1332.
- the test program generation device determines whether the test program has been generated up to the final command (S1332). In step S1332, the test program generation apparatus can determine whether or not the counter has reached the instruction generation number N.
- test program generating apparatus executes Step S1303 again.
- the test program generation device ends the test program generation process.
- FIG. 30 is a diagram illustrating an example of a test program execution process.
- the test control apparatus executes the test program 920 to start the test program execution process.
- the test control apparatus executes an initialization process (S1401).
- the initialization process is to store normalized data in, for example, the general-purpose register 250D as described with reference to FIG. This is to execute a random instruction in the test program.
- the test control device executes an instruction other than the trap instruction (S1402).
- the instruction execution other than the trap instruction corresponds to the execution of the test program shown in FIGS. 23B, 24B, 25B, and 26, for example.
- the test control device executes a trap command (S1403).
- the test control device outputs the data stored in the register 250 to the log storage area of the main storage device 520 (S1404).
- the test control apparatus moves the test result 950 in the main storage device 520 to the log storage area in the main storage device (S1405).
- the test control apparatus executes the processes of S1402 to S1405 until the final instruction of the test program is reached, and ends the test program execution process.
- FIG. 31 is a diagram illustrating an example of test program generation processing and execution processing.
- the test program generation device generates a test program (S1301 to S1332). Steps S1301 to S1332 are the processes described with reference to FIGS. 29A and 29B.
- the test control device executes a test program (S1401 to S1405). Steps S1401 to S1405 are the processes described with reference to FIG.
- the test program generation device determines whether or not the seed value E has been tested (S1501).
- the seed value E is a seed value used for the last random number generation. When the test of the seed value E is not performed (No in S1501), the test program generation device adds 1 to the current seed value (S1502), and executes Steps S1301 to S1332 again.
- the test control device executes a comparison process of the test results stored in the test log data 960 of the main storage device (S1503), and a test program generation process And the execution process ends.
- the comparison process is a comparison of test results generated by executing the same test instruction sequence. For example, a test result by execution of the test program P1000 shown in FIG. 21A and a test result by execution of the test program P1000 shown in FIG. 23A.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
命令読出部が、記憶部から分岐命令を読み出すステップと、読み出した読出分岐命令の分岐履歴が分岐履歴部に無い場合、分岐制御部が、命令読出部に、分岐命令の後続命令の読み出しを指示するステップと、命令読出部が、指示に従って、試験規約に限定されない乱数データを、分岐命令の後続命令として読み出すステップと、演算部が、読出分岐命令の分岐先アドレスを計算するとともに、乱数データを命令として実行するステップと、分岐制御部が、計算した分岐先アドレスと、乱数データのアドレスとが異なる場合、乱数データの実行結果を無効化するステップと、を有する試験方法が提供される。
Description
本発明は、試験方法、演算処理装置、試験プログラム、試験プログラム生成方法、試験プログラム生成装置、及び試験プログラム生成プログラムに関する。
演算処理装置の試験方法として、試験対象である演算処理装置に試験プログラムを実行させて、実行結果の妥当性を判断する方法がある。実行結果の妥当性判断は、例えば、試験対象の演算処理装置に試験プログラムを実行させた結果と試験プログラムの期待値とを比較することにより行われる。試験には、例えば、設計された演算処理装置の論理回路が設計仕様の通りに設計されているか否かを確認する論理シミュレーション試験と、製造された実機の演算処理装置が動作仕様の通りに動作するか否かを確認する実機動作試験とがある。
演算処理装置の試験において、無制限にメモリの全記憶領域へのアクセスを可能にすると、試験領域を超えたメモリの不特定な領域に試験結果が書き込まれてしまい、試験が不可能となる。そのため、試験では、所定の試験領域の範囲に制限されたメモリの記憶領域にアクセスする命令が用いられる。しかしながら、現実の演算処理装置は、試験領域の範囲を超えたメモリの全記憶領域を使用することができるため、試験領域の範囲に制限された試験では、演算処理装置の試験としては十分ではない。そのため、制限された記憶領域のみを指定する命令では、現実の演算処理装置の動作を十分に試験することができない。
開示の試験方法は、演算処理装置の投機実行機能を用いて試験領域の範囲等の試験規約に限定されない乱数データを、分岐成功命令の後続命令として投機的に実行し、分岐命令の確定後、投機実行した結果を無効にすることにより、試験領域の範囲を超えた記憶領域に現実にアクセスすることなく、試験規約に限定されずに演算処理装置の動作を試験することを目的とする。
開示の試験方法は、命令を記憶する記憶部、分岐命令のアドレスと前記分岐命令の分岐先アドレスとを対応付けた分岐履歴を記憶する分岐履歴部、前記記憶部から命令を読み出す命令読出部、前記命令読出部が読み出した命令を実行する演算部、及び、前記分岐命令の分岐先命令の投機実行に失敗すると前記投機実行した分岐先命令の実行結果を無効化する分岐制御部、を有する演算処理装置を試験する試験方法であって、前記命令読出部が、前記記憶部から分岐命令を読み出すステップと、前記読み出した読出分岐命令の分岐履歴が前記分岐履歴部に無い場合、前記分岐制御部が、前記命令読出部に、前記分岐命令の後続命令の読み出しを指示するステップと、前記命令読出部が、前記指示に従って、試験規約に限定されない乱数データを、前記分岐命令の後続命令として読み出すステップと、前記演算部が、前記読出分岐命令の分岐先アドレスを計算するとともに、前記乱数データを命令として実行するステップと、前記分岐制御部が、前記計算した分岐先アドレスと、前記乱数データのアドレスとが異なる場合、前記乱数データの実行結果を無効化するステップと、を有する。
開示の試験方法は、試験規約に限定されない演算処理装置の動作を投機実行として試験することができる。
以下、図面を参照して、試験方法、演算処理装置、試験プログラム、試験プログラム生成方法、試験プログラム生成装置、及び試験プログラム生成プログラムを説明する。
〔1〕試験規約による試験の制限
初めに、試験規約による試験の制限について、〔1.1〕メモリアクセス命令、〔1.2〕演算命令、〔1.3〕分岐命令を例に説明する。なお、以下に示す試験プログラムは、例示のために、SPARC(Scalable Processor ARChitecture)(登録商標)のV9(Version 9)命令仕様で規定される命令セットを用いて説明する。
初めに、試験規約による試験の制限について、〔1.1〕メモリアクセス命令、〔1.2〕演算命令、〔1.3〕分岐命令を例に説明する。なお、以下に示す試験プログラムは、例示のために、SPARC(Scalable Processor ARChitecture)(登録商標)のV9(Version 9)命令仕様で規定される命令セットを用いて説明する。
〔1.1〕メモリアクセス命令
図1は、試験規約に従うメモリアクセス命令の一例を示す図である。図1に示すメモリアクセス命令は、倍精度浮動小数点ストア(STDF:STore Double Floating-point)命令である。
図1は、試験規約に従うメモリアクセス命令の一例を示す図である。図1に示すメモリアクセス命令は、倍精度浮動小数点ストア(STDF:STore Double Floating-point)命令である。
試験規約に従うメモリアクセス命令、メモリアクセス命令で格納するメモリ域は試験対象メモリ空間を外れないように、生成される。汎用レジスタの中から試験対象メモリ空間を指すREG0~7のメモリアクセス用レジスタが定義され、「rs(resister source)1」のポインタアドレスと 「rs2」のディスタンスの値に、定義したメモリアクセス用レジスタを選択するメモリサクセス命令が生成される。つまり、試験メモリ空間を指すレジスタを予め定義し、命令生成時に定義したレジスタをメモリアクセス命令のレジスタ(rs1,rs2)に設定することで、試験メモリ空間を外れたメモリアクセス命令の生成を排除する事が出来る。従って、メモリアクセス用レジスタを定義する事で、試験メモリ空間を外れたメモリアクセスはなくなるが、特定のレジスタのみがメモリアクセスに使われることになり、試験命令のメモリアクセス命令においてrs1、rs2に全ビットパターンを網羅することが出来ない。
〔1.2〕演算命令
図2は、試験規約に従う演算命令の一例を示す図である。図2に示す演算命令は、浮動小数点の乗算及び除算(FMULD:Floating-point MULtiply and Divide)命令である。
図2は、試験規約に従う演算命令の一例を示す図である。図2に示す演算命令は、浮動小数点の乗算及び除算(FMULD:Floating-point MULtiply and Divide)命令である。
試験規約に従う演算命令のソースレジスタは、演算例外を発生させないために、入力専用のレジスタを使用する。演算例外には、例えば、IEEE(The Institute of Electrical and Electronics Engineers, Inc.)754のオーバーフロー例外処理がある。例えば、浮動小数点演算例外割込みを発生させないと試験規約が規定される場合、演算命令の入力には、演算例外を生じさせない正規化データを持つレジスタしか選択できなくなる。また、演算結果を格納するレジスタは演算を繰返すたびに、データが変化し、最後には浮動小数点演算例外割込みを発生させうるデータになる可能性があるので、演算結果を格納するレジスタも演算命令の入力レジスタには使用できない。浮動小数点演算命令の入力には、入力専用のレジスタであり、且つ正規化されたデータが格納されるレジスタに絞られる。従って、図2に示されるように、入力専用レジスタと出力専用レジスタが規定されるので、例えば、演算入力である「rs1」と「rs2」は最上位のビットは常に0であり1に設定できず、同様に演算出力であるrdの最上位は1固定であり0の設定はできなくなる。
〔1.3〕分岐命令
図3は、試験規約に従う分岐命令の一例を示す図である。図3に示す試験命令は、相対分岐命令であるコール(CALL)命令である。
図3は、試験規約に従う分岐命令の一例を示す図である。図3に示す試験命令は、相対分岐命令であるコール(CALL)命令である。
試験規約に従う分岐命令は、正常動作が保証するために、分岐命令の分岐先が試験メモリ空間を超えないように生成される。コール命令は、最大±2ギガバイト離れたアドレス(disp30で指定)に分岐する事が可能であるが、相対分岐の全ビットパターンを網羅するために、4ギガバイト以上の試験命令空間を用意する事は現実的ではない。たとえば、64MBの命令空間で最大分岐した場合にdisp30の24ビットまで使われるが、それ以上のビットに1が立つ事はないように、コール命令は生成される。
以上のように、試験実行結果の妥当性を検証するため、試験規約に従って試験命令は生成される。しかしながら、試験規約に従う試験命令の実行では、演算処理装置が実際に命令を実行する際の動作を検証することはできない。そこで、一実施形態に係る試験方法では、以下に示すように、乱数データを、試験規約に従わない試験命令を投機実行することで、試験規約に限定されない演算処理装置の動作を試験する。
以下、〔2〕試験規約に従わない乱数データの投機実行を説明する。
〔2〕試験規約に従わない乱数データの投機実行
試験プログラムは、分岐命令と、分岐命令の後続に、試験規約に限定されない乱数データとを含む。演算処理装置は、試験規約に限定されない乱数データを、メモリアクセス直前まで投機実行し、分岐確定後、投機実行の実行結果を無効にして、試験規約に限定されない投機実行動作を試験する。
試験プログラムは、分岐命令と、分岐命令の後続に、試験規約に限定されない乱数データとを含む。演算処理装置は、試験規約に限定されない乱数データを、メモリアクセス直前まで投機実行し、分岐確定後、投機実行の実行結果を無効にして、試験規約に限定されない投機実行動作を試験する。
図4は、演算処理装置による試験規約に従わない乱数データの投機実行動作の一例を示す図である。10は、試験プログラムの例であり、20は、試験プログラム10実行時の演算処理装置によるパイプライン処理を示すタイムチャートである。パイプライン処理は、例えば、1つの命令を、命令フェッチ(IF)、命令デコード(RF)、命令実行(EX)、オペランドフェッチ(MEM)、ライトバック(WB)の各ステージに分割して、実行することで、複数の命令を並列実行する処理である。
命令フェッチステージは、命令キャッシュから命令を取り出す。命令デコードステージは、フェッチした命令をデコードする。命令実行ステージは、デコード結果とフェッチしたレジスタの値を基に命令を実行する。例えば、分岐命令を実行する場合は、分岐先アドレスを計算する。オペランドフェッチステージは、命令実行ステージで計算したアドレスに対応するデータをデータキャッシュからロードする。ライトバックステージは、命令実行ステージで計算した結果、又は、オペランドフェッチステージでフェッチしたオペランドをレジスタに格納する。ストア動作の場合はデータキャッシュに書き込む。
試験プログラム10のアドレス1、2、及び5にある命令は、試験規約に従った命令である。アドレス3にある分岐命令は、後続命令である乱数データを投機実行させ、且つ、分岐予測を失敗させる分岐命令である。アドレス4にある乱数データは、試験規約に従わない乱数データである。なお、試験規約とは、試験実行後、演算処理装置の不具合の検証を明確にするために予め決められた規約である。例えば、試験規約は、(1)演算例外の不発生、(2)入出力レジスタ指定の制限、(3)メインメモリの試験対象記憶領域の制限がある。試験規約の詳細は、「〔2〕試験規約に従わない乱数データ」において後述する。
演算処理装置は、命令1及び2を実行すると、命令フェッチステージからライトバックステージを実行する。命令1及び2は、試験規約に従うデータであるので、ライトバックによって、メインメモリの試験対象記憶領域へのストアが行われる。
試験プログラム10のアドレス3にある分岐命令を実行すると、分岐命令の分岐先アドレスが確定するのは、2サイクル後の命令実行ステージであるので、ストール回避のために、アドレス4にある乱数データを、分岐先命令と予測して投機実行する。演算処理装置は、命令実行ステージで分岐命令の分岐先アドレスを計算すると、分岐先アドレスがアドレス5であることが確定するので、矢印15に示すように、分岐先アドレスであるアドレス5にある分岐先命令を実行する。
一方、投機実行した乱数データは、予測が失敗したために、ハンチングで表示するように、乱数データの実行結果をメモリに格納するライトバックを行なうことなく、演算処理装置は、実行結果を無効化する。
試験規約に限定されない乱数データを、分岐命令の後続命令としてメモリアクセス直前まで投機実行し、分岐確定後、投機実行の実行結果は無効にされるので、試験プログラム10の実行は、試験規約に限定されない動作を投機実行として試験することができる。
以下に、〔3〕情報処理装置、及び、試験プログラムを実行する〔4〕演算処理部、〔5〕試験規約に限定されない乱数データの生成、〔6〕試験規約に従わない乱数データを含む試験プログラムの実行動作、〔7〕試験規約に従わない乱数データを含む命令列、〔8〕試験プログラムの生成処理フロー、〔9〕試験プログラムの実行処理フローについて順に説明する。
〔3〕情報処理装置
図5は、情報処理装置の一例を示す図である。図5に示すように、情報処理装置500は、演算処理装置510、主記憶装置520、通信部530、外部記憶装置540、ドライブ装置550、及びI/Oコントローラ560を有する。
図5は、情報処理装置の一例を示す図である。図5に示すように、情報処理装置500は、演算処理装置510、主記憶装置520、通信部530、外部記憶装置540、ドライブ装置550、及びI/Oコントローラ560を有する。
図5に示すように、演算処理装置510は、演算処理部100、L2キャッシュコントローラ512、L2キャッシュメモリ514、及びメモリアクセス制御部516を有する。また、演算処理装置510は、I/Oコントローラ560を介して、通信部530、外部記憶装置540、及びドライブ装置550に接続する。
演算処理装置510は、主記憶装置520に記憶されたプログラムを実行することで、主記憶装置520からデータをロードし、ロードしたデータを演算して、主記憶装置520に演算結果をストアする装置である。演算処理装置510は、例えば、CPU(Central Processing Unit)である。
メモリアクセス制御部516は、主記憶装置520からL2キャッシュメモリ514へのデータのロード、L2キャッシュコントローラ512から主記憶装置520へのデータのストア等を行うユニットである。
L2キャッシュメモリ514は、主記憶装置520が記憶するデータの一部を保持する。また、L2キャッシュメモリ514は、演算処理部100が有するL1キャッシュメモリ(L1 Cache Memory)110が保持するデータを包含する。
L2キャッシュコントローラ512は、演算処理部100からのアクセス頻度が高いデータをL2キャッシュメモリ514に格納し、アクセス頻度が低いデータをL2キャッシュメモリ514から主記憶装置520に追い出すように動作する。
演算処理部100は、例えばプロセッサコアであり、上記した演算処理装置510の演算機能を有する。演算処理部100の詳細は、図6~図8を用いて後述する。なお、図5に示される演算処理部の個数は、1個であるが、この個数に制限されない。演算処理装置510が複数の演算処理部を有する場合、1つの演算処理部がマスターとして動作し、試験プログラムを実行するとともに、スレーブとしての他の演算処理部に、試験プログラムを分担して実行させるように動作する。このようなマスターの動作は、試験プログラム内に命令列として記述され、その命令列を実行することで実現してもよい。
I/Oコントローラ560は、演算処理装置510と、他のユニットとの接続を制御する入出力制御装置である。I/Oコントローラ560は、例えば、PCI Express(Peripheral Component Interconnect Express)などの規格に従って動作する。
主記憶装置520は、データやプログラムを記憶する装置である。演算処理装置510は、I/Oコントローラ560を介することなく、主記憶装置520にアクセスすることができる。主記憶装置520は、例えば、DRAM(Dynamic Random Access Memory)である。
外部記憶装置540は、主記憶装置520に格納されるプログラム及びデータを記憶する不揮発性の記憶装置である。外部記憶装置540は、磁気ディスクを用いたディスクアレイ、又は、フラッシュメモリを用いたSSD(Solid State Drive)等である。
通信装置530は、通信経路としてのネットワーク1100と接続し、ネットワーク1100に接続された他の情報処理装置と、情報処理装置500との間で、データを送受信する。通信装置530は、例えば、NIC(Network Interface Controller)である。
ドライブ装置550は、例えば、フロッピー(登録商標)ディスクやCD-ROM(Compact Disc Read Only Memory)、DVD(Digital Versatile Disc)などの記憶媒体590を読み書きする装置である。ドライブ装置550は、記憶媒体590を回転させるモータや記憶媒体590上でデータを読み書きするヘッド等を含む。なお、記憶媒体590は、プログラムを格納することができる。例えば、記憶媒体590は、後述の試験プログラム生成プログラム910、試験プログラム920を格納することができる。ドライブ装置550は、ドライブ装置550にセットされた記憶媒体590からプログラムを読み出す。演算処理装置510は、ドライブ装置550により読み出されたプログラムを、主記憶装置520又は2次記憶装置540に格納する。
〔4〕演算処理部
次に、図6~図8を参照して、演算処理部100を説明する。
図6は、演算処理部の一例を示す図である。図6に示すように、演算処理部100は、L1キャッシュメモリ110、命令読出部120、分岐履歴部130、命令実行部140、パイプライン制御部190、及び、レジスタ250を有する。
次に、図6~図8を参照して、演算処理部100を説明する。
図6は、演算処理部の一例を示す図である。図6に示すように、演算処理部100は、L1キャッシュメモリ110、命令読出部120、分岐履歴部130、命令実行部140、パイプライン制御部190、及び、レジスタ250を有する。
L1キャッシュメモリ110は、命令又はデータを記憶する記憶装置である。L1キャッシュメモリ110は、主記憶装置520が記憶するデータの一部を記憶する。L1キャッシュメモリ110は、演算処理部100の内部に設けられており、主記憶装置520より演算処理部100に近い位置にある。演算処理部100が、L1キャッシュメモリ110に記憶されているデータにアクセスする場合(以下、「キャッシュヒット」という)、演算処理部100は短時間で対象データにアクセスすることが出来る。一方、演算処理部100が、キャッシュメモリに記憶されていないデータにアクセスする場合(以下、「キャッシュミス」という)、L1キャッシュメモリ110の下位階層にあるL2キャッシュメモリ514や、主記憶装置520からデータを読み出すため、対象データへのアクセス時間は長くなる。そのため、キャッシュミスが生じないように、演算処理部100からのアクセス頻度が高い命令又はデータはL1キャッシュメモリ110に記憶される。
L1キャッシュメモリ110は、例えば、SRAM(Static Random Access Memory)である。
分岐履歴部130は、命令実行部140から分岐命令の実行履歴として、分岐命令のアドレスと分岐命令の分岐先アドレスとを受け取り、分岐命令のアドレスと分岐命令の分岐先アドレスとを対応付けて記憶する。分岐履歴部130は、命令読出部120から分岐命令を受け取ると、受け取った分岐命令に関する分岐履歴を記憶していれば、その分岐命令の分岐先アドレスを命令読出部120に出力する。
命令読出部120は、L1キャッシュメモリ110から命令を読み出す。命令読出部120は、L1キャッシュメモリ110から分岐命令を読み出した場合、分岐履歴部130に、読み出した分岐命令の実行履歴が分岐履歴部130にあるか否かを確認する。読み出した分岐命令の実行履歴が分岐履歴部130にある場合、命令読出部120は、分岐履歴部130から分岐先アドレスを受け取り、L1キャッシュメモリ110から分岐先アドレスに記憶された命令を読み出す。
命令実行部140は、命令読出部120がL1キャッシュメモリ110から読み出した命令を受け取ると、命令により特定される処理を、レジスタ250に記憶されるデータに対して実行する。命令により特定される処理とは、例えば、浮動小数点演算、整数演算、アドレス生成、分岐命令実行、レジスタ250に記憶されるデータをL1キャッシュメモリ110へストアするストア動作、L1キャッシュメモリ110に記憶されるデータをレジスタ250にロードするロード動作である。命令実行部140は、浮動小数点演算、整数演算、アドレス生成、分岐命令実行、及びストア又はロード動作を行う実行部を備えて、それらの実行部を用いて上記命令処理を実行する。
パイプライン制御部190は、同じユニットで複数の命令をオーバーラップさせて実行するために、演算処理部100に含まれる各ユニットに関する処理を、図4に示すようにサイクルに同期して実行するように制御する。パイプライン制御部190は、分岐命令の分岐先命令の投機実行に失敗すると予測した投機実行の実行結果を無効化し、投機実行が成功した場合には、実行結果をレジスタ250、又は、L1キャッシュメモリ110にストアする投機実行制御を行う分岐制御部として動作する。
レジスタ250は、データを記憶するメモリの一種である。レジスタ250には、命令実行部140の計算結果、主記憶装置520に読み書きする際のアドレス、演算処理部100の動作状態などを記憶する。
図7は、分岐履歴部の一例を示す図である。図7に示すように、分岐履歴部130は、分岐履歴記憶部132、比較回路134、リターンアドレス演算部136、リターンアドレス記憶部137、及び選択回路138を有する。
分岐履歴記憶部132は、分岐命令格納部132-1、分岐先命令格納部132-2、及び分岐種類情報格納部132-3を有する。分岐履歴記憶部132は、例えば、ブランチヒストリテーブル(BHT:Branch History Table)であり、命令実行部140から分岐命令の実行結果を受け取る。分岐命令の実行結果は、分岐命令のアドレスである分岐命令アドレスと、分岐命令の分岐先アドレスと、分岐種類情報とを含む。分岐命令アドレスとは、主記憶装置520における分岐命令の格納場所を特定するアドレスである。分岐先アドレスとは、主記憶装置520における分岐命令の分岐先命令の格納場所を示すアドレスである。分岐種類情報とは、例えば、サブルーチンをコールするコール命令、サブルーチンからメインルーチンに戻るリターン命令、及び、それ以外の分岐命令を特定する情報である。
分岐履歴記憶部132は、分岐命令アドレスの上位アドレスである分岐命令上位アドレスを分岐命令格納部132-1に、分岐先アドレスを分岐先命令格納部132-2に、分岐種類情報を分岐種類情報格納部132-3にそれぞれ記憶する。各情報を記憶するとき、分岐履歴記憶部132は、分岐命令アドレスの下位アドレスである分岐命令下位アドレスをインデックスアドレスとして使用する。
分岐履歴記憶部132は、命令読出部120から分岐命令アドレスを受け取ると、受け取った分岐命令アドレスの下位アドレスにより分岐命令格納部132-1のエントリを索引した結果である分岐命令上位アドレスを比較回路134に出力する。
また、分岐履歴記憶部132は、命令読出部120から分岐命令アドレスを受け取ると、分岐命令の下位アドレスにより特定される分岐先命令格納部132-2のエントリから、分岐先アドレスを、選択回路138及びリターンアドレス演算部136に出力する。
さらに、分岐履歴記憶部132は、命令読出部120から受け取った分岐命令の下位アドレスにより特定される分岐種類情報格納部132-3のエントリにコール命令の分岐種類情報が格納されていた場合は、コールヒット信号をリターンアドレス記憶部137に出力する。分岐履歴記憶部132は、命令読出部120から受け取った分岐命令の下位アドレスにより特定される分岐種類情報格納部132-3のエントリにリターン命令の分岐種類情報が格納されていた場合は、リターンヒット信号を選択回路138に出力する。
比較回路134は、分岐命令格納部132-1から出力される分岐命令上位アドレスと、命令読出部120から受け取った分岐命令アドレスの分岐命令上位アドレスとが一致すると、キャッシュヒット信号を選択回路138に出力する。
リターンアドレス演算部136は、分岐履歴記憶部132から分岐先アドレスを受け取ると、分岐先アドレスの直後のアドレスを演算して、分岐先アドレスに1つの命令の大きさである4バイトを加えたアドレスをリターンアドレスとしてリターンアドレス記憶部137に出力する。このように、分岐先アドレスの直後のアドレスをリターンアドレスとして出力するのは、リターンアドレスは、分岐履歴記憶部132に記憶される分岐先アドレスと異なり、コール命令の直後の命令のアドレスとなるからである。
リターンアドレス記憶部137は、分岐履歴記憶部132からコールヒット信号を受け取ると、リターンアドレス演算部136から出力されたリターンアドレスを記憶する。分岐履歴部130は、サブルーチンのリターン命令を読み出したときに、リターンアドレス演算部136に記憶したリターンアドレスを、選択回路138に出力する。
選択回路138は、比較回路134からキャッシュヒット信号、分岐履歴記憶部132から分岐先アドレス及びリターンヒット信号、及び、リターンアドレス記憶部137からリターンアドレスを受け取る。選択回路138は、例えば、キャッシュヒット信号の信号レベルが「1」、及びリターンヒット信号の信号レベルが「0」のとき、分岐履歴記憶部132から受け取った分岐先アドレスを、命令読出部120に出力する。また、選択回路138は、例えば、キャッシュヒット信号の信号レベルが「1」、及びリターンヒット信号の信号レベルが「1」のとき、リターンアドレス記憶部137から受け取ったリターンアドレスを、命令読出部120に出力する。
このように、分岐履歴部130は、命令読出部120から受け取った分岐命令の種類に応じて、分岐先アドレスを命令読出部120に出力する。
図8は、命令読出部及び命令実行部の一例を示す図である。図8において、命令実行部140は、命令バッファ150、命令ワードレジスタ160、及び命令デコーダ170を有する。命令実行部140はさらに、分岐リザベーションステーション(RSBR:Reservation Station for Branch)182を有する。命令実行部140はさらに、浮動小数点演算用リザベーションステーション(RSF:Reservation Station for Floating point)184を有する。命令実行部140はさらに、整数演算用リザベーションステーション(RSE:Reservation Station for Execution)186を有する。命令実行部140はさらに、アドレス生成リザベーションステーション(RSA:Reservation Station for Address generation)188を有する。
命令実行部140はさらに、浮動小数点演算部210、整数演算部220、アドレス生成部230、及びロードストアキュー240を有する。浮動小数点演算部210、整数演算部220、アドレス生成部230、及びロードストアキュー240は、以下において「演算部」という。
パイプライン制御部190は、演算処理部100に含まれる各ユニットに関する処理を、パイプラインが有する複数のステージ毎に実行するように制御する。パイプライン制御部190が制御する各ユニットとは、命令読出部120、命令バッファ150、命令ワードレジスタ160、命令デコーダ170、リザベーションステーション182~188、実行部210~240、レジスタ250等である。
図8では、図6に示すL1キャッシュメモリ110は、L1命令キャッシュメモリ110A及びL1データキャッシュメモリ110Bを有するセパレートキャッシュメモリとして示される。L1命令キャッシュメモリ110Aとは、命令を記憶するL1キャッシュメモリである。L1データキャッシュメモリ110Bとは、データを記憶するL1キャッシュメモリである。
図8では、図6に示すレジスタ250は、コミットスタックエントリ(CSE:Commit Stack Entry)250A、制御レジスタ250B、浮動小数点レジスタ250C、及び汎用レジスタ250Dとして示される。
命令読出部120は、L1命令キャッシュメモリ110Aに格納された命令をフェッチすることにより読み出す。また、命令読出部120は、後述するプログラムカウンタで示される主記憶装置520上のアドレスで特定される命令を、L1命令キャッシュメモリ110Aから読み出す。L1命令キャッシュメモリ110Aから読み出した命令が分岐命令の場合、命令読出部120は、分岐履歴部130に分岐命令を出力する。分岐履歴部130に分岐履歴部130から出力された分岐命令の分岐履歴がある場合は、命令読出部120は、分岐履歴部130から当該分岐命令の分岐先アドレスを受け取る。
命令読出部120は、分岐履歴部130から受け取った条件分岐先アドレスの命令を、L1命令キャッシュメモリ110Aから読み出して命令バッファ150に出力する。そして、命令読出部120は、分岐命令実行完了前に、分岐命令の分岐先命令の実行を命令実行部140に開始させることができる。このように、分岐履歴部130を用いて、分岐命令の分岐先アドレスが確定する前に、分岐先と予測した命令を実行することを、「投機実行」という。
CSE250Aは、命令実行部140による命令デコーダ170への命令発行から、浮動小数点演算部210等の実行完了に至るまでの実行途中の命令を管理するレジスタである。CSE250Aは、複数のエントリを有し、命令デコーダ170による命令出力の際に、出力命令に対応した識別情報や実行ステータスなどのデータをエントリに記憶する。CSE250Aのエントリのデータは、演算部から、命令のコミット(確定)を示す実行完了信号を受け取ることで消去される。パイプライン制御部190、分岐予測結果に基づき命令の確定を判別して、投機実行が失敗した場合には、投機実行結果を無効化し、投機実行が成功した場合には、実行結果をメモリに入れる。CSE250Aのエントリから実行完了信号により消去されたデータは、レジスタ250やL1キャッシュメモリ110等に記憶され、他の命令実行に利用される。一方、投機実行の失敗等で、パイプライン制御部190によって無効にされた命令は、CSE250Aのエントリや、リザベーションステーション等の資源から消去されるとともに、レジスタ250やL1キャッシュメモリ110等には記憶されず、他の命令実行にも利用されない。
制御レジスタ250Bは、例えば、使用される仮想アドレスの属するアドレス空間を一意に指定するアドレス空間識別子(ASI:Address Space Identifier)を格納するレジスタや、次に実行する命令が格納されている主記憶装置520のアドレスを指定するプログラムカウンタである。
浮動小数点レジスタ250Cは、浮動小数点演算部210の実行結果を格納するレジスタである。汎用レジスタ250Dは、整数演算部220の実行結果を格納するレジスタである。
命令バッファ150は、命令読出部120が出力する命令を一時的に格納するバッファである。命令バッファ150は、例えば、浮動小数点演算部210、整数演算部220、アドレス生成部230等による実行演算が停止した場合でも、命令読出部120が出力する命令を格納することができる。
命令ワードレジスタ160は、命令読出部120が命令バッファ150に格納される命令のうち、同時に実行される複数の命令を、同じタイミングで格納する。例えば、命令ワードレジスタ160は、4命令を同じタイミングで格納する。
命令デコーダ170は、命令ワードレジスタ160に格納される複数の命令を、デコードする。命令の一部のビット列は、命令コード(opcode:オペコード)と呼ばれ、命令の種別を示す。その他の部分はオペランドを特定するフィールドである。オペランドとは、被演算数であり命令コードにより特定される演算の対象となる値や変数を示す。オペランドは、例えば、演算対象となる入力値を記憶するレジスタのアドレスであり、演算結果を記憶するレジスタのアドレスである。
命令デコーダ170は、デコードした命令コードに対応するリザベーションステーションの何れかに、デコードした命令を出力する。
命令デコーダ170は、デコードした命令コードに対応するリザベーションステーションの何れかに、デコードした命令を出力する。
リザベーションステーションは、各演算部に出力された命令のデコード結果を記憶するとともに、記憶した命令のデコード結果及びオペランドを演算部等に所定のタイミングで投入するバッファ回路であり、複数のエントリを有する。各エントリは、命令デコーダ170から出力された命令のデコード結果と、命令で指定されるレジスタのアドレスから出力されるオペランドとを格納する。パイプライン制御部190は、リザベーションステーションにおいてエントリに命令のデコード結果とオペランドとが全て格納され、且つ、演算部が実行可能になると、対応付けられる実行部にオペランドを出力する。
RSF184は、浮動小数点演算部210に対応するリザベーションステーションである。RSE186は、整数演算部220に対応するリザベーションステーションである。RSA188は、アドレス生成部230に対応するリザベーションステーションである。
RSBR182は、分岐命令のデコード結果に含まれる命令識別情報と、分岐命令の分岐を制御する条件コード(Condition Code)を生成する命令や投機実行を行った命令の命令識別情報とを関係付けて記憶する複数のエントリを有するリザベーションステーションである。パイプライン制御部190は、分岐命令の分岐先アドレスと、投機実行した命令のアドレスとを、一致しているかどうかを比較する。分岐命令の分岐先アドレスと、投機実行した命令のアドレスとが一致した場合(以下、「投機実行の成功」という)、CSE250A内における分岐命令のエントリ、及び分岐先命令のエントリは、コミットで完了する。一方、分岐命令の分岐先アドレスと、投機実行した命令のアドレスとが一致しない場合(以下、「投機実行の失敗」という)、CSE250A内における分岐命令のエントリはコミットで完了するが、投機実行した分岐先命令のエントリは、キャンセルされる。その後、分岐命令直後の命令が、CSE250Aに格納されて、分岐命令直後の命令が、演算部により実行される。
なお、投機実行が失敗すると、パイプライン制御部190が、投機実行の実行結果として分岐命令の分岐先アドレスを命令読出部120に出力することにより、命令読出部120は、正しい分岐先アドレスから命令を読み出すことができ、分岐命令の分岐先の命令が実行される。
整数演算部220は、命令コードに従って、整数に対する加減論理演算、シフト演算、乗除算等を実行する。浮動小数点演算部は、命令コードに従って、浮動小数点に対する加算、減算、乗算、除算、平方根演算等を実行する。アドレス生成部230は、ロード命令やストア命令などのメモリアクセスに関する命令コードに従って、メモリアクセスするアドレスを生成する。
ロードストアキュー240は、メモリアクセス命令及びアドレスを格納する複数のエントリを有する。ロードストアキュー240の複数のエントリは、命令デコーダ170の命令の実行順序に従って確保される。ロードストアキュー240は、命令デコーダ170から命令の実行順序に従ってメモリアクセス命令に関するデコード情報を受け取る。ロードストアキュー240は、アドレス生成部230から、命令デコーダから出力されたメモリアクセス命令に対応するメモリアクセス命令のアドレスを受け取ると、命令デコーダからの命令実行順序に従って、L1データキャッシュメモリ110Bにアクセスする。
次に、図9~図13を参照して、主記憶装置520に記憶される情報について説明する。
図9は、主記憶装置の一例を示す図である。図9に示される主記憶装置520は、試験プログラム生成プログラム910、試験プログラム920、命令変換テーブル930、パラメータテーブル940、試験結果950、及び試験ログデータ960を記憶する。
試験プログラム生成プログラム910は、情報処理装置500等のコンピュータに、試験プログラム920を生成させるプログラムである。例えば、図5に示す情報処理装置500の演算処理装置510が、試験プログラム生成プログラム910を実行することで、情報処理装置500は、試験プログラム920を生成する試験プログラム生成装置として動作する。
試験プログラム920は、演算処理装置の動作を試験させるプログラムである。例えば、図5に示す情報処理装置500の演算処理装置510が、試験プログラム920を実行することで、情報処理装置500は、試験プログラム制御装置として動作する。なお、試験プログラムの詳細は、後述する。
図10は、命令変換テーブルの一例を示す図である。図10に示す命令変換テーブルは、命令コード毎にとANDデータとORデータとの対応情報が記録されている。命令変換テーブル112のANDデータ又はORデータを乱数に掛け合わせることにより、試験命令が生成される。試験プログラムには、ランダム命令、及び乱数データが含まれる。ランダム命令とは、所定の命令コードに合致するとともに、試験規約に従って生成される命令である。乱数データとは、乱数のみから構成されるものと、試験規約に従わないものの、乱数データの一部を命令コードに置き換えた乱数命令がある。命令変換テーブルは、ランダム命令と、乱数命令の生成に使用される。乱数命令生成の例は、図16、図18、及び図20を用いて、後述する。
図10Aは、命令変換テーブルの一例を示す図である。図10Aに示す命令変換テーブル930は、命令コードの列931、第1ANDデータの列932、第2ANDデータの列933、第1ORデータの列934、第2ORデータの列935を有する。命令変換テーブル930の各行には、命令コードと、命令コードに対応付けられる第1ANDデータ、第2ANDデータ、第1ORデータ、第2ORデータが入力される。
第1ANDデータ、及び、第1ORデータは、ランダム命令を生成するために使用される。ランダム命令を生成するために、第1ANDデータは、命令コード部分と試験規約の制限を受けるビット部分を「0」にするために、AND演算で使用されるデータである。第1ORデータは、AND演算後に、命令コードを生成するために、命令コードに対応する試験規約の制限を受けるビット部分の少なくとも一部を「1」にするために、OR演算で使用されるデータである。
第2ANDデータ、及び、第2ORデータは、乱数命令を生成するために使用される。乱数命令を生成するために、第2ANDデータは、命令コードに対応するビット部分を「0」にするために、AND演算で使用されるデータである。第2ORデータは、AND演算後に、命令コードを生成するために、命令コードに対応するビット部分の少なくとも一部を「1」にするために、OR演算で使用されるデータである。
図10Bは、分岐命令のランダム命令又は乱数命令の生成に使用されるAND/ORデータの一例を説明する図である。700は、分岐命令の命令フォーマットを示す。命令コードは、31及び30ビットが「0」であり、24~22ビットが「010」である。また、試験規約として、分岐先アドレスを示す「disp22」の上位4ビットを「0」にすると規定されているとする。
したがって、分岐命令用第1ANDデータ701は、分岐命令の命令コード部分と分岐命令の試験規約部分が「0」のデータとなる。また、分岐命令用第2ANDデータ702は、分岐命令の命令コード部分のみが「0」のデータとなる。分岐命令用第1ORデータ及び第2ORデータは、命令フォーマットの23ビットだけを「1」にするデータであるので、両者とも同じフォーマットになる。
図10Cは、メモリアクセス命令のランダム命令又は乱数命令の生成に使用されるAND/ORデータの一例を説明する図である。720は、メモリアクセス命令の命令フォーマットを示す。命令コードは、31及び30ビットが「1」であり、24ビットが「0」、21ビットが「0」である。また、試験規約として、「rs1」の上位3ビットが「0」であり、rs2の上位2ビットが「0」であるものとする。
したがって、メモリアクセス用第1ANDデータ721は、メモリアクセス命令の命令コード部分とメモリアクセス命令の試験規約部分が「0」のデータとなる。また、メモリアクセス用第2ANDデータ722は、メモリアクセス命令の命令コード部分のみが「0」のデータとなる。メモリアクセス命令用第1ORデータ及び第2ORデータは、命令フォーマットの31及び30ビットだけを「1」にするデータであるので、両者とも同じフォーマットになる。
図10Dは、加算命令のランダム命令又は乱数命令の生成に使用されるAND/ORデータの一例を説明する図である。740は、演算命令の1つである加算命令の命令フォーマットを示す。命令コードは、31及び30ビットが「10」であり、24ビットが「0」、21~19ビットが「0」である。また、試験規約として、「rs1」の上位3ビットが「0」であり、rs2の上位2ビットが「0」であるものとする。
したがって、加算命令用第1ANDデータ741は、加算命令の命令コード部分と分岐命令の試験規約部分が「0」のデータとなる。また、加算命令用第2ANDデータ742は、加算命令の命令コード部分のみが「0」のデータとなる。加算命令用第1ORデータ及び第2ORデータは、命令フォーマットの31ビットだけを「1」にするデータであるので、両者とも同じフォーマットになる。
試験プログラムにおいて、演算部が実行可能な乱数データの数を増やすことで、1つの試験プログラムを実行するときの演算部の動作率を向上させることが出来る。なお、乱数データは、第2ANDデータ及び第2ORデータを用いて書き換えられなくても、所定の命令フォーマットに合致する場合がある。そのため、試験プログラム生成プログラムは、当該プログラムを実行するコンピュータに、全ての乱数データをAND及びOR演算で書き換えなくてもよい。なお、試験プログラムにおいて、乱数データと、乱数データをAND及びOR演算で所定の命令フォーマットに変更した乱数命令との例は、図26及び図28を用いて、後述する。
また、図10に示される第1ANDデータ、第2ANDデータ、第1ORデータ、及び、第2ORデータの入力値は、後述のランダム命令生成、及び乱数命令生成の説明において参照される。
図11は、パラメータテーブルの一例を示す図である。パラメータテーブル940は、試験プログラムの実行処理フロー時に利用されるパラメータが設定されるテーブルである。パラメータテーブル940に含まれるパラメータは、演算処理装置による試験命令生成時に、演算処理装置により参照される。
図11に示すパラメータテーブル940は、パラメータ名称の列941、パラメータ値の列942を有する。パラメータ名称の列941には、シード値S、命令生成数N、トラップ命令発生間隔C、乱数データ生成間隔R、乱数データの命令数Dがあり、パラメータ値列942には、パラメータ名称に対応するパラメータ値が入力される。パラメータテーブル940の各行には、パラメータ名称に対応するパラメータが入力される。
シード値Sは、乱数データ生成に使用されるシード値である。図11に示されるように、シード値Sは、例えば、「1」である。命令生成数Nは、生成される命令数である。図11に示されるように、命令生成数Nは、例えば、「100000」である。
トラップ命令発生間隔Cとは、トラップ命令と、そのトラップ命令の後続に生成されるトラップ命令との間の命令数を示す。なお、トラップ命令とは、試験命令実行後のレジスタ250の値、及び、主記憶装置520に書き込まれた試験結果950を、試験ログデータ960として主記憶装置520に出力する命令である。例えば、トラップ命令発生間隔Cが「512」の場合、試験プログラム生成装置は、生成したトラップ命令の512命令後に、さらにトラップ命令を生成する。
乱数データ生成間隔Rとは、試験プログラム生成装置が、試験命令列における乱数データと乱数データとの間の間隔である。例えば、試験プログラム生成装置は、前回乱数データを生成したときの命令カウンタが示す命令カウント数を記憶し、現在の命令カウンタが、記憶した命令カウント数から乱数データ生成間隔を加算した命令カウント数までカウントアップしたとき、試験プログラム生成装置は、再度、乱数データを生成する。図11に示されるように、乱数データ生成間隔Rは、例えば、「256」である。
Dは、乱数データの数である。なお、乱数データの数Dは、初期値であり、試験プログラム生成装置は、乱数データ数を1~64の範囲で変更して、生成する乱数データの数を変更することができる。図11に示されるように、乱数データDは、例えば、「3」であり、乱数データである3つの命令文が生成されることを示している。
図11に示されるパラメータ値は、後述の試験プログラム生成装置による試験プログラム生成処理の説明において参照される。
図9に示す試験結果950は、演算処理装置510が試験プログラム920を実行した結果、演算処理装置510が、主記憶装置520に出力する試験プログラムの実行結果である。なお、試験結果950が格納される主記憶装置520内の領域を「試験領域」という。言い換えれば、「試験領域」は、試験命令列によって実行結果を出力する対象となる記憶領域である。図示されるように、試験プログラム920の実行によって、他の主記憶装置に格納されるデータの変更を生じないように、試験領域は、主記憶装置内の所定の記憶領域に制限されている。
図9に示す試験ログデータ960は、演算処理装置がトラップ命令を実行することで生成される試験命令実行後のレジスタ250に格納されるデータ、及び、試験ログデータ960の記憶領域に移動された試験結果をいう。試験プログラム920は、演算処理装置510によって複数回実行される場合がある。その場合は、演算処理装置510がトラップ命令を複数回実行することで、試験結果は、試験プログラムの試験回数とともに、それぞれ異なる記憶領域に格納される。また、異なる命令を含む試験プログラムが実行される場合、演算処理装置510がトラップ命令を実行することによって、試験プログラムの実行結果を一意に識別する識別情報とともに、記憶領域に格納される。
上記のように、情報処理装置500は、主記憶装置520に記憶される試験プログラム生成プログラム910を実行することで「試験プログラム生成装置」として動作する。また、情報処理装置500は、主記憶装置520に記憶される試験プログラム920を実行することで、自らの演算処理装置510について試験を行う「試験制御装置」として動作する。このように、1つの情報処理装置500が、「試験プログラム生成装置」及び「試験制御装置」として動作することが出来る。
次に、図12及び図13を参照して、「試験プログラム生成装置」及び「試験制御装置」がそれぞれ異なる情報処理装置となる場合について説明する。
図12は、試験プログラム生成装置及び試験制御装置の一例を示す図である。図12に示す情報処理装置500A、500Bは、それぞれ図5に示す情報処理装置と同じ構成を有してもよい。情報処理装置500Aは、試験プログラム生成プログラム910を実行して、試験プログラム920を生成するとともに、生成した試験プログラム920を、ネットワーク1100を介して情報処理装置500Bに送信する試験プログラム生成装置として動作する。また、情報処理装置500Bは、試験プログラム920を実行することで、情報処理装置500Bの演算処理装置510を試験する試験制御装置として動作する。このように、試験プログラムの生成と、試験プログラムの実施は、2つの情報処理装置500でおこなってもよい。
図13は、試験制御装置の主記憶装置の一例を示す図である。図13に示す情報処理装置500Bの主記憶装置520Bは、情報処理装置500Aから試験プログラム920を受信すると、主記憶装置520Bに格納し、試験プログラム920を演算処理装置で実行することで、主記憶装置520Bに試験結果950、及び試験ログデータ960を格納する。図12及び図13を用いて説明したように、試験プログラムの生成と、試験プログラムの実施は、2つの情報処理装置を用いて行うこともできる。
〔5〕試験規約に限定されない乱数データの生成
以下に、図14~図20を参照して、試験プログラムの生成方法、及び試験プログラムを実行することによる試験制御方法について説明する。
以下に、図14~図20を参照して、試験プログラムの生成方法、及び試験プログラムを実行することによる試験制御方法について説明する。
〔1〕試験規約で説明したように、試験実行結果の妥当性を検証するため、試験規約に従って試験命令は生成される。しかしながら、試験規約に従う試験命令の実行では、演算処理装置が実際に命令を実行する際の動作を検証することはできないので、試験規約に限定されない乱数データが生成される。
試験プログラムは、乱数のみからなる乱数データのみならず、乱数データの一部を命令コードに置き換えた命令を含んでもよい。なお、以下において乱数の一部を命令コードに置き換え、且つ試験規約に制限されない命令を乱数命令という。これは、試験規約に制限されない命令が、乱数のみからなる乱数データである場合、命令デコーダ170が、乱数データを、演算処理装置510の命令セットに従って、命令コードとオペランドに分割することができなくなることを回避するためである。
図14は、乱数命令の生成フローの一例を示す図である。まず、試験プログラム生成プログラムを実行する演算処理装置は、シード値をもとに乱数データを生成する(S1201)。なお、シード値は、パラメータテーブル940に含まれているので、演算処理装置が主記憶装置のパラメータテーブル940からシード値を取得して、乱数データを生成する。演算処理装置は、命令コードをランダムに選定する(S1202)。演算処理装置は、選定した命令コードを、命令変換テーブル930を検索し、選定した命令コードに対応するANDデータとORデータを取得する(S1203)。演算処理装置は、ステップS1201で生成した乱数データに対して、ステップS1203で取得したANDデータをAND条件で掛け合わせる演算を実行する(S1204)。演算処理装置は、ステップS1204のAND条件で掛け合わされた乱数データに対して、ステップS1203で取得したORデータでOR条件で掛け合わされる演算を実行して(S1205)、乱数命令を生成して、乱数命令の生成フローを終了する。
〔5.1〕試験規約に従わない分岐命令の生成方法
図15は、分岐命令の一例を示す図である。図15に示す命令フォーマット700は、SPARC(登録商標)の命令セットとしての分岐命令の命令フォーマットである。図15に示す表710は、分岐命令と分岐条件の一例を示す表である。
図15は、分岐命令の一例を示す図である。図15に示す命令フォーマット700は、SPARC(登録商標)の命令セットとしての分岐命令の命令フォーマットである。図15に示す表710は、分岐命令と分岐条件の一例を示す表である。
分岐命令の命令フォーマット700は、31~30ビットの「op」と、24~22ビットの「op2」で分岐命令のオペコードを特定する。29ビットの「a」は、命令無効(annul)ビットであり、28~25ビットの「cond」は、具体的な分岐命令を特定するビットである。「cond」は例えば、無効ビットが「1」のとき、分岐が成立する場合に分岐命令の直後の命令を実行し、分岐が成立しない場合には分岐命令の直後の命令を実行せず、当該分岐命令の直後の命令を無効にすることを示す。21~0ビットの「disp22」は、分岐先アドレスを特定する。
表710の行番号1は、分岐成立命令の1つである「BA(branch always)」を説明する。「cond」の値が「1000」である場合は、オペコードが「BA」であることを示す。「BA」は、条件コードを参照せずに無条件で、分岐先アドレスに分岐することを指示する無条件分岐命令である。「BA」は、後述する図21A~図26に示す分岐成立命令の一例である。
表710の行番号2は、分岐不成立命令の1つである「BN(branch never)」を説明する。「0000」の「cond」は、「BN」を示す。「BN」は、条件コードを参照せずに無条件で、分岐アドレスに分岐しないことを指示する非分岐命令である。「BN」は、後述する図21A~図26に示す分岐不成立命令の一例である。
行番号3~8は、条件付分岐命令の一例である。表710の行番号3は、「BNE(branch on not Equal)」を説明する。「1001」の「cond」は、「BNE」を示す。「BNE」は、「条件コードが、演算結果がゼロでないことを示す」という分岐条件が満たされた場合に分岐を指示する命令である。
表710の行番号4は、「BE(branch on Equal)」を説明する。「0001」の「cond」は、「BE」を示す。「BE」は、「条件コードが、演算結果がゼロであることを示す」という分岐条件が満たされた場合に分岐を指示する命令である。
表710の行番号5は、「BGU(Branch on Greater Unsigned)」を説明する。「1100」の「cond」は、「BGU」を示す。「BGU」は、「条件コードが、演算結果に桁上げがなく、又は、演算結果がゼロではないことを示す」という分岐条件が満たされた場合に分岐を指示する命令である。
表710の行番号6は、「BLEU(Branch on Less or Equal Unsigned)」を説明する。「0100」の「cond」は、「BLEU」を示す。「BLEU」は、「条件コードが、演算結果に桁上げがあり、又は、演算結果がゼロであることを示す」という分岐条件が満たされた場合に分岐を指示する命令である。
表710の行番号7は、「BCS(Branch on Carry Set)」を説明する。「1100」の「cond」は、「BCS」を示す。「BCS」は、「条件コードが、演算結果に桁上げがあることを示す」という分岐条件が満たされた場合に分岐を指示する命令である。
表710の行番号8は、「BVC(Branch on Overflow Clear)」を説明する。「1100」の「cond」は、「BCS」を示す。「BCS」は、「条件コードが、演算結果に桁あふれがあることを示す」という分岐条件が満たされた場合に分岐を指示する命令である。
分岐命令の31~30ビットの「op」及び24~22ビットの「op2」を、分岐命令に対応するAND演算とOR演算で特定し、29ビットの「a」と、28~25ビットの「cond」とを乱数で特定することで、乱数により様々な分岐命令が生成される。
図16は、分岐命令の命令生成方法の一例を示す図である。図16を用いて、図14に示す命令生成のフローに従って、乱数データから分岐命令を生成するフローを説明する。図16に示すステップS1211では、演算処理装置により乱数データ712が生成される。乱数データ712は、「0x8abec860」である。
試験制御装置は、生成する命令コードを選定する(S1212)。図16の例では、選定される命令は、分岐命令である。演算処理装置は、選定した命令コードに対応するANDデータとORデータとを、命令変換テーブル930から取得する(S1213)。ANDデータは、命令コードに対応するビット列を「0」にするデータである。よって、ANDデータは、命令フォーマットにおいて31~30ビットと、24~22ビットが「0」であり、他のビットが「1」である「3e3fffff」である。ORデータは、命令コードに対応するビット列を、ステップS1202で選定された命令にするデータである。よって、ORデータは、命令フォーマットにおいて31~30ビットが「00」であり、24~22ビットが「010」であり、他のビットが「0」である「0x00700000」である。
試験制御装置は、乱数データ712である「0x8abec860」にANDデータである「0x3e3fffff」を掛け合わせる(S1214)。掛け合わせて生成したデータ714は、「0x0a3ec860」である。
試験制御装置は、AND演算後のデータ「0x0a3ec860」にORデータである「0x00700000」を掛け合わせる(S1215)。掛け合わせて生成したデータ716は、「0x0abec860」である。
このようにして、試験制御装置は、命令デコーダ170が分岐命令と解読可能な命令コードを生成する。
〔5.2〕試験規約に従わないメモリアクセス命令の生成方法
図17は、メモリアクセス命令の一例を示す図である。図17に示す命令フォーマット720は、SPARC(登録商標)の命令セットとしてのメモリアクセス命令の1つである整数ロード命令の命令フォーマットである。図17に示す表730は、整数ロード命令と実行動作の一例を示す表である。
図17は、メモリアクセス命令の一例を示す図である。図17に示す命令フォーマット720は、SPARC(登録商標)の命令セットとしてのメモリアクセス命令の1つである整数ロード命令の命令フォーマットである。図17に示す表730は、整数ロード命令と実行動作の一例を示す表である。
整数ロード命令の命令フォーマット720では、31~30ビットの「op」と、24、21ビットの「0」は、整数ロード命令を特定する。31~30ビットの「op」と、24~19ビットの「op3」は、整数ロード命令のオペコードを特定する。18~14ビットのフィールドにある「rs1」、及び、4~0ビットのフィールドにある「rs2」は、入力レジスタのアドレスを示す。29~25ビットのフィールドにある「rd」は、出力レジスタのアドレスを示す。
表730の行番号1は、整数ロード命令のオペコードである「LDSB(LoaD Signed Byte)」を説明する。「001001」の「op3」は、「LDSB」を示す。「LDSB」は、符号付きの1バイトをロードするという実行動作を特定する。
表730の行番号2は、整数ロード命令のオペコードである「LDSH(LoaD Signed Halfword)」を説明する。「001010」の「op3」は、「LDSH」を示す。「LDSH」は、符号付きの2バイトをロードするという実行動作を特定する。
表730の行番号3は、整数ロード命令のオペコードである「LDUB(LoaD Unsigned Byte)」を説明する。「000001」の「op3」は、「LDUB」を示す。「LDUB」は、符号無しの1バイトをロードするという実行動作を特定する。
表730の行番号4は、整数ロード命令のオペコードである「LDUH(LoaD Unsigned Halfword)」を説明する。「000010」の「op3」は、「LDUH」を示す。「LDUH」は、符号無しの2バイトをロードするという実行動作を特定する。
「op」と、「op3」のうちの24、21ビットを、整数ロード命令に対応するAND演算とOR演算で特定し、「op3」の23、22、20、19ビットを乱数で特定することで、様々な整数ロード命令を生成することができる。
図18は、メモリアクセス命令の命令生成方法の一例を示す図である。図18を用いて、図14に示す命令生成のフローに従って、乱数データから整数ロード命令を生成するフローを説明する。図18に示すステップS1221では、演算処理装置により乱数データ732が生成される。乱数データ732は、「0x8abec860」である。
試験制御装置は、生成する命令コードを選定する(S1222)。選定される命令は、図18の例では整数ロード命令である。演算処理装置は、選定した命令コードに対応するANDデータとORデータとを、命令変換テーブル930から取得する(S1223)。取得されるデータは、図10Aに示す命令変換テーブルの行番号605に示す命令コードに対応するANDデータ「0x3edfffff」及びORデータ「0xc0000000」である。
ANDデータは、命令コードに対応するビット列を「0」にするデータである。よって、取得されたANDデータ「0x3e3fffff」は、31~30ビットと、24及び21ビットが「0」である。
ORデータは、命令コードに対応するビット列を、ステップS1212で選定された命令にするデータである。よって、取得されたORデータ「0xc0000000」は、命令フォーマットにおいて31~30ビットが「10」であり、24及び21ビットが「0」である。
試験制御装置は、乱数データ732である「0x8abec860」にANDデータである「0x3e3fffff」を掛け合わせる(S1224)。掛け合わせて生成したデータ734は、「0x0a9ec860」である。
試験制御装置は、AND演算後のデータ「0x0a9ec860」にORデータである「0xc0000000」を掛け合わせる(S1225)。掛け合わせて生成したデータ736は、「0xca9ec860」である。
このようにして、試験制御装置は、命令デコーダ170が整数ロード命令と解読可能な命令コードを生成する。
〔5.2〕試験規約に従わない演算命令の生成方法
図19は、演算命令の一例を示す図である。図19に示す命令フォーマット740は、SPARC(登録商標)の命令セットとしての演算命令の1つである加算命令の命令フォーマットである。図19に示す表750は、加算命令と実行動作の一例を示す表である。
図19は、演算命令の一例を示す図である。図19に示す命令フォーマット740は、SPARC(登録商標)の命令セットとしての演算命令の1つである加算命令の命令フォーマットである。図19に示す表750は、加算命令と実行動作の一例を示す表である。
加算命令の命令フォーマット740では、31~30ビットの「op」と、24、21~19ビットの「0」は、加算命令を特定する。31~30ビットの「op」と、24~19ビットの「op3」は、加算命令のオペコードを特定する。18~14ビットのフィールドにある「rs1」、及び、4~0ビットのフィールドにある「rs2」は、入力レジスタのアドレスを示す。29~25ビットのフィールドにある「rd」は、出力レジスタのアドレスを示す。
表750の行番号1は、加算命令のオペコードである「ADD」を説明する。「000000」の「op3」は、「ADD」を示す。「ADD」は、入力レジスタの「rs1」にある値に「rs2」にある値を加算するという実行動作を特定する。
表750の行番号2は、加算命令のオペコードである「ADDcc(Add and modify icc(整数条件コード:integer condition code))」を説明する。「010000」の「op3」は、「ADDcc」を示す。「ADDcc」は、加算と、当該加算結果に基づいた整数条件コードの書き換えという実行動作を特定する。整数条件コードとは、プロセッサステートレジスタにあり、ビットで特定される条件コードである。条件コードは、条件付分岐命令で使用される。
表750の行番号3は、加算命令のオペコードである「ADDX」を説明する。「000001」の「op3」は、「ADDX」を示す。「ADDX」は、桁上げ付き加算という実行動作を特定する。
表750の行番号4は、加算命令のオペコードである「LDUH(LoaD Unsigned Halfword)」を説明する。「000010」の「op3」は、「LDUH」を示す。「LDUH」は、符号無しの2バイトをロードするという実行動作を特定する。
「op」と、「op3」のうちの24、21~19ビットを、加算命令に対応するAND演算とOR演算で特定し、「op3」の22~19ビットを乱数で特定することで、様々な加算命令を生成することができる。
図20は、演算命令の命令生成方法の一例を示す図である。図20を用いて、図14に示す命令生成のフローに従って、乱数データから加算命令を生成するフローを説明する。図20に示すステップS1231では、演算処理装置により乱数データ752が生成される。乱数データ752は、「0x8abec860」である。
試験制御装置は、生成する命令コードを選定する(S1232)。選定される命令は、図25の例では加算命令である。演算処理装置は、選定した命令コードに対応するANDデータとORデータとを、命令変換テーブル930から取得する(S1233)。取得されるデータは、図10Aに示す命令変換テーブルの行番号605に示す命令コード「加算命令」に対応するANDデータ「0x3ec7ffff」及びORデータ「0x70000000」である。
ANDデータは、命令コードに対応するビット列を「0」にするデータである。よって、取得されたANDデータ「0x3ec7ffff」は、31~30ビットと、21~19ビットが「0」である。
ORデータは、命令コードに対応するビット列を、ステップS1232で選定された命令にするデータである。よって、取得されたORデータ「0x70000000」は、命令フォーマットにおいて31~30ビットが「10」であり、21~19ビットが「0」である。
試験制御装置は、乱数データ752である「0x8abec860」にANDデータである「0x3ec7ffff」を掛け合わせる(S1234)。掛け合わせて生成したデータ754は、「0x0a86c860」である。
試験制御装置は、AND演算後のデータ「0x8abec860」にORデータである「0x70000000」を掛け合わせる(S1235)。掛け合わせて生成したデータ756は、「0x8a6cc860」である。
このようにして、試験制御装置は、命令デコーダ170が加算命令と解読可能な命令コードを生成する。
〔6〕試験規約に従わない乱数データを含む試験プログラムの実行動作
図21Aは、試験プログラムの命令実行順序の第1例を示す図である。試験プログラムP1000は、アドレスa1にある分岐成立命令、アドレスa1の先にあるランダム命令、アドレスa1の直後にある乱数データP1010、アドレスx1にあるランダム命令を含む。ランダム命令は、上述した試験規約に従って生成された命令である。アドレスa1にある分岐成立命令は、分岐が成立する命令である。分岐成立命令としては、例えば、条件コードを参照せずに無条件に分岐が成立する無条件分岐成立命令、又は、条件付分岐命令の成立命令がある。分岐成立命令として、無条件分岐成立命令が生成される場合は、当該無条件分岐成立命令の先に生成される条件コード設定命令とは関係なく分岐が成立する。一方、分岐成立命令として、条件付分岐命令が生成される場合、条件付分岐命令の先に生成される条件コード設定命令は、条件付分岐命令の分岐条件が成立するように、生成される。
図21Aは、試験プログラムの命令実行順序の第1例を示す図である。試験プログラムP1000は、アドレスa1にある分岐成立命令、アドレスa1の先にあるランダム命令、アドレスa1の直後にある乱数データP1010、アドレスx1にあるランダム命令を含む。ランダム命令は、上述した試験規約に従って生成された命令である。アドレスa1にある分岐成立命令は、分岐が成立する命令である。分岐成立命令としては、例えば、条件コードを参照せずに無条件に分岐が成立する無条件分岐成立命令、又は、条件付分岐命令の成立命令がある。分岐成立命令として、無条件分岐成立命令が生成される場合は、当該無条件分岐成立命令の先に生成される条件コード設定命令とは関係なく分岐が成立する。一方、分岐成立命令として、条件付分岐命令が生成される場合、条件付分岐命令の先に生成される条件コード設定命令は、条件付分岐命令の分岐条件が成立するように、生成される。
アドレスa1の直後にある乱数データP1010は、乱数によって生成されたデータである。乱数データは、乱数で生成したデータであるため、上記した試験規約には制限されない。
図21Bは、試験プログラムを実行する演算処理装置の処理の第1例を示す図である。以下、図21A及び図21Bを参照して、演算処理装置による乱数データの実行処理を説明する。
試験プログラムP1000の実行に際し、分岐履歴部130には、分岐命令の実行履歴がないものとする。まず、命令読出部120が、L1命令キャッシュメモリ110Aに格納される命令を読出して、アドレスa1にある分岐成立命令を読み出す(S1001)。読み出した命令が分岐命令であるので、命令読出部120は分岐履歴部130から分岐命令の分岐先アドレスを参照するが、分岐履歴がないので、命令読出部120は、分岐成立命令の直後にある乱数データP1010を読み出す(S1002)。なお、S1002における処理は、図21Aの矢印P1001によって説明されている。このように、命令読出部120は、分岐履歴部130に分岐履歴がない場合、分岐命令直後の命令を投機実行する。
整数演算部220は、分岐成立命令の分岐先アドレスを計算するとともに、乱数データP1010を実行する(S1003)。パイプライン制御部190は、分岐先アドレスと、分岐成立命令の直後にある乱数データP1010のアドレスを比較し、それらのアドレスが異なるため、乱数データP1010の実行を無効にする(S1004)。演算部210等は、分岐先アドレスにあるランダム命令を実行する(S1005)。なお、S1005における処理は、図21Aの矢印P1002によって説明されている。RSBR182は、分岐履歴を分岐履歴部130に出力する(S1006)。パイプライン制御部190は、レジスタに格納された値を主記憶装置に出力する(S1007)。
乱数データは、試験規約に制限されないため、実行部が乱数データを実行すると、試験空間以外のメモリにアクセスし、又は、例外処理が生じて、演算処理装置による試験実行に障害が生じるなどの問題がある。しかしながら、ステップS1004における投機実行失敗による実行結果の無効化は、CSE250Aのエントリや、リザベーションステーション等の資源から消去されるとともに、レジスタ250やL1キャッシュメモリ110等には記憶されず、他の命令実行にも利用されない。そのため、乱数データの実行は、試験空間以外のメモリにアクセスし、又は、例外処理が生じる等の状態を生じない。そして、乱数データの実行は、レジスタに入力されるアドレスに制限を生じず、入力データや、使用されるレジスタアドレスに制限を生じない。
図22は、試験プログラムの実行により動作した演算処理装置の一例を示す図である。図22では、浮動小数点演算部210、整数演算部220、アドレス生成部230、ロードストアキュー240、浮動小数点レジスタ250C、汎用レジスタ250Dは、ハッチングで表示される。これらのハッチング表示された構成は、例外処理を許可し、レジスタアドレスの使用を制限しないことで動作検証されたものである。例えば、浮動小数点演算部210等の実行部は、例外処理が可能になり、また、試験メモリ領域に限定されないレジスタアドレスを用いることで、試験規約に従う試験では検証できない実行動作の検証がなされる。
図23Aは、試験プログラムの命令実行処理の第2例を示す図である。第2例は、演算処理装置による図21Aで実行した試験プログラムの2度目の実行例である。図23Aに示す試験プログラムP1000は、図21Aに示す試験プログラムP1000と同じであるので、説明を省略する。
図23Bは、試験プログラムを実行する演算処理装置の処理の第2例を示す図である。以下、図23A及び図23Bを参照して、演算処理装置による乱数データの実行処理を説明する。
試験プログラムP1000の実行に際し、分岐履歴部130には、図21Bで示した試験プログラムの実行により、アドレスa1にある分岐命令の分岐先アドレスは、アドレスx1であることが記憶されている。命令読出部120が、L1命令キャッシュメモリ110Aに格納されている命令を読出して、アドレスa1にある分岐成立命令を読み出す(S1011)。読み出した命令が分岐命令であるので、命令読出部120は分岐履歴部130から分岐命令の分岐先アドレスを参照する。分岐命令のアドレスa1から分岐先のアドレスx1への分岐履歴があるので、命令読出部120は、分岐先のアドレスx1の命令を読み出す(S1012)。演算部は、分岐先のアドレスx1にあるランダム命令を実行する(S1013)。なお、S1013における処理は、図23Aの矢印P1013によって説明されている。パイプライン制御部190は、レジスタに格納された値を主記憶装置に出力する(S1014)。
図23A及び図23Bを用いて説明した処理では、乱数データP1010の実行はされない。しかしながら、乱数データP1010実行以外の処理は、図21A及び図21Bを用いて説明した第1回目の試験プログラムP1000の実行と同じである。そのため、ステップS1006で主記憶装置に記憶されたレジスタの値と、ステップS1014で主記憶装置に記憶されたレジスタの値との比較により、両値の間に差異が無ければ、演算処理装置の動作が正常であると判断できる。
乱数データの実行は、投機実行結果の無効化によりレジスタや主記憶装置に反映されないため、乱数データ実行の影響を調査することは簡単ではない。しかしながら、上記のように、試験プログラムP1000というプログラムを2回実行するだけで、図22に示すように、実行部やレジスタ等が乱数データを実行することで正常に動作するか否かを判断することが出来る。
[5.2.2 分岐命令の分岐先に乱数データを含む試験プログラム]
以下に、分岐命令の分岐先に乱数データを含む試験プログラムを実行する例を説明する。
以下に、分岐命令の分岐先に乱数データを含む試験プログラムを実行する例を説明する。
図24Aは、試験プログラムの命令実行順序の第3例を示す図である。図24Bは、試験プログラムを実行する演算処理装置の処理の第3例を示す図である。試験プログラムP1100Aは、アドレスa2、a3にある分岐成立命令、アドレスa2の前にあるランダム命令、アドレスa2の直後にあるランダム命令P1130、アドレスx2にあるランダム命令P1131、アドレスx3にあるランダム命令を含む。アドレスa2にある分岐成立命令の分岐先は、矢印P1122に示すようにアドレスx2である。アドレスa3にある分岐成立命令の分岐先は、矢印P1123に示すように、アドレスx3である。試験プログラムP1100Aは、乱数データを含まないが、図24A及び図24Bに示す例では、分岐命令を実行することで、分岐履歴が残される。なお、P1130は、図24Aに示すように投機実行されてもその実行結果は無効化されるので、図23Aに示す乱数データP1010であってもよい。
試験プログラムP1100Aの実行に際し、初期の状態では、分岐履歴部130には、分岐命令の実行履歴がないものとする。まず、命令読出部120が、L1命令キャッシュメモリ110Aに格納される命令を読出して、アドレスa2にある分岐成立命令を読み出す(S1101)。分岐履歴部130には分岐履歴がないので、命令読出部120は、分岐成立命令の直後にあるランダム命令P1130を読み出す(S1102)。なお、S1102における処理は、図24Aの矢印P1121によって説明されている。
演算部が分岐成立命令の直後にあるランダム命令P1130を実行した後で、整数演算部220は、アドレスa2にある分岐成立命令の分岐先アドレスを計算する(S1103)。パイプライン制御部190は、分岐先アドレスと、分岐成立命令の直後にある乱数データのアドレスが異なるため、ランダム命令P1130の実行を無効化する(S1104)。演算部は、アドレスa2にある分岐成立命令の分岐先のアドレスx2にあるランダム命令P1131を実行する(S1105)。なお、S1105における処理は、図24Aの矢印P1124によって説明されている。RSBR182は、分岐履歴を分岐履歴部130に出力する(S1105)。
続いて、命令読出部120が、アドレスa3にある分岐成立命令を読み出す(S1106)。分岐履歴部130にはアドレスa3の分岐命令に関する分岐履歴がないので、命令読出部120は、アドレスa3の分岐成立命令の直後にあるランダム命令P1131を読み出す(S1107)。なお、S1107における処理は、図24Aの矢印P1124によって説明されている。
演算部が分岐成立命令の直後にあるランダム命令P1131を実行した後で、整数演算部220は、アドレスa3にある分岐成立命令の分岐先アドレスを計算する(S1108)。パイプライン制御部190は、計算した分岐命令の分岐先アドレスと、アドレスa3にある分岐成立命令の直後にある乱数データのアドレスとを比較する。この例では両者が異なるため、パイプライン制御部190は、ランダム命令の実行を無効化する(S1109)。演算部は、a3の分岐成立命令の分岐先である分岐先のアドレスx3にあるランダム命令P1131を実行する(S1110)。なお、S1110における処理は、図24Aの矢印P1122によって説明されている。RSBR182は、分岐履歴を分岐履歴部130に出力する(S1111)。最後に、パイプライン制御部190は、レジスタに格納された値を主記憶装置に出力する(S1112)。
なお、上記のように、ランダム命令P1130の実行は無効化されている。また、ランダム命令P1131は、ステップS1105とステップS1108で2回実行されているが、ステップS1109で2回目の実行は無効化されているので、試験プログラムP1100Aの実行では、ランダム命令P1131は1回のみ実行されている。よって、試験プログラムP1100Aの実行において、ランダム命令P1130、P1131は、ランダム命令P1131が1回実行されたことになる。
図25Aは、試験プログラムの命令実行順序の第4例を示す図である。図25Aに示す試験プログラムP1100Bは、図24Aに示す試験プログラム1100Aの一部を変更した試験プログラムである。試験プログラム1100Bは、アドレスa2にある分岐成立命令を、分岐不成立命令に変更した。なお、アドレスa2の命令が分岐不成立命令になるので、図25Aに示す試験プログラムP1100Bでは、アドレスa2にある分岐命令の直後にある命令が乱数データであれば、乱数データはランダム命令に変更される。なお、分岐不成立命令とは、分岐が成立しない命令である。分岐不成立命令は、例えば、条件コードを参照せずに無条件に分岐が成立しない無条件分岐不成立命令、又は、条件付分岐命令の不成立命令がある。分岐不成立命令として、無条件分岐不成立命令が生成される場合は、当該無条件分岐不成立命令の先に生成される条件コード設定命令とは関係なく分岐が不成立になるため、条件コード設定命令の生成には制限がない。一方、分岐不成立命令として、条件付分岐命令が生成される場合、条件付分岐命令の先に生成される条件コード設定命令は、条件付分岐命令の分岐条件が不成立になるように、生成される。
図25Bは、試験プログラムを実行する演算処理装置の処理の第4例を示す図である。以下、図25A及び図25Bを参照して、演算処理装置による乱数データの実行処理を説明する。
試験プログラムP1100Bの実行に際し、分岐履歴部130には、アドレスa2からアドレスx2への分岐履歴と、アドレスa3からアドレスx3への分岐履歴がある。まず、命令読出部120が、L1命令キャッシュメモリ110Aに格納される命令を読出して、アドレスa2にある分岐不成立命令を読み出す(S1151)。分岐履歴部130にはアドレスa2からアドレスx2への分岐履歴があるので、命令読出部120は、アドレスx2にある乱数データP1132を読み出す(S1152)。なお、S1152における処理は、図25Aの矢印P1122によって説明されている。
演算部は分岐不成立命令の分岐先アドレスにある乱数データP1132を実行した後で、整数演算部220は、アドレスa2にある分岐不成立命令の分岐先アドレスを計算する(S1153)。パイプライン制御部190は、計算した分岐先のアドレスx2と、分岐不成立命令の直後にあるランダム命令のアドレスが異なるため、乱数データP1132の実行を無効にする(S1154)。演算部は、分岐不成立命令の直後にあるランダム命令P1130を実行する(S1155)。なお、S1155における処理は、図25Aの矢印P1124によって説明されている。
P1130の実行後、命令読出部120が、アドレスa3にある分岐成立命令を読み出す(S1156)。分岐履歴部130にはアドレスa3の分岐命令に関する分岐履歴があるので、命令読出部120は、分岐成立命令の分岐先にあるアドレスx3のランダム命令を読み出す(S1157)。なお、S1157における処理は、図25Aの矢印P1123によって説明されている。
演算部がアドレスx3にあるランダム命令P1131を実行した後で、整数演算部220は、アドレスa3にある分岐成立命令の分岐先アドレスを計算する(S1158)。RRBR182は、分岐履歴を分岐履歴部130に出力する(S1159)。最後に、パイプライン制御部190は、レジスタに格納された値を主記憶装置に出力する(S1160)。
図24A及び図24Bを用いて説明した処理では、乱数データの実行はされない。しかしながら、乱数データ実行以外のランダム命令実行の処理は、ランダム命令P1131を1回実行するという点で、図25A及び図25Bを用いて説明した試験プログラムP1100Bの実行と同様である。そのため、試験プログラムP1100Aの実行に係る試験空間に格納された値と、試験プログラムP1100Bの実行に係る試験空間に格納された値との比較により、両値の間に差異が無ければ、演算処理装置の動作が正常であると判断できる。また、ステップS1112で主記憶装置に記憶されたレジスタの値と、ステップS1160で主記憶装置に記憶されたレジスタの値との比較により、両値の間に差異が無ければ、演算処理装置の動作が正常であると判断できる。
このように、試験プログラム内の分岐命令の種類の変更や、プログラムの配置を変更することで、分岐命令の分岐先に乱数データを含む試験プログラムを実行する試験が可能になる。そのため、試験プログラムにおいて乱数データの配置位置は、分岐命令の直後に限定されず、分岐先でもあってもよい。
図26は、乱数データの命令数の変更例を示す図である。図26では、試験プログラムP1000に示す乱数データP1010の命令数の数を変更して繰り返して実行する場合を示す。図26に示す試験プログラムP1000Aの乱数データP1010Aは、図21Aに示した乱数データP1010に対して乱数データの数を3つ増やした乱数データである。図26に示す試験プログラムP1000Bの乱数データP1010Bは、図21Aに示した乱数データP1010Aに対して乱数データの数を9つ増やした乱数データである。図26に示す<1回目>の試験プログラムP1000の実行は、図21Aに示すP1000の実行と同じである。
試験プログラムP1000Aは、図23A及び図23Bに示した試験プログラムP1000を2回実行した後で、分岐履歴部130のアドレスa1の分岐成立命令の実行履歴を消去した後、実行される。つまり、3回目の試験プログラム実行試験に用いる試験プログラムである。
試験プログラムP1000Bは、試験プログラムP1000Aを実行した後で、分岐履歴部130のアドレスa1の分岐成立命令の実行履歴を消去した後、実行される。つまり、4回目の試験プログラム実行試験である。
なお、図26には示していないが、図24Aに示す試験プログラムP1100Aを実行した後、図25Aに示す乱数データP1132の命令数を、前回実行した命令数から増加するように変更することで、分岐命令の分岐先に乱数データがある試験プログラムでも、乱数データの命令数の異なる試験ができる。
このように、乱数データの命令数に変化を与えることにより、投機実行で実行される命令列の中に、実際には実行されない乱数データと実際に実行されるランダム命令の混在する割合に変化が出る。このことにより、投機実行失敗によってキャンセルされる乱数データの命令数が変わることで、命令の実行タイミングに変化を持たせた試験を行うことが出来る。
〔7〕試験規約に従わない乱数データを含む命令列
〔7.1〕分岐成立命令を含む命令列
図27は、分岐成立命令を含む命令列の一例を示す図である。800は、分岐成立命令を含む試験命令列の一例である。試験命令列800は、図21Aに示す試験プログラムP1000を、SPARC(登録商標)の命令仕様で規定される命令文で示した例である。
〔7.1〕分岐成立命令を含む命令列
図27は、分岐成立命令を含む命令列の一例を示す図である。800は、分岐成立命令を含む試験命令列の一例である。試験命令列800は、図21Aに示す試験プログラムP1000を、SPARC(登録商標)の命令仕様で規定される命令文で示した例である。
試験命令列800は、アドレス801で特定される命令データ802を有する。図27に示される、デコード命令803は、命令データ802をデコードした命令である。分岐成立命令810は、図21Aのアドレスa1にある分岐成立命令に相当する。乱数データ命令列811は、図21Aに示す乱数データP1010に相当する。乱数データ命令列811のうち、書き換えられた乱数データ812は、図20~図25で説明した乱数データの命令部をAND演算及びOR演算して書き換えた乱数データの例である。
分岐成立命令810は、「0x1004ac」のアドレスにある、アドレス「0x1004ec」を分岐先アドレスとする無条件分岐成立命令「BA,a 0x1004ec」である。
乱数データ命令列811は、「15」命令数生成されている。乱数データ命令列811のうち7命令が、命令デコーダが解読可能なようにAND演算及びOR演算により所定の命令に書き換えられている。図27に示す例では、書き換えられて生成した命令は、全て分岐命令であり、図20に示す表710を用いて説明した「BCS」、「BE」、「BGU」、「BNE」、「BLEU」、「BVC」である。
なお、図27の813は、デコード不可能な命令を示す。命令デコーダ170は、デコードできない命令は、「unknown」というデータに変更する。「unknown」は、「NOP(No Operation)」命令と同じであり、実行部は、「unknown」を読みとると何の命令も実行しない。ただし、「unknown」命令が生成されると、プログラムカウンタや、命令数カウンタは、1つインクリメントされる。このように、命令デコーダが解読可能なようにAND演算及びOR演算により所定の命令に書き換えることで、「unknown」のデータが減ることがわかる。
〔7.2〕分岐不成立命令を含む命令列
図28は、分岐不成立命令を含む命令列の一例を示す図である。850は、分岐成立命令を含む試験命令列の一例である。試験命令列850は、図25Aに示す試験プログラムP1100Bを、SPARC(登録商標)の命令仕様で規定される命令文で示した例である。
図28は、分岐不成立命令を含む命令列の一例を示す図である。850は、分岐成立命令を含む試験命令列の一例である。試験命令列850は、図25Aに示す試験プログラムP1100Bを、SPARC(登録商標)の命令仕様で規定される命令文で示した例である。
試験命令列850は、アドレス851で特定される命令データ852を有する。図28に示される、デコード命令853は、命令データ852をデコードした命令である。分岐不成立命令860は、図25Aのアドレスa2にある分岐不成立命令に相当する。ランダム命令列861は、図25Aのランダム命令P1131に相当する。分岐成立命令862は、図25Aのアドレスa3にある分岐成立命令に相当する。分岐不成立命令860は、無条件分岐不成立命令「BE」である。
乱数データ命令列863のうち、書き換えられた乱数データ864は、図20~図25で説明した乱数データの命令部をAND演算及びOR演算して書き換えた乱数データの例である。
乱数データ命令は、「5」命令数生成されている。乱数データ命令列863のうち5命令が、命令デコーダが解読可能なようにAND演算及びOR演算により所定の命令に書き換えられている。図28に示す例では、書き換えられて生成した命令は、全て分岐命令であり、「BL」、「BVC」、「BCS」、「BA」である。
次に、図29~図31を参照して、試験プログラムの生成処理と、試験プログラムの実行処理を説明する。
〔8〕試験プログラムの生成処理フロー
試験プログラム生成装置は、試験プログラム生成プログラム910を実行して、主記憶装置520の記憶領域に、試験プログラム920を生成する。
試験プログラム生成装置は、試験プログラム生成プログラム910を実行して、主記憶装置520の記憶領域に、試験プログラム920を生成する。
図29A及び図29Bは、試験プログラムの生成処理の一例を示す図である。試験プログラム生成装置は、パラメータテーブル940からパラメータを取得する(S1301)。試験プログラム生成装置は、乱数データを生成する(S1302)。試験プログラム生成装置は、パラメータテーブル940のシード値Sを用いて乱数データを生成し、試験プログラムを格納する主記憶装置520の記憶領域に乱数データを書き込む。試験プログラム生成装置は、命令数カウンタが、トラップ命令を生成する数かどうか判断する(S1303)。命令数カウンタとは、生成された命令数を示す整数データである。命令数カウンタは、図4に示す制御レジスタ250B等のレジスタに格納される。また、命令数カウンタがトラップ命令を発生する数かどうかの判断は、前回生成したトラップ命令からの命令数が、パラメータテーブル940のトラップ命令発生間隔Cである「512」か否かで判断する。
命令数カウンタがトラップ命令を発生する数である場合(S1303 Yes)、試験プログラム生成装置は、トラップ命令を生成し(S1331)、さらにステップS1332を実行する。命令数カウンタがトラップ命令を発生する数では無い場合(S1303 No)、試験プログラム生成装置は、命令数カウンタが、乱数データを生成する命令数か否か判断する(S1304)。命令数カウンタが乱数データを生成する命令数かどうかの判断は、前回生成した乱数データの直前にある分岐命令からの命令数が、乱数データ生成間隔Rに達しているか否かで判断する。
〔8.1〕ランダム命令の生成
命令数カウンタが乱数データを生成する命令数ではない場合(S1304 No)、試験プログラム生成装置は、命令変換テーブル930から任意に生成する命令の命令コードを選択する(S1305)。試験プログラム生成装置は、命令変換テーブル930から選択した命令コードに対応するANDデータとORデータを取得して、取得したANDデータとORデータで、演算処理装置510に書き込まれた乱数データを書き換える(S1306)。ステップS1305の書き換えによって、図1~図3を用いて説明したように、試験規約に従うランダム命令が生成される。試験プログラム生成装置は、カウンタを更新する(S1307)。S1307のカウンタ更新処理によって、カウンタに加算する命令数の数は、S1305~S1306で生成された命令数であり、例えば、「1」である。カウンタを更新すると、試験プログラム生成装置は、ステップS1332を実行する。
命令数カウンタが乱数データを生成する命令数ではない場合(S1304 No)、試験プログラム生成装置は、命令変換テーブル930から任意に生成する命令の命令コードを選択する(S1305)。試験プログラム生成装置は、命令変換テーブル930から選択した命令コードに対応するANDデータとORデータを取得して、取得したANDデータとORデータで、演算処理装置510に書き込まれた乱数データを書き換える(S1306)。ステップS1305の書き換えによって、図1~図3を用いて説明したように、試験規約に従うランダム命令が生成される。試験プログラム生成装置は、カウンタを更新する(S1307)。S1307のカウンタ更新処理によって、カウンタに加算する命令数の数は、S1305~S1306で生成された命令数であり、例えば、「1」である。カウンタを更新すると、試験プログラム生成装置は、ステップS1332を実行する。
〔8.2〕分岐成立命令列の生成
命令数カウンタが乱数データを生成する命令カウント数を示す場合(S1304 Yes)、試験プログラム生成装置は、分岐成立の命令列を生成するか否か判断する(S1311)。分岐成立の命令列を生成する場合は、図21Aに示す試験プログラムP1000のアドレスa1にある分岐成立命令、図24Aに示す試験プログラムP1100Aのアドレスa2、a3にある分岐成立命令等がある。
命令数カウンタが乱数データを生成する命令カウント数を示す場合(S1304 Yes)、試験プログラム生成装置は、分岐成立の命令列を生成するか否か判断する(S1311)。分岐成立の命令列を生成する場合は、図21Aに示す試験プログラムP1000のアドレスa1にある分岐成立命令、図24Aに示す試験プログラムP1100Aのアドレスa2、a3にある分岐成立命令等がある。
試験プログラム生成装置が、分岐成立の命令列を生成すると判断する場合(S1311 Yes)、試験プログラム生成装置は、分岐成立命令を生成する(S1312)。生成される分岐成立命令は、例えば、図27に示す分岐成立命令810である。
試験プログラム生成装置は、主記憶装置520に記憶された乱数データから、命令数Dの乱数データを選択する(S1313)。ステップS1313において選択された命令数Dの乱数データは、例えば、図27に示す乱数データ命令列811である。
試験プログラム生成装置は、選択したD個の命令文の乱数データを、AND及びOR演算で書き換える(S1314)。ステップS1314において書き換えられた乱数データは、例えば、図27に示す書き換えられた乱数データ812である。
試験プログラム生成装置は、命令カウンタを更新する(S1315)。S1315の命令カウンタ更新処理によって、命令カウンタに加算する命令数の数は、S1312及びS1313で生成された命令数であり、例えば、分岐成立命令の命令数「1」と、乱数データの命令数Dの「3」とを加算した数に、さらに1インクリメントした数である。カウンタを更新すると、試験プログラム生成装置は、ステップS1332を実行する。
〔8.3〕分岐不成立命令列の生成
命令数カウンタが乱数データを生成する命令数を示す場合(S1304 Yes)、試験プログラム生成装置は、分岐成立の命令列を生成するか否か判断する(S1311)。分岐成立の命令列ではない例、つまり、分岐不成立の命令列の例は、図25Aの試験プログラムP1100Bのアドレスa2にある分岐不成立命令である。例えば、図25Aの試験プログラムP1100Bを生成する場合、試験プログラムP1100Aが既に試験制御装置によって1度実行された場合である。その場合、試験プログラム生成装置は、試験ログデータ960の試験実行回数等を参照し、生成中の試験プログラムが試験プログラムP1100Aの次に実行される試験プログラムP1100Bと判断し、ステップS1311で分岐不成立命令の生成と判断する。
命令数カウンタが乱数データを生成する命令数を示す場合(S1304 Yes)、試験プログラム生成装置は、分岐成立の命令列を生成するか否か判断する(S1311)。分岐成立の命令列ではない例、つまり、分岐不成立の命令列の例は、図25Aの試験プログラムP1100Bのアドレスa2にある分岐不成立命令である。例えば、図25Aの試験プログラムP1100Bを生成する場合、試験プログラムP1100Aが既に試験制御装置によって1度実行された場合である。その場合、試験プログラム生成装置は、試験ログデータ960の試験実行回数等を参照し、生成中の試験プログラムが試験プログラムP1100Aの次に実行される試験プログラムP1100Bと判断し、ステップS1311で分岐不成立命令の生成と判断する。
試験プログラム生成装置が、分岐不成立の命令列を生成すると判断する場合(S1311 No)、試験プログラム生成装置は、分岐不成立命令を生成する(S1321)。生成される分岐不成立命令は、例えば、図28に示す分岐不成立命令860である。
試験プログラム生成装置は、命令数Dのランダム命令を生成する(S1322)。生成される命令数Dのランダム命令は、例えば、図28に示すランダム命令列861である。試験プログラム生成装置は、分岐成立命令を生成する(S1323)。生成される分岐成立命令は、例えば、図28に示す分岐成立命令862である。
試験プログラム生成装置は、命令数Dの乱数命令を選択する(S1324)。ステップS1324において、選択された命令数Dの乱数命令は、例えば、図28に示す乱数データ命令列863である。試験プログラム生成装置は、選択したD命令文の乱数データを、AND及びOR演算で書き換える(S1325)。ステップS1325において書き換えられた乱数データは、例えば、図28に示す書き換えられた乱数データ864である。
試験プログラム生成装置は、命令カウンタを更新する(S1326)。S1326の命令カウンタ更新処理によって、命令カウンタに加算する命令数の数は、S1321~S1324で生成された命令数であり、分岐成立命令の命令数1と、ランダム命令の命令数Dと、分岐成立命令の命令数1と、乱数データ命令の命令数Dとを加算した数に、さらに1インクリメントした数である。命令カウンタを更新すると、試験プログラム生成装置は、ステップS1332を実行する。
試験プログラム生成装置が、試験プログラムは、最終命令まで生成されたか判断する(S1332)。ステップS1332は、試験プログラム生成装置が、カウンタが命令生成数Nになったか否かで判断することができる。
最終命令まで生成されていない場合(S1332 No)、試験プログラム生成装置は、ステップS1303を再度実行する。最終命令まで生成された場合(S1332 Yes)、試験プログラム生成装置は、試験プログラム生成処理を終了する。
〔9〕試験プログラムの実行処理フロー
図30は、試験プログラムの実行処理の一例を示す図である。試験制御装置は、試験プログラム920を実行して、試験プログラムの実行処理を開始する。試験制御装置は、初期化処理を実行する(S1401)。初期化処理とは、図10を用いて説明したように、例えば、汎用レジスタ250Dに、正規化データを記憶することである。これは、試験プログラム内のランダム命令を実行するためである。
図30は、試験プログラムの実行処理の一例を示す図である。試験制御装置は、試験プログラム920を実行して、試験プログラムの実行処理を開始する。試験制御装置は、初期化処理を実行する(S1401)。初期化処理とは、図10を用いて説明したように、例えば、汎用レジスタ250Dに、正規化データを記憶することである。これは、試験プログラム内のランダム命令を実行するためである。
試験制御装置は、トラップ命令以外の命令を実行する(S1402)。トラップ命令以外の命令実行とは、例えば、図23B、図24B、図25B、図26に示す試験プログラム実行に相当する。
試験制御装置は、トラップ命令を実行する(S1403)。トラップ命令を実行すると、試験制御装置は、レジスタ250に記憶されるデータを主記憶装置520のログ記憶領域に、出力する(S1404)。試験制御装置はさらに、主記憶装置520内の試験結果950を、主記憶装置内のログ記憶領域に移す(S1405)。試験制御装置は、S1402~S1405の処理を試験プログラムの最終命令に至るまで実行して、試験プログラムの実行処理を終了する。
図31は、試験プログラムの生成処理と実行処理の一例を示す図である。試験プログラム生成装置は、試験プログラムを生成する(S1301~S1332)。ステップS1301~S1332は、図29A及び図29Bを用いて説明した処理である。試験制御装置は、試験プログラムを実行する(S1401~S1405)。ステップS1401~S1405は、図30を用いて説明した処理である。試験プログラム生成装置は、シード値Eの試験が行われたか否か判断する(S1501)。シード値Eとは、最後の乱数生成に使用されるシード値である。シード値Eの試験が行われていない場合(S1501 No)、試験プログラム生成装置は、現在のシード値に1を加算し(S1502)、ステップS1301~S1332を再度実行する。シード値Eの試験が行われた場合(S1501 Yes)、試験制御装置は、主記憶装置の試験ログデータ960に格納された試験結果の比較処理を実行して(S1503)、試験プログラムの生成処理と実行処理を終了する。比較処理とは、同じ試験命令列の実行により生成された試験結果の比較である。例えば、図21Aに示す試験プログラムP1000の実行による試験結果と、図23Aに示す試験プログラムP1000の実行による試験結果である。これらの試験結果は、乱数データの実行結果は無効化されるため、本来同じになるところ、相違があれば乱数データの実行による演算処理装置の動作に異常があるため、演算処理装置の正常動作に問題があることがわかる。
10 演算処理部
110 記憶部
110A L1命令キャッシュメモリ
110B L1データキャッシュメモリ
120 命令読出部
130 分岐履歴部
140 命令実行部
150 命令バッファ
160 命令ワードレジスタ
170 命令デコーダ
182 RSBR
184 RSF
186 RSE
188 RSA
210 浮動小数点演算部
220 整数演算部
230 アドレス生成部
240 ロードストアキュー
250 レジスタ部
250 レジスタ
250A コミットスタックエントリ
250B 制御レジスタ
250C 浮動小数点レジスタ
250D 汎用レジスタ
500 情報処理装置
510 演算処理装置
512 L2キャッシュコントローラ
514 L2キャッシュメモリ
516 メモリアクセス制御部
520 主記憶装置
530 通信部
540 2次記憶装置
550 ドライブ装置
560 I/Oコントローラ
570 入力部
590 記憶媒体
920 試験プログラム
930 命令変換テーブル
940 パラメータテーブル
950 試験結果
960 試験ログデータ
110 記憶部
110A L1命令キャッシュメモリ
110B L1データキャッシュメモリ
120 命令読出部
130 分岐履歴部
140 命令実行部
150 命令バッファ
160 命令ワードレジスタ
170 命令デコーダ
182 RSBR
184 RSF
186 RSE
188 RSA
210 浮動小数点演算部
220 整数演算部
230 アドレス生成部
240 ロードストアキュー
250 レジスタ部
250 レジスタ
250A コミットスタックエントリ
250B 制御レジスタ
250C 浮動小数点レジスタ
250D 汎用レジスタ
500 情報処理装置
510 演算処理装置
512 L2キャッシュコントローラ
514 L2キャッシュメモリ
516 メモリアクセス制御部
520 主記憶装置
530 通信部
540 2次記憶装置
550 ドライブ装置
560 I/Oコントローラ
570 入力部
590 記憶媒体
920 試験プログラム
930 命令変換テーブル
940 パラメータテーブル
950 試験結果
960 試験ログデータ
Claims (21)
- 命令を記憶する記憶部、分岐命令のアドレスと前記分岐命令の分岐先アドレスとを対応付けた分岐履歴を記憶する分岐履歴部、前記記憶部から命令を読み出す命令読出部、前記命令読出部が読み出した命令を実行する演算部、及び、前記分岐命令の分岐先命令の投機実行に失敗すると前記投機実行した分岐先命令の実行結果を無効化する分岐制御部、を有する演算処理装置を試験する試験方法であって、
前記命令読出部が、前記記憶部から分岐命令を読み出すステップと、
前記読み出した読出分岐命令の分岐履歴が前記分岐履歴部に無い場合、前記分岐制御部が、前記命令読出部に、前記分岐命令の後続命令の読み出しを指示するステップと、
前記命令読出部が、前記指示に従って、試験規約に限定されない乱数データを、前記分岐命令の後続命令として読み出すステップと、
前記演算部が、前記読出分岐命令の分岐先アドレスを計算するとともに、前記乱数データを命令として実行するステップと、
前記分岐制御部が、前記計算した分岐先アドレスと、前記乱数データのアドレスとが異なる場合、前記乱数データの実行結果を無効化するステップと、を有することを特徴とする試験方法。 - 前記読出分岐命令の分岐履歴が前記分岐履歴部にある場合、前記命令読出部が、前記読出分岐命令の分岐履歴により前記読出分岐命令と対応付けられる分岐先アドレスにある第2の乱数データを前記記憶部から読み出すステップと、
前記演算部が、前記第2の乱数データを実行するステップと、
前記分岐制御部が、前記計算した分岐先アドレスと、前記第2の乱数データのアドレスとが異なる場合、前記第2の乱数データの実行結果を無効化するステップと、をさらに有することを特徴とする請求項1に記載の試験方法。 - 前記無効化ステップの後に、前記分岐命令読み出しステップ、前記読み出し指示ステップ、前記乱数データ読み出しステップ、前記乱数データ実行ステップを繰り返す場合、前記乱数データ実行ステップを繰り返すたびに乱数データの数を変える、ことを特徴とする請求項1又は2に記載の試験方法。
- 前記乱数データは、命令コードを含むことを特徴とする請求項1~3の何れか1項に記載の試験方法。
- 分岐命令、及び前記分岐命令の後続命令として試験規約に限定されない乱数データを記憶する記憶部と、
分岐命令のアドレスと前記分岐命令の分岐先アドレスとを対応付けた分岐履歴を記憶する分岐履歴部と、
前記記憶部から命令を読み出す命令読出部と、
前記命令読出部が読み出した命令を実行する演算部と、
前記命令読出部が読み出した読出分岐命令の分岐履歴が前記分岐履歴部に無い場合、前記命令読出部に、前記試験規約に限定されない乱数データの読み出しを指示し、前記演算部が計算した前記分岐命令の分岐先アドレスと、前記乱数データのアドレスとが異なる場合、前記演算部による前記乱数データの実行結果を無効化する分岐制御部、を備えることを特徴とする演算処理装置。 - 前記命令読出部は、前記読出分岐命令の分岐履歴が前記分岐履歴部にある場合、前記読出分岐命令の分岐履歴により前記読出分岐命令と対応付けられる分岐先アドレスにある第2の乱数データを前記記憶部から読み出し、
前記演算部は、前記第2の乱数データを実行するステップと、
前記分岐制御部は、前記計算した分岐先アドレスと、前記第2の乱数データのアドレスとが異なる場合、前記第2の乱数データの実行結果を無効化することを特徴とする請求項4に記載の演算処理装置。 - 前記無効化ステップの後に、前記分岐命令読み出しステップ、前記読み出し指示ステップ、前記乱数データ読み出しステップ、前記乱数データ実行ステップを繰り返す場合、前記乱数データ実行ステップを繰り返すたびに乱数データの数を変える、ことを特徴とする請求項5又は6に記載の演算処理装置。
- 前記乱数データは、命令コードを含むことを特徴とする請求項5又は6の何れか1項に記載の試験制御装置。
- 命令を記憶する記憶部、及び、分岐命令のアドレスと前記分岐命令の分岐先アドレスとを対応付けた分岐履歴を記憶する分岐履歴部を有する演算処理装置を試験するための試験プログラムであって、前記演算処理装置に、
前記記憶部から分岐命令を読み出す手順と、
前記読み出した読出分岐命令の分岐履歴が前記分岐履歴部に無い場合、試験規約に限定されない乱数データを、前記分岐命令の後続命令として読み出す手順と、
前記読出分岐命令の分岐先アドレスを計算するとともに、前記乱数データを命令として実行する手順と、
前記計算した分岐先アドレスと、前記乱数データのアドレスとが異なる場合、前記乱数データの実行結果を無効化する手順と、を実行させることを特徴とする試験プログラム。 - 前記読出分岐命令の分岐履歴が前記分岐履歴部にある場合、前記読出分岐命令の分岐履歴により前記読出分岐命令と対応付けられる分岐先アドレスにある第2の乱数データを前記記憶部から読み出す手順と、
前記第2の乱数データを実行する手順と、
前記計算した分岐先アドレスと、前記第2の乱数データのアドレスとが異なる場合、前記第2の乱数データの実行結果を無効化する手順と、をさらに実行させることを特徴とする請求項6に記載の試験プログラム。 - 前記無効化手順の後に、前記分岐命令読み出し手順、前記読み出し手順、前記乱数データ実行手順を繰り返す場合、前記乱数データ実行手順を繰り返すたびに乱数データの数を変える手順と、をさらに実行させることを特徴とする請求項9又は10に記載の試験プログラム。
- 前記乱数データは、命令コードを含むことを特徴とする請求項9~11の何れか1項に記載の試験プログラム。
- 試験プログラムを生成する方法であって、
演算処理装置が、分岐が成立する分岐命令を生成するステップと、
前記演算処理装置が、前記分岐命令を、主記憶装置に格納するステップと、
前記演算処理装置が、乱数データを生成するステップと、
前記演算処理装置が、前記乱数データを、前記主記憶装置において前記分岐命令の直後の位置に格納するステップと、
前記演算処理装置が、命令を生成するステップと、
前記演算処理装置が、前記命令を、前記主記憶装置において前記分岐命令の分岐先の位置に格納するステップと、を有することを特徴とする試験プログラム生成方法。 - 前記演算処理装置が、前記主記憶装置格納される前記分岐が成立する分岐命令を、分岐が不成立になる分岐命令に変更するステップと、
前記演算処理装置が、前記主記憶装置格納される前記乱数データを、乱数データと異なる命令に変更するステップと、
前記演算処理装置が、第2の乱数データを生成するステップと、
前記演算処理装置が、前記第2の乱数データを、前記主記憶装置に格納される前記分岐命令の分岐先の位置に格納するステップと、をさらに有することを特徴とする請求項13に記載の試験プログラム生成方法。 - 前記乱数データは、命令コードを含むことを特徴とする請求項13又は14に記載の試験プログラム生成方法。
- 主記憶装置と、
分岐が成立する分岐命令を生成し、前記分岐命令を、主記憶装置に格納し、
乱数データを生成し、前記乱数データを、前記主記憶装置において前記分岐命令の直後の位置に格納し、
命令を生成し、前記命令を、前記主記憶装置において前記分岐命令の分岐先の位置に格納する演算処理装置と、
を備えることを特徴とする試験プログラム生成装置。 - 前記演算処理装置が、前記主記憶装置格納される前記分岐が成立する分岐命令を、分岐が不成立になる分岐命令に変更し、前記主記憶装置格納される前記乱数データを、乱数データと異なる命令に変更し、第2の乱数データを生成し、前記第2の乱数データを、前記主記憶装置に格納される前記分岐命令の分岐先の位置に格納する、ことを特徴とする請求項16に記載の試験プログラム生成装置。
- 前記乱数データは、命令コードを含むことを特徴とする請求項16又は17に記載の試験プログラム生成装置。
- 試験プログラムを生成する試験プログラム生成プログラムであって、
分岐が成立する分岐命令を生成する手順と、
前記分岐命令を、主記憶装置に格納する手順と、
乱数データを生成する手順と、
前記乱数データを、前記主記憶装置において前記分岐命令の直後の位置に格納する手順と、
命令を生成する手順と、
前記命令を、前記主記憶装置において前記分岐命令の分岐先の位置に格納する手順と、を前記演算処理装置に実行させることを特徴とする試験プログラム生成プログラム。 - 前記主記憶装置格納される前記分岐が成立する分岐命令を、分岐が不成立になる分岐命令に変更する手順と、
前記主記憶装置格納される前記乱数データを、乱数データと異なる命令に変更する手順と、
第2の乱数データを生成する手順と、
前記第2の乱数データを、前記主記憶装置に格納される前記分岐命令の分岐先の位置に格納する手順と、を前記演算処理装置にさらに実行させることを特徴とする請求項19に記載の試験プログラム生成プログラム。 - 前記乱数データは、命令コードを含むことを特徴とする請求項19又は20に記載の試験プログラム生成プログラム。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012529432A JP5549734B2 (ja) | 2010-08-18 | 2010-08-18 | 試験方法、演算処理装置、試験プログラム、試験プログラム生成方法、試験プログラム生成装置、及び試験プログラム生成プログラム |
PCT/JP2010/063935 WO2012023185A1 (ja) | 2010-08-18 | 2010-08-18 | 試験方法、演算処理装置、試験プログラム、試験プログラム生成方法、試験プログラム生成装置、及び試験プログラム生成プログラム |
US13/764,069 US20130152048A1 (en) | 2010-08-18 | 2013-02-11 | Test method, processing device, test program generation method and test program generator |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2010/063935 WO2012023185A1 (ja) | 2010-08-18 | 2010-08-18 | 試験方法、演算処理装置、試験プログラム、試験プログラム生成方法、試験プログラム生成装置、及び試験プログラム生成プログラム |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US13/764,069 Continuation US20130152048A1 (en) | 2010-08-18 | 2013-02-11 | Test method, processing device, test program generation method and test program generator |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2012023185A1 true WO2012023185A1 (ja) | 2012-02-23 |
Family
ID=45604859
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2010/063935 WO2012023185A1 (ja) | 2010-08-18 | 2010-08-18 | 試験方法、演算処理装置、試験プログラム、試験プログラム生成方法、試験プログラム生成装置、及び試験プログラム生成プログラム |
Country Status (3)
Country | Link |
---|---|
US (1) | US20130152048A1 (ja) |
JP (1) | JP5549734B2 (ja) |
WO (1) | WO2012023185A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110275818A (zh) * | 2018-03-13 | 2019-09-24 | 龙芯中科技术有限公司 | 测试程序生成方法、装置及存储介质 |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8812826B2 (en) * | 2010-10-20 | 2014-08-19 | International Business Machines Corporation | Processor testing |
US8892946B2 (en) * | 2011-12-15 | 2014-11-18 | International Business Machines Corporation | Verifying speculative multithreading in an application |
US10061672B2 (en) * | 2013-03-07 | 2018-08-28 | International Business Machines Corporation | Implementing random content of program loops in random test generation for processor verification |
CN105138464B (zh) * | 2015-09-30 | 2018-06-29 | 沈文策 | 一种程序代码处理方法和装置 |
US10768230B2 (en) * | 2016-05-27 | 2020-09-08 | International Business Machines Corporation | Built-in device testing of integrated circuits |
US9703693B1 (en) * | 2017-03-08 | 2017-07-11 | Fmr Llc | Regression testing system for software applications |
KR101946476B1 (ko) * | 2017-11-14 | 2019-05-20 | 전남대학교산학협력단 | 캐쉬 적중률 예측에 기반한 주기적 캐쉬 우회 기법, 그 기법이 적용된 스트리밍 멀티프로세서 및 임베디드 시스템 |
KR101969435B1 (ko) * | 2017-11-14 | 2019-04-16 | 전남대학교산학협력단 | 어플리케이션 특성 기반 캐쉬 성능에 따른 주기적인 캐쉬 우회 기법, 그 기법이 적용된 스트리밍 멀티프로세서 및 임베디드 시스템 |
US10901878B2 (en) * | 2018-12-19 | 2021-01-26 | International Business Machines Corporation | Reduction of pseudo-random test case generation overhead |
JP7316613B2 (ja) * | 2020-03-27 | 2023-07-28 | パナソニックIpマネジメント株式会社 | 異常検出方法、異常検出プログラム、異常検出装置、書き換え方法、書き換えプログラム及び書き換え装置 |
WO2021198789A1 (en) * | 2020-04-01 | 2021-10-07 | Mobileye Vision Technologies Ltd. | Evaluating a floating-point accuracy of a compiler |
CN116779020B (zh) * | 2023-08-28 | 2023-11-07 | 合肥康芯威存储技术有限公司 | 一种存储器、测试方法、设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01306932A (ja) * | 1988-06-03 | 1989-12-11 | Hitachi Ltd | データ処理装置の試験方法 |
JPH04348430A (ja) * | 1991-02-25 | 1992-12-03 | Matsushita Electric Ind Co Ltd | データ処理装置 |
JPH05250202A (ja) * | 1992-03-06 | 1993-09-28 | Nec Corp | 情報処理装置の試験装置 |
JPH08339312A (ja) * | 1995-06-09 | 1996-12-24 | Fujitsu Ltd | テストプログラム自動生成システム |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5987561A (en) * | 1995-08-31 | 1999-11-16 | Advanced Micro Devices, Inc. | Superscalar microprocessor employing a data cache capable of performing store accesses in a single clock cycle |
TWI305323B (en) * | 2004-08-23 | 2009-01-11 | Faraday Tech Corp | Method for verification branch prediction mechanisms and readable recording medium for storing program thereof |
US7428632B2 (en) * | 2004-09-14 | 2008-09-23 | Arm Limited | Branch prediction mechanism using a branch cache memory and an extended pattern cache |
KR20070081696A (ko) * | 2006-02-13 | 2007-08-17 | 삼성전자주식회사 | 분기 예측 정보를 저장하는 분기 타겟 버퍼 및 그것을포함한 분기 예측 회로 |
WO2007099604A1 (ja) * | 2006-02-28 | 2007-09-07 | Fujitsu Limited | コンピュータの分岐予測装置 |
-
2010
- 2010-08-18 WO PCT/JP2010/063935 patent/WO2012023185A1/ja active Application Filing
- 2010-08-18 JP JP2012529432A patent/JP5549734B2/ja not_active Expired - Fee Related
-
2013
- 2013-02-11 US US13/764,069 patent/US20130152048A1/en not_active Abandoned
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01306932A (ja) * | 1988-06-03 | 1989-12-11 | Hitachi Ltd | データ処理装置の試験方法 |
JPH04348430A (ja) * | 1991-02-25 | 1992-12-03 | Matsushita Electric Ind Co Ltd | データ処理装置 |
JPH05250202A (ja) * | 1992-03-06 | 1993-09-28 | Nec Corp | 情報処理装置の試験装置 |
JPH08339312A (ja) * | 1995-06-09 | 1996-12-24 | Fujitsu Ltd | テストプログラム自動生成システム |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110275818A (zh) * | 2018-03-13 | 2019-09-24 | 龙芯中科技术有限公司 | 测试程序生成方法、装置及存储介质 |
CN110275818B (zh) * | 2018-03-13 | 2024-04-30 | 龙芯中科技术股份有限公司 | 硅后验证方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
JPWO2012023185A1 (ja) | 2013-10-28 |
JP5549734B2 (ja) | 2014-07-16 |
US20130152048A1 (en) | 2013-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5549734B2 (ja) | 試験方法、演算処理装置、試験プログラム、試験プログラム生成方法、試験プログラム生成装置、及び試験プログラム生成プログラム | |
US20210026634A1 (en) | Apparatus with reduced hardware register set using register-emulating memory location to emulate architectural register | |
EP2569694B1 (en) | Conditional compare instruction | |
JP6267513B2 (ja) | 同一のデータ条件に依存する、隣接する命令の実行の制御 | |
EP2430526B1 (en) | Instruction cracking based on machine state | |
CN108780397B (zh) | 程序循环控制 | |
CN108780396A (zh) | 程序循环控制 | |
CN108885549B (zh) | 分支指令 | |
JP2012529096A (ja) | ベクトル命令を取り扱うためのデータ処理装置および方法 | |
JPH11504458A (ja) | スーパースカラマイクロプロセッサにおける分岐予測正確度向上のための装置および方法 | |
TWI785064B (zh) | 用於測試向量元素內部的位元值的設備、方法、電腦程式及電腦可讀儲存媒體 | |
CN108319559B (zh) | 用于控制矢量内存存取的数据处理装置及方法 | |
JP2017027149A (ja) | 半導体装置 | |
US20030196073A1 (en) | Arithmetic computation of potential addresses | |
KR101016257B1 (ko) | 프로세서 및 정보 처리 장치 | |
CN116724291A (zh) | 加载区块指令和存储区块指令 | |
EP2461246B1 (en) | Early conditional selection of an operand | |
JP7048612B2 (ja) | ベクトル生成命令 | |
US10338926B2 (en) | Processor with conditional instructions | |
KR102379886B1 (ko) | 벡터 명령 처리 | |
TWI502498B (zh) | 微處理器、積體電路、計算機程式產品與提供微碼指令儲存空間的方法 | |
US8560810B2 (en) | Microprocessor with microtranslator and tail microcode instruction for fast execution of complex macroinstructions having both memory and register forms | |
US7181595B1 (en) | Method for decoding composite VLIW packets utilizing a tree structure | |
US11366668B1 (en) | Method and apparatus for comparing predicated load value with masked load value | |
Ho | The design and development of a branch target buffer based on a 2-bit prediction scheme for a 32-bit RISC32 pipeline processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 10856142 Country of ref document: EP Kind code of ref document: A1 |
|
WWE | Wipo information: entry into national phase |
Ref document number: 2012529432 Country of ref document: JP |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 10856142 Country of ref document: EP Kind code of ref document: A1 |