WO2011161884A1 - 集積回路、コンピュータシステム、制御方法 - Google Patents

集積回路、コンピュータシステム、制御方法 Download PDF

Info

Publication number
WO2011161884A1
WO2011161884A1 PCT/JP2011/003185 JP2011003185W WO2011161884A1 WO 2011161884 A1 WO2011161884 A1 WO 2011161884A1 JP 2011003185 W JP2011003185 W JP 2011003185W WO 2011161884 A1 WO2011161884 A1 WO 2011161884A1
Authority
WO
WIPO (PCT)
Prior art keywords
loop
processor
unit
instruction
power
Prior art date
Application number
PCT/JP2011/003185
Other languages
English (en)
French (fr)
Inventor
真史 杉山
齊藤 雅彦
Original Assignee
パナソニック株式会社
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by パナソニック株式会社 filed Critical パナソニック株式会社
Priority to JP2012521283A priority Critical patent/JP5853216B2/ja
Priority to US13/395,985 priority patent/US8918664B2/en
Priority to CN201180003832.3A priority patent/CN102576318B/zh
Publication of WO2011161884A1 publication Critical patent/WO2011161884A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3206Monitoring of events, devices or parameters that trigger a change in power modality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power

Definitions

  • the present invention relates to an integrated circuit having a processor, a computer system, and a control method, and more particularly to an integrated circuit, a computer system, and a control method that reduce power consumption when the processor executes a busy wait.
  • busy wait is used when waiting for input from a user or when synchronizing between a plurality of processors (or a plurality of logical processors, processes, threads, etc.) operating in parallel.
  • a plurality of processors or a plurality of logical processors, processes, threads, etc.
  • the busy wait is performed, for example, a loop process for repeatedly checking the value of a specific variable (for example, a synchronization variable) is executed in the processor. Then, when the value of the specific variable changes to the set value, the loop process ends and the original process is executed.
  • a specific variable for example, a synchronization variable
  • the use of the busy wait enables a synchronous process in which one process is completed and then the other process is started between a plurality of processors operating in parallel. Is widely used.
  • busy wait has the disadvantage of wasting processor resources.
  • the number of loops repeated for monitoring the synchronization variable may be several hundred to several tens of thousands in some cases. Therefore, the busy weight is a wasteful control method from the viewpoint of power consumption.
  • Patent Document 1 discloses a method for reducing wasteful power consumption at the time of spin wait, which is a kind of busy weight.
  • the spin wait is used for, for example, synchronization processing between multiprocessors, and FIG. 33 assumes a situation in which two processors sequentially execute processing divided into a front stage and a rear stage.
  • a spin lock (a type of interlock) is configured by the setting unit 1101 on the first processor side, the verification unit 1102 on the second processor side, and the variable 1110 for synchronization processing.
  • the setting unit 1101 of the first processor writes “0” in the synchronization variable 1110, and then performs the previous process S1111.
  • the first processor writes “1” in the synchronization variable 1110 when the previous process S1111 is completed.
  • the verification unit 1102 of the second processor cannot start the subsequent process S1122 until the value of the synchronization variable 1110 becomes “1”. Therefore, the determination in step S1121 is repeated until the synchronization variable 1110 becomes “1” (that is, the loop is repeated to wait), the spin wait state is entered, and power is wasted.
  • Patent Document 1 discloses a method of detecting that a processor has executed an instruction sequence used for spin wait, and at that time putting the processor in a power saving state.
  • FIG. 34 is a diagram illustrating a configuration of the spin weight detection unit described in Patent Document 1. In FIG.
  • the spin wait detection unit 1222 includes an executed instruction sequence buffer 1234 of the processor, a spin wait instruction sequence storage unit 1236, and a comparison unit 1238 that compares instruction sequences included in both.
  • the spin wait instruction string storage unit 1236 stores an interlock instruction string (for example, test_and_set and compare_and_swap) specific to the spin wait.
  • the comparison unit 1238 detects that the executed instruction sequence buffer 1234 includes the interlock instruction sequence stored in the spinwait instruction sequence storage unit 1236, the spinwait instruction detection signal 1241 is output. Is done.
  • the processor is put into a power saving state using the spin wait instruction detection signal 1241 as a trigger.
  • the busy wait is detected based on the execution of a specific instruction sequence (test_and_set, etc.) stored in the spinwait instruction sequence storage unit 1236.
  • a busy wait using a different instruction sequence cannot be detected.
  • various instruction sequences are stored in the spinwait instruction sequence storage unit 1236, and each of the various instruction sequences and the executed instruction sequence are stored.
  • there is a limit to the comparison That is, since the busy weight that can be detected is limited, there is a problem that the situation in which power consumption can be reduced is limited.
  • the present invention solves the above-described problems in the conventional technology, and can detect execution of a variety of busy weights, and can reduce power consumed by the execution of busy weights in a processor. It aims to provide a method.
  • an integrated circuit is an integrated circuit including a processor, and the processor detects that a loop process that repeatedly executes a loop including one or more instructions is executed.
  • a loop propagation dependency analyzing unit that detects a loop propagation dependency that spans two loops having different execution times between instructions in the loop processing, and the loop processing detected by the loop detecting unit,
  • a power control unit that performs power saving control for reducing power consumption due to the execution of the loop processing when the loop propagation dependency is not detected by the loop propagation dependency analyzing unit.
  • the loop detection unit can detect the loop processing, and the loop propagation dependency analysis unit can determine whether the loop processing is for busy wait. Therefore, a busy wait loop can be detected without comparison with a specific instruction sequence (for example, an interlock instruction sequence). Therefore, it is possible to easily detect a busy wait loop constituted by an instruction sequence other than a specific instruction sequence and perform power saving control during the busy wait. As a result, it is possible to detect more various busy wait executions and reduce power wasted due to busy wait execution.
  • a specific instruction sequence for example, an interlock instruction sequence
  • FIG. 1 is a diagram schematically illustrating a configuration of a computer system 1300 including an integrated circuit according to a first embodiment.
  • FIG. 3 is a diagram schematically illustrating a configuration of a computer system 1300 including an integrated circuit according to a first embodiment.
  • 3 is a diagram illustrating an instruction set 1400 of a processor 1301 included in the integrated circuit according to the first embodiment;
  • FIG. 3 is a diagram illustrating a register set 1500 of a processor 1301 in Embodiment 1.
  • FIG. 6 is a diagram illustrating an instruction sequence 1600 according to the first embodiment.
  • FIG. 6 is a diagram illustrating an example of an instruction sequence 2100 that constitutes a loop according to Embodiment 1.
  • FIG. 6 is a flowchart showing processing of a loop propagation dependency analyzing unit 1701 in the first embodiment.
  • 6 is a diagram illustrating data in a dependency relationship analysis buffer 2200 used by a loop propagation dependency analysis unit 1701 in the first embodiment.
  • FIG. 6 is a diagram illustrating an example of an instruction sequence forming a loop in Embodiment 1.
  • FIG. FIG. 11 is a diagram illustrating data in a dependency relationship analysis buffer 2700 used by a loop propagation dependency analysis unit 1701 in the first embodiment.
  • 3 is a flowchart showing processing of a first power control unit 1703 in the first embodiment.
  • FIG. 6 is a flowchart showing processing of a loop escape detection unit 1704 in the first embodiment.
  • 6 is a flowchart showing processing of a second power control unit 1705 in the first embodiment.
  • 6 is a diagram showing an electronic circuit that constitutes a part of a loop propagation dependence analyzing unit 1701 in the first embodiment.
  • FIG. 6 is a diagram showing an electronic circuit that constitutes a part of a loop propagation dependence analyzing unit 1701 in the first embodiment.
  • FIG. 6 is a diagram showing an electronic circuit that constitutes a part of a loop propagation dependence analyzing unit 1701 in the first embodiment.
  • FIG. It is a figure which shows typically the structure of the computer system 2800 concerning a modification.
  • FIG. 18 is a diagram schematically showing a configuration of a multi-thread compatible computer system 2900 in the second embodiment.
  • FIG. 10 is a diagram schematically showing a configuration of a register group 2910 in the second embodiment.
  • 10 is a flowchart showing processing of a first power control unit 3013 in the second embodiment.
  • 10 is a flowchart showing processing of a second power control unit 3015 in the second embodiment.
  • 10 is a flowchart showing processing of a first power control unit 3013 in the second embodiment.
  • 10 is a flowchart showing processing of a second power control unit 3015 in the second embodiment.
  • FIG. 10 is a diagram schematically showing a configuration of a computer system 4000 in the third embodiment.
  • FIG. 14 is a flowchart illustrating an operation related to power saving control of the program counter monitoring unit 4100 according to the third embodiment.
  • 10 is a flowchart illustrating an operation of a bus monitoring unit 4100 according to the third embodiment.
  • 14 is a flowchart illustrating an operation related to the end of power saving control of the program counter monitoring unit 4100 according to the third embodiment.
  • FIG. 18 is a diagram schematically showing a configuration of a computer system 4500 in the fourth embodiment. It is a figure which illustrates other instruction sets 1400A. It is a figure which illustrates further another instruction set 1400B. It is a figure which illustrates typically an example of the busy weight used as the background art of this invention. It is a figure which shows typically the structure of the spin weight detection part of patent document 1.
  • FIG. 18 is a diagram schematically showing a configuration of a computer system 4500 in the fourth embodiment. It is a figure which illustrates other instruction sets 1400A. It is a figure which illustrates further another instruction set 1400B.
  • FIG. 1 is a block diagram schematically showing the configuration of the computer system 1300.
  • the computer system 1300 includes a processor 1301, a main memory 1302 (RAM, ROM, etc.), an I / O device 1303 (input / output device), a power supply device 1304, and a bus 1305.
  • the processor 1301 is formed in an integrated circuit.
  • the processor 1301, the main memory 1302, the I / O device 1303, and the power supply device 1304 are connected to each other via a bus 1305.
  • the power supply device 1304 supplies power 1306 and a clock 1307 to the processor 1301.
  • the power supply device 1304 includes a regulator, and can change the voltage of the power 1306 supplied to the processor 1301.
  • the power supply device 1304 includes a clock generation circuit and a frequency divider circuit, and can change the frequency of the clock 1307 supplied to the processor 1301.
  • the processor 1301 includes a register group 1310, a program counter 1311 included in the register group 1310, an instruction fetch / decode unit 1320, an issue unit 1330, an instruction sequence holding unit 1340, an execution unit 1350, a retirement unit 1360, an instruction cache 1370, and a data cache 1380. Is provided.
  • the processor 1301 includes a power saving control device (reference numerals 1701 to 1705 and 1900 in FIG. 1), and performs power saving control when the busy power loop processing is executed by the power saving control device. Do. This power saving control device will be described later.
  • FIG. 2 shows the computer system 1300 in a simplified manner, omitting the illustration of the power saving control device. Based on this figure, the basic operation of the computer system 1300 will be described.
  • the instruction fetch / decode unit 1320 reads from the instruction cache 1370 an instruction sequence that the processor 1301 may execute based on the value of the program counter 1311. That is, so-called instruction prefetching is performed.
  • the instruction fetch / decode unit 1320 decodes the read instruction sequence and temporarily stores it in the instruction sequence holding unit 1340.
  • the instruction string holding unit 1340 holds a predetermined number of instructions, and a new instruction is overwritten on the oldest instruction. That is, the instruction sequence holding unit 1340 is configured by a ring buffer. Therefore, the issued instruction issued by the following issuing unit 1330 is left in the instruction string holding unit 1340.
  • the issuing unit 1330 sends the instruction sequence stored in the instruction sequence holding unit 1340 to the execution unit 1350, which is ready for execution. That is, an instruction is issued. For example, when issuing an operation instruction, the issuing unit 1330 takes the value of a specified operand (source register) from the register group 1310 and sends it to the execution unit 1350 together with the instruction.
  • the execution unit 1350 performs various processes. Various types of processing include arithmetic processing such as four arithmetic operations and bit operations of values stored in the register group 1310, floating point processing, load store processing via the data cache 1380 and the bus 1305, branching, and the like. The execution result of the processing performed by the execution unit 1350 is sent to the retirement unit 1360.
  • arithmetic processing such as four arithmetic operations and bit operations of values stored in the register group 1310
  • floating point processing such as four arithmetic operations and bit operations of values stored in the register group 1310
  • load store processing via the data cache 1380 and the bus 1305, branching, and the like.
  • the execution result of the processing performed by the execution unit 1350 is sent to the retirement unit 1360.
  • the processor 1301 is provided with a plurality of execution units 1350, and the plurality of execution units 1350 process instruction sequences in parallel.
  • the issuing unit 1330 sequentially sends an instruction sequence to a free execution unit 1350 among the plurality of execution units 1350.
  • the retirement unit 1360 writes the execution result of the execution unit 1350 to the register group 1310 after confirming that the preparation for writing to the register group 1310 is completed. Normally, the retirement unit 1360 writes the execution results to the register group 1310 in the order of instruction addresses.
  • the instruction cache 1370 and the data cache 1380 temporarily hold information read from the main memory 1302 and information scheduled to be written to the main memory 1302.
  • FIG. 3 is a diagram exemplifying an assembler code instruction 1401 included in the instruction set, an outline 1402 of each instruction 1401, and an operation content 1403.
  • the instruction set 1400 includes an ADD instruction 1411 for addition, a SUB instruction 1412 for subtraction, a CMP instruction 1413 for comparison, a MOV instruction 1414 for movement, a BNE instruction 1415 for conditional branching, a JMP instruction 1416 for jumping, a bus From an LDR instruction 1417 for reading information from the main memory 1302, I / O device 1303 and power supply device 1304 connected to 1305, from the main memory 1302, I / O device 1303 and power supply device 1304 connected to the bus 1305
  • a STR instruction 1418 for writing information and a NOP instruction 1419 for incrementing the program counter without performing an operation are included.
  • the register on the left side of the assignment symbol that is, the register of the assignment destination is referred to as the destination register or DST register.
  • the register on the right side of the assignment symbol, that is, the assignment source register is referred to as a source register or an SRC register.
  • the DST register and the SRC register are specific examples of “variables”.
  • the register set 1500 includes a general-purpose register 1511 that is generally used at the time of calculation, a program counter (PC) 1512 indicating the address of an instruction being executed by the processor, and a condition flag register (CFR) that is used for determining a conditional branch. ) 1513.
  • PC program counter
  • CFR condition flag register
  • instruction set 1400 and the register set 1500 are illustrated by partially excluding portions necessary for explanation.
  • instruction sets and register sets may be used.
  • the present invention can be implemented in ARM, MIPS, x86, mn10300 instruction sets, etc. widely used by those skilled in the art.
  • the instruction string holding unit 1340 stores an address 1601 where an instruction is stored and an instruction 1602 in association with each other.
  • the power saving control device includes a loop detection unit 1701, a loop propagation dependence analysis unit 1702, a first power control unit 1703, a loop escape detection unit 1704, and a second power control unit 1705. Further, the power saving control device includes a loop range storage unit 1900 provided in the register group 1310.
  • the power saving control device is roughly divided into two components.
  • the first component detects a busy wait execution state, performs power saving control, and performs processing to put the computer system 1300 into a power saving state.
  • the second component performs processing to return the computer system 1300 to the state before the power saving control is performed by detecting the end of the busy wait and ending the power saving control.
  • the first component and the second component will be described in this order.
  • the first component includes a loop detection unit 1701, a loop propagation dependency analysis unit 1702, and a first power control unit 1703.
  • the loop detection unit 1701 detects the execution of the loop processing, and the loop propagation dependency analysis unit 1702 determines whether the processing is busy wait loop processing, calculation loop processing, or the like.
  • the first power control unit 1703 performs power saving control.
  • the loop detection unit 1701 determines establishment of the branch instruction in step S1801. If the determination result of step S1801 is YES (branch is established), the process proceeds to step S1803. If the determination result of step S1801 is NO (branch is not established), the determination of step S1801 is performed again.
  • the determination is made based on the execution result of the jump instruction (JMP instruction 1416) or the conditional branch instruction (BNE instruction 1415) and the value of the condition flag register (CFR) 1513 sent from the execution unit 1350 to the retirement unit 1360.
  • the loop detection unit 1701 determines that the branch instruction is established when the execution result is an execution content in which the value of the program counter 1311 is rewritten to a predetermined address.
  • the loop detection unit 1701 includes a branch instruction storage unit that holds various branch instructions (JMP instruction, BNE instruction, etc.), and an instruction comparison unit that compares the executed instruction stored in the retirement unit 1360 with the various branch instructions. And. When the executed branch instruction is stored in the retirement unit 1360, the instruction comparison unit detects the branch instruction.
  • branch instruction storage unit that holds various branch instructions (JMP instruction, BNE instruction, etc.)
  • instruction comparison unit that compares the executed instruction stored in the retirement unit 1360 with the various branch instructions. And.
  • the instruction comparison unit detects the branch instruction.
  • the loop detection unit 1701 refers to the value of the CFR 1513 of the register group 1310. For example, when the value of the CFR 1513 is not “0”, the branch is established, and “0”. If it is, it is, it is determined that the branch is not established.
  • the value of the CFR 1513 is, for example, that the execution result of the comparison instruction (CMP) preceding the conditional branch instruction is written by the retirement unit 1360.
  • step S1803 the loop detection unit 1701 determines whether or not the branch destination address is an address preceding the branch instruction. If the determination result in step S1803 is YES (if the branch destination address is an address preceding the branch instruction), the process advances to step S1805. If the determination result in step S1803 is NO (if the branch destination address is not an address preceding the branch instruction), the process returns to step S1801.
  • the execution result sent from the execution unit 1350 to the retirement unit 1360 includes the branch instruction address and branch destination address information, and the above determination is performed by comparing these two addresses. . When the branch destination address is an address preceding the branch instruction (an address having a value smaller than the address of the branch instruction), it is determined that the loop execution state is set.
  • the set value can be set to 10, for example.
  • step S1804 the loop detection unit 1701 extracts the start address 1911 and the end address 1912 of the loop.
  • the loop detection unit 1701 extracts the branch destination address of the branch instruction in which the branch is established as the loop start address 1911. Next, the loop detection unit 1701 extracts, as the loop end address 1912, an address in which the branch instruction in which the branch is taken is stored.
  • step S 1805 the loop detection unit 1701 outputs the loop start address 1911 and the loop end address 1912 extracted in step S 1804 to the loop range storage unit 1900.
  • the loop range storage unit 1900 includes a register (a type of memory) that stores a head address 1911 and a tail address 1912.
  • step S1807 the loop detection unit 1701 outputs a dependency analysis execution instruction 1711 to the loop propagation dependency analysis unit 1702.
  • the execution instruction 1711 is made, for example, by setting the voltage of the signal line connecting the loop detection unit 1701 and the loop propagation dependence analysis unit 1702 to a high level.
  • the loop detection unit 1701 may use processes other than those shown here as long as it can detect that the processor is executing a loop. For example, when the address held in the program counter 1311 is updated and the address is decreased, it may be determined that the loop execution state is set.
  • loop propagation dependency analyzing unit 1702 (1-2) Loop propagation dependency analyzing unit 1702
  • the loop propagation dependency analyzing unit 1702 discriminates between a loop used for busy wait and a loop that is not busy wait (for example, a loop for calculation) will be described while listing specific instruction sequences. .
  • a value is read from the address indicated by the R2 register to the R0 register by the LDR instruction at address 1008.
  • the value of the R0 register is compared with the value of the R1 register in which the value is stored in advance by the CMP instruction at the address 100c. If the values match, the BNE instruction at address 1010 exits the loop. That is, the loop process ends due to the branch failure. On the other hand, if the values do not match, the BNE instruction at address 1010 branches to address 1004. That is, a branch is established.
  • the instruction sequence 2100 shown in FIG. 8 performs a process of repeatedly reading and comparing values from a fixed address (address indicated by the R2 register).
  • the value stored at the address pointed to by the R2 register corresponds to a busy wait synchronization variable.
  • the instruction sequence 2100 is used to wait for key input, and the subsequent processing is executed when, for example, the key is pressed (when the synchronization variable is rewritten). However, when the key is not pressed (when the synchronization variable is not rewritten), the process of confirming the value of the synchronization variable (address indicated by the R2 register) is repeatedly performed, which wastes power. Therefore, it is desirable to suppress power consumption due to execution of such loop processing (instruction sequence 2100).
  • step S2001 the loop propagation dependency analyzing unit 1702 starts analysis processing at the timing when the execution instruction 1711 is received from the loop detecting unit 1701.
  • step S2003 the loop propagation dependency analyzing unit 1702 acquires the loop start address 1911 and the end address 1912 from the loop range storage unit 1900.
  • the start address 1911 and the like of the loop are acquired in the same manner as when the issuing unit 1330 acquires a value from a predetermined register, and the designated register is the register of the loop range storage unit 1900.
  • step S2005 the loop propagation dependency analyzing unit 1702 acquires an instruction sequence within the loop range from the instruction sequence holding unit 1340. As described above, the issued instruction issued by the issuing unit 1330 remains in the instruction string holding unit 1340. Further, the number of instructions stored in the instruction string holding unit 1340 is increased so that an instruction string within the loop range remains in the instruction string holding unit 1340 even after the loop is detected.
  • the program counter 1311 is rewritten to the start address of the loop after execution of the branch instruction, and the instruction sequence in the loop range is rewritten by the instruction fetch / decode unit 1320. It may be fetched / decoded and stored in the instruction string holding unit 1340.
  • step S2007 the loop propagation dependency analyzing unit 1702 stores the acquired instruction sequence 2100 in the dependency analysis buffer 2200 provided in the loop propagation dependency analyzing unit 1702.
  • the instruction sequence 2100 constituting the loop is stored by being arranged twice for the loop.
  • an entry is provided for each instruction included in the loop.
  • the entry is a memory that stores an instruction and information associated with the instruction.
  • Information stored in each entry of the dependency analysis buffer 2200 includes the mnemonic 2201 of the instruction, the identifier of the DST register (destination register) 2202 of the instruction, and the identifier of the SRC register (source register) 2203 of the instruction.
  • an entry number 2204 for identifying the position of the instruction in the dependency analysis buffer 2200 and whether the instruction is in the preceding loop or the subsequent loop are determined. It includes an iteration number 2205 to be executed, an entry number 2206 of the dependent source instruction, and an iteration span determination result 2207 between the instruction and the dependent source instruction.
  • step S2007 various types of information are stored in the dependency relationship analysis buffer 2200.
  • the information includes a mnemonic 2201, an identifier of the DST register 2202, and an identifier of the SRC register 2203.
  • step S2009 to step S2017 the loop propagation dependency analyzing unit 1702 repeatedly performs the following processing in order from the head to the tail for each entry of the dependency analysis buffer 2200.
  • step S2011 the loop propagation dependency analyzing unit 1702 assigns an entry number 2204 to each entry.
  • the number used as the entry number 2204 is “1” for the first entry, and hereinafter referred to as “2”, “3”, “4”, “5”, “6”, “7”, “8”. In this way, the value increases by one.
  • step S2013 the loop propagation dependency analyzing unit 1702 assigns an iteration number 2205 to each entry to identify whether it is a preceding loop or a succeeding loop.
  • the identifier indicating the preceding loop is “1” and the identifier indicating the subsequent loop is “2”.
  • the iteration number 2205 may be information other than “1” and “2” as long as it is information that can identify whether the loop is the preceding stage or the succeeding loop.
  • step S2015 the loop propagation dependency analyzing unit 1702 writes the entry number 2206 of the dependency source instruction.
  • the dependency source instruction is the immediately preceding instruction that uses the SRC register of the instruction as the DST register.
  • RAW Read after Write
  • step S2015 information that can determine only the presence / absence of loop propagation dependency may be generated without checking the presence / absence of dependency in the loop. Specifically, it is only necessary to generate information for determining whether an instruction with an iteration number 2205 of “1” becomes a dependency source instruction for each entry with an iteration number 2205 of “2”.
  • step S2016 the loop propagation dependence analyzing unit 1702 checks whether there is loop propagation dependence. Specifically, the entry number 2206 of the dependent instruction is referred to, and it is determined whether the iteration number to which the dependent instruction belongs is “1” and the iteration number 2205 of the instruction is “2”. If the determination result is YES, loop propagation dependence exists, and “YES” is written in the iteration straddling determination result 2207 with the dependency source instruction (actually, the value is set to “1”). If the determination result is NO, there is no loop propagation dependency, and “NO” is written in the iteration straddling determination result 2207 with the dependency source instruction (actually, the value is set to “0”).
  • step S2017 when the loop processing is completed for all entries, the loop is terminated and the process proceeds to step S2019.
  • FIG. 10 shows the state of the dependency relationship analysis buffer 2200 immediately before the determination in step S2019 of the loop propagation dependency analysis unit 1702 when the processor 1301 executes the instruction sequence shown in FIG. ing.
  • step S2019 the loop propagation dependency analyzing unit 1702 determines whether there is an entry whose determination result 2207 with the dependency source instruction is “YES”.
  • step S2019 If the decision result in the step S2019 is YES, since it is not a busy wait loop, the process proceeds to a step S2021.
  • step S2021 the loop propagation dependency analyzing unit 1702 ends the process without outputting the execution instruction 1712 to the first power control unit 1703. Therefore, power saving control is not performed.
  • step S2019 determines whether the determination result in step S2019 is NO, the process proceeds to step S2023 because it is a busy wait loop.
  • step S2023 the loop propagation dependence analyzing unit 1702 outputs an execution instruction 1712 for executing power saving control to the first power control unit 1703, and ends the process. Therefore, power saving control is performed.
  • the execution instruction 1712 is made, for example, by setting the voltage of the signal line connecting the loop propagation dependency analyzing unit 1702 and the first power control unit 1703 to a high level.
  • the loop propagation dependency analyzing unit 1702 if the information stored in the dependency relationship analyzing buffer 2200 is the example of FIG. 10, there is no loop propagation dependency, and the determination result in step S2019 is “NO”. " That is, there is no entry whose entry number is No. 5 to No. 8 that has an “YES” as the result of the iteration over the dependency instruction 2207.
  • the loop process subjected to the dependency analysis is a busy wait loop process and is a target of power saving control.
  • step S2023 the process proceeds to step S2023, and as a result, an execution instruction 1712 is output to the first power control unit 1703.
  • the loop propagation dependency analyzing unit 1702 performs the analysis processing shown in the flowchart of FIG. 9, and the source register of the instruction belonging to the latter loop is executed by executing the instruction belonging to the preceding loop. It is determined that there is no loop propagation dependency by not reading the written value. In other words, the loop propagation dependency analyzing unit 1702 determines that there is loop propagation dependency when the source register of the instruction belonging to the subsequent loop is read out the value written by the execution of the instruction belonging to the previous loop.
  • the value obtained by adding 4 to the R2 register is input to the R2 register by the ADD instruction at address 2004.
  • a value is read into the R0 register from the address indicated by the R2 register by the LDR instruction at address 2008.
  • the value of the R0 register is compared with the value of the R1 register in which the set value is stored in advance by the CMP instruction at the address 200c. If the values match, the loop is exited with a BNE instruction at address 2010. If the values do not match, a branch to address 2004 is made with a BNE instruction at address 2010.
  • the instruction sequence 2600 shown in FIG. 11 is different from the instruction sequence 2100 shown in FIG. 9 in that it does not perform a process of comparing values by repeatedly reading values from a certain address. This is because the value of the R2 register is added in each loop by the ADD instruction at address 2004, so that the address value used by the LDR instruction changes every time. That is, the instruction sequence 2600 is a process for finding an address storing the same value as the R1 register from a plurality of addresses, and is not an instruction sequence used for a busy wait loop. Therefore, this loop processing should be excluded from the power saving control target.
  • FIG. 12 shows the state of the dependency relationship analysis buffer 2700 when the dependency analysis is performed by the loop propagation dependency analysis unit 1702 for the instruction sequence 2600 shown in FIG. Note that the state of the dependency analysis buffer 2700 is the state immediately before the determination in step S2019 is performed.
  • SRC register 2203 is an R2 register, and the entry number is “No. 1 DST register 2202 is the same.
  • the entry number is “No. 1 and No.
  • no DST register 2202 is an R2 register. That is, the entry number is No.
  • an iteration straddling determination result 2207 with the dependency source instruction becomes YES. Therefore, the determination result in step S2019 of the loop propagation dependency analyzing unit 1702 is YES (loop propagation dependency exists).
  • the execution instruction 1712 is not output to the first power control unit 1703, and the first power control unit 1703 does not perform power saving control of the processor 1301 at this timing.
  • loop processing used for busy weight is selectively detected as a power saving control target, and loop processing not for busy weight is selectively detected. It is understood that it is not detected.
  • step S2019 is performed in the processing of the loop propagation dependency analyzing unit 1702.
  • step S2019 it is determined that the source register of the instruction belonging to the subsequent loop is not written by the execution of the instruction belonging to the previous loop.
  • the entry number in FIG. 6 SRC register 2203 is an R2 register. After the value of this R2 register is read into the R0 register, it is compared with the value of the R1 register. In this case, the R2 register corresponds to the synchronization variable. It can be seen that there is no instruction for setting the R2 register as the DST register 2202 in the loop, and the R2 register as the synchronization variable cannot be rewritten due to an internal factor of the loop. That is, it can be determined that this is a busy wait loop.
  • the loop processing used for the busy wait is selectively detected from the various loop processing executed by the processor, and the power is selectively saved when the loop used for the busy wait is being executed. Control can be performed.
  • the loop propagation dependency analyzing unit 1702 As a process of the loop propagation dependency analyzing unit 1702, a procedure for determining whether the SRC register 2203 of the instruction of the subsequent loop is used as the DST register 2202 of the instruction of the preceding loop is taken as an example.
  • the loop propagation dependency analyzing unit 1702 is implemented using other processing as long as it can detect that the value of the variable used in the subsequent loop cannot be rewritten by executing the instruction of the preceding loop. It doesn't matter.
  • the processing procedure of the flowchart of FIG. 9 is an example for easily explaining the processing procedure for analyzing the presence / absence of loop propagation dependency, and the presence / absence of loop propagation dependency is determined by a method other than the above processing procedure. (Specific examples will be described later).
  • the dependency analysis buffers 2200 and 2700 for example, at least one of the mnemonic 2201, the entry number 2204, the iteration number 2205, the entry number 2206 of the dependency source instruction, etc. may be omitted. Good.
  • the first power control unit 1703 waits until an execution instruction 1712 is received from the loop propagation dependency analysis unit 1702 in step S2301.
  • the first power control unit 1703 When the first power control unit 1703 receives the execution instruction 1712, the first power control unit 1703 performs power saving control in step S2303. Specifically, the first power control unit 1703 transmits power control information 1731 for shifting the power supply mode of the power supply device 1304 from the normal power mode to the power saving mode to the power supply device 1304.
  • the frequency of the clock 1307 supplied to the processor 1301 by the power supply device 1304 is reduced, and the voltage of the power 1306 supplied to the processor 1301 is lowered.
  • the clock frequency is reduced to 12.5% of the maximum frequency, and the voltage is reduced to 70% of the maximum voltage.
  • the power supply device 1304 can switch the power supply mode between the normal power mode and the power saving mode.
  • the power supply device 1304 In the normal power mode, the power supply device 1304 generates a clock 1307 having a set frequency (for example, the maximum frequency) by the clock generation circuit and supplies the generated clock to the processor 1301.
  • the power supply device 1304 supplies power 1306 having a set voltage (for example, maximum voltage) to the processor 1301.
  • the power supply device 1304 when the power supply device 1304 receives the power control information 1731 from the first power control unit 1703, the power supply device 1304 reduces the voltage and the clock frequency from the set values as described in the above example by the power saving mode. And the clock 1307 are supplied. Note that a plurality of types of power saving modes may be provided, and the degree of power saving may be varied among the plurality of types of power saving modes.
  • step S2305 the first power control unit 1703 outputs a loop escape detection execution instruction 1713 to the loop escape detection unit 1704.
  • Second component A loop escape detection unit 1704 (which is an example of a loop end detection unit) and a second power control unit 1705, which are second components of the power saving control device, will be described.
  • the loop exit detection unit 1704 and the second power control unit 1705 respectively perform processing for detecting that the processor 1301 has exited from the busy wait loop processing and power control for terminating the power saving control.
  • loop Exit Detection Unit (2-1) Loop Exit Detection Unit The operation of the loop exit detection unit 1704 will be described with reference to the flowchart of FIG.
  • step S2401 the loop escape detection unit 1704 waits until an execution instruction 1713 is received from the first power control unit 1703.
  • the loop exit detection unit 1704 Upon receipt of the execution instruction 1713, the loop exit detection unit 1704 acquires the loop start address 1911 and the loop end address 1912 from the loop range storage unit 1900 in step S2403.
  • the start address 1911 and the end address 1912 are stored in a memory included in the loop escape detection unit 1704. Note that the start address 1911 and the end address 1912 acquired by the loop detection unit 1701 may be held in the memory.
  • step S2405 the loop exit detection unit 1704 determines whether or not a branch is taken based on the execution result of the branch instruction (and the value of the condition flag register (CFR)). This determination is the same as the processing performed by the loop detection unit 1701 in step S1801.
  • the loop escape detection unit 1704 includes a branch instruction storage unit and an instruction comparison unit. The branch instruction storage unit and the instruction comparison unit may be shared by the loop detection unit 1701 and the loop escape detection unit 1704.
  • step S2405 determines whether the branch is established or not. If the determination result of step S2405 is YES (branch is established), the process proceeds to step S2407. If the determination result of step S2405 is NO (branch is not established), the process proceeds to step S2408.
  • step S2407 when a conditional branch instruction is included in addition to the branch instruction located at the end of the loop, the loop escape detection unit 1704 determines whether or not the conditional branch instruction branches outside the loop range. Specifically, it is determined whether the jump destination address of the branch established in step S 2405 is out of the range of the loop start address 1911 and the loop end address 1912 acquired from the loop range storage unit 1900. That is, when the branch destination address is smaller than the head address 1911 or larger than the tail address 1912, it is determined that the branch destination is out of the loop range.
  • step S2407 If the decision result in the step S2407 is YES, since the loop process is finished, the process proceeds to a step S2409 so as to finish the power saving control. On the other hand, if the determination result is NO, the loop process continues, and the process returns to step S2405 to continue the detection process.
  • step S2408 the loop escape detection unit 1704 determines whether or not the execution result of the conditional branch instruction located at the end of the loop is a branch failure. Specifically, it is determined whether the address of the conditional branch instruction is the same as the end address 1912 of the loop. If the decision result in the step S2408 is YES, the loop process has been finished and the process proceeds to a step S2409. If the determination result of step S2408 is NO, the loop process is continued and the process returns to step S2405.
  • step S2409 the loop escape detection unit 1704 outputs an execution instruction 1714 to end the power saving control to the second power control unit 1705 in order to end the power saving control.
  • the execution instruction 1714 is made, for example, by setting the voltage of the signal line connecting the loop escape detection unit 1704 and the second power control unit 1705 to a high level.
  • the loop escape detection unit 1704 is arranged in the retirement unit 1360, and it is detected whether or not the loop processing is completed based on the execution result of the branch instruction.
  • that method or apparatus may be used.
  • An example of another method that can be used is a method of detecting the end of loop processing when the value of the program counter 1311 is out of the loop range. In this case, in order to improve the stability of the loop end detection process, for example, when the value of the program counter 1311 becomes larger than a value obtained by adding a predetermined value to the end address of the loop, it is determined that the loop process has ended. May be.
  • step S2501 the second power control unit 1705 waits until it receives an execution instruction 1714 from the loop propagation dependence analysis unit 1702.
  • the second power control unit 1705 performs control to end the power saving control and return to the normal power control. Specifically, the second power control unit 1705 transmits power control information 1751 for returning the power supply mode of the power supply device 1304 from the power saving mode to the normal power mode to the power supply device 1304. As a result, the power supply device 1304 increases, for example, the frequency of the clock 1307 and the voltage of the power 1306 supplied to the processor 1301 that have been reduced by the first power control unit 1703 (for example, to the original value). return).
  • the loop detection unit 1701 As described above, the loop detection unit 1701, the loop propagation dependence analysis unit 1702, the first power control unit 1703, the loop escape detection unit 1704, and the second power control unit that constitute the power saving control device according to Embodiment 1 of the present invention.
  • the operation of 1705 has been described.
  • the first power control unit 1703 and the second power control unit 1705 constitute the “power control unit”.
  • the “power control unit” may be configured by the first power control unit 1703, and the second power control unit 1705 may not be included in the “power control unit”.
  • the loop propagation dependency analyzing unit 1702 can analyze the presence / absence of loop propagation dependency using, for example, digital electronic circuits shown in FIGS. 16 and 17.
  • FIG. 16 is a diagram showing a flow dependence detection circuit 2851 that detects flow dependence.
  • FIG. 17 is a diagram showing a preliminary detection circuit 2853 that preliminarily detects both flow dependency and loop propagation dependency in order to detect loop propagation dependency.
  • four instructions instructions 1 to 4 are included in the loop.
  • the dependency between instructions other than four, for example, between five or more instructions.
  • a circuit for detecting the dependency relationship may be configured.
  • the flow dependency detection circuit 2851 includes an instruction buffer 2855 that stores an instruction sequence included in the loop, and values of the DST register (destination register) 2202 and the SRC register (source register) 2203 between the instructions stored in the instruction buffer 2855. And a comparison circuit 2857 for comparing the two.
  • the uppermost instruction is the head of the loop.
  • the instruction buffer 2855 stores an instruction string within the loop range from the instruction string holding unit 1340. Note that the instruction string holding unit 1340 may be used as the instruction buffer 2855.
  • the comparison circuit 2857 outputs “1” when the values of the DST register 2202 and the SRC register 2203 are equal, and outputs “0” when the values are different. That is, the comparison circuit 2857 outputs “1” when there is a dependency relationship.
  • one SRC register 2203 may be compared with a plurality of DST registers 2202 (for example, the SRC register 2203 of the instruction 4). In this case, if “1” is output even in one of the plurality of comparison circuits 2857, it is determined that there is flow dependency (“1”). On the other hand, if all of the plurality of comparison circuits 2857 output “0”, it is determined that there is no flow dependency (“0”).
  • the determination results of the SRC registers 2203a and 2203b of the nth instruction are Sna and Snb.
  • the determination results of the SRC registers 2203a and 2203b of the instruction 2 are S2a and S2b, respectively. Since the instruction 1 does not depend on the flow, the determination result is not shown.
  • the preliminary detection circuit 2853 shown in FIG. 17 includes three instruction buffers 2861a, 2861b, and 2861c that store instruction sequences included in the loop, and a DST register 2202 and an SRC register 2203 between the two instruction buffers 2861a and 2861b.
  • a comparison circuit 2857 for comparing values is provided.
  • the instruction buffer 2861c stores an instruction string within the loop range when the i-th loop is executed. Then, when the (i + 1) th loop is executed, the stored instruction sequence is moved to the instruction buffer 2861a. Thereby, when the (i + 1) -th loop is executed, the instruction sequence of the loop is stored in the two instruction buffers 2861a and 2861b.
  • the comparison circuit 2857 is the same as the comparison circuit of the flow dependence detection circuit 2851. However, in the preliminary detection circuit 2853, the combination of connection between the DST register 2202 and the SRC register 2203 is different from the flow-dependent detection circuit 2851. Specifically, the DST register 2202 of the instruction buffer 2861a storing the preceding loop instruction and the SRC register 2203 of the instruction buffer 2861b storing the subsequent loop instruction are compared in all combinations.
  • the determination results of the SRC registers 2203a and 2203b of the instruction buffer 2861b are Rna and Rnb, similar to the preliminary detection circuit 2853.
  • any of the SRC registers 2203 is determined to be dependent in the preliminary detection circuit 2853 and determined not to be dependent in the flow dependency detection circuit 2851, it is determined that there is loop propagation dependency. . That is, loop propagation dependency is detected.
  • the flow dependency detection circuit 2851 determines that the SRC register 2203 with the entry number 5 is dependent on the DST register 2202 with the entry number 1. Further, since the SRC register 2203 with the entry number 5 has no flow dependency in the loop, the flow dependency detection circuit 2851 does not detect the dependency. Therefore, for the SRC register 2203 with the entry number 5, the determination result R1a of the preliminary detection circuit 2853 is “1”, and the determination result S1a of the flow dependency detection circuit 2851 is “0”. In such a case, loop propagation dependency is detected. In FIG. 16, as described above, the determination result S1a of the instruction 1 is omitted, but since the flow dependency does not occur in the instruction 1, the determination result S1a of the instruction 1 is “0”.
  • the loop propagation dependency analyzing unit 1702 can be configured by combining the preliminary detection circuit 2853 and the flow dependency detection circuit 2851.
  • the preliminary detection circuit 2853 of FIG. 17 includes three instruction buffers 2861a, 2861b, and 2861c, but one may be used.
  • the instruction buffer 2861a For the instructions stored in the instruction buffer 2861a, only the DST register 2202 is connected to the comparison circuit 2857, and the SRC register 2203 is not connected to the comparison circuit 2857.
  • the instruction stored in the instruction buffer 2861b only the SRC register 2203 is connected to the comparison circuit 2857, and the DST register 2202 is not connected to the comparison circuit 2857. Therefore, for example, any instruction stored in the instruction buffer 2861b may be used as long as all combinations of the DST register 2202 and the SRC registers 2203a and 2203b can be compared.
  • FIG. 18 shows a simple loop propagation dependency detection circuit 2871 used for simply detecting loop propagation dependency.
  • the simple loop propagation dependency detection circuit 2871 includes an instruction buffer 2855 and a comparison circuit 2857 as with the flow dependency detection circuit 2851. Each comparison circuit 2857 is connected to a DST register 2202 and an SRC register 2203 corresponding to one instruction. That is, the simple loop propagation dependency detection circuit 2871 determines whether or not the DST register 2202 and the SRC register 2203 are the same in one instruction, and determines the determination results Qna and Qnb (n is 1 to 4 in the figure). It is a circuit to output.
  • the simple loop propagation dependency detection circuit 2871 can easily perform loop propagation based on the existence of a calculation expression for incrementing (or decrementing) the value of a register serving as a variable in a general calculation loop. Dependency is detected.
  • the loop propagation dependency analyzing unit 1702 may be configured by a processor that executes a program that performs the processing illustrated in FIG.
  • the processor that executes the program may be a simple processor such as a microprogram sequencer that executes a microprogram.
  • a simple processor can be formed in the processor 1301.
  • the processor for executing the program may be a separate processor formed in the same integrated circuit as the processor 1301 or the processor 1301. Note that loop processing executed by a processor that executes the program separate from the processor 1301 can be excluded from detection and dependency analysis.
  • each component (loop detection unit 1701 and the like) of the power saving control device other than the loop propagation dependence analysis unit 1702 may be configured by an electronic circuit, or a program for processing each component You may comprise by the processor to perform.
  • the power saving control and the control for terminating the power saving control and returning to the normal power control may be as follows, for example, in addition to the above-described one.
  • the power saving control is performed by reducing the frequency of the clock 1307 supplied to the processor 1301 or reducing the voltage of the power 1306 supplied to the processor 1301.
  • the control to end the power saving control and return to the normal power control is performed by increasing the frequency of the clock 1307 supplied to the processor 1301 or increasing the voltage of the power 1306 supplied to the processor 1301.
  • a processor 1301, a main memory 1302, an I / O device group 1303, and a power supply device 1304 are connected to each other via a bus 1305, as in FIG.
  • power 1306 and a clock 1307 are supplied from the power supply device 1304 to the processor 1301.
  • FIG. 19 specifically shows an example of devices that can become the I / O device group 1303.
  • the antenna 2810 is a device that receives broadcast waves and radio waves of the form telephone network.
  • the tuner 2811 converts the analog radio wave received by the antenna 2810 into a digital signal.
  • the decoder 2812 decodes the digital signal converted by the tuner.
  • codecs that the decoder 2812 decodes include MPEG2, MPEG4-AVC, MPEG4-MVC, and the like.
  • the OSD generator 2813 synthesizes the video data decoded by the decoder 2812 and the screen data generated by the processor 1301 into a video data form.
  • the video display 2814 displays the video data synthesized by the OSD generator 2813 on the screen.
  • Examples of the video display 2814 include a liquid crystal display, a plasma display, an organic EL display, and an LED display.
  • the speaker 2816 performs audio output of the audio data decoded by the decoder 2812.
  • the semiconductor memory read / write device 2821, HDD 2822 (hard disk storage device), and optical disc read / write device 2823 can be used as storage devices.
  • the network communication device 2825 receives a network signal from the outside of the computer system 2800.
  • Examples of the network communication device 2825 include an Ethernet adapter and a wireless LAN adapter.
  • Remote control receiver 2826 receives an infrared control signal from the outside.
  • a device that can become the I / O device group 1303 described here is mounted on the computer system 2800 is arbitrary. Further, a device different from the device described here may be mounted. For example, input devices such as a keyboard, a mouse, and a touch panel can also be the I / O device group 1303.
  • a computer system 2800 partially equipped with an I / O device is a personal computer, mainframe, TV, VCR, HDD recorder, mobile phone, car navigation system, landline phone, copy machine, network relay device, mobile terminal with touch panel. Etc. may be constructed.
  • control targets of the first power control unit 1703 and the second power control unit 1705 are not limited to the voltage of the power 1306 and the frequency of the clock 1307.
  • the control target of the first power control unit 1703 and the second power control unit 1705 may be anything that controls the power supplied to the processor 1301 or the computer systems 1300 and 2800.
  • the computer system 2900 according to the second embodiment differs from the computer system 1300 according to the first embodiment in the following points.
  • each register group 2910 includes a thread identifier register 2912 and a time slice register 2913.
  • the computer system 2900 includes a thread switching unit 2920 that switches threads operating in the processor 2901.
  • the first power control unit and the second power control unit have a function of outputting time slice setting information to the register group 2910 and a function of controlling the number of execution units 1350. .
  • FIG. 21 shows first and second register groups 2910a and 2910b corresponding to the first and second threads, respectively.
  • Each register group 2910 includes a thread identifier register 2912 and a time slice register 2913 in addition to the components of the register group 1310 described with reference to FIG.
  • the thread identifier register 2912 is a register that stores a thread identifier for identifying a specific thread from among a plurality of existing threads. For example, “1” is written in the thread identifier register 2912a belonging to the first register group 2910a corresponding to the first thread, and “2” is written in the thread identifier register 2912b belonging to the second register group 2910b corresponding to the second thread. Is written.
  • the time slice register 2913 stores a time allocated to each thread, that is, a time slice. For example, when assigning time slices at a rate of 100 clock cycles to the first thread and 100 clock cycles to the second thread, “100” is stored in the time slice register 2913a of the first register group 2910a corresponding to the first thread. The Further, “100” is stored in the time slice register 2913b of the second register group 2910b corresponding to the second thread.
  • the thread switching unit 2920 assigns the execution time of the processor 2901 to each thread in a time-sharing manner according to the value of the time slice register 2913 of each thread.
  • the thread switching unit 2920 will be specifically described.
  • the thread switching unit 2920 is connected to the register group 2910 and the instruction fetch / decode unit 1320 directly or via a bus. Then, the thread switching unit 2920 reads the value of the program counter 1311 of the register group 2910 corresponding to the currently executed thread and transfers it to the instruction fetch / decode unit 1320. The thread switching unit 2920 also transfers the thread identifier together with the value of the program counter 1311.
  • the thread switching unit 2920 transfers the value “1” of the thread identifier and the value of the program counter 1311a of the first register group 2910a to the instruction fetch / decode unit 1320. Thereby, the instruction of the program that executes the first thread is fetched / decoded.
  • the information in the thread identifier register 2912 that is, the value of the thread identifier (for example, “1”) is given to the instruction sequence fetched by the instruction fetch / decode unit 1320.
  • timing of thread switching is notified by a timer / counter (not shown) provided outside the processor 2901. This will be specifically described below.
  • the time slice stored in the time slice register 2913a is set in the timer / counter, and the timer / counter is started.
  • the timer / counter notifies the thread switching unit 2920 when the set time slice has elapsed.
  • the thread switching unit 2920 sends the register group corresponding to the next thread, for example, the value “2” of the thread identifier of the second register group 2910b and the value of the program counter 1311b to the instruction fetch / decode unit 1320. Forward to.
  • the address of the instruction fetched by the instruction fetch / decode unit 1320 is changed to the address of the instruction of the program executing the second thread.
  • the instruction of the program executing the second thread is fetched / decoded, and the operating thread is switched.
  • the timer / counter is reset after the set time has elapsed, and is started after the time slice of the thread to be executed next, for example, the second thread is set.
  • a timer / counter may be provided in the processor 2901.
  • the time slice register 2913 and the thread switching unit 2920 constitute a “thread management unit”.
  • the “thread management unit” may include a thread identifier register 2912.
  • the issue unit 1330 reads the value of the register group 2910 corresponding to the thread identifier assigned to the instruction sequence from the plurality of register groups 2910 when issuing instructions such as operations.
  • the retirement unit 1360 writes the execution result of the execution unit 1350 back to the register group 2910 corresponding to the thread identifier assigned to the instruction sequence from the plurality of register groups 2910.
  • the loop range storage unit 1900 stores the thread identifier in association with the loop range.
  • a loop range and a thread identifier can be stored for a plurality of threads.
  • the loop detection unit 1701 When the loop detection unit 1701 detects a loop process, the loop detection unit 1701 writes a thread identifier together with the loop range in the loop range storage unit 1900.
  • the loop propagation dependency analyzing unit 1702 acquires the thread identifier of the thread in which the loop processing is detected together with the loop range from the loop range storage unit 1900. Then, the loop propagation dependency analyzing unit 1702 performs a loop propagation dependency analyzing process on the instruction string in the loop range of the target thread. If there is no loop propagation dependency, the loop propagation dependency analyzing unit 1702 outputs an execution instruction 1712 to the first power control unit 3013. Here, the loop propagation dependency analyzing unit 1702 gives information for identifying a thread to the execution instruction 1712.
  • a plurality of signal lines connecting the loop propagation dependence analyzing unit 1702 and the first power control unit 3013 correspond to a plurality of threads, respectively, and the signal lines corresponding to the thread subjected to the analysis processing Information for identifying the thread is given by increasing the voltage.
  • the loop escape detection unit 1704 receives the execution instruction 1713 together with the thread identifier from the first power control unit 3013. Then, the loop escape detection unit 1704 acquires the loop range corresponding to the thread identifier from the loop range storage unit 1900. Then, the end of the loop process is detected based on the execution result of the branch instruction of the target thread.
  • the loop escape detection unit 1704 can detect the end of loop processing for a plurality of threads. When the end of the loop processing is detected for any thread, the thread identifier is sent to the second power control unit 3015 together with the execution instruction 1714.
  • the first power control unit 3013 and the second power control unit 3015 are provided in the retirement unit 1360. Thus, writing to the register group 2910 can be easily performed using the function of the retirement unit 1360.
  • the first power control unit 3013 has a function of outputting time slice setting information 3103 to the register group 2910 and an operation number reduction instruction 3107 of the execution unit 1350. It has a function to output.
  • the second power control unit 3015 In addition to the function of outputting power control information 1751 to the power supply device 1304, the second power control unit 3015 outputs a function of outputting time slice setting information 3105 to the register group 2910 and an operation number increase instruction 3109 of the execution unit 1350. It has a function to output.
  • step S3201 the first power control unit 3013 determines whether or not the execution instruction 1712 has been received from the loop propagation dependency analyzing unit 1702. If the determination result is YES, the process proceeds to step S3203. If the determination result is NO, the determination in step S3201 is executed again. As described above, the execution instruction 1712 includes information for identifying a thread.
  • step S3203 the first power control unit 3013 then transfers the register group 2910 to the register group 2910 corresponding to the thread specified by the execution instruction 1712 (register group 2910 corresponding to the currently operating thread). F), the time slice setting information 3103 is output so that the time slice after the change related to the thread is smaller than the time slice before the change.
  • the first power control unit 3013 sets the value of the time slice register 2913b of the second register group 2910b in which the thread identifier register 2912 is “2”. Change from “100” to “50”.
  • step S3205 the first power control unit 3013 outputs the power control information 1731 to the power supply device 1304. For example, an instruction is given to set the frequency of the clock 1307 to three quarters.
  • step S3207 the first power control unit 3013 outputs an execution instruction 1713 together with the designated thread identifier to the loop escape detection unit 1704.
  • FIG. 23 shows a flowchart of the operation of the second power control unit 3015.
  • step S3301 the second power control unit 3015 determines whether or not the execution instruction 1714 is received from the loop escape detection unit 1704. If the determination result is yes, the process proceeds to step S3303. If the determination result is NO, step S3301 is executed again. As described above, the execution instruction 1714 includes a thread identifier.
  • step S3303 the second power control unit 3015 transfers to the register group 2910 corresponding to the thread indicated by the thread identifier (to the register group 2910 corresponding to the currently operating thread), and after the change related to the thread.
  • the time slice setting information 3105 is output so that the time slice increases from the time slice before the change (for example, returns to the time slice before being decreased by the first power control unit 3013).
  • the second power control unit 3015 sets the time slice of the second register group 2910b in which the thread identifier register 2912 is “2” among the plurality of register groups 2910.
  • the value of the register 2913b is returned from “50” to “100”.
  • step S3305 the second power control unit 3015 outputs the power control information 1751 to the power supply device 1304.
  • the power supply device 1304 increases (restores) the frequency of the clock 1307 supplied to the processor 2901 that has been reduced by the first power control unit 3013.
  • a busy-waiting thread (second thread in the above example) and a thread not in the busy-waiting state, that is, a thread performing normal processing (in the above example, the first thread) ) And the processor resources (processor processing capacity) allocated to them.
  • the processor resource allocated to each thread can be generally expressed by an expression “time slice of each thread ⁇ total sum of time slices of all threads ⁇ frequency of clock 1307”.
  • the frequency of the clock 1307 at the time of executing the power saving control decreases to three-fourths of the frequency of the clock 1307 at the time of normal power control for both the first and second threads.
  • time slice of each thread ⁇ total sum of time slices of all threads increases to 4/3 of the normal thread control in the first thread (from 100 ⁇ 200 to 100 ⁇ 150). ). In the second thread, it is reduced to 2/3 of the normal power control (from 100/200 to 50/150).
  • the processor resources allocated to the first thread that is not in the busy wait state are three-quarters of the decrease rate of the frequency of the clock 1307 and four-thirds of the increase rate of the time slice allocation rate. Multiply by to get “1”. That is, even if power saving control is performed, the processor resource allocated to the first thread does not decrease.
  • the processor resources allocated to the second thread are halved, and waste of power is suppressed.
  • the processor resource allocated to the busy wait state thread is selectively reduced, the power consumed by the processor 2901 by executing the busy wait, and The power consumed by the computer system 2900 can be reduced.
  • the above power saving control can be considered as follows.
  • the processor resource corresponding to the decrease in the time slice allocated to the busy wait state thread is “50 ⁇ 200 ⁇ frequency f” using the above formula. That is, the decrease in the time slice corresponds to a quarter of the processor resource during normal power control.
  • the power consumption of the processor 2901 can be reduced without reducing the processor resources of threads that are not in the busy wait state. Can be reduced. Further, when a specific thread in the busy wait state leaves the busy wait state, the processor resources allocated to the specific thread can be increased without decreasing the processor resources of other threads.
  • the power saving control described above reduces the frequency of the clock 1307 according to the decrease in the time slice allocated to the busy-wait state thread.
  • the power saving control may be performed by reducing the number of execution units 1350.
  • step S3401 the first power control unit 3013 determines whether or not the execution instruction 1712 has been received from the loop propagation dependency analyzing unit 1702. If the determination result is YES, the process proceeds to step S3403. If the determination result is NO, the process returns to step S3401. As described above, the execution instruction 1712 includes information for identifying a thread.
  • step S3403 the first power control unit 3013 then transfers the register group 2910 to the register group 2910 corresponding to the thread specified by the execution instruction 1712 (register group 2910 corresponding to the currently operating thread).
  • the time slice setting information 3103 is output. For example, when the currently executing thread identifier is “2”, the first power control unit 3013 sets the value of the time slice register 2913b of the second register group 2910b in which the thread identifier register 2912 is “2”. , “100” is changed to “50”.
  • step S3405 the first power control unit 3013 outputs an operation number reduction instruction 3107 for reducing the operation number of the execution unit 1350 to the execution unit 1350. For example, when there are four execution units 1350, the execution unit 1350 is instructed to reduce the number of operating units to three.
  • the first power control unit 3013 is connected to the issuing unit 1330 by a signal line. Then, the first power control unit 3013 instructs the issuing unit 1330 to stop issuing instructions to some of the plurality of execution units 1350. For example, the instruction transmits a signal to a signal line corresponding to the execution unit 1350 to be stopped among the signal lines corresponding to each of the plurality of execution units 1350. Thereby, the issuing of instructions to some execution units 1350 is stopped.
  • an electronic switch composed of a transistor is provided in a power supply path that supplies power to each execution unit 1350.
  • the first power control unit 3013 can cut off the power supply to the execution unit 1350 and reduce the number of operations by turning off the electronic switch corresponding to the execution unit 1350 to be stopped.
  • the power supply to the execution unit 1350 is cut off after instructing the issue unit 1330 to stop issuing instructions.
  • step S3407 the first power control unit 3013 outputs an execution instruction 1713 to the loop escape detection unit 1704.
  • step S3501 the second power control unit 3015 determines whether or not the execution instruction 1714 has been received from the loop escape detection unit 1704. If the determination result is YES, the process proceeds to step S3503. If the determination result is NO, the process of step S3501 is executed again. As described above, the execution instruction 1714 includes a thread identifier.
  • the second power control unit 3015 outputs the time slice setting information 3105 to the register group 2910 corresponding to the thread indicated by the thread identifier (to the register group 2910 corresponding to the currently operating thread). To do. For example, when the thread identifier is “2”, the value of the time slice register 2913b of the second register group 2910b whose thread identifier register 2912 is “2” is returned from “50” to “100”.
  • step S3505 the second power control unit 3015 outputs an operation number increase instruction 3109 for increasing the operation number of the execution unit 1350 to the execution unit 1350.
  • the operation unit 1350 is instructed to return the number of operations to four, which is the number before the first power control unit 3013 reduces the number.
  • the operation number increase instruction 3109 is performed in the reverse order to the operation number decrease instruction 3107 described above. That is, after the electronic switch is turned on, an instruction to resume issuing instructions to the issuing unit 1330 is instructed.
  • a thread that is executing a busy wait (second thread in the above example) and a thread that is not executing a busy wait, that is, a thread that is performing normal processing (the above-described thread)
  • the processor resource (processor processing capacity) allocated to the first thread)
  • the processor resource allocated to each thread is generally “time slice of each thread ⁇ total sum of time slices of all threads ⁇ number of running execution units 1350”.
  • the number of execution units 1350 when the power saving control is executed is reduced to three-fourths during the normal power control, but the “time allocated to each thread” when the power saving control is executed. “Slice / total sum of time slices of all threads” increases to 4/3 of the normal power control (from 100/200 to 100/150), so the product of both is “1”. On the other hand, for the second thread, the product of both is one-half.
  • the thread in which the busy loop is not executed that is, the processor resource allocated to the first thread does not decrease even if the power saving control is executed.
  • the processing power allocated to the thread that is executing the busy loop is selectively reduced, and the power consumed by the processor 2901 by executing the busy wait and The power consumed by the computer system 2900 can be reduced.
  • the above power saving control can be considered as follows.
  • the processor resource corresponding to the decrease in the time slice allocated to the busy-waiting thread is “50 ⁇ 200 ⁇ the number of running execution units” using the above formula. That is, the decrease in the time slice corresponds to a quarter of the processor resource during normal power control.
  • the number of running execution units 1350 is reduced by a quarter according to the one-fourth processor resource, the consumption of the processor 2901 without reducing the processor resources of threads that are not in the busy wait state. Electric power can be reduced. Further, when a specific thread in the busy wait state leaves the busy wait state, by increasing the number of running execution units 1350, the processor resources allocated to the specific thread are increased without decreasing the processor resources of other threads. Can be made.
  • the power saving control described above reduces the number of execution units to be operated in accordance with the decrease in the time slice allocated to the busy wait state thread.
  • the processor resource (processing capacity) allocated to each thread is “time slice of each thread ⁇ total sum of time slices of all threads ⁇ frequency of clock 1307” X number of execution units 1350 in operation.
  • At least one of the frequency of the clock 1307 and the number of running units 1350 can be reduced according to the reduction in the time slice allocated to the busy-wait state thread.
  • processor resource of a thread that is not executing a busy loop during power saving control may be increased. Even in this case, the power consumed by the execution of the busy loop can be reduced.
  • the power saving control and the control for returning to the normal power control after ending the power saving control and the power saving control described in the power saving control 1 and the power saving control 2 are as follows, for example: Also good.
  • Power saving control is performed by reducing the voltage of the power 1306 supplied to the processor 2901 or by reducing the voltage of the power 1306 supplied to the processor 2901 and the frequency of the clock 1307. Then, the control to end the power saving control and return to the normal power control is performed by increasing the voltage of the power 1306 supplied to the processor 2901 or increasing the voltage of the power 1306 supplied to the processor 2901 and the frequency of the clock 1307. By doing.
  • the power saving control is performed by reducing the number of operating units 1350 and reducing the voltage of power 1306 supplied to the processor 2901, or reducing the number of operating units 1350 operating and supplying the processor 2901 with power. This is done by reducing the voltage of 1306 and the frequency of the clock 1307. Then, the control to end the power saving control and return to the normal power control is performed by increasing the number of operating units 1350 and increasing the voltage of the power 1306 supplied to the processor 2901, or by operating the number of executing units 1350. And the voltage of the power 1306 supplied to the processor 2901 and the frequency of the clock 1307 are increased.
  • control targets of the first power control unit 3013 and the second power control unit 3015 are not limited to the voltage of the power 1306, the frequency of the clock 1307, and the number of running units 1350.
  • the control target of the first power control unit 3013 and the second power control unit 3015 may be anything that controls the power supplied to the processor 2901 or the computer system 2900.
  • the computer system 4000 according to the third embodiment differs from the computer system 1300 according to the first embodiment in the following points.
  • the computer system 4000 includes a program counter monitoring unit 4100 instead of the loop detection unit 1701 and the loop escape detection unit 1704.
  • the computer system 4000 includes a bus monitoring unit 4200 instead of the loop propagation dependency analyzing unit 1702.
  • the processor 4020 in the integrated circuit 4010 includes a power saving control device (loop detection unit 1701, loop propagation dependency analysis unit 1702, first power control unit 1703, loop escape detection unit 1704, first power supply control unit) from the processor 1301 of the first embodiment.
  • the second power control unit 1705 is removed.
  • the issuing unit 1330A has a configuration in which the loop propagation dependency analyzing unit 1702 is removed from the issuing unit 1330 according to the first embodiment, and the retirement unit 1360A includes the loop detecting unit 1701 and the loop from the retirement unit 1360 according to the first embodiment.
  • the escape detection unit 1704 is removed.
  • the program counter monitoring unit 4100, the bus monitoring unit 4200, the first power control unit 1703, and the second power control unit 1705 constitute a power saving control device. Note that some or all of the program counter monitoring unit 4100, the bus monitoring unit 4200, the first power control unit 1703, and the second power control unit 1705 may be provided in the processor.
  • Program counter monitoring unit 4100 (operation related to power saving control) The operation related to the power saving control of the program counter monitoring unit 4100 will be described with reference to the flowchart of FIG. However, the flowchart of FIG. 27 focuses on the fact that the value of the program counter 1311 is repeated in a certain pattern while the processor 4020 executes the loop processing.
  • step S4501 the program counter monitoring unit 4100 monitors whether the value of the program counter 1311 is repeated in a certain pattern. If the determination result in step S4501 is NO (when the value of the program counter 1311 is not repeated in a certain pattern), the process returns to step S4501. If the determination result of step S4501 is YES (when the value of the program counter 1311 is repeated in a certain pattern), the process proceeds to step S4503.
  • step S4503 the program counter monitoring unit 4100 outputs an execution instruction 1711A for bus monitoring execution to the bus monitoring unit 4200.
  • Bus monitoring unit 4200 The operation of the bus monitoring unit 4200 will be described with reference to the flowchart of FIG. However, the flowchart in FIG. 28 focuses on the fact that there is a case where the address related to reading does not change if the processor 4020 executes loop processing and there is no loop propagation dependency between the loops.
  • the bus monitoring unit 4200 determines in step S4601 whether the execution instruction 1711A has been received from the program counter monitoring unit 4100. If the determination result of step S4601 is YES, the process proceeds to step S4603. If the determination result of step S4601 is NO, the determination of step S4601 is executed again.
  • step S4603 the bus monitoring unit 4200 monitors the bus 1305 and determines whether there is a change in the address related to reading. If the determination result of step S4603 is YES (if there is a change in the address related to reading), the process proceeds to step S4605. If the determination result of step S4603 is NO (when there is no change in the address related to reading), the process proceeds to step S4607.
  • step S4605 the bus monitoring unit 4200 does not output the execution instruction 1712 to execute the power saving control to the first power control unit 1703.
  • step S4607 the bus monitoring unit 4200 outputs an execution instruction 1712 for executing power saving control to the first power control unit 1703.
  • the first power control unit 1703 receives the execution instruction 1712 from the bus monitoring unit 4200
  • the first power control unit 1703 transmits the power control information 1731 to the power supply device 1304 and also executes the execution instruction 1713A for detecting the end of power saving control. Output to the counter 4100. Note that the power saving control by the first power control unit 1703 can use each power saving control described in the first embodiment.
  • Program counter monitoring unit 4100 (operation related to power saving control termination) The operation related to the end of the power saving control of the program counter monitoring unit 4100 will be described with reference to the flowchart of FIG. However, the flowchart of FIG. 29 focuses on the fact that the value of the program counter 1311 deviates from repetition with a certain pattern during execution of the loop processing after the processor 4020 finishes executing the loop processing.
  • the program counter monitoring unit 4100 determines whether or not the execution instruction 1713A is received from the first power control unit 1703 in step S4701. If the determination result of step S4701 is YES, the process proceeds to step S4703. If the determination result of step S4701 is NO, the determination of step S4701 is executed again.
  • step S4703 the program counter monitoring unit 4100 monitors whether the value of the program counter 1311 is repeated in the same constant pattern as the constant pattern at the time of determination in step S4501. If the determination result in step S4703 is YES (when the value of the program counter 1311 is repeated in a constant pattern), it is determined that the processor 4020 continues to execute the loop process, and the process returns to step S4703. If the determination result of step S4703 is NO (when the value of the program counter 1311 is not repeated in a certain pattern), it is considered that the processor 4020 has finished executing the loop process, and the process proceeds to step S4703.
  • step S4705 the program counter monitoring unit 4100 outputs an execution instruction 1714 for executing power saving control to the second power control unit 1705.
  • the second power control unit 1705 receives the execution instruction 1714 from the program counter monitoring unit 4100, the second power control unit 1705 transmits power control information 1735 to the power supply device 1304.
  • finishes the power saving control by the 2nd power control part 1705, and returns to normal power control can use the control which complete
  • FIG. 30 the same components as those in the computer system 2900 in FIG. 20 or the computer system 4000 in FIG. 26 are denoted by the same reference numerals and description thereof is omitted.
  • the computer system 4500 according to the fourth embodiment is different from the computer system 2900 according to the second embodiment in the following points.
  • the computer system 4500 includes a program counter monitoring unit 4100 instead of the loop detection unit 1701 and the loop escape detection unit 1704.
  • the computer system 4500 includes a bus monitoring unit 4200 instead of the loop propagation dependency analyzing unit 1702.
  • the processor 4520 in the integrated circuit 4510 is connected to the power saving control device (loop detection unit 1701, loop propagation dependency analysis unit 1702, first power control unit 3013, loop escape detection unit 1704, The second power control unit 3015) is removed.
  • the program counter monitoring unit 4100, the bus monitoring unit 4200, the first power control unit 3013, and the second power control unit 3015 constitute a power saving control device. Note that some or all of the program counter monitoring unit 4100, the bus monitoring unit 4200, the first power control unit 3013, and the second power control unit 3105 may be provided in the processor.
  • Program counter monitoring unit 4100 (operation related to power saving control) The program counter monitoring unit 4100 receives the value of the program counter 1311 of each thread and information indicating the currently operating thread from the thread switching unit 2920.
  • the program counter monitoring unit 4100 monitors the program counter 1311 in units of threads because the processor 4200 operates while switching threads.
  • the program counter monitoring unit 4100 detects that the value of the program counter 1311 of the thread corresponding to the information received from the thread switching unit 2920 is repeated in a certain pattern
  • the program counter monitoring unit 4100 issues an execution instruction 1711A for bus monitoring execution.
  • the data is output to the bus monitoring unit 4200.
  • the execution instruction 1711A includes information indicating a thread in which the value of the program counter 1311 is repeated in a certain pattern.
  • Bus monitoring unit 4200 Information indicating the currently operating thread is input from the thread switching unit 2920 to the bus monitoring unit 4200.
  • the bus monitoring unit 4200 monitors the bus 1305 for the thread indicated by the information included in each execution instruction 1711A received from the program counter monitoring unit 4100.
  • the bus monitoring unit 4200 detects that there is no change in the address related to reading of the currently operating thread received from the thread switching unit 2920, the bus monitoring unit 4200 executes the power saving control execution to the first power control unit 3013.
  • An instruction 1712 is output.
  • This execution instruction 1712 includes information indicating a thread in which it is detected that there is no change in the address related to reading.
  • the first power control unit 3013 outputs an execution instruction 1713A for detecting the end of power saving control to the program counter 4100.
  • the power saving control by the first power control unit 3013 can use each power saving control described in the second embodiment.
  • the time slice number reduction control by the first power control unit 3013 can use the time slice number reduction control described in the second embodiment.
  • Program counter monitoring unit 4100 (operation related to power saving control termination) The program counter monitoring unit 4100 monitors the program counter 1311 for a thread indicated by information included in each execution instruction 1713A received from the first power control unit 3013. When the program counter monitoring unit 4100 detects that the value of the program counter 1311 of the currently operating thread received from the thread switching unit 2920 is not repeated in a certain pattern, the program counter monitoring unit 4100 transfers to the second power control unit 3014. An execution instruction 1714 for executing power saving control is output. This execution instruction 1714 includes information indicating a thread whose value of the program counter 1311 is not repeated in a certain pattern.
  • finishes the power saving control by the 2nd power control part 3015 and returns to normal power control can use the control which complete
  • the increase control of the number of time slices by the second power control unit 3015 can use the increase control of the number of time slices described in the second embodiment.
  • the branch instruction included in the instruction sequence before execution read into the instruction cache 1370 can be detected by the loop detection unit, and the detected loop process can be analyzed in advance for the presence or absence of loop propagation dependency.
  • the branch instruction address or loop range can be stored in the buffer. As a result, when the instruction at the address stored in the buffer is executed, it can be detected that the busy wait loop is executed.
  • the loop detection unit can be provided at a place other than the retirement unit 1360, and the loop propagation dependence analysis part can also be provided at a place other than the issuing unit 1330.
  • a unit for fetching instructions from the instruction cache may be provided separately from the instruction fetch / decode unit 1320.
  • the number of running units is reduced during power saving control.
  • the loop detection unit 1704 detects the loop process based on the execution result of the branch instruction or the like.
  • the retirement unit 1360 may be provided with a reorder buffer for storing issued instructions and addresses of the instructions.
  • the issue of the branch instruction can be detected based on the branch instruction sent from the issue unit 1330 to the reorder buffer. Thereafter, the execution of the branch instruction can be detected when the execution result of the branch instruction is sent to the retirement unit or when the execution result of the branch instruction is retired (for example, when the program counter is rewritten).
  • the power supply device includes a clock frequency storage unit that stores the frequency of the clock supplied to the processor, and the processor reads the clock frequency from the clock frequency storage unit. You may be able to do it.
  • the first example and the second example are given as examples of the mounting method in this case.
  • the clock frequency storage unit is implemented as a memory-mapped register.
  • the clock frequency storage unit is assigned to a specific address on the bus.
  • the processor reads the clock frequency from the clock frequency storage unit via the bus.
  • the clock frequency storage unit is acquired by the processor when the processor executes a specific instruction.
  • the processor executes a specific instruction in the execution unit, the processor reads the clock frequency from the clock frequency storage unit existing in the power supply device.
  • FIG. 31 shows an example of an instruction set 1400A having specific instructions.
  • An instruction set 1400A shown in FIG. 31 is obtained by adding a READCLK instruction 1420 to the instruction set 1400 described in FIG. 4, and the READCLK instruction 1420 is executed by the processor to read the clock frequency from the clock frequency storage unit. Fall under certain instructions.
  • the time slice may be read by a processor.
  • the time slice is acquired by the processor when the processor executes a specific instruction.
  • the processor reads the time slice when a specific instruction is executed in the execution unit.
  • FIG. 32 shows an example of an instruction set 1400B having specific instructions.
  • An instruction set 1400B shown in FIG. 32 is obtained by adding a READCLK instruction 1420 and a READTS instruction 1421 to the instruction set 1400 described in FIG. 4, and the READTS instruction 1421 is executed by the processor to read the time slice. Corresponds to a specific instruction.
  • An integrated circuit is an integrated circuit including a processor, and the processor detects a loop process that repeatedly executes a loop including one or more instructions in the processor; In the loop processing, a loop propagation dependency analyzing unit that detects a loop propagation dependency that spans two loops having different execution times between instructions, and a loop processing detected by the loop detecting unit, the loop propagation dependency analyzing unit A power control unit that performs power saving control to reduce power consumption due to the execution of the loop processing when loop propagation dependency is not detected.
  • the loop detection unit can detect the loop processing, and the loop propagation dependency analysis unit can determine whether the loop processing is for busy wait. Therefore, a busy wait loop can be detected without comparison with a specific instruction sequence (for example, an interlock instruction sequence). Therefore, it is possible to easily detect a busy wait loop constituted by an instruction sequence other than a specific instruction sequence and perform power saving control during the busy wait. As a result, it is possible to detect more various busy wait executions and reduce power wasted due to busy wait execution.
  • a specific instruction sequence for example, an interlock instruction sequence
  • the loop propagation dependency means that a dependency relationship occurs between a loop instruction executed at the i-th time and a loop instruction executed at the j-th time (j> i) in the loop processing. .
  • loop propagation dependency exists when read from. If the loop process has loop propagation dependency, it is determined that the loop process is not a busy wait, but a loop process for executing an operation or the like, and is excluded from power saving control.
  • a loop is configured between addresses 2004 and 2010.
  • the value of the register (R2 register) written by the ADD instruction at address 2004 is read by the same instruction (in the ADD instruction at address 2004) the next time. Therefore, in the loop formed by the instruction sequence 2600 shown in FIG. 11, the value written to the specific register by the instruction in the i-th loop is specified by the instruction in the j-th (j> i) loop. Corresponds to the loop read from the register. Therefore, loop propagation dependence exists in the loop formed by the instruction sequence 2600 shown in FIG. A loop having loop propagation dependency is determined not to be for busy wait, and is excluded from power saving control.
  • the register value written in the preceding loop is not read out in the following loop.
  • the register to be written in the loop is only R0, but the value written to the R0 register in the preceding loop is not read in the succeeding loop. Therefore, in the loop formed by the instruction sequence 2100 shown in FIG. 8, the specific value written in the register by the instruction in the i-th loop is read by the instruction in the j-th (j> i) loop. It is a loop that is not done. Therefore, there is no loop propagation dependency in the loop formed by the instruction sequence shown in FIG. A loop having no loop propagation dependency is determined to be for busy wait, and is subject to power saving control.
  • the detection of the loop processing may be performed after execution of an instruction included in the loop, or may be performed before execution. Furthermore, the loop processing may be detected from the instruction sequence stored in the instruction cache.
  • loop propagation dependent detection process may be performed before or after the execution of the instruction included in the loop as long as it is after the loop detection process.
  • a control method is a control method for a computer system including a processor, wherein the processor detects loop processing in which a loop including one or more instructions is repeatedly executed.
  • a loop propagation dependency detecting step for detecting a loop propagation dependency in which the dependency between instructions in two loops having different execution times in the loop processing is detected; and the loop propagation dependency in the loop processing detected by the loop detecting step
  • a computer system is a computer system including a processor, and a loop detection unit that detects that a loop process that repeatedly executes a loop including one or more instructions is executed in the processor; In the loop processing, a loop propagation dependency analyzing unit that detects a loop propagation dependency that spans two loops having different execution times between instructions, and a loop processing detected by the loop detecting unit, the loop propagation dependency analyzing unit A power control unit that performs power saving control to reduce power consumption due to the execution of the loop processing when loop propagation dependency is not detected.
  • the integrated circuit according to an aspect of the present invention further includes a loop end detection unit that detects that the execution of the loop processing has ended, and the power control unit is configured to perform the loop in a state where power saving control is performed.
  • the end detection unit may end the power saving control when detecting the end of the loop processing.
  • the loop propagation dependency analyzing unit is configured such that, in the loop processing, the value written in the variable in the first loop is executed after the first loop. It is possible to determine that there is loop propagation dependence by reading from the variable.
  • the loop detection unit detects that the processor is in a loop execution state when an instruction branching to a preceding address is executed in the processor. can do. Thereby, when the program is executed in the processor, the loop process can be easily detected based on the execution of the branch instruction.
  • the integrated circuit further includes a loop range storage unit that stores a loop range, and the loop detection unit stores the loop range when a branch instruction that branches to a preceding address is detected.
  • Output a loop range to the loop, further instruct the loop propagation dependency analysis unit to perform dependency analysis, and the loop propagation dependency analysis unit loops the instruction sequence within the loop range stored in the loop range storage unit. Propagation-dependent detection processing can be performed.
  • the loop end detection unit may execute a branch instruction that branches out of the loop range stored in the loop range storage unit, or may be at the end of the loop range. It can be detected that the execution of the loop processing in the processor is completed when the execution result of the conditional branch instruction located is not branching.
  • the loop range storage unit may store information including a loop start address and a loop end address.
  • the processor includes an instruction sequence holding unit that holds a fetched instruction sequence, and the loop propagation dependency analyzing unit is configured to store the loop held in the instruction sequence holding unit. It is possible to perform loop propagation dependent detection processing for instruction sequences in the range of.
  • the instruction string stored in the instruction string holding unit may include a prefetched instruction.
  • the processor when the power control unit performs power saving control, performs control to reduce the frequency of a clock supplied to the processor, and ends the power saving control. Control for increasing the frequency of the clock supplied to the device can be performed. By reducing the frequency of the clock, waste of power due to busy wait can be reduced.
  • the power control unit when the power control unit performs power saving control, the power control unit performs control to reduce the voltage of power supplied to the processor, and ends the power saving control. Control for increasing the voltage of the power supplied to the power source can be performed. By reducing the voltage of power, waste of power due to busy weight can be reduced.
  • the power control unit when the power control unit performs power saving control, the power control unit performs control to reduce a voltage of power supplied to the processor and to reduce a frequency of a clock supplied to the processor.
  • control for increasing the voltage of the power supplied to the processor and increasing the frequency of the clock supplied to the processor can be performed.
  • waste of power due to the busy weight can be reduced.
  • the loop propagation dependency analyzing unit determines that loop propagation dependency exists when the variable to be written in one instruction is the same as the variable to be read in the loop processing. Can be.
  • the processor includes a plurality of execution units, and the power control unit performs control to stop some of the plurality of execution units when performing power saving control. And when the power saving control is terminated, a control for resuming the execution of some of the stopped execution units can be performed. By stopping some of the plurality of execution units, waste of power due to busy waits can be reduced.
  • the processor includes a thread management unit that manages a time slice allocated to each of a plurality of threads, and the power control unit performs a loop when performing power saving control.
  • the thread management unit When the thread management unit is instructed to decrease the time slice allocated to a busy-waiting thread that is executing loop processing in which propagation dependency is not detected, and the power saving control is terminated, the time slice allocated to the thread is increased.
  • the thread management unit may be instructed. Accordingly, it is possible to reduce the waste of power due to the busy wait by reducing the time slice allocated to the busy wait state thread.
  • the power control unit when the power control unit performs power saving control, the power control unit instructs the thread management unit to decrease the time slice allocated to the thread in the busy wait state, and supplies the instruction to the thread management unit.
  • the thread management unit is instructed to increase the time slice allocated to the thread, and the frequency of the clock supplied to the processor is increased. Can be done. As a result, power consumption due to busy waits can be reduced and the power consumption of the processor can be reduced.
  • the processor includes a plurality of execution units
  • the power control unit reduces a time slice allocated to the thread in a busy wait state when performing power saving control. Instructing the management unit, performing control to stop a part of the plurality of execution units, and instructing the thread management unit to increase the time slice to be allocated to the thread when power saving control is terminated. The control for resuming the execution of some of the plurality of execution units may be performed. As a result, power consumption due to busy waits can be reduced and the power consumption of the processor can be reduced.
  • the processor includes a plurality of execution units
  • the power control unit reduces the time slice allocated to a busy-waiting thread when performing power saving control.
  • the power control unit when the power control unit performs power saving control, instructs the thread management unit to decrease the time slice allocated to a thread in a busy wait state and supplies the instruction to the thread management unit.
  • the thread management unit In order to reduce the frequency of the clock and reduce the voltage of the power supplied to the processor, and to end the power saving control, the thread management unit is instructed to increase the time slice allocated to the thread, and Control may be performed to increase the frequency of the clock supplied to the processor and increase the voltage of the power supplied to the processor.
  • Control may be performed to increase the frequency of the clock supplied to the processor and increase the voltage of the power supplied to the processor.
  • the frequency of the clock supplied to the processor is decreased according to the decrease in the time slice allocated to the busy wait state thread. Can be.
  • the power control unit when the power control unit performs power saving control, the number of operating units of the plurality of execution units is reduced according to the reduction in the time slice allocated to the busy wait state thread. Can be.
  • An integrated circuit is an integrated circuit including a processor, and the processor is connected to a first monitoring unit that monitors whether a counter value is repeated in a constant pattern in a program counter in the processor.
  • a second monitoring unit that monitors whether there is a change in an address related to reading by the processor in the generated bus, and the first monitoring unit detects that the counter value is repeated in a certain pattern,
  • a power control unit that performs power saving control for reducing power consumption by the processor when the monitoring unit detects that there is no change in an address related to reading by the processor.
  • a control method for a computer system including a processor, the first monitoring step for monitoring whether a counter value is repeated in a constant pattern in a program counter in the processor, A second monitoring step for monitoring whether there is a change in an address related to reading by the processor in the bus to which the processor is connected, and it is detected by the first monitoring step that the counter value is repeated in a certain pattern. And a power control step of performing power saving control for reducing power consumption by the processor when it is detected by the second monitoring step that there is no change in an address related to reading by the processor.
  • a computer system is a computer system including a processor, wherein the processor is connected to a first monitoring unit that monitors whether a counter value is repeated in a constant pattern in a program counter in the processor.
  • a second monitoring unit that monitors whether there is a change in an address related to reading by the processor in the generated bus, and the first monitoring unit detects that the counter value is repeated in a certain pattern,
  • a power control unit that performs power saving control for reducing power consumption by the processor when the monitoring unit detects that there is no change in an address related to reading by the processor.
  • the power control unit detects that the counter value is not repeated in a constant pattern by the first monitoring unit when power saving control is performed. Then, the power saving control can be terminated.
  • the integrated circuit according to the present invention includes a processor and has a function of detecting that the processor is executing busy wait and a function of performing power saving control during busy wait execution. Therefore, it is useful to install in a computer system.
  • Examples of computer systems to which the present invention can be applied include personal computers, mainframes (general-purpose large computers), televisions, video decks, HDD recorders, mobile phones, car navigation systems, landline phones, copy machines, network relay devices, Examples include a mobile terminal with a touch panel, a game machine, and the like.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Power Sources (AREA)

Abstract

 プロセッサを備えた集積回路に、プロセッサにおいてループ処理が実行されることを検出するループ検出部と、ループ処理におけるループ伝搬依存を検出するループ伝搬依存解析部と、ループ処理にループ伝搬依存が検出されない場合に省電力制御を行う電力制御部と、を設ける。ループ処理にループ伝搬依存が存在することを検出することで、演算用等のループ処理を省電力制御の対象外とすることができる。その結果、より多様なビジーウェイトの実行を検出し、ビジーウェイトにより浪費される電力を低減し得る。

Description

集積回路、コンピュータシステム、制御方法
 本発明は、プロセッサを有する集積回路、コンピュータシステムおよび制御方法に関し、特に、プロセッサがビジーウェイトを実行するときの消費電力を低減する集積回路、コンピュータシステムおよび制御方法に関するものである。
 プロセッサを有するコンピュータシステムでは、ユーザからの入力待ちを行う場合や並列に動作する複数のプロセッサ(あるいは、複数の論理プロセッサ、プロセス、スレッド等)の間で同期を取る場合に、ビジーウェイトが用いられることが多い。ビジーウェイトが行われる場合、例えば、プロセッサにおいて特定の変数(例えば、同期用変数)の値を繰り返しチェックするループ処理が実行される。そして、特定の変数の値が設定値に変わるとループ処理が終了し、本来の処理が実行される。
 このように、ビジーウェイトを用いることで、並列に動作する複数のプロセッサ等の間で、一方の処理が完了した後に、他方の処理を開始するという同期処理が可能になるため、コンピュータシステムの分野では広く用いられている。
 しかしながら、ビジーウェイトは、プロセッサの資源を浪費するというデメリットがある。ビジーウェイトでは、例えば、同期用変数を監視するために繰り返されるループの回数が、数百回から場合によっては数万回を超えることもある。ゆえに、ビジーウェイトは、電力消費の観点から考えると無駄が多い制御方法である。
 このため、ビジーウェイトの一種であるスピンウェイト時の無駄な電力消費を削減するための方法が、特許文献1に開示されている。
 ここで、スピンウェイトについて、図33を参照しながら説明する。スピンウェイトでは、例えば、マルチプロセッサ間の同期処理に用いられ、図33では、2つのプロセッサが、前段と後段に分けられた処理を順番に実行する状況を想定している。そして、第一プロセッサ側の設定部1101、第二プロセッサ側の検証部1102、及び同期処理用の変数1110によってスピンロック(インターロックの一種)が構成されている。
 第一プロセッサの設定部1101は、同期用変数1110に「0」を書き込んだ後、前段の処理S1111を行う。第一プロセッサは、前段の処理S1111が終了すると、同期用変数1110に「1」を書き込む。一方、第二プロセッサの検証部1102は、同期用変数1110の値が「1」になるまで後段の処理S1122を開始することはできない。よって、同期用変数1110が「1」になるまでステップS1121の判定を繰り返して待機し(即ち、ループを繰り返して待機し)、スピンウェイト状態となり、電力を浪費する。
 特許文献1のコンピュータでは、スピンウェイトに用いられる命令列をプロセッサが実行したことを検出し、そのときにプロセッサを省電力状態にする方法を開示している。ここで、スピンウェイト命令の検出方法について、図34を参照しながら説明する。図34は、前記特許文献1に記載されたスピンウェイト検出部の構成を示す図である。
 スピンウェイト検出部1222は、プロセッサの実行済み命令列バッファ1234と、スピンウェイト命令列記憶部1236と、両者に含まれる命令列を比較する比較部1238とを有する。スピンウェイト命令列記憶部1236には、スピンウェイト特有のインターロック命令列(例として、test_and_setや、compare_and_swap)が格納される。そして、比較部1238によって、実行済み命令列バッファ1234に、スピンウェイト命令列記憶部1236に格納されているインターロック命令列が含まれることが検出された際に、スピンウェイト命令検出信号1241が出力される。そのスピンウェイト命令検出信号1241をトリガとして、プロセッサが省電力状態にされる。
特許第4253796号公報
 しかしながら、前記従来の構成では、スピンウェイト命令列記憶部1236に記憶された特定の命令列(test_and_set等)が実行されたことに基づいてビジーウェイトを検出しているため、上記特定の命令列と異なる命令列を用いたビジーウェイトを検出することができない。また、前記従来の構成によって多様な命令列を用いたビジーウェイトを検出しようとしても、スピンウェイト命令列記憶部1236に多種の命令列を記憶させ、多種の命令列の各々と実行済み命令列とを比較することには自ずと限界が生じる。すなわち、検出できるビジーウェイトが限られているため、電力消費の削減が可能な状況が限定的であるという課題がある。
 本発明は、前記従来の技術における課題を解決するもので、より多様なビジーウェイトの実行を検出し、プロセッサにおけるビジーウェイトの実行により浪費される電力を低減し得る、集積回路、コンピュータシステムおよび制御方法を提供することを目的とする。
 前記課題を解決するために、本発明に係る集積回路は、プロセッサを備えた集積回路であって、前記プロセッサにおいて、1以上の命令からなるループを繰り返し実行するループ処理が実行されることを検出するループ検出部と、前記ループ処理において命令間の依存が実行回の異なる2つのループにまたがるループ伝搬依存を検出するループ伝搬依存解析部と、前記ループ検出部によって検出されたループ処理に、前記ループ伝搬依存解析部によってループ伝搬依存が検出されない場合に、前記ループ処理の実行による電力消費を低減させる省電力制御を行う電力制御部と、を備える。
 本発明に係る集積回路は、ループ検出部によってループ処理を検出し、ループ伝搬依存解析部によってループ処理がビジーウェイト用であるか否かを判別することができる。そのため、特定の命令列(例えば、インターロック用の命令列)との比較なしにビジーウェイト用のループを検出することができる。よって、特定の命令列以外の命令列によって構成されるビジーウェイト用のループを容易に検出し、ビジーウェイト時に省電力制御を行うことができる。その結果、より多様なビジーウェイトの実行を検出し、ビジーウェイトの実行により浪費される電力を低減することができる。
実施の形態1にかかる集積回路を備えたコンピュータシステム1300の構成を模式的に示す図である。 実施の形態1にかかる集積回路を備えたコンピュータシステム1300の構成を簡略化して模式的に示す図である。 実施の形態1にかかる集積回路に含まれるプロセッサ1301の命令セット1400を例示する図である。 実施の形態1におけるプロセッサ1301のレジスタセット1500を例示する図である。 実施の形態1における命令列1600を例示する図である。 実施の形態1におけるループ検出部1701の処理を示すフローチャートである。 実施の形態1におけるループ範囲記憶部1900のデータ構造を示す図である。 実施の形態1におけるループを構成する命令列2100の一例を示す図である。 実施の形態1におけるループ伝搬依存解析部1701の処理を示すフローチャートである。 実施の形態1においてループ伝搬依存解析部1701が用いる依存関係解析用バッファ2200のデータを示す図である。 実施の形態1におけるループをなす命令列の一例を示す図である。 実施の形態1においてループ伝搬依存解析部1701が用いる依存関係解析用バッファ2700のデータを示す図である。 実施の形態1における第一の電力制御部1703の処理を示すフローチャートである。 実施の形態1におけるループ脱出検出部1704の処理を示すフローチャートである。 実施の形態1における第二の電力制御部1705の処理を示すフローチャートである。 実施の形態1におけるループ伝搬依存解析部1701の一部を構成する電子回路を示す図である。 実施の形態1におけるループ伝搬依存解析部1701の一部を構成する電子回路を示す図である。 実施の形態1におけるループ伝搬依存解析部1701の一部を構成する電子回路を示す図である。 変形例にかかるコンピュータシステム2800の構成を模式的に示す図である。 実施の形態2におけるマルチスレッド対応のコンピュータシステム2900の構成を模式的に示す図である。 実施の形態2におけるレジスタ群2910の構成を模式的に示す図である。 実施の形態2における第一の電力制御部3013の処理を示すフローチャートである。 実施の形態2における第二の電力制御部3015の処理を示すフローチャートである。 実施の形態2における第一の電力制御部3013の処理を示すフローチャートである。 実施の形態2における第二の電力制御部3015の処理を示すフローチャートである。 実施の形態3におけるコンピュータシステム4000の構成を模式的に示す図である。 実施の形態3におけるプログラムカウンタ監視部4100の省電力制御に関する動作を示すフローチャートである。 実施の形態3におけるバス監視部4100の動作を示すフローチャートである。 実施の形態3におけるプログラムカウンタ監視部4100の省電力制御終了に関する動作を示すフローチャートである。 実施の形態4におけるコンピュータシステム4500の構成を模式的に示す図である。 他の命令セット1400Aを例示する図である。 更に他の命令セット1400Bを例示する図である。 本発明の背景技術となるビジーウェイトの一例を模式的に説明する図である。 特許文献1のスピンウェイト検出部の構成を模式的に示す図である。
 本発明の実施の形態について、図面を参照しながら説明する。
 [実施の形態1]
 <コンピュータシステム1300の構成>
 本発明の実施の形態1にかかる集積回路を備えたコンピュータシステムの構成を、図1を参照しながら説明する。図1は、コンピュータシステム1300の構成を模式的に示すブロック図である。
 コンピュータシステム1300は、プロセッサ1301、主記憶1302(RAM、ROM等)、I/Oデバイス1303(入出力装置)、電力供給デバイス1304、及びバス1305を備える。なお、プロセッサ1301は、集積回路内に形成されている。
 プロセッサ1301、主記憶1302、I/Oデバイス1303、電力供給デバイス1304は、バス1305を介して相互に接続されている。電力供給デバイス1304は、プロセッサ1301に対して電力1306およびクロック1307を供給する。
 電力供給デバイス1304は、レギュレータを備えており、プロセッサ1301に供給する電力1306の電圧を変更することができる。また、電力供給デバイス1304は、クロック発生回路及び分周回路を備えており、プロセッサ1301に供給するクロック1307の周波数を変更することができる。
 プロセッサ1301は、レジスタ群1310、レジスタ群1310に含まれるプログラムカウンタ1311、命令フェッチ/デコードユニット1320、発行ユニット1330、命令列保持部1340、実行ユニット1350、リタイアメントユニット1360、命令キャッシュ1370、データキャッシュ1380を備える。
 さらに、プロセッサ1301は、省電力制御装置(図1における符号1701~1705、及び1900)を備えており、その省電力制御装置によって、ビジーウェイトによるループ処理が実行されている場合に省電力制御を行う。この省電力制御装置については、後に説明する。
 <コンピュータシステム1300の基本的な動作>
 図2は、省電力制御装置の図示を省略し、コンピュータシステム1300を簡略化して示す。この図に基づいて、コンピュータシステム1300の基本的な動作を説明する。
 まず、命令フェッチ/デコードユニット1320は、プログラムカウンタ1311の値に基づき、プロセッサ1301が実行する可能性のある命令列を命令キャッシュ1370から読み出す。つまり、いわゆる命令のプリフェッチを行う。次に、命令フェッチ/デコードユニット1320は、読み出された命令列をデコードし、命令列保持部1340へ一時的に格納する。
 命令列保持部1340では、所定数の命令が保持されており、最も古い命令に新たな命令が上書きされる。すなわち、命令列保持部1340は、リングバッファによって構成されている。そのため、命令列保持部1340には、下記の発行ユニット1330によって発行された発行済み命令が残されている。
 発行ユニット1330は、命令列保持部1340へ格納された命令列の中から、実行の準備が整ったものを、実行ユニット1350へ送り込む。すなわち、命令が発行される。また、発行ユニット1330は、例えば、演算用の命令を発行する場合に、指定されたオペランド(ソースレジスタ)の値をレジスタ群1310から取出して、命令とともに実行ユニット1350へ送り込む。
 実行ユニット1350では各種の処理を行う。各種の処理には、レジスタ群1310に格納されている値の四則演算やビット演算のような演算処理、浮動小数点処理、データキャッシュ1380やバス1305を介したロードストア処理、分岐などが含まれる。実行ユニット1350が行った処理の実行結果は、リタイアメントユニット1360へ送られる。
 なお、本実施の形態において、プロセッサ1301に実行ユニット1350が複数設けられており、複数の実行ユニット1350で命令列が並列的に処理される。この場合は、発行ユニット1330が、複数の実行ユニット1350のうち、空いている実行ユニット1350に対して、命令列を順次送り込んでいく。
 リタイアメントユニット1360は、レジスタ群1310への書込みの準備が終わったことを確認した後に、実行ユニット1350の実行結果をレジスタ群1310へ書き込む。通常、リタイアメントユニット1360により、命令のアドレス順に実行結果がレジスタ群1310へ書き込まれる。
 命令キャッシュ1370と、データキャッシュ1380は、主記憶1302から読み込んだ情報や、主記憶1302へ書き込む予定の情報を一時的に保持する。
 <命令セット>
 プロセッサ1301の命令セットを、図3を参照しながら説明する。図3は、命令セットに含まれるアセンブラコードの命令1401と、各命令1401の概要1402及び演算内容1403とを例示する図である。
 命令セット1400には、加算を行うADD命令1411、減算を行うSUB命令1412、比較を行うCMP命令1413、移動を行うMOV命令1414、条件分岐を行うBNE命令1415、ジャンプを行うJMP命令1416、バス1305に接続された主記憶1302やI/Oデバイス1303および電力供給デバイス1304から情報の読込みを行うLDR命令1417、バス1305に接続された主記憶1302やI/Oデバイス1303および電力供給デバイス1304から情報の書込みを行うSTR命令1418、演算を行わずにプログラムカウンタのインクリメントを行うNOP命令1419が含まれる。
 ここで、演算内容1403において、「<=」記号は代入を意味する。
 代入記号の左側のレジスタ、すなわち代入先のレジスタをデスティネーションレジスタもしくはDSTレジスタと称する。また、代入記号の右側のレジスタ、すなわち代入元のレジスタをソースレジスタもしくはSRCレジスタと称する。DSTレジスタ及びSRCレジスタは、「変数」の具体例である。
 <レジスタセット>
 本実施の形態にかかるプロセッサのレジスタセット、つまり、レジスタ群1310の構成を、図4を参照しながら説明する。
 レジスタセット1500には、演算時に汎用的に使用される汎用レジスタ1511、プロセッサが実行している命令のアドレスを示すプログラムカウンタ(PC)1512、条件分岐等の判定用に用いられる条件フラグレジスタ(CFR)1513が含まれる。
 なお、前記命令セット1400ならびに前記レジスタセット1500は、説明に必要な部分を部分的にぬきだして例示したものである。
 本発明を実施するにあたっては、命令セットとレジスタセットは、他のものを用いてもよい。例えば、本発明は当業者に広く用いられているARM、MIPS、x86、mn10300命令セット等において実施されうる。
 <命令列保持部>
 命令列保持部1340に保持される命令列1600のデータ構造の一例を、図5を参照しながら説明する。命令列保持部1340には、命令が格納されていたアドレス1601と、命令1602とが対応付けられて格納される。
 <省電力制御装置>
 次に、省電力制御装置の構成を、図1を参照しながら説明する。
 省電力制御装置は、ループ検出部1701、ループ伝搬依存解析部1702、第一の電力制御部1703、ループ脱出検出部1704、第二の電力制御部1705を備えている。また、省電力制御装置は、レジスタ群1310に設けられたループ範囲記憶部1900を含む。
 省電力制御装置は、大別して、2つの構成要素に分けられる。第一の構成要素は、ビジーウェイトの実行状態を検出して、省電力制御を行い、コンピュータシステム1300を省電力の状態にする処理を行う。第二の構成要素は、ビジーウェイトの終了を検出して、省電力制御を終了させることで、コンピュータシステム1300を省電力制御が行われる以前の状態に戻す処理を行う。以下、第一の構成要素、第二の構成要素の順に説明する。
 (1)第一の構成要素
 まず、第一の構成要素は、ループ検出部1701と、ループ伝搬依存解析部1702と、第一の電力制御部1703とによって構成される。そして、ループ検出部1701によってループ処理の実行を検出し、ループ伝搬依存解析部1702によってビジーウェイト用のループ処理であるか演算用のループ処理等であるかを判定する。そして、ビジーウェイト用のループ処理である場合に、第一の電力制御部1703によって省電力制御を行う。以下、第一の構成要素の動作について、図面を参照しながら説明する。
 (1-1)ループ検出部
 ループ検出部1701の動作を、図6のフローチャートを参照しながら説明する。
 ループ検出部1701は、ステップS1801で、分岐命令の成立を判定する。ステップS1801の判定結果がYES(分岐成立)の場合は、ステップS1803へ進む。ステップS1801の判定結果がNO(分岐不成立)の場合は、ステップS1801の判定を再度行う。
 例えば、実行ユニット1350からリタイアメントユニット1360に送られた、ジャンプ命令(JMP命令1416)もしくは条件分岐命令(BNE命令1415)の実行結果及び条件フラグレジスタ(CFR)1513の値に基づいて判定を行う。具体的には、ループ検出部1701は、上記実行結果が、プログラムカウンタ1311の値を所定のアドレスに書き換えるという実行内容であることをもって、分岐命令が成立したと判定する。
 以下、詳細に説明する。ループ検出部1701は、各種の分岐命令(JMP命令、BNE命令等)を保持する分岐命令記憶部と、リタイアメントユニット1360に格納された実行済み命令と前記各種の分岐命令とを比較する命令比較部とを備えている。そして、実行済みの分岐命令がリタイアメントユニット1360に格納されると、命令比較部によって分岐命令が検出される。
 さらに、分岐命令が条件分岐命令である場合は、ループ検出部1701は、レジスタ群1310のCFR1513の値を参照し、例えば、CFR1513の値が「0」でない場合に分岐が成立し、「0」である場合に分岐が不成立であると判定する。このCFR1513の値は、例えば、条件分岐命令に先行する比較命令(CMP)の実行結果がリタイアメントユニット1360によって書き込まれたものである。
 次に、ステップS1803で、ループ検出部1701は、分岐先のアドレスが、分岐命令に先行するアドレスか否かを判定する。ステップS1803の判定結果がYESの場合(分岐先のアドレスが分岐命令に先行するアドレスである場合)は、ステップS1805へ進む。ステップS1803の判定結果がNOの場合(分岐先のアドレスが分岐命令に先行するアドレスでない場合)は、ステップS1801に戻る。なお、実行ユニット1350からリタイアメントユニット1360に送られる実行結果には、分岐命令のアドレス、及び、分岐先のアドレスの情報が含まれており、それら2つのアドレスを比較することで上記判定が行われる。そして、分岐先のアドレスが分岐命令に先行するアドレス(分岐命令のアドレスよりも値が小さいアドレス)である場合に、ループ実行状態であると判定する。ここで、分岐先のアドレスと、分岐命令のアドレスとの差が設定値以上である場合、つまり、比較的命令数の多いループ処理は、ビジーウェイト用のループである可能性が非常に低いため、依存関係の解析を行うまでもなく、除外してもよい。なお、上記設定値は、例えば、10とすることができる。
 次に、ステップS1804において、ループ検出部1701は、ループの先頭アドレス1911と末尾アドレス1912を抽出する。
 まず、ループ検出部1701は、ループの先頭アドレス1911として、分岐が成立した分岐命令の分岐先のアドレスを抽出する。次に、ループ検出部1701は、ループの末尾アドレス1912として、分岐が成立した分岐命令が格納されているアドレスを抽出する。
 なお、ループ検出部1701によるループの先頭アドレス1911と末尾アドレス1912の抽出の具体例として、図5記載の命令列1600を例にとって説明する。ループの先頭アドレス1911は、「分岐命令の分岐先のアドレス」であるので、分岐命令「BNE1004」における1004、即ち、1004番地となる。次に、ループの末尾アドレス1912は、「分岐命令が格納されているアドレス」であるので、分岐命令「BNE1004」が格納されている1010番地となる。
 次に、ステップS1805において、ループ検出部1701は、ステップS1804で抽出したループの先頭アドレス1911とループの末尾アドレス1912を、ループ範囲記憶部1900へ出力する。ループ範囲記憶部1900のデータ構造の例を、図7を参照しながら説明する。ループ範囲記憶部1900は、先頭アドレス1911、及び末尾アドレス1912を記憶するレジスタ(メモリの一種)によって構成される。
 続いて、ステップS1807で、ループ検出部1701は、ループ伝搬依存解析部1702に、依存関係解析の実行指示1711を出力する。なお、実行指示1711は、例えば、ループ検出部1701とループ伝搬依存解析部1702とを接続する信号線の電圧を高レベルにすることによりなされる。
 なお、ループ検出部1701は、プロセッサがループを実行していることを検出できるものであれば、ここで示した処理以外を用いるものであってもよい。例えば、プログラムカウンタ1311に保持されているアドレスの更新により、そのアドレスが減少した場合にループ実行状態であると判定するものであってもよい。
 (1-2)ループ伝搬依存解析部1702
 ここで、ループ伝搬依存解析部1702によって、ビジーウェイトに用いられるループと、ビジーウェイトでないループ(例えば、演算用のループ)とが判別されることを、具体的な命令列を列挙しながら説明する。
 (1-2-1)ビジーウェイト用のループの解析例
 まず、ループ伝搬依存解析部1702の解析対象となるビジーウェイト用ループの命令列の例として、図8の命令列を挙げる。
 図8の命令列2100では、1008番地のLDR命令によって、R2レジスタの指すアドレスからR0レジスタへ値を読込む。次に、100c番地のCMP命令によってR0レジスタの値と、あらかじめ値が格納されたR1レジスタの値を比較する。値が一致した場合は、1010番地のBNE命令で、ループを脱出する。すなわち、分岐不成立により、ループ処理が終了する。一方、値が一致しなかった場合は、1010番地のBNE命令で、1004番地へ分岐する。すなわち、分岐が成立する。
 図8に示す命令列2100は、一定のアドレス(R2レジスタの指すアドレス)から値を繰り返し読み出しては比較する処理を行うものである。R2レジスタの指すアドレスに格納されている値が、ビジーウェイトの同期用変数に相当する。
 上記命令列2100は、キーの入力待ち等に用いられ、例えば、キーが押された場合(同期用変数が書き換えられた場合)に後続する処理が実行される。しかし、キーが押されない場合(同期用変数が書き換えられない場合)は、同期用変数(R2レジスタの指すアドレス)の値を確認する処理が繰り返し行われ、電力を浪費することとなる。よって、このようなループ処理(命令列2100)の実行による電力の消費を抑えることが望ましい。
 次に、ループ伝搬依存解析部1702の解析動作を、図9のフローチャートおよび図8の命令列2100を参照しながら説明する。
 ステップS2001で、ループ伝搬依存解析部1702は、ループ検出部1701から実行指示1711を受けたタイミングで解析処理を開始する。
 ステップS2003において、ループ伝搬依存解析部1702は、ループ範囲記憶部1900より、ループの先頭アドレス1911及び末尾アドレス1912を取得する。ここで、ループの先頭アドレス1911等の取得は、発行ユニット1330が所定のレジスタから値を取得する場合と同様に行われ、指定されるレジスタがループ範囲記憶部1900のレジスタとされる。
 ステップS2005において、ループ伝搬依存解析部1702は、命令列保持部1340からループ範囲内の命令列を取得する。前述のように、命令列保持部1340には、発行ユニット1330によって発行された発行済み命令が残されている。また、命令列保持部1340に格納される命令数は、ループ検出後であっても命令列保持部1340にループ範囲内の命令列が残るように多めにされている。
 なお、仮に命令列保持部1340にループ範囲内の命令列が無い場合でも、分岐命令実行後にプログラムカウンタ1311をループの先頭アドレスに書き換え、ループ範囲内の命令列を命令フェッチ/デコードユニット1320によって再度フェッチ/デコードし、命令列保持部1340に格納してもよい。
 ステップS2007において、ループ伝搬依存解析部1702は、取得した命令列2100を、ループ伝搬依存解析部1702に備えられた依存関係解析用バッファ2200に格納する。
 ここで、依存関係解析用バッファ2200のデータ構造を、図10を参照しながら説明する。
 依存関係解析用バッファ2200には、ループを構成する命令列2100がループ2回分並べて格納される。依存関係解析用バッファ2200には、ループに含まれる命令ごとにエントリが設けられる。エントリは、命令と、命令に対応付けられた情報を記憶するメモリである。
 依存関係解析用バッファ2200の各エントリに格納される情報は、当該命令のニモニック2201、当該命令のDSTレジスタ(デスティネーションレジスタ)2202の識別子、当該命令のSRCレジスタ(ソースレジスタ)2203の識別子に加えて、依存関係解析に用いる中間的な情報として、当該命令の依存関係解析用バッファ2200における位置を識別するためのエントリ番号2204、当該命令が前段のループにあるか後段のループにあるかを判別するためのイテレーション番号2205、依存元命令のエントリ番号2206、当該命令と依存元命令とのイテレーションまたぎ判定結果2207を含む。
 ステップS2007では、依存関係解析用バッファ2200に各種の情報が格納される。上記情報は、ニモニック2201、DSTレジスタ2202の識別子、SRCレジスタ2203の識別子とする。
 ステップS2009から、ステップS2017までの間は、ループ伝搬依存解析部1702は、依存関係解析用バッファ2200の各エントリに対して、先頭から末尾のエントリに対して順番に以下の処理を繰り返し行う。
 まず、ステップS2011で、ループ伝搬依存解析部1702は、各エントリにエントリ番号2204を付与する。例えば、エントリ番号2204として使用する番号は、先頭のエントリを「1」とし、以下、「2」、「3」、「4」、「5」、「6」、「7」、「8」というように1つずつ増加する数値とする。
 なお、エントリ番号は、依存関係解析バッファ内のエントリを一意に識別できる情報であれば、他の番号や記号やビットを用いてもかまわない。
 次に、ステップS2013において、ループ伝搬依存解析部1702は、各エントリに、前段のループか、後段のループかを識別するための、イテレーション番号2205を付与する。
 ここでは、前段のループを示す識別子を「1」、後段のループを示す識別子を「2」とする。なお、イテレーション番号2205は、前段のループか、後段のループかを識別できる情報であれば、「1」、「2」以外の情報を用いてもかまわない。
 次に、ステップS2015において、ループ伝搬依存解析部1702は、依存元命令のエントリ番号2206を書き込む。依存元命令とは、当該命令のSRCレジスタをDSTレジスタとして用いる、最も直前の命令のことである。これにより、いわゆるフロー依存、真の依存、RAW(Read after Write)ハザード等と呼称される依存関係が検出される。
 なお、SRCレジスタが存在しない命令の場合は、この項目に書き込みは行われず、初期値の「0」が保持される。また、依存元命令が依存関係解析用バッファ2200の中になく、ループの外にあると推定される場合は、“ループの外”に存在することを示す値として、エントリ番号にない値(例えば、「10」)を書き込んでもよいし、初期値の「0」にしておいてもかまわない。
 ここで、同一イテレーション番号2205の命令間の依存関係(例えばフロー依存)は、イテレーション番号の異なるループ間にまたがるものではなく、ループ伝搬依存の有無の判定に用いられない。よって、ステップS2015において、ループ内の依存の有無を調べることなく、ループ伝搬依存の有無だけを判定し得る情報を生成してもよい。具体的には、イテレーション番号2205が「1」の命令が、イテレーション番号2205が「2」の各エントリについて、依存元命令になるかどうかを判定するための情報を生成できればよい。
 ステップS2016では、ループ伝搬依存解析部1702は、ループ伝搬依存の有無を調べる。具体的には、依存元命令のエントリ番号2206を参照し、依存元命令が属するイテレーションの番号が「1」であり、他方で、当該命令のイテレーション番号2205が「2」であるか判定する。判定結果がYESであった場合は、ループ伝搬依存が存在しており、依存元命令とのイテレーションまたぎ判定結果2207に「YES」を書き込む(実際は、値を「1」にする)。判定結果がNOであった場合は、ループ伝搬依存はなく、依存元命令とのイテレーションまたぎ判定結果2207に「NO」を書き込む(実際は、値を「0」にする)。
 ステップS2017において、全てのエントリについて、ループ処理が完了した場合は、ループを終了し、ステップS2019へ進む。
 ここで、図10は、図8に示す命令列を、プロセッサ1301が実行した際の、ループ伝搬依存解析部1702のステップS2019の判定が行われる直前の依存関係解析用バッファ2200の状態が示されている。
 次に、ステップS2019において、ループ伝搬依存解析部1702は、依存元命令とのイテレーションまたぎ判定結果2207が「YES」であるエントリが存在するか判定する。
 ステップS2019の判定結果がYESの場合は、ビジーウェイト用のループではないため、ステップS2021へ進む。そして、ステップS2021では、ループ伝搬依存解析部1702は、第一の電力制御部1703へ実行指示1712を出力せずに、処理を終了する。よって、省電力制御は行われない。
 一方、ステップS2019の判定結果がNOの場合は、ビジーウェイト用のループであるため、ステップS2023に進む。そして、ステップS2023では、ループ伝搬依存解析部1702は、第一の電力制御部1703へ省電力制御実行の実行指示1712を出力し、処理を終了する。よって、省電力制御が行われる。なお、実行指示1712は、例えば、ループ伝搬依存解析部1702と第一の電力制御部1703とを接続する信号線の電圧を高レベルにすることによりなされる。
 ここで、上記ループ伝搬依存解析部1702の処理において、依存関係解析用バッファ2200に格納された情報が図10の例であった場合は、ループ伝搬依存はなく、ステップS2019の判定結果は「NO」となる。つまり、エントリ番号が5番から8番までの各々のエントリには、依存元命令とのイテレーションまたぎ判定結果2207が「YES」であるものが存在しないのである。この場合、依存解析されたループ処理は、ビジーウェイト用のループ処理であり、省電力制御の対象となる。
 そのため、この例では、ステップS2023へ進み、その結果、第一の電力制御部1703へ実行指示1712が出力される。
 以上に述べた処理を行うことで、ループ伝搬依存解析部1702は、図9のフローチャートに示される解析処理を行い、後段のループに属する命令のソースレジスタが、前段のループに属する命令の実行によって書き込まれた値を読み出さないことをもってループ伝搬依存がないと判定する。言い換えると、ループ伝搬依存解析部1702は、後段のループに属する命令のソースレジスタが、前段のループに属する命令の実行によって書き込まれた値を読み出されることをもってループ伝搬依存があると判定する。
 (1-2-2)ビジーウェイト用ではないループの解析例
 次に、ループ伝搬依存解析部1702によって、ループ伝搬依存が検出されるループを構成する命令列の例として、図11の命令列2600を挙げる。
 図11の命令列2600では、2004番地のADD命令で、R2レジスタに4を加算した値を、R2レジスタに入力する。次に、2008番地のLDR命令によって、R2レジスタの指すアドレスからR0レジスタへ値を読込む。次に、200c番地のCMP命令によってR0レジスタの値と、予め設定値が格納されているR1レジスタの値を比較する。値が一致した場合は、2010番地のBNE命令で、ループを脱出する。値が一致しなかった場合は、2010番地のBNE命令で、2004番地へ分岐する。
 図11に示す命令列2600は、図9に示す命令列2100とは異なり、一定のアドレスから値を繰り返し読み出しては比較する処理を行うものではない。何故なら、2004番地のADD命令でR2レジスタの値が、毎回のループで加算されることで、LDR命令が用いるアドレスの値が毎回変わるためである。つまり、上記命令列2600は、複数のアドレスの中からR1レジスタと同じ値が格納されているアドレスを見つけ出す処理であり、ビジーウェイト用のループに用いる命令列ではない。よって、省電力制御の対象外とすべきループ処理である。
 次に、図12に、図11に示す命令列2600について、ループ伝搬依存解析部1702によって依存関係の解析が行われた場合の、依存関係解析用バッファ2700の状態を示す。なお、上記依存関係解析用バッファ2700の状態は、ステップS2019の判定が行われる直前の状態である。
 図12の依存関係解析用バッファ2700において、エントリ番号がNo.5のSRCレジスタ2203はR2レジスタであり、エントリ番号がNo.1のDSTレジスタ2202と同じである。そして、エントリ番号がNo.1とNo.5の間に、DSTレジスタ2202がR2レジスタであるものはない。すなわち、エントリ番号がNo.5のSRCレジスタ2203は、依存元命令とのイテレーションまたぎ判定結果2207がYESとなる。そのため、ループ伝搬依存解析部1702のステップS2019の判定結果はYES(ループ伝搬依存が存在する)となる。
 その結果、第一の電力制御部1703へ実行指示1712が出力されず、このタイミングでは、第一の電力制御部1703は、プロセッサ1301の省電力制御を行わない。
 (1-2-3)ループ伝搬依存解析のまとめ
 上記2つの例によって、ビジーウェイトに用いられるループ処理が省電力制御の対象として選択的に検出され、ビジーウェイト用ではないループ処理は選択的に検出されないことが理解される。
 したがって、ループ伝搬依存解析部1702を用いることで、ビジーウェイトのループが実行されているときは、省電力制御が行われ、逆に、ビジーウェイトのループが実行されていないときは、省電力制御が回避される。
 ここで、本発明の実施の形態1において、特に留意されたい点は、ループ伝搬依存解析部1702の処理において、ステップS2019の判定を行うことである。ステップS2019では、後段のループに属する命令のソースレジスタが、前段のループに属する命令の実行によって、書き込まれないことを判定している。
 これにより、ループに使用される変数が、ループの外部的な要因によって書き換えられることを判定する。例えば、図33の例では、第一プロセッサ側の設定部1101によって同期用変数が書き換えられた場合、ループの外部的な要因によって書き換えられたこととなる。このように、ビジーウェイトに用いられる同期用変数は、ループの外部的な要因によって書き換えられる性質があるため、この判定方法を用いることで、ビジーウェイトの検出を行うことが可能となる。
 例えば、図10のエントリ番号がNo.6のSRCレジスタ2203はR2レジスタであり、このR2レジスタの値がR0レジスタに読み込まれた後、R1レジスタの値と比較される。この場合、R2レジスタが上記同期用変数に相当する。そして、ループ内にはR2レジスタをDSTレジスタ2202とする命令が無く、同期用変数としてのR2レジスタはループの内部的な要因によって書き換えられないことが分かる。つまり、ビジーウェイト用のループであると判断することができる。
 これにより、プロセッサが実行するさまざまなループ処理の中から、ビジーウェイトに用いられるループ処理を選択的に検出し、ビジーウェイトに用いられているループが実行されているときに、選択的に省電力制御を行うことが可能となる。
 なお、実施の形態1では、ループ伝搬依存解析部1702の処理として、後続ループの命令のSRCレジスタ2203が、先行ループの命令のDSTレジスタ2202として使用されるか判定する手順を例に挙げた。しかしながら、ループ伝搬依存解析部1702は、後続ループで使用される変数の値が、先行ループの命令の実行によって、書き換えられないことを検出できるものであれば、他の処理を用いて実施されてもかまわない。
 ここで、図9のフローチャートの処理手順は、ループ伝搬依存の有無を解析するための処理手順を分かり易く解説するための一例であり、上記処理手順以外の方法によってループ伝搬依存の有無を判別してもよい(具体例は後述する)。また、依存関係解析用バッファ2200,2700に示された各種の項目のうち、例えば、ニモニック2201、エントリ番号2204、イテレーション番号2205、依存元命令のエントリ番号2206等の少なくとも1つを省略してもよい。
 (1-3)第一の電力制御部1703
 次に、第一の電力制御部1703の動作を、図13のフローチャートを参照しながら説明する。
 第一の電力制御部1703は、ステップS2301で、ループ伝搬依存解析部1702から実行指示1712を受け取るまで待機する。
 第一の電力制御部1703は、実行指示1712を受け取ると、ステップS2303で省電力制御を行う。具体的には、第一の電力制御部1703は、電力供給デバイス1304の電力供給モードを通常電力モードから省電力モードに移行させるための電力制御情報1731を、電力供給デバイス1304へ送信する。
 省電力制御の具体的な例として、電力供給デバイス1304がプロセッサ1301へ供給するクロック1307の周波数を低減させ、プロセッサ1301へ供給する電力1306の電圧を下げさせるというものを挙げる。例えば、クロックの周波数を最大周波数の12.5%まで低減させ、電圧を最大電圧の70%まで低減させる。
 ここで、電力供給デバイス1304は、電力供給モードを通常電力モードと省電力モードとに切り換え可能にされている。そして、電力供給デバイス1304は、通常電力モードでは、設定された周波数(例えば、最大周波数)のクロック1307をクロック発生回路によって発生させ、プロセッサ1301に供給する。また、電力供給デバイス1304は、設定された電圧(例えば、最大電圧)の電力1306をプロセッサ1301に供給する。
 一方、電力供給デバイス1304は、第一の電力制御部1703から電力制御情報1731を受け取ると、省電力モードにより、上記の例のように電圧及びクロック周波数を上記設定値よりも減少させて電力1306の供給及びクロック1307の供給を行う。なお、省電力モードを複数種類設け、複数種類の省電力モードで省電力の程度を異ならせてもよい。
 ステップS2305で、第一の電力制御部1703は、ループ脱出検出部1704へ、ループ脱出検出の実行指示1713を出力する。
 第一の電力制御部1703でかかる処理を行うことにより、ループ伝搬依存解析部1702でビジーウェイト実行中が検出されたときに、プロセッサ1301の電力制御を行うことが可能となる。
 (2)第二の構成要素
 省電力制御装置の第二の構成要素である、ループ脱出検出部1704(ループ終了検出部の一例である)と、第二の電力制御部1705とについて説明する。これらループ脱出検出部1704と、第二の電力制御部1705とは、それぞれ、プロセッサ1301がビジーウェイト用のループ処理から脱出したことを検出する処理、省電力制御を終了させる電力制御を行う。
 (2-1)ループ脱出検出部
 ループ脱出検出部1704の動作を、図14のフローチャートを参照しながら説明する。
 まず、ステップS2401において、ループ脱出検出部1704は、第一の電力制御部1703から、実行指示1713を受け取るまで待機する。
 ループ脱出検出部1704は、実行指示1713を受け取ると、ステップS2403で、ループ範囲記憶部1900から、ループの先頭アドレス1911と、ループの末尾アドレス1912を取得する。これら先頭アドレス1911及び末尾アドレス1912は、ループ脱出検出部1704が備えるメモリに格納される。なお、ループ検出部1701が取得した先頭アドレス1911及び末尾アドレス1912を上記メモリに保持していてもよい。
 次に、ステップS2405で、ループ脱出検出部1704は、分岐命令の実行結果(及び条件フラグレジスタ(CFR)の値)に基づき、分岐が成立したか判定する。この判定は、ループ検出部1701がステップS1801で行った処理と同じである。また、ループ脱出検出部1704は、ループ検出部1701と同様に、分岐命令記憶部と命令比較部とを備えている。これら分岐命令記憶部と命令比較部とを、ループ検出部1701とループ脱出検出部1704とで共用してもよい。
 ステップS2405の判定結果がYES(分岐成立)の場合は、ステップS2407に進む。ステップS2405の判定結果がNO(分岐不成立)の場合は、ステップS2408へ進む。
 ステップS2407では、ループ脱出検出部1704は、ループの末尾に位置する分岐命令以外に条件分岐命令が含まれている場合に、その条件分岐命令によってループ範囲外に分岐するか否かを判定する。具体的には、ステップS2405で成立した分岐のジャンプ先のアドレスが、ループ範囲記憶部1900から取得したループの先頭アドレス1911とループの末尾アドレス1912の範囲を外れたか判定する。つまり、分岐先のアドレスが、先頭アドレス1911より小さい、又は、末尾アドレス1912よりも大きいことをもって、分岐先がループ範囲外であると判定する。
 ステップS2407の判定結果がYESの場合は、ループ処理が終了しているため、省電力制御を終了させるべくステップS2409に進む。一方、判定結果がNOの場合は、ループ処理が継続しており、検出処理を継続すべくステップS2405に戻る。
 上記ステップS2408では、ループ脱出検出部1704は、ループの末尾に位置する条件分岐命令の実行結果が分岐不成立であるか否かを判定する。具体的には、条件分岐命令のアドレスが、ループの末尾アドレス1912と同じであるか否かが判定される。ステップS2408の判定結果がYESの場合は、ループ処理が終了しており、ステップS2409に進む。ステップS2408の判定結果がNOの場合は、ループ処理が継続しており、ステップS2405に戻る。
 ステップS2409では、ループ脱出検出部1704は、省電力制御を終了させるべく、第二の電力制御部1705へ、省電力制御終了の実行指示1714を出力する。なお、実行指示1714は、例えば、ループ脱出検出部1704と第二の電力制御部1705とを接続する信号線の電圧を高レベルにすることによりなされる。
 なお、本実施の形態1では、ループ脱出検出部1704を、リタイアメントユニット1360内に配置し、分岐命令の実行結果に基づいてループ処理が終了したか否かを検出した。しかしながら、ループ処理が終了したことを検出できるほかの方法もしくは装置があれば、その方法もしくは装置を用いてもかまわない。代用可能な他の方法の例として、プログラムカウンタ1311の値がループ範囲外になったことをもって、ループ処理の終了を検出するという方法が挙げられる。この場合、ループ終了の検出処理の安定性を向上させるため、例えば、プログラムカウンタ1311の値が、ループの末尾アドレスに所定値を加えた値より大きくなった場合に、ループ処理が終了したと判定してもよい。
 (2-2)第二の電力制御部
 次に、第二の電力制御部1705の動作を、図15のフローチャートを参照しながら説明する。
 まず、ステップS2501で、第二の電力制御部1705は、ループ伝搬依存解析部1702からの実行指示1714を受け取るまで待機する。
 次に、第二の電力制御部1705は、実行指示1714を受け取ると、ステップS2503で、省電力制御を終了し、通常電力制御に戻す制御を行う。具体的には、第二の電力制御部1705は、電力供給デバイス1304の電力供給モードを省電力モードから通常電力モードに復帰させるための電力制御情報1751を、電力供給デバイス1304へ送信する。その結果、電力供給デバイス1304は、例えば、第一の電力制御部1703で低減させていた、プロセッサ1301に供給するクロック1307の周波数と電力1306の電圧を、それぞれ増加させる(例えば、元の値に戻す)。
 以上で、本発明の実施の形態1における省電力制御装置を構成するループ検出部1701、ループ伝搬依存解析部1702、第一の電力制御部1703、ループ脱出検出部1704、第二の電力制御部1705の動作について説明した。
 (2-3)本実施の形態において、第一の電力制御部1703と、第二の電力制御部1705とによって、前記「電力制御部」が構成されている。なお、前記「電力制御部」を、第一の電力制御部1703によって構成し、「電力制御部」に第二の電力制御部1705が含まれない態様としてもよい。
 <ループ伝搬依存解析部の構成例>
 ループ伝搬依存解析部1702は、例えば、図16、図17に示すデジタルの電子回路を用いてループ伝搬依存の有無を解析するものとすることができる。
 図16は、フロー依存を検出するフロー依存検出回路2851を示す図である。図17は、ループ伝搬依存を検出するために、予備的にフロー依存およびループ伝搬依存の両方を検出する予備的検出回路2853を示す図である。なお、上記図16、図17において、ループに含まれる命令が4つの例(命令1~4)を示しているが、4つ以外の命令間の依存関係、例えば、5つ以上の命令間の依存関係を検出する回路を構成してもよい。
 フロー依存検出回路2851は、ループに含まれる命令列を格納する命令バッファ2855と、命令バッファ2855に格納された命令間のDSTレジスタ(デスティネーションレジスタ)2202とSRCレジスタ(ソースレジスタ)2203との値を比較する比較回路2857とを備えている。図において、最も上側に位置する命令がループの先頭である。なお、1つの命令で2つのSRCレジスタ2203a,2203bが用いられている場合、SRCレジスタ2203a,2203bの各々と、DSTレジスタ2202との値が比較される。
 命令バッファ2855には、命令列保持部1340からループ範囲内の命令列が格納される。なお、命令列保持部1340を命令バッファ2855として用いてもよい。
 比較回路2857は、DSTレジスタ2202とSRCレジスタ2203との値が等しい場合に「1」を出力し、値が異なる場合に「0」を出力する。つまり、比較回路2857は、依存関係がある場合に「1」を出力する。
 ここで、1つのSRCレジスタ2203は、複数のDSTレジスタ2202と比較される場合がある(例えば、命令4のSRCレジスタ2203)。その場合は、複数の比較回路2857のうちの1つでも「1」が出力されていれば、フロー依存がある(「1」)と判定される。一方、複数の比較回路2857の全てが「0」を出力している場合は、フロー依存がない(「0」)と判定される。
 ループの命令のうち、n番目の命令のSRCレジスタ2203a,2203bの判定結果をSna,Snbとする。例えば、命令2のSRCレジスタ2203a,2203bの判定結果は、それぞれS2a,S2bである。なお、命令1にはフロー依存が生じないため、判定結果の図示を省略している。
 図17に示す予備的検出回路2853には、ループに含まれる命令列を格納する3つの命令バッファ2861a,2861b,2861cと、2つの命令バッファ2861a,2861b間でDSTレジスタ2202とSRCレジスタ2203との値を比較する比較回路2857とが設けられている。
 命令バッファ2861cは、第i回目のループが実行される際にループ範囲内の命令列を格納する。そして、第i+1回目のループが実行される際に、格納している命令列が命令バッファ2861aに移動させられる。これにより、第i+1回目のループが実行される際に、2つの命令バッファ2861a,2861bにループの命令列が格納される。
 比較回路2857は、フロー依存検出回路2851の比較回路と同じものである。しかし、予備的検出回路2853において、DSTレジスタ2202とSRCレジスタ2203との接続の組み合わせがフロー依存検出回路2851と異なっている。具体的には、先行ループ命令が格納された命令バッファ2861aのDSTレジスタ2202と、後続ループ命令が格納された命令バッファ2861bのSRCレジスタ2203とが、全ての組み合わせで比較される。
 ここで、命令バッファ2861bのSRCレジスタ2203a,2203bの判定結果を、予備的検出回路2853と同様に、Rna、Rnbとする。
 そして、いずれかのSRCレジスタ2203について、予備的検出回路2853において依存があると判定され、かつ、フロー依存検出回路2851において依存がないと判定された場合に、ループ伝搬依存があると判定される。すなわち、ループ伝搬依存が検出される。
 図12の例では、エントリ番号が5番のSRCレジスタ2203は、予備的検出回路2853によりエントリ番号が1番のDSTレジスタ2202と依存すると判定される。また、エントリ番号が5番のSRCレジスタ2203は、ループ内においてフロー依存がないため、フロー依存検出回路2851では依存が検出されない。よって、エントリ番号が5番のSRCレジスタ2203については、予備的検出回路2853の判定結果R1aは「1」であり、フロー依存検出回路2851の判定結果S1aは「0」である。このような場合にループ伝搬依存が検出されるのである。なお、図16では上述したように命令1の判定結果S1aなどの図示を省略しているが、命令1にはフロー依存が生じないため、命令1の判定結果S1aなどは「0」になる。
 上記予備的検出回路2853とフロー依存検出回路2851とを組み合わせてループ伝搬依存解析部1702を構成することができる。
 ここで、図17の予備的検出回路2853は命令バッファ2861a,2861b,2861cを3つ備えていたが、1つでもよい。命令バッファ2861aに格納された命令については、DSTレジスタ2202のみが比較回路2857と接続され、SRCレジスタ2203は比較回路2857と接続されていない。逆に、命令バッファ2861bに格納された命令については、SRCレジスタ2203のみが比較回路2857と接続され、DSTレジスタ2202は比較回路2857と接続されていない。よって、例えば、命令バッファ2861bに格納された命令について、DSTレジスタ2202と、SRCレジスタ2203a,2203bとの全ての組み合わせを比較できるものであればよい。
 さらに、図18に、簡易的にループ伝搬依存を検出するために用いられる簡易ループ伝搬依存検出回路2871を示す。
 簡易ループ伝搬依存検出回路2871は、フロー依存検出回路2851と同様に、命令バッファ2855と比較回路2857とを備えている。そして、各比較回路2857は、1つの命令に対応するDSTレジスタ2202とSRCレジスタ2203とに接続されている。すなわち、簡易ループ伝搬依存検出回路2871は、1つの命令においてDSTレジスタ2202とSRCレジスタ2203とが同じであるか否かを判別し、判定結果Qna,Qnb(図において、nは1~4)を出力する回路である。
 この簡易ループ伝搬依存検出回路2871により、例えば、図11に例示したループを成す命令列2600を解析した場合、2004番地のADD命令のDSTレジスタ2202とSRCレジスタ2203とがR2レジスタで一致し、判定結果Q1aに「1」が出力され、ループ伝搬依存が検出される。
 このように、簡易ループ伝搬依存検出回路2871は、一般的な演算用のループでは、変数となるレジスタの値をインクリメント(あるいはデクリメント)する計算式が存在することに基づいて、簡易的にループ伝搬依存を検出している。
 以上に、電子回路を用いてループ伝搬依存解析部1702を構成する例を述べたが、ループ伝搬依存解析部1702の構成は、これに限られない。例えば、図9に示した処理を行うプログラムを実行するプロセッサによってループ伝搬依存解析部1702を構成してもよい。なお、上記プログラムを実行するプロセッサは、例えば、マイクロプログラムを実行するマイクロプログラム順序器のように簡易的なプロセッサとしてもよい。この場合は、プロセッサ1301内に簡易的なプロセッサを形成することができる。また、上記プログラムを実行するプロセッサは、前記プロセッサ1301と同一の集積回路内に形成された別個のプロセッサとしてもよいし、前記プロセッサ1301としてもよい。なお、前記プロセッサ1301と別個の上記プログラムを実行するプロセッサで実行されるループ処理は、検出及び依存解析の対象外とすることができる。
 さらには、ループ伝搬依存解析部1702以外の、省電力制御装置の各構成要素(ループ検出部1701等)を、それぞれ、電子回路によって構成してもよいし、各構成要素の処理を行うプログラムを実行するプロセッサによって構成してもよい。
 また、実施の形態1において、省電力制御及び省電力制御を終了して通常電力制御に戻す制御を、上記記載したものの他、例えば、次のようなものとしてもよい。省電力制御を、プロセッサ1301へ供給するクロック1307の周波数を低下させ、又は、プロセッサ1301へ供給する電力1306の電圧を低下させることによって行う。そして、省電力制御を終了して通常電力制御に戻す制御を、プロセッサ1301へ供給するクロック1307の周波数を増加させ、又は、プロセッサ1301へ供給する電力1306の電圧を増加させることによって行う。
 [変形例]
 <I/Oデバイス>
 なお、上記実施の形態1にかかるコンピュータシステムの変形例を、図19に示す。なお、図19において、図1と同じ構成要素については、同じ符号を用い、説明を省略する。
 図19に示すコンピュータシステム2800には、図1と同様に、プロセッサ1301、主記憶1302、I/Oデバイス群1303、電力供給デバイス1304が、バス1305を介して、相互に接続されている。また、電力供給デバイス1304からは、プロセッサ1301に向けて、電力1306とクロック1307が供給されている。
 図19は、I/Oデバイス群1303となりうるデバイスの例を具体的に示している。
 アンテナ2810は、放送波や、形態電話網の電波を受信するデバイスである。
 チューナ2811は、アンテナ2810が受信したアナログ電波をデジタル信号に変換するものである。
 デコーダ2812は、チューナが変換したデジタル信号を、デコードするものである。デコーダ2812がデコードするコーデックの例として、MPEG2、MPEG4-AVC、MPEG4-MVCなどが挙げられる。
 OSD生成器2813は、デコーダ2812でデコードされた映像データや、プロセッサ1301が生成した画面データなどを、映像データの形に合成する。
 映像表示器2814は、OSD生成器2813が合成した映像データを画面に表示する。映像表示器2814の例として、液晶ディスプレイ、プラズマディスプレイ、有機ELディスプレイ、LEDディスプレイなどが挙げられる。
 スピーカ2816は、デコーダ2812でデコードされた音声データの音声出力を行う。
 半導体メモリ読み書き装置2821、HDD2822(ハードディスク記憶装置)、光ディスク読み書き装置2823は、記憶デバイスとして使用されうる。
 また、ネットワーク通信器2825は、コンピュータシステム2800外部からの、ネットワーク信号を受信する。ネットワーク通信器2825の例としては、ethernetアダプタや、無線LANアダプタが挙げられる。
 リモコン受信器2826は、外部からの赤外線による制御信号などを受信する。
 なお、ここで説明したI/Oデバイス群1303となりうるデバイスを、コンピュータシステム2800に搭載するか否かは任意である。また、ここで説明したデバイスとは異なるデバイスを搭載してもよい。例えば、キーボード、マウス、タッチパネル等の入力装置も、I/Oデバイス群1303となりうる。
 I/Oデバイスを部分的に搭載したコンピュータシステム2800は、パーソナルコンピュータ、メインフレーム、テレビ、ビデオデッキ、HDDレコーダー、携帯電話、カーナビゲーションシステム、固定電話、コピー機、ネットワーク中継機器、タッチパネルつきモバイル端末等の一部分を構成しうる。
 また、第一の電力制御部1703と、第二の電力制御部1705の制御対象は、電力1306の電圧と、クロック1307の周波数に限らない。
 第一の電力制御部1703と、第二の電力制御部1705の制御対象は、プロセッサ1301もしくは、コンピュータシステム1300,2800に供給される電力を制御するものであればよい。
 [実施の形態2]
 実施の形態2におけるマルチスレッド対応のコンピュータシステム2900の構成を、図20を参照しながら説明する。
 なお、図20において、図1のコンピュータシステム1300と同じ構成要素については、同じ符号を用い、説明を省略する。
 本実施の形態2にかかるコンピュータシステム2900と、前記実施の形態1にかかるコンピュータシステム1300とでは、以下の点で異なる。
 (i)コンピュータシステム2900には、レジスタ群2910がスレッドの個数分だけ存在し、各レジスタ群2910にスレッド識別子レジスタ2912と、タイムスライスレジスタ2913が備えられている。
 (ii)コンピュータシステム2900には、プロセッサ2901において動作するスレッドを切り替えるスレッド切替え部2920が備えられている。
 (iii)第一の電力制御部、及び第二の電力制御部には、レジスタ群2910へタイムスライス設定情報を出力する機能と、実行ユニット1350の稼動本数を制御する機能とが備えられている。
 <レジスタ群、スレッド切替え部、その他>
 レジスタ群2910のデータ構造を、図21を参照しながら説明する。
 図21には、第一及び第二スレッドにそれぞれ対応する第一及び第二レジスタ群2910a,2910bが示されている。
 各レジスタ群2910には、それぞれ図4で説明したレジスタ群1310の構成要素に加えて、スレッド識別子レジスタ2912、タイムスライスレジスタ2913が備えられる。
 スレッド識別子レジスタ2912は、複数存在するスレッドの中から、特定のスレッドを識別するためのスレッド識別子を格納するレジスタである。例えば、第一スレッドに対応する第一レジスタ群2910aに属するスレッド識別子レジスタ2912aには「1」が書き込まれ、第二スレッドに対応する第二レジスタ群2910bに属するスレッド識別子レジスタ2912bには「2」が書き込まれる。
 タイムスライスレジスタ2913は、各スレッドに割り当てられる時間、つまり、タイムスライスが格納される。例えば、第一スレッドに100クロックサイクル、第二スレッドに100クロックサイクルの比率でタイムスライスを割り当てる場合は、第一スレッドに対応する第一レジスタ群2910aのタイムスライスレジスタ2913aに「100」が格納される。また、第二スレッドに対応する第二レジスタ群2910bのタイムスライスレジスタ2913bに「100」が格納される。
 スレッド切替え部2920は、各スレッドのタイムスライスレジスタ2913の値に応じて、プロセッサ2901の実行時間を各スレッドに時分割で割り当てる。
 ここで、スレッド切替え部2920について具体的に説明する。
 スレッド切替え部2920は、レジスタ群2910及び命令フェッチ/デコードユニット1320と直接に、あるいはバスを介して接続されている。そして、スレッド切替え部2920は、現在実行されているスレッドに対応するレジスタ群2910のプログラムカウンタ1311の値を読み出し、命令フェッチ/デコードユニット1320に転送する。また、スレッド切替え部2920は、プログラムカウンタ1311の値とともにスレッド識別子も転送する。
 例えば、第一スレッドが実行される場合は、スレッド切替え部2920は、スレッド識別子の値「1」と、第一レジスタ群2910aのプログラムカウンタ1311aの値を命令フェッチ/デコードユニット1320に転送する。これにより、第一スレッドを実行するプログラムの命令がフェッチ/デコードされる。
 なお、命令フェッチ/デコードユニット1320でフェッチした命令列には、スレッド識別子レジスタ2912の情報、つまり、スレッド識別子の値(例えば「1」)が付与される。
 ここで、スレッド切替えのタイミングは、プロセッサ2901外に設けられたタイマ/カウンタ(図示省略)によって通知される。以下、具体的に説明する。
 例えば、第一スレッドが開始される際には、タイマ/カウンタにタイムスライスレジスタ2913aに格納されたタイムスライスが設定され、タイマ/カウンタがスタートさせられる。タイマ/カウンタは、設定されたタイムスライスが経過すると、スレッド切替え部2920に通知する。その通知を受けたスレッド切替え部2920は、次のスレッドに対応するレジスタ群、例えば、第二レジスタ群2910bのスレッド識別子の値「2」とプログラムカウンタ1311bの値とを、命令フェッチ/デコードユニット1320に転送する。
 これにより、命令フェッチ/デコードユニット1320でフェッチされる命令のアドレスが、第二スレッドを実行するプログラムの命令のアドレスに変更される。その結果、第二スレッドを実行するプログラムの命令がフェッチ/デコードされ、動作するスレッドが切り替えられる。
 タイマ/カウンタは、設定時間経過後にリセットされ、次に実行されるスレッド、例えば、第二スレッドのタイムスライスが設定された後、スタートさせられる。
 このようにして、各スレッドに割り当てられたタイムスライスに応じて動作するスレッドが切り替えられる。なお、プロセッサ2901内にタイマ/カウンタを設けてもよい。
 本実施の形態において、タイムスライスレジスタ2913と、スレッド切替え部2920とによって、「スレッド管理部」が構成されている。また、「スレッド管理部」は、スレッド識別子レジスタ2912を含むものとしてもよい。
 発行ユニット1330は、演算等の命令を発行する場合に、複数存在するレジスタ群2910の中から、命令列に付与されたスレッド識別子に対応するレジスタ群2910の値を読み出す。
 リタイアメントユニット1360は、実行ユニット1350の実行結果を、複数存在するレジスタ群2910の中から、命令列に付与されたスレッド識別子に対応するレジスタ群2910へ書き戻す。
 ループ範囲記憶部1900は、ループ範囲にスレッド識別子を対応付けて格納する。また、複数のスレッドについて、ループ範囲及びスレッド識別子を格納できる。
 ループ検出部1701は、ループ処理を検出した場合に、ループ範囲記憶部1900にループ範囲とともにスレッド識別子を書き込む。
 ループ伝搬依存解析部1702は、ループ範囲記憶部1900からループ範囲とともにループ処理が検出されたスレッドのスレッド識別子を取得する。そして、ループ伝搬依存解析部1702は、対象となるスレッドのループ範囲の命令列についてループ伝搬依存の解析処理を行う。ループ伝搬依存が存在しなかった場合は、ループ伝搬依存解析部1702は、第一の電力制御部3013に実行指示1712を出力する。ここで、ループ伝搬依存解析部1702は、実行指示1712にスレッドを識別する情報を付与する。例えば、ループ伝搬依存解析部1702と第一の電力制御部3013とを接続する複数の信号線が、それぞれ複数のスレッドに対応しており、解析処理の対象となったスレッドに対応する信号線の電圧を高くすることでスレッドを識別する情報が付与される。
 ループ脱出検出部1704は、第一の電力制御部3013からスレッド識別子とともに実行指示1713を受ける。そして、ループ脱出検出部1704は、ループ範囲記憶部1900から前記スレッド識別子に対応するループ範囲を取得する。そして、対象となるスレッドの分岐命令の実行結果等に基づき、ループ処理の終了を検出する。
 なお、ループ脱出検出部1704は、複数のスレッドについてループ処理の終了を検出することができる。そして、いずれかのスレッドについてループ処理の終了を検出した場合は、第二の電力制御部3015に実行指示1714とともにスレッド識別子を送る。
 <電力制御部>
 第一の電力制御部3013及び第二の電力制御部3015は、リタイアメントユニット1360内に設けられる。これにより、リタイアメントユニット1360の機能を用いてレジスタ群2910への書き込み等を容易に行うことができる。
 第一の電力制御部3013は、電力供給デバイス1304へ電力制御情報1731を出力する機能に加え、レジスタ群2910へタイムスライス設定情報3103を出力する機能と、実行ユニット1350の稼動本数減少指示3107を出力する機能を有している。
 第二の電力制御部3015は、電力供給デバイス1304へ電力制御情報1751を出力する機能に加え、レジスタ群2910へタイムスライス設定情報3105を出力する機能と、実行ユニット1350の稼動本数増加指示3109を出力する機能を有している。
 (1)省電力制御1
 第一の電力制御部3013の動作のフローチャートを図22に示す。
 まず、ステップS3201で、第一の電力制御部3013は、ループ伝搬依存解析部1702から、実行指示1712を受け取ったか判定を行う。判定結果がYESの場合は、ステップS3203へ進む。判定結果がNOの場合は、ステップS3201の判定を再度実行する。なお、前述のように実行指示1712にはスレッドを識別する情報が含まれている。
 次に、ステップS3203において、第一の電力制御部3013は、レジスタ群2910のうち、実行指示1712によって指定されたスレッドに対応するレジスタ群2910へ(現在動作中のスレッドに対応する、レジスタ群2910へ)、当該スレッドに関する変更後のタイムスライスが変更前のタイムスライスより減少するような、タイムスライス設定情報3103を出力する。
 例えば、指定されたスレッド識別子が「2」であった場合は、第一の電力制御部3013は、スレッド識別子レジスタ2912が「2」である第二レジスタ群2910bのタイムスライスレジスタ2913bの値を、「100」から「50」に変更する。
 ステップS3205において、第一の電力制御部3013は、電力供給デバイス1304へ、電力制御情報1731を出力する。例えば、クロック1307の周波数を4分の3にするように指示する。
 ステップS3207において、第一の電力制御部3013は、ループ脱出検出部1704へ、指定されたスレッド識別子とともに実行指示1713を出力する。
 第二の電力制御部3015の動作のフローチャートを図23に示す。
 まず、ステップS3301で、第二の電力制御部3015は、ループ脱出検出部1704から、実行指示1714を受け取ったか判定を行う。判定結果がYESの場合は、ステップS3303へ進む。判定結果がNOの場合は、ステップS3301を再度実行する。なお、前述のように実行指示1714にはスレッド識別子が含まれている。
 次に、ステップS3303において、第二の電力制御部3015は、スレッド識別子が示すスレッドに対応するレジスタ群2910へ(現在動作中のスレッドに対応する、レジスタ群2910へ)、当該スレッドに関する変更後のタイムスライスが変更前のタイムスライスより増加するように(例えば、第一の電力制御部3013により減少させられる前のタイムスライスに戻るように)、タイムスライス設定情報3105を出力する。
 例えば、スレッド識別子が「2」であった場合は、第二の電力制御部3015は、複数存在するレジスタ群2910のうち、スレッド識別子レジスタ2912が「2」である第二レジスタ群2910bのタイムスライスレジスタ2913bの値を、「50」から「100」へ戻す。
 次に、ステップS3305において、第二の電力制御部3015は、電力供給デバイス1304へ、電力制御情報1751を出力する。その結果、電力供給デバイス1304は、例えば、第一の電力制御部3013で低減させていたプロセッサ2901に供給するクロック1307の周波数を増加させる(元に戻す)。
 ここで、省電力制御時において、ビジーウェイト状態のスレッド(上記の例では第二スレッド)と、ビジーウェイト状態ではないスレッド、つまり、通常の処理を行っているスレッド(上記の例では第一スレッド)とに割り当てられるプロセッサリソース(プロセッサの処理能力)について考察する。
 各スレッドに割り当てられるプロセッサリソースは、一般的には「各スレッドのタイムスライス÷全スレッドのタイムスライスの総和×クロック1307の周波数」の式で表すことができる。
 ここで説明した例では、省電力制御実行時のクロック1307の周波数は、第一、第二スレッドともに通常電力制御時のクロック1307の周波数の4分の3に減少する。
 一方、省電力制御実行時の「各スレッドのタイムスライス÷全スレッドのタイムスライスの総和」は、第一スレッドでは通常電力制御時の3分の4に増加する(100÷200から、100÷150)。また、第二スレッドでは通常電力制御時の3分の2に減少する(100÷200から、50÷150)。
 このため、この例では、ビジーウェイト状態ではない第一スレッドに割り当てられるプロセッサリソースは、クロック1307の周波数の減少割合の4分の3と、タイムスライスの割り当て比率の増加割合の3分の4とを乗じて「1」となる。すなわち、省電力制御が行われても、第一スレッドに割り当てられるプロセッサリソースは減少しない。
 一方、第二スレッドに割り当てられるプロセッサリソースは半減し、電力の浪費が抑制される。
 これにより、ビジーウェイトが実行されていないスレッドの処理速度を維持しながら、ビジーウェイト状態のスレッドに割り当てるプロセッサリソースを選択的に低減し、ビジーウェイトを実行することによってプロセッサ2901が消費する電力ならびに、コンピュータシステム2900が消費する電力を低減することが可能となる。
 上記の省電力制御は、以下のように考えることもできる。
 上記の例において、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に相当するプロセッサリソースは、上記計算式を用いて「50÷200×周波数f」となる。つまり、上記タイムスライスの減少分は、通常電力制御時のプロセッサリソースの4分の1に相当する。
 そこで、上記4分の1のプロセッサリソースに応じて、クロック1307の周波数を4分の1だけ減少させれば、ビジーウェイト状態ではないスレッドのプロセッサリソースを減少させずに、プロセッサ2901の消費電力を低減させることができる。また、ビジーウェイト状態の特定スレッドが、ビジーウェイト状態を脱した時に、他のスレッドのプロセッサリソースを減少させることなく、前記特定スレッドに割り当てるプロセッサリソースを増加させることができる。
 このように、上記の省電力制御は、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に応じて、クロック1307の周波数を減少させるものである。
 (2)省電力制御2
 上記の例では、コンピュータシステム2900は、第一の電力制御部3013と、第二の電力制御部3015は、クロック1307の周波数を制御することで省電力制御を行い、コンピュータシステム2900で浪費される電力を抑制していた。
 それに対し、省電力制御を行う方法はほかにも存在する。
 例えば、クロック1307の周波数を制御するかわりに、あるいは周波数の制御とともに、実行ユニット1350の稼動本数を減少させることで、省電力制御を行ってもよい。
 実行ユニット1350の稼動本数を減少させることで省電力制御を行う、第一の電力制御部3013、及び第二の電力制御部3015の処理のフローチャートを説明する。
 まず、第一の電力制御部3013の処理を、図24のフローチャートを参照しながら説明する。
 まず、ステップS3401において、第一の電力制御部3013は、ループ伝搬依存解析部1702から、実行指示1712を受け取ったか判定を行う。判定結果がYESの場合は、ステップS3403へ進む。判定結果がNOの場合は、ステップS3401へ戻る。なお、前述のように実行指示1712にはスレッドを識別する情報が含まれている。
 次に、ステップS3403において、第一の電力制御部3013は、レジスタ群2910のうち、実行指示1712によって指定されたスレッドに対応するレジスタ群2910へ(現在動作中のスレッドに対応する、レジスタ群2910へ)タイムスライス設定情報3103を出力する。例えば、現在実行中のスレッド識別子が「2」であった場合は、第一の電力制御部3013は、スレッド識別子レジスタ2912が「2」である第二レジスタ群2910bのタイムスライスレジスタ2913bの値を、「100」から「50」に変更する。
 次に、ステップS3405において、第一の電力制御部3013は、実行ユニット1350へ実行ユニット1350の稼働本数を減少させるための稼動本数減少指示3107を出力する。例えば、実行ユニット1350が4本存在した場合は、稼動本数を3本に削減するよう、実行ユニット1350へ指示する。
 ここで、稼動本数減少指示3107について説明する。
 図示を省略しているが、第一の電力制御部3013は、発行ユニット1330と信号線によって接続されている。そして、第一の電力制御部3013は、発行ユニット1330に複数の実行ユニット1350のうちの一部への命令の発行停止を指示する。この指示は、例えば、複数の実行ユニット1350の各々に対応する信号線のうち、停止させようとする実行ユニット1350に対応する信号線に信号を送信する。これにより、一部の実行ユニット1350への命令の発行が停止される。
 また、各実行ユニット1350に電力を供給する給電路には、トランジスタによって構成される電子スイッチが設けられている。そして、第一の電力制御部3013は、稼働停止対象の実行ユニット1350に対応する電子スイッチをオフにすることにより、実行ユニット1350への電力供給を遮断し、稼動本数を削減することができる。なお、実行ユニット1350への電力供給遮断は、発行ユニット1330への命令の発行停止を指示した後に行われる。
 ステップS3407において、第一の電力制御部3013は、ループ脱出検出部1704へ、実行指示1713を出力する。
 第二の電力制御部3015の処理を、図25のフローチャートを参照しながら説明する。
 まず、ステップS3501で、第二の電力制御部3015は、ループ脱出検出部1704から、実行指示1714を受け取ったか判定を行う。判定結果がYESの場合は、ステップS3503へ進む。判定結果がNOの場合は、ステップS3501の処理を再度実行する。なお、前述のように実行指示1714にはスレッド識別子が含まれている。
 次に、ステップS3503において、第二の電力制御部3015は、スレッド識別子が示すスレッドに対応するレジスタ群2910へ(現在動作中のスレッドに対応する、レジスタ群2910へ)タイムスライス設定情報3105を出力する。例えば、スレッド識別子が「2」であった場合は、スレッド識別子レジスタ2912が「2」である第二レジスタ群2910bのタイムスライスレジスタ2913bの値を、「50」から「100」へ戻す。
 次に、ステップS3505において、第二の電力制御部3015は、実行ユニット1350へ実行ユニット1350の稼働本数を増加させるための稼動本数増加指示3109を出力する。例えば、実行ユニット1350の稼動本数を、第一の電力制御部3013で減少させられる前の本数である、4本に戻すよう指示する。なお、稼動本数増加指示3109は、前述の稼動本数減少指示3107と逆の順序で行われる。つまり、電子スイッチをオンにした後、発行ユニット1330への命令の発行再開が指示される。
 ここで、省電力制御時において、ビジーウェイトを実行しているスレッド(上記の例では第二スレッド)と、ビジーウェイトを実行していないスレッド、つまり、通常の処理を行っているスレッド(上記の例では第一スレッド)とに割り当てられるプロセッサリソース(プロセッサの処理能力)について考察する。
 各スレッドに割り当てられるプロセッサリソースは、一般的に、「各スレッドのタイムスライス÷全スレッドのタイムスライスの総和×実行ユニット1350の稼動本数」である。
 この例では、第一スレッドについて、省電力制御実行時における実行ユニット1350の稼動本数は、通常電力制御時の4分の3に減少するが、省電力制御実行時における「各スレッドに割り当てられるタイムスライス÷全スレッドのタイムスライスの総和」は、通常電力制御時の3分の4に増加する(100÷200から、100÷150へ増加する)ため、両者の積は「1」となる。一方、第二スレッドについては、両者の積は2分の1となる。
 このため、この例では、ビジーループが実行されていないスレッド、すなわち、第一スレッドに割り当てられるプロセッサリソースは、省電力制御が実行されても減少しない。
 これにより、ビジーループが実行されていないスレッドの処理速度を維持しながら、ビジーループが実行されているスレッドに割り当てる処理能力を選択的に低減し、ビジーウェイトを実行することによってプロセッサ2901が消費する電力ならびに、コンピュータシステム2900が消費する電力を低減することが可能となる。
 上記の省電力制御は、以下のように考えることもできる。
 上記の例において、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に相当するプロセッサリソースは、上記計算式を用いて「50÷200×実行ユニットの稼働本数」となる。つまり、上記タイムスライスの減少分は、通常電力制御時のプロセッサリソースの4分の1に相当する。
 そこで、上記4分の1のプロセッサリソースに応じて、実行ユニット1350の稼動本数を4分の1だけ減少させれば、ビジーウェイト状態ではないスレッドのプロセッサリソースを減少させずに、プロセッサ2901の消費電力を低減させることができる。また、ビジーウェイト状態の特定スレッドがビジーウェイト状態を脱した時に、実行ユニット1350の稼動本数を増加させることにより、他のスレッドのプロセッサリソースを減少させることなく、前記特定スレッドに割り当てるプロセッサリソースを増加させることができる。
 このように、上記の省電力制御は、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に応じて、実行ユニットの稼働本数を減少させるものである。
 (3)省電力制御補足
 上記2種類の省電力制御を合わせると、各スレッドに割り当てられるプロセッサリソース(処理能力)は、「各スレッドのタイムスライス÷全スレッドのタイムスライスの総和×クロック1307の周波数×実行ユニット1350の稼動本数」となる。
 本実施の形態によれば、上記の計算に基づき、ビジーループが実行されていないスレッドのプロセッサリソースを減少させることなく、ビジーループが実行されているスレッドのプロセッサリソースを選択的に低減させることができる。
 また、省電力制御において、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に応じて、クロック1307の周波数及び実行ユニット1350の稼働本数の少なくとも一方を減少させることができる。
 なお、省電力制御時にビジーループが実行されていないスレッドのプロセッサリソースが増加してもよい。この場合であっても、ビジーループの実行により浪費される電力を低減することができる。
 なお、実施の形態2において、省電力制御及び省電力制御を終了して通常電力制御に戻す制御を、省電力制御1及び省電力制御2で記載したものの他、例えば、次のようなものとしてもよい。
 省電力制御を、プロセッサ2901へ供給する電力1306の電圧を低下させることによって、又は、プロセッサ2901へ供給する電力1306の電圧及びクロック1307の周波数を低下させることによって行う。そして、省電力制御を終了して通常電力制御に戻す制御を、プロセッサ2901へ供給する電力1306の電圧を増加させることによって、又は、プロセッサ2901へ供給する電力1306の電圧及びクロック1307の周波数を増加させることによって行う。
 また、省電力制御を、実行ユニット1350の稼働本数を減少させるとともにプロセッサ2901へ供給する電力1306の電圧を低下させることによって、又は、実行ユニット1350の稼働本数を減少させるとともにプロセッサ2901へ供給する電力1306の電圧及びクロック1307の周波数を低下させることによって行う。そして、省電力制御を終了して通常電力制御に戻す制御を、実行ユニット1350の稼働本数を増加させるとともにプロセッサ2901へ供給する電力1306の電圧を増加させることによって、又は、実行ユニット1350の稼働本数を増加させるとともにプロセッサ2901へ供給する電力1306の電圧及びクロック1307の周波数を増加させることによって行う。
 なお、第一の電力制御部3013と、第二の電力制御部3015の制御対象は、電力1306の電圧、クロック1307の周波数、実行ユニット1350の稼働本数に限らない。
 第一の電力制御部3013と、第二の電力制御部3015の制御対象は、プロセッサ2901もしくは、コンピュータシステム2900に供給される電力を制御するものであればよい。
 [実施の形態3]
 実施の形態3におけるコンピュータシステムの構成を、図26を参照しながら説明する。
 なお、図26において、図1のコンピュータシステム1300と同じ構成要素については、同じ符号を用い、説明を省略する。
 本実施の形態3に係るコンピュータシステム4000と、前記実施の形態1に係るコンピュータシステム1300とでは、以下の点で異なる。
 (i)コンピュータシステム4000には、ループ検出部1701とループ脱出検出部1704の代わりにプログラムカウンタ監視部4100が備えられている。
 (ii)コンピュータシステム4000には、ループ伝搬依存解析部1702の代わりにバス監視部4200が備えられている。
 <プロセッサ>
 集積回路4010内のプロセッサ4020は、実施の形態1のプロセッサ1301から、省電力制御装置(ループ検出部1701、ループ伝搬依存解析部1702、第一の電力制御部1703、ループ脱出検出部1704、第二の電力制御部1705)を取り除いた構成である。また、発行ユニット1330Aは、実施の形態1の発行ユニット1330から、ループ伝搬依存解析部1702を取り除いた構成であり、リタイアメントユニット1360Aは、実施の形態1のリタイアメントユニット1360からループ検出部1701、ループ脱出検出部1704を取り除いた構成である。
 <省電力制御装置>
 実施の形態3では、プログラムカウンタ監視部4100、バス監視部4200、第一の電力制御部1703、第二の電力制御部1705が、省電力制御装置を構成する。なお、プログラムカウンタ監視部4100、バス監視部4200、第一の電力制御部1703、第二の電力制御部1705の一部又は全部をプロセッサ内に設けるようにしてもよい。
 (1-1)プログラムカウンタ監視部4100(省電力制御に関する動作)
 プログラムカウンタ監視部4100の省電力制御に関する動作を、図27のフローチャートを参照しながら説明する。但し、図27のフローチャートは、プロセッサ4020がループ処理を実行する間、プログラムカウンタ1311の値は一定のパターンで繰り返されることに着目したものである。
 プログラムカウンタ監視部4100は、ステップS4501において、プログラムカウンタ1311の値が一定のパターンで繰り返しているかを監視する。そして、ステップS4501の判定結果がNOの場合(プログラムカウンタ1311の値が一定のパターンで繰り返していない場合)、ステップS4501に戻る。ステップS4501の判定結果がYESの場合(プログラムカウンタ1311の値が一定のパターンで繰り返している場合)、ステップS4503へ進む。
 プログラムカウンタ監視部4100は、ステップS4503において、バス監視実行の実行指示1711Aをバス監視部4200へ出力する。
 (1-2)バス監視部4200
 バス監視部4200の動作を、図28のフローチャートを参照しながら説明する。但し、図28のフローチャートは、プロセッサ4020がループ処理を実行し、そのループ間にループ伝搬依存関係がなければ読み出しに係るアドレスに変化が生じない場合があることに着目したものである。
 バス監視部4200は、ステップS4601で、プログラムカウンタ監視部4100から実行指示1711Aを受け取ったか判定する。ステップS4601の判定結果がYESの場合にはステップS4603へ進む。ステップS4601の判定結果がNOの場合には、ステップS4601の判定を再度実行する。
 バス監視部4200は、ステップS4603で、バス1305を監視して、読み出しに係るアドレスに変化があるかを判定する。ステップS4603の判定結果がYESの場合(読み出しに係るアドレスに変化がある場合)には、ステップS4605へ進む。ステップS4603の判定結果がNOの場合(読み出しに係るアドレスに変化がない場合)には、ステップS4607へ進む。
 バス監視部4200は、ステップS4605において、第一の電力制御部1703へ省電力制御実行の実行指示1712を出力しない。
 バス監視部4200は、ステップS4607において、第一の電力制御部1703へ省電力制御実行の実行指示1712を出力する。なお、第一の電力制御部1703は、バス監視部4200から実行指示1712を受けると、電力制御情報1731を電力供給デバイス1304へ送信するとともに、省電力制御終了検出のための実行指示1713Aをプログラムカウンタ4100へ出力する。なお、第一の電力制御部1703による省電力制御は、実施の形態1に記載した各省電力制御を利用できる。
 (1-3)プログラムカウンタ監視部4100(省電力制御終了に関する動作)
 プログラムカウンタ監視部4100の省電力制御終了に関する動作を、図29のフローチャートを参照しながら説明する。但し、図29のフローチャートは、プロセッサ4020がループ処理の実行終了後、プログラムカウンタ1311の値がループ処理の実行中の一定のパターンでの繰り返しから外れることに着目したものである。
 プログラムカウンタ監視部4100は、ステップS4701で、第一の電力制御部1703から実行指示1713Aを受け取ったか判定する。ステップS4701の判定結果がYESの場合にはステップS4703へ進む。ステップS4701の判定結果がNOの場合にはステップS4701の判定を再度実行する。
 プログラムカウンタ監視部4100は、ステップS4703で、プログラムカウンタ1311の値がステップS4501の判定時の一定のパターンと同じ一定のパターンで繰り返しているかを監視する。そして、ステップS4703の判定結果がYESの場合(プログラムカウンタ1311の値が一定のパターンで繰り返している場合)、プロセッサ4020がループ処理の実行を継続しているものとして、ステップS4703に戻る。ステップS4703の判定結果がNOの場合(プログラムカウンタ1311の値が一定のパターンで繰り返していない場合)、プロセッサ4020がループ処理の実行を終了したものとみなし、ステップS4703へ進む。
 プログラムカウンタ監視部4100は、ステップS4705において、第二の電力制御部1705へ省電力制御終了実行の実行指示1714を出力する。なお、第二の電力制御部1705は、プログラムカウンタ監視部4100から実行指示1714を受けると、電力制御情報1735を電力供給デバイス1304へ送信する。なお、第二の電力制御部1705による省電力制御を終了して通常電力制御に戻す制御は、実施の形態1に記載した各省電力制御を終了して通常電力制御に戻す制御を利用できる。
 [実施の形態4]
 実施の形態4におけるコンピュータシステムの構成を、図30を参照しながら説明する。
 なお、図30において、図20のコンピュータシステム2900又は図26のコンピュータシステム4000と同じ構成要素については、同じ符号を用い、説明を省略する。
 本実施の形態4に係るコンピュータシステム4500と、前記実施の形態2に係るコンピュータシステム2900とでは、以下の点で異なる。
 (i)コンピュータシステム4500には、ループ検出部1701とループ脱出検出部1704の代わりにプログラムカウンタ監視部4100が備えられている。
 (ii)コンピュータシステム4500には、ループ伝搬依存解析部1702の代わりにバス監視部4200が備えられている。
 <プロセッサ>
 集積回路4510内のプロセッサ4520は、実施の形態2のプロセッサ2901から、省電力制御装置(ループ検出部1701、ループ伝搬依存解析部1702、第一の電力制御部3013、ループ脱出検出部1704、第二の電力制御部3015)を取り除いた構成である。
 <省電力制御装置>
 実施の形態4では、プログラムカウンタ監視部4100、バス監視部4200、第一の電力制御部3013、第二の電力制御部3015が、省電力制御装置を構成する。なお、プログラムカウンタ監視部4100、バス監視部4200、第一の電力制御部3013、第二の電力制御部3105の一部又は全部をプロセッサ内に設けるようにしてもよい。
 (1-1)プログラムカウンタ監視部4100(省電力制御に関する動作)
 プログラムカウンタ監視部4100には、各スレッドのプログラムカウンタ1311の値が入力されるとともに、スレッド切替え部2920から現在動作中のスレッドを示す情報が入力される。
 プログラムカウンタ監視部4100は、プロセッサ4200がスレッドを切替えながら動作するものであることから、プログラムカウンタ1311をスレッド単位で監視する。そして、プログラムカウンタ監視部4100は、スレッド切替え部2920から受け取った情報に対応するスレッドのプログラムカウンタ1311の値が一定のパターンで繰り返していることを検出した場合に、バス監視実行の実行指示1711Aをバス監視部4200へ出力する。なお、この実行指示1711Aはプログラムカウンタ1311の値が一定のパターンで繰り返しているスレッドを示す情報を含むものとする。
 (1-2)バス監視部4200
 バス監視部4200には、スレッド切替え部2920から現在動作中のスレッドを示す情報が入力される。
 バス監視部4200は、プログラムカウンタ監視部4100から受け取った各実行指示1711Aに含まれる情報が示すスレッドについてバス1305を監視する。そして、バス監視部4200は、スレッド切替え部2920から受け取った現在動作中のスレッドの読み出しに係るアドレスに変化がないことを検出した場合に、第一の電力制御部3013へ省電力制御実行の実行指示1712を出力する。この実行指示1712には読み出しに係るアドレスに変化がないことが検出されたスレッドを示す情報を含むものとする。
 第一の電力制御部3013は、省電力制御終了検出のための実行指示1713Aをプログラムカウンタ4100へ出力する。なお、第一の電力制御部3013による省電力制御は、実施の形態2に記載した各省電力制御を利用できる。また、第一の電力制御部3013によるタイムスライス数の減少制御は、実施の形態2に記載した各タイムスライス数の減少制御を利用できる。
 (1-3)プログラムカウンタ監視部4100(省電力制御終了に関する動作)
 プログラムカウンタ監視部4100は、第一の電力制御部3013から受け取った各実行指示1713Aに含まれる情報が示すスレッドについてプログラムカウンタ1311を監視する。そして、プログラムカウンタ監視部4100は、スレッド切替え部2920から受け取った現在動作中のスレッドのプログラムカウンタ1311の値が一定のパターンで繰り返していないことを検出した場合に、第二の電力制御部3014へ省電力制御終了実行の実行指示1714を出力する。なお、この実行指示1714はプログラムカウンタ1311の値が一定のパターンで繰り返さなくなったスレッドを示す情報を含むものとする。
 なお、第二の電力制御部3015による省電力制御を終了して通常電力制御に戻す制御は、実施の形態2に記載した各省電力制御を終了して通常電力制御に戻す制御を利用できる。また、第二の電力制御部3015によるタイムスライス数の増加制御は、実施の形態2に記載した各タイムスライス数の増加制御を利用できる。
 [その他]
 (1)前記実施の形態および変形例の説明はあらゆる点において本発明の例示にすぎず、その範囲を限定しようとするものではない。また、本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
 (2)前記実施の形態1,2および変形例において、実行ユニットによって実行された後の分岐命令が検出され、命令列保持部1340に格納されたループ範囲の命令列についてループ伝搬依存の有無を解析する処理が行われていた。
 それに対し、命令キャッシュ1370に読み込まれた実行前の命令列に含まれる分岐命令をループ検出部によって検出し、検出されたループ処理について予めループ伝搬依存の有無を解析する処理を行うこともできる。そして、ビジーウェイト用のループが検出された場合、分岐命令のアドレス、あるいはループ範囲をバッファに格納しておくことができる。その結果、バッファに格納されたアドレスの命令が実行された場合、ビジーウェイト用のループが実行されることを検出することができる。
 この場合、ループ検出部はリタイアメントユニット1360以外の箇所に設けることができ、ループ伝搬依存解析部も発行ユニット1330以外の箇所に設けることができる。また、命令キャッシュから命令のフェッチ等を行うユニットを、命令フェッチ/デコードユニット1320と別個に設けてもよい。
 (3)前記実施の形態2,4において、省電力制御時に実行ユニットの稼働本数が減少させられていた。これと同様に、実施の形態1,3においても、省電力制御時に実行ユニットの稼働本数を減少させることができる。
 (4)前記実施の形態1,2及び変形例において、ループ検出部1704は分岐命令等の実行結果に基づいてループ処理の検出を行っている。ここで、リタイアメントユニット1360に、発行された命令と、その命令のアドレスとを格納するリオーダーバッファが設けられている場合がある。この場合、発行ユニット1330からリオーダーバッファに送られた分岐命令に基づいて、分岐命令の発行を検出しておくことができる。その後、分岐命令の実行結果がリタイアメントユニットに送られてきた場合、あるいは、分岐命令の実行結果がリタイアした場合(プログラムカウンタが書き換えられた場合等)に分岐命令の実行を検出することができる。
 (5)前記実施の形態1~4及び変形例において、電力供給デバイスは、プロセッサへ供給するクロックの周波数を記憶するクロック周波数記憶部を備え、プロセッサがクロック周波数記憶部からクロック周波数を読み取ることができるようにしてもよい。
 この場合の実装方法の例として第一の例と第二の例を挙げる。
 第一の例では、クロック周波数記憶部は、メモリマップされたレジスタとして実装される。
 クロック周波数記憶部は、バス上の特定のアドレスに割り当てられる。プロセッサは、バスを介して、クロック周波数記憶部からクロック周波数を読み取る。
 第二の例では、クロック周波数記憶部は、プロセッサが特定の命令を特定の命令を実行することにより、プロセッサによって取得される。
 プロセッサは、実行ユニットにおいて、特定の命令を実行した場合に、電力供給デバイスに存在するクロック周波数記憶部からクロック周波数を読み取る。
 図31に特定の命令を備える命令セット1400Aの例を示す。図31で示す命令セット1400Aは、図4で説明した命令セット1400に、READCLK命令1420が追加されたものであり、READCLK命令1420が、クロック周波数記憶部からクロック周波数を読み取るためにプロセッサで実行される特定の命令に該当する。
 (6)前記実施の形態2、4及び変形例において、タイムスライスは、プロセッサによって読み取ることができるようにしてもよい。
 例えば、タイムスライスは、プロセッサが特定の命令を特定の命令を実行することにより、プロセッサによって取得される。
 プロセッサは、実行ユニットにおいて、特定の命令を実行した場合に、タイムスライスを読み取る。
 図32に特定の命令を備える命令セット1400Bの例を示す。図32で示す命令セット1400Bは、図4で説明した命令セット1400に、READCLK命令1420とREADTS命令1421が追加されたものであり、READTS命令1421が、タイムスライスを読み取るためにプロセッサで実行される特定の命令に該当する。
 [補足]
 本発明の一態様における集積回路は、プロセッサを備えた集積回路であって、前記プロセッサにおいて、1以上の命令からなるループを繰り返し実行するループ処理が実行されることを検出するループ検出部と、前記ループ処理において命令間の依存が実行回の異なる2つのループにまたがるループ伝搬依存を検出するループ伝搬依存解析部と、前記ループ検出部によって検出されたループ処理に、前記ループ伝搬依存解析部によってループ伝搬依存が検出されない場合に、前記ループ処理の実行による電力消費を低減させる省電力制御を行う電力制御部と、を備える。
 本態様の集積回路は、ループ検出部によってループ処理を検出し、ループ伝搬依存解析部によってループ処理がビジーウェイト用であるか否かを判別することができる。そのため、特定の命令列(例えば、インターロック用の命令列)との比較なしにビジーウェイト用のループを検出することができる。よって、特定の命令列以外の命令列によって構成されるビジーウェイト用のループを容易に検出し、ビジーウェイト時に省電力制御を行うことができる。その結果、より多様なビジーウェイトの実行を検出し、ビジーウェイトの実行により浪費される電力を低減することができる。
 ここで、ループ伝搬依存は、ループ処理において、第i回目に実行されるループの命令と、第j回目(j>i)に実行されるループの命令との間に依存関係が生じることをいう。
 具体的には、例えば、第i回目のループ内のいずれかの命令によって特定の変数(レジスタ)に書き込まれた値が、第j回目のループ内のいずれかの命令によって特定の変数(レジスタ)から読み出される場合にループ伝搬依存が存在する。そして、ループ処理にループ伝搬依存が存在する場合、前記ループ処理はビジーウェイト用ではなく、演算等を実行するためのループ処理であると判断され、省電力制御の対象外となる。
 ここで、ループ伝搬依存が存在するループの例と、ループ伝搬依存が存在しないループの例を図を参照しながら説明する。
 まず、ループ伝播依存の存在するループ処理の例を、図11を参照しながら説明する。
 図11の命令列2600では、2004番地から2010番地の間でループが構成されている。
 2004番地のADD命令で、R2レジスタに4を加算した値を、R2レジスタに入力する。次に、2008番地のLDR命令によって、R2レジスタの指すアドレスからR0レジスタへ値を読込む。次に、200c番地のCMP命令によってR0レジスタの値と、予め設定値が格納されているR1レジスタの値を比較する。値が一致した場合は、2010番地のBNE命令で、ループを脱出する。値が一致しなかった場合は、2010番地のBNE命令で、2004番地へ分岐する。
 図11に示す命令列2600が構成するループでは、2004番地のADD命令で書き込まれたレジスタ(R2レジスタ)の値が、次の回の同じ命令(2004番地のADD命令に)よって読み出される。したがって、図11に示す命令列2600が構成するループは、第i回目のループ内の命令によって特定のレジスタに書き込まれた値が、第j回目(j>i)のループ内の命令によって特定のレジスタから読み出されるループに該当する。ゆえに、図11に示す命令列2600が構成するループには、ループ伝播依存が存在する。ループ伝播依存の存在するループは、ビジーウェイト用ではないと判断され、省電力制御の対象外となる。
 次に、ループ伝播依存が存在しないループの例を、図8を参照しながら説明する。
 図8の命令列2100では、1004番地から1010番地の間でループが構成されている。
 1008番地のLDR命令によって、R2レジスタの指すアドレスからR0レジスタへ値を読込む。次に、100c番地のCMP命令によってR0レジスタの値と、あらかじめ値が格納されたR1レジスタの値を比較する。値が一致した場合は、1010番地のBNE命令で、ループを脱出する。すなわち、分岐不成立により、ループ処理が終了する。一方、値が一致しなかった場合は、1010番地のBNE命令で、1004番地へ分岐する。すなわち、分岐が成立する。
 図8に示す命令列2100は、前段のループで書き込まれたレジスタの値は、後段のループで読み出されないことに留意されたい。ループ内において書き込みが行われるレジスタはR0のみであるが、前段のループにてR0レジスタに書き込まれた値は後段のループでは読み込まれない。したがって、図8に示す命令列2100が構成するループは、第i回目のループ内の命令によってレジスタに書き込まれた特定の値が、第j回目(j>i)のループ内の命令によって読み出されないループである。ゆえに、図8に示す命令列が構成するループには、ループ伝播依存が存在しない。ループ伝播依存の存在しないループは、ビジーウェイト用であると判断され、省電力制御の対象となる。
 ループ処理の検出は、例えば、ループに含まれる命令の実行後に行ってもよいし、実行前に行ってもよい。さらに、命令キャッシュに格納された命令列からループ処理を検出してもよい。
 また、ループ伝搬依存の検出処理は、ループ検出処理の後であれば、ループに含まれる命令の実行前に行ってもよいし、実行後に行ってもよい。
 本発明の一態様における制御方法は、プロセッサを備えたコンピュータシステムの制御方法であって、前記プロセッサにおいて、1以上の命令からなるループを繰り返し実行するループ処理が実行されることを検出するループ検出ステップと、前記ループ処理において命令間の依存が実行回の異なる2つのループにまたがるループ伝搬依存を検出するループ伝搬依存検出ステップと、前記ループ検出ステップによって検出されたループ処理に、前記ループ伝搬依存解析ステップによってループ伝搬依存が検出されない場合に、前記ループ処理の実行による電力消費を低減させる省電力制御を行う電力制御ステップと、を備える。
 本発明の一態様におけるコンピュータシステムは、プロセッサを備えたコンピュータシステムであって、前記プロセッサにおいて、1以上の命令からなるループを繰り返し実行するループ処理が実行されることを検出するループ検出部と、前記ループ処理において命令間の依存が実行回の異なる2つのループにまたがるループ伝搬依存を検出するループ伝搬依存解析部と、前記ループ検出部によって検出されたループ処理に、前記ループ伝搬依存解析部によってループ伝搬依存が検出されない場合に、前記ループ処理の実行による電力消費を低減させる省電力制御を行う電力制御部と、を備える。
 本態様の制御方法及びコンピュータシステムの夫々は、上記の一態様における集積回路と同様の効果を奏する。
 本発明の一態様における集積回路を、さらに、前記ループ処理の実行が終了したことを検出するループ終了検出部を備え、前記電力制御部は、省電力制御が行われている状態において、前記ループ終了検出部が、前記ループ処理の終了を検出した場合に省電力制御を終了させる、ものとすることができる。
 本発明の一態様における集積回路を、前記ループ伝搬依存解析部は、前記ループ処理において、第一のループで変数に書き込まれた値が、前記第一のループの後に実行される第二のループで前記変数から読み出されることをもって、ループ伝搬依存があると判定する、ものとすることができる。
 本発明の一態様における集積回路を、前記ループ検出部は、前記プロセッサにおいて、先行したアドレスに分岐する命令が実行されたことをもって、前記プロセッサがループ実行状態になったことを検出する、ものとすることができる。これにより、プロセッサにおいてプログラムが実行されている時に、分岐命令の実行に基づいて容易にループ処理を検出することができる。
 本発明の一態様における集積回路を、さらに、ループ範囲を記憶する、ループ範囲記憶部を有し、前記ループ検出部は、先行したアドレスに分岐する分岐命令を検出した場合に、前記ループ範囲記憶部にループの範囲を出力し、さらに、前記ループ伝搬依存解析部に依存関係解析を指示し、前記ループ伝搬依存解析部は、前記ループ範囲記憶部に記憶されたループの範囲の命令列についてループ伝搬依存の検出処理を行う、ものとすることができる。
 本発明の一態様における集積回路を、前記ループ終了検出部は、前記ループ範囲記憶部に記憶されたループの範囲外に分岐する分岐命令が実行されたこと、又は、前記ループの範囲の末尾に位置する条件分岐命令の実行結果が分岐不成立であることをもって、前記プロセッサにおけるループ処理の実行が終了したことを検出する、ものとすることができる。
 本発明の一態様における集積回路を、前記ループ範囲記憶部は、ループの先頭アドレスと、ループの末尾アドレスとを含む情報を記憶する、ものとすることができる。
 本発明の一態様における集積回路を、前記プロセッサは、フェッチされた命令列を保持する命令列保持部を備えており、前記ループ伝搬依存解析部は、前記命令列保持部に保持された前記ループの範囲の命令列についてループ伝搬依存の検出処理を行う、ものとすることができる。
 本発明の一態様における集積回路を、前記命令列保持部に記憶される命令列は、プリフェッチされた命令を含む、ものとすることができる。
 本発明の一態様における集積回路を、前記電力制御部は、省電力制御を行う場合に、前記プロセッサへ供給するクロックの周波数を減少させる制御を行い、省電力制御を終了する場合に、前記プロセッサへ供給するクロックの周波数を増加させる制御を行う、ものとすることができる。クロックの周波数を減少させることで、ビジーウェイトによる電力の浪費を低減し得る。
 本発明の一態様における集積回路を、前記電力制御部は、省電力制御を行う場合に、前記プロセッサへ供給する電力の電圧を低下させる制御を行い、省電力制御を終了する場合に、前記プロセッサへ供給する電力の電圧を増大させる制御を行う、ものとすることができる。電力の電圧を低下させることで、ビジーウェイトによる電力の浪費を低減し得る。
 本発明の一態様における集積回路を、前記電力制御部は、省電力制御を行う場合に、前記プロセッサへ供給する電力の電圧を低下させるとともに前記プロセッサへ供給するクロックの周波数を減少させる制御を行い、省電力制御を終了する場合に、前記プロセッサへ供給する電力の電圧を増大させるとともに前記プロセッサへ供給するクロックの周波数を増加させる制御を行う、ものとすることができる。クロックの周波数を減少させ、電力の電圧を低下させることで、ビジーウェイトによる電力の浪費を低減し得る。
 本発明の一態様における集積回路を、前記ループ伝搬依存解析部は、前記ループ処理において、一の命令の書き込み対象の変数と、読み出し対象の変数とが同じ場合に、ループ伝搬依存が存在すると判定する、ものとすることができる。
 本発明の一態様における集積回路を、前記プロセッサは、複数の実行ユニットを備え、前記電力制御部は、省電力制御を行う場合に、前記複数の実行ユニットの一部のものを停止させる制御を行い、省電力制御を終了する場合に、停止させた前記複数の実行ユニットの一部のものの実行を再開させる制御を行う、ものとすることができる。複数の実行ユニットの一部のものを停止させることで、ビジーウェイトによる電力の浪費を低減し得る。
 本発明の一態様における集積回路を、前記プロセッサは、複数のスレッドの各々に割り当てられるタイムスライスを管理する、スレッド管理部を有し、前記電力制御部は、省電力制御を行う場合に、ループ伝搬依存が検出されないループ処理を実行しているビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部に指示し、省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示する、ものとすることができる。これにより、ビジーウェイト状態のスレッドに割り当てるタイムスライスを減少させることで、ビジーウェイトによる電力の浪費を低減し得る。
 本発明の一態様における集積回路を、前記電力制御部は、省電力制御を行う場合に、ビジーウェイト状態の前記スレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を減少させる制御を行い、省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を増加させる制御を行う、ものとすることができる。これにより、ビジーウェイトによる電力の浪費を低減するとともに、プロセッサの消費電力を低減し得る。
 本発明の一態様における集積回路を、前記プロセッサは、複数の実行ユニットを備え、前記電力制御部は、省電力制御を行う場合に、ビジーウェイト状態の前記スレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記複数の実行ユニットのうちの一部を停止させる制御を行い、省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示するとともに、前記複数の実行ユニットの一部の実行を再開させる制御を行う、ものとすることができる。これにより、ビジーウェイトによる電力の浪費を低減するとともに、プロセッサの消費電力を低減し得る。
 本発明の一態様における集積回路を、前記プロセッサは、複数の実行ユニットを備え、前記電力制御部は、省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を減少させ、前記複数の実行ユニットのうちの一部を停止させる制御を行い、省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を、前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を増加させ、前記複数の実行ユニットの一部の実行を再開させる制御を行う、ものとすることができる。これにより、ビジーウェイトによる電力の浪費を低減するとともに、プロセッサの消費電力を低減し得る。
 本発明の一態様における集積回路を、前記電力制御部は、省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を減少させ、前記プロセッサに供給する電力の電圧を低下させる制御を行い、省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を増加させ、前記プロセッサに供給する電力の電圧を増大させる制御を行う、ものとすることができる。これにより、ビジーウェイトによる電力の浪費を低減するとともに、プロセッサの消費電力を低減し得る。これにより、ビジーウェイトによる電力の浪費を低減するとともに、プロセッサの消費電力を低減し得る。
 本発明の一態様における集積回路を、前記電力制御部は、省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に応じて、前記プロセッサに供給するクロックの周波数を減少させる、ものとすることができる。
 本発明の一態様における集積回路を、前記電力制御部は、省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に応じて、前記複数の実行ユニットの稼働本数を減少させる、ものとすることができる。
 本発明の他の態様における集積回路は、プロセッサを備えた集積回路であって、プロセッサ内のプログラムカウンタにおいてカウンタ値が一定のパターンで繰り返しているかを監視する第1監視部と、前記プロセッサが接続されたバスにおいて前記プロセッサによる読み出しに係るアドレスに変化がないかを監視する第2監視部と、前記第1監視部によって前記カウンタ値が一定のパターンで繰り返されていることが検出され、前記第2監視部によって前記プロセッサによる読み出しに係るアドレスに変化がないことが検出された場合に、前記プロセッサによる電力消費を低減させる省電力制御を行う電力制御部と、を備える。
 本発明の他の態様における制御方法は、プロセッサを備えたコンピュータシステムの制御方法であって、プロセッサ内のプログラムカウンタにおいてカウンタ値が一定のパターンで繰り返しているかを監視する第1監視ステップと、前記プロセッサが接続されたバスにおいて前記プロセッサによる読み出しに係るアドレスに変化がないかを監視する第2監視ステップと、前記第1監視ステップによって前記カウンタ値が一定のパターンで繰り返されていることが検出され、前記第2監視ステップによって前記プロセッサによる読み出しに係るアドレスに変化がないことが検出された場合に、前記プロセッサによる電力消費を低減させる省電力制御を行う電力制御ステップと、を備える。
 本発明の他の態様におけるコンピュータシステムは、 プロセッサを備えたコンピュータシステムであって、プロセッサ内のプログラムカウンタにおいてカウンタ値が一定のパターンで繰り返しているかを監視する第1監視部と、前記プロセッサが接続されたバスにおいて前記プロセッサによる読み出しに係るアドレスに変化がないかを監視する第2監視部と、前記第1監視部によって前記カウンタ値が一定のパターンで繰り返されていることが検出され、前記第2監視部によって前記プロセッサによる読み出しに係るアドレスに変化がないことが検出された場合に、前記プロセッサによる電力消費を低減させる省電力制御を行う電力制御部と、を備える。
 他の態様の集積回路、制御方法、コンピュータシステムの夫々によれば、多様なビジーウェイトの実行により浪費される電力を低減することができる。
 本発明の他の態様における集積回路を、前記電力制御部は、省電力制御が行われている場合において、前記第1監視部によって前記カウンタ値が一定のパターンで繰り返さなくなったことが検出されると、前記省電力制御を終了させる、ものとすることができる。
 本発明にかかる集積回路は、プロセッサを備え、プロセッサがビジーウェイトを実行中であることを検出する機能と、ビジーウェイト実行中に省電力制御を行う機能を有している。そのため、コンピュータシステムに搭載することが有用である。
 また、本発明が応用可能なコンピュータシステムの例として、パーソナルコンピュータ、メインフレーム(汎用大型コンピュータ)、テレビ、ビデオデッキ、HDDレコーダー、携帯電話、カーナビゲーションシステム、固定電話、コピー機、ネットワーク中継機器、タッチパネル付きモバイル端末、ゲーム機などが挙げられる。
 1300  コンピュータシステム
 1301  プロセッサ
 1302  主記憶
 1303  I/Oデバイス
 1304  電力供給デバイス
 1305  バス
 1306  電力
 1307  クロック
 1310  レジスタ群
 1311  プログラムカウンタ
 1320  命令フェッチ/デコードユニット
 1330  発行ユニット
 1340  命令列保持部
 1350  実行ユニット
 1360  リタイアメントユニット
 1370  命令キャッシュ
 1380  データキャッシュ
 1400  命令セット
 1500  レジスタセット
 1512  プログラムカウンタ
 1513  条件フラグレジスタ
 1701  ループ検出部
 1702  ループ伝搬依存解析部
 1703  第一の電力制御部
 1704  ループ脱出検出部
 1705  第二の電力制御部
 1900  ループ範囲記憶部
 2200  依存関係解析用バッファ
 2202  DSTレジスタ
 2203  SRCレジスタ
 2700  依存関係解析用バッファ
 2800  コンピュータシステム
 2851  フロー依存検出回路
 2853  予備的検出回路
 2855  命令バッファ
 2857  比較回路
 2861  命令バッファ
 2871  簡易ループ伝搬依存検出回路
 2900  コンピュータシステム
 2901  プロセッサ
 2910  レジスタ群
 2912  スレッド識別子レジスタ
 2913  タイムスライスレジスタ
 2920  スレッド切替え部
 3013  第一の電力制御部
 3015  第二の電力制御部

Claims (27)

  1.  プロセッサを備えた集積回路であって、
     前記プロセッサにおいて、1以上の命令からなるループを繰り返し実行するループ処理が実行されることを検出するループ検出部と、
     前記ループ処理において命令間の依存が実行回の異なる2つのループにまたがるループ伝搬依存を検出するループ伝搬依存解析部と、
     前記ループ検出部によって検出されたループ処理に、前記ループ伝搬依存解析部によってループ伝搬依存が検出されない場合に、前記ループ処理の実行による電力消費を低減させる省電力制御を行う電力制御部と、
     を備える集積回路。
  2.  さらに、ループ処理の実行が終了したことを検出するループ終了検出部を備え、
     前記電力制御部は、省電力制御が行われている状態において、前記ループ終了検出部が、前記ループ処理の終了を検出した場合に省電力制御を終了させる、
     請求項1記載の集積回路。
  3.  前記ループ伝搬依存解析部は、前記ループ処理において、第一のループで変数に書き込まれた値が、前記第一のループの後に実行される第二のループで前記変数から読み出されることをもって、ループ伝搬依存があると判定する、
     請求項2記載の集積回路。
  4.  前記ループ検出部は、前記プロセッサにおいて、先行したアドレスに分岐する命令が実行されたことをもって、前記プロセッサがループ実行状態になったことを検出する、
     請求項3記載の集積回路。
  5.  さらに、ループの範囲を記憶する、ループ範囲記憶部を有し、
     前記ループ検出部は、先行したアドレスに分岐する分岐命令を検出した場合に、前記ループ範囲記憶部にループの範囲を出力し、さらに、前記ループ伝搬依存解析部に依存関係解析を指示し、
     前記ループ伝搬依存解析部は、前記ループ範囲記憶部に記憶されたループの範囲の命令列についてループ伝搬依存の検出処理を行う、
     請求項4記載の集積回路。
  6.  前記ループ終了検出部は、
     前記ループ範囲記憶部に記憶されたループの範囲外に分岐する分岐命令が実行されたこと、又は、前記ループの範囲の末尾に位置する条件分岐命令の実行結果が分岐不成立であることをもって、前記プロセッサにおけるループ処理の実行が終了したことを検出する、
     請求項5記載の集積回路。
  7.  前記ループ範囲記憶部は、ループの先頭アドレスと、ループの末尾アドレスとを含む情報を記憶する、
     請求項5記載の集積回路。
  8.  前記プロセッサは、フェッチされた命令列を保持する命令列保持部を備えており、
     前記ループ伝搬依存解析部は、前記命令列保持部に保持された前記ループの範囲の命令列についてループ伝搬依存の検出処理を行う、
     請求項5記載の集積回路。
  9.  前記命令列保持部に記憶される命令列は、プリフェッチされた命令を含む、
     請求項8記載の集積回路。
  10.  前記電力制御部は、省電力制御を行う場合に、前記プロセッサへ供給するクロックの周波数を減少させる制御を行い、省電力制御を終了する場合に、前記プロセッサへ供給するクロックの周波数を増加させる制御を行う、
     請求項2記載の集積回路。
  11.  前記電力制御部は、省電力制御を行う場合に、前記プロセッサへ供給する電力の電圧を低下させる制御を行い、省電力制御を終了する場合に、前記プロセッサへ供給する電力の電圧を増大させる制御を行う、
     請求項2記載の集積回路。
  12.  前記電力制御部は、省電力制御を行う場合に、前記プロセッサへ供給する電力の電圧を低下させるとともに前記プロセッサへ供給するクロックの周波数を減少させる制御を行い、省電力制御を終了する場合に、前記プロセッサへ供給する電力の電圧を増大させるとともに前記プロセッサへ供給するクロックの周波数を増加させる制御を行う、
     請求項2記載の集積回路。
  13.  前記ループ伝搬依存解析部は、
     前記ループ処理において、一の命令の書き込み対象の変数と、読み出し対象の変数とが同じ場合に、ループ伝搬依存が存在すると判定する、
     請求項1記載の集積回路。
  14.  前記プロセッサは、複数の実行ユニットを備え、
     前記電力制御部は、省電力制御を行う場合に、前記複数の実行ユニットの一部のものを停止させる制御を行い、省電力制御を終了する場合に、停止させた前記複数の実行ユニットの一部のものの実行を再開させる制御を行う、
     請求項2記載の集積回路。
  15.  前記プロセッサは、複数のスレッドの各々に割り当てられるタイムスライスを管理する、スレッド管理部を有し、
     前記電力制御部は、
     省電力制御を行う場合に、ループ伝搬依存が検出されないループ処理を実行しているビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部に指示し、
     省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示する、
     請求項2記載の集積回路。
  16.  前記電力制御部は、
     省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を減少させる制御を行い、
     省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を増加させる制御を行う、
     請求項15記載の集積回路。
  17.  前記プロセッサは、複数の実行ユニットを備え、
     前記電力制御部は、
     省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記複数の実行ユニットのうちの一部を停止させる制御を行い、
     省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示するとともに、前記複数の実行ユニットの一部の実行を再開させる制御を行う、
     請求項15記載の集積回路。
  18.  前記プロセッサは、複数の実行ユニットを備え、
     前記電力制御部は、
     省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を減少させ、前記複数の実行ユニットのうちの一部を停止させる制御を行い、
     省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を、前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を増加させ、前記複数の実行ユニットの一部の実行を再開させる制御を行う、
     請求項15記載の集積回路。
  19.  前記電力制御部は、
     省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を減少させ、前記プロセッサに供給する電力の電圧を低下させる制御を行い、
     省電力制御を終了する場合に、前記スレッドに割り当てるタイムスライスの増加を前記スレッド管理部へ指示するとともに、前記プロセッサに供給するクロックの周波数を増加させ、前記プロセッサに供給する電力の電圧を増大させる制御を行う、
     請求項15記載の集積回路。
  20.  前記電力制御部は、
     省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に応じて、前記プロセッサに供給するクロックの周波数を減少させる、
     請求項16記載の集積回路。
  21.  前記電力制御部は、
     省電力制御を行う場合に、ビジーウェイト状態のスレッドに割り当てるタイムスライスの減少分に応じて、前記複数の実行ユニットの稼働本数を減少させる、
     請求項17記載の集積回路。
  22.  プロセッサを備えたコンピュータシステムの制御方法であって、
     前記プロセッサにおいて、1以上の命令からなるループを繰り返し実行するループ処理が実行されることを検出するループ検出ステップと、
     前記ループ処理において命令間の依存が実行回の異なる2つのループにまたがるループ伝搬依存を検出するループ伝搬依存検出ステップと、
     前記ループ検出ステップによって検出されたループ処理に、前記ループ伝搬依存解析ステップによってループ伝搬依存が検出されない場合に、前記ループ処理の実行による電力消費を低減させる省電力制御を行う電力制御ステップと、
     を備える制御方法。
  23.  プロセッサを備えたコンピュータシステムであって、
     前記プロセッサにおいて、1以上の命令からなるループを繰り返し実行するループ処理が実行されることを検出するループ検出部と、
     前記ループ処理において命令間の依存が実行回の異なる2つのループにまたがるループ伝搬依存を検出するループ伝搬依存解析部と、
     前記ループ検出部によって検出されたループ処理に、前記ループ伝搬依存解析部によってループ伝搬依存が検出されない場合に、前記ループ処理の実行による電力消費を低減させる省電力制御を行う電力制御部と、
     を備えるコンピュータシステム。
  24.  プロセッサを備えた集積回路であって、
     プロセッサ内のプログラムカウンタにおいてカウンタ値が一定のパターンで繰り返しているかを監視する第1監視部と、
     前記プロセッサが接続されたバスにおいて前記プロセッサによる読み出しに係るアドレスに変化がないかを監視する第2監視部と、
     前記第1監視部によって前記カウンタ値が一定のパターンで繰り返されていることが検出され、前記第2監視部によって前記プロセッサによる読み出しに係るアドレスに変化がないことが検出された場合に、前記プロセッサによる電力消費を低減させる省電力制御を行う電力制御部と、
     を備える集積回路。
  25.  前記電力制御部は、省電力制御が行われている場合において、前記第1監視部によって前記カウンタ値が一定のパターンで繰り返さなくなったことが検出されると、前記省電力制御を終了させる、
     請求項24記載の集積回路。
  26.  プロセッサを備えたコンピュータシステムの制御方法であって、
     プロセッサ内のプログラムカウンタにおいてカウンタ値が一定のパターンで繰り返しているかを監視する第1監視ステップと、
     前記プロセッサが接続されたバスにおいて前記プロセッサによる読み出しに係るアドレスに変化がないかを監視する第2監視ステップと、
     前記第1監視ステップによって前記カウンタ値が一定のパターンで繰り返されていることが検出され、前記第2監視ステップによって前記プロセッサによる読み出しに係るアドレスに変化がないことが検出された場合に、前記プロセッサによる電力消費を低減させる省電力制御を行う電力制御ステップと、
     を備える制御方法。
  27.  プロセッサを備えたコンピュータシステムであって、
     プロセッサ内のプログラムカウンタにおいてカウンタ値が一定のパターンで繰り返しているかを監視する第1監視部と、
     前記プロセッサが接続されたバスにおいて前記プロセッサによる読み出しに係るアドレスに変化がないかを監視する第2監視部と、
     前記第1監視部によって前記カウンタ値が一定のパターンで繰り返されていることが検出され、前記第2監視部によって前記プロセッサによる読み出しに係るアドレスに変化がないことが検出された場合に、前記プロセッサによる電力消費を低減させる省電力制御を行う電力制御部と、
     を備えるコンピュータシステム。
PCT/JP2011/003185 2010-06-25 2011-06-07 集積回路、コンピュータシステム、制御方法 WO2011161884A1 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2012521283A JP5853216B2 (ja) 2010-06-25 2011-06-07 集積回路、コンピュータシステム、制御方法
US13/395,985 US8918664B2 (en) 2010-06-25 2011-06-07 Integrated circuit, computer system, and control method, including power saving control to reduce power consumed by execution of a loop
CN201180003832.3A CN102576318B (zh) 2010-06-25 2011-06-07 集成电路、计算机系统、控制方法

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2010144799 2010-06-25
JP2010-144799 2010-06-25

Publications (1)

Publication Number Publication Date
WO2011161884A1 true WO2011161884A1 (ja) 2011-12-29

Family

ID=45371091

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2011/003185 WO2011161884A1 (ja) 2010-06-25 2011-06-07 集積回路、コンピュータシステム、制御方法

Country Status (4)

Country Link
US (1) US8918664B2 (ja)
JP (1) JP5853216B2 (ja)
CN (1) CN102576318B (ja)
WO (1) WO2011161884A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022177955A (ja) * 2021-05-19 2022-12-02 株式会社ユニバーサルエンターテインメント 遊技機

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9459871B2 (en) * 2012-12-31 2016-10-04 Intel Corporation System of improved loop detection and execution
US9087570B2 (en) 2013-01-17 2015-07-21 Micron Technology, Inc. Apparatuses and methods for controlling a clock signal provided to a clock tree
EP2972781A4 (en) 2013-03-15 2016-10-19 Intel Corp METHOD AND SYSTEMS FOR VECTORIZING SCALAR COMPUTER PROGRAM GRINDINGS WITH GRINDING DEPENDENCIES
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US11789769B2 (en) 2013-09-20 2023-10-17 Qualcomm Incorporated System and method for generation of event driven, tuple-space based programs
US10564949B2 (en) * 2013-09-20 2020-02-18 Reservoir Labs, Inc. System and method for generation of event driven, tuple-space based programs
JP6183251B2 (ja) * 2014-03-14 2017-08-23 株式会社デンソー 電子制御装置
US9524011B2 (en) 2014-04-11 2016-12-20 Apple Inc. Instruction loop buffer with tiered power savings
US9952863B1 (en) 2015-09-01 2018-04-24 Apple Inc. Program counter capturing
US10437483B2 (en) 2015-12-17 2019-10-08 Samsung Electronics Co., Ltd. Computing system with communication mechanism and method of operation thereof
US10579125B2 (en) * 2016-02-27 2020-03-03 Intel Corporation Processors, methods, and systems to adjust maximum clock frequencies based on instruction type
US11194573B1 (en) 2018-02-09 2021-12-07 Rigetti & Co, Llc Streaming execution for a quantum processing system
US11132233B2 (en) * 2018-05-07 2021-09-28 Micron Technology, Inc. Thread priority management in a multi-threaded, self-scheduling processor
US11296999B2 (en) * 2018-06-26 2022-04-05 Telefonaktiebolaget Lm Ericsson (Publ) Sliding window based non-busy looping mode in cloud computing
JP7125525B2 (ja) * 2021-05-19 2022-08-24 株式会社ユニバーサルエンターテインメント 遊技機

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0869411A (ja) * 1994-08-30 1996-03-12 Toshiba Corp 半導体装置
JPH0991136A (ja) * 1995-09-25 1997-04-04 Toshiba Corp 信号処理装置
JP2009053861A (ja) * 2007-08-24 2009-03-12 Panasonic Corp プログラム実行制御装置
JP2009069921A (ja) * 2007-09-11 2009-04-02 Hitachi Ltd マルチプロセッサシステム
US20090113191A1 (en) * 2007-10-25 2009-04-30 Ronald Hall Apparatus and Method for Improving Efficiency of Short Loop Instruction Fetch
JP2009146243A (ja) * 2007-12-17 2009-07-02 Hitachi Ltd 基板バイアス制御を活用する電力性能最適化コンパイラ及びプロセッサシステム
JP2010066892A (ja) * 2008-09-09 2010-03-25 Renesas Technology Corp データプロセッサ及びデータ処理システム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2912713B2 (ja) 1991-01-30 1999-06-28 エヌティエヌ株式会社 高温耐久性グリース組成物
JPH09114660A (ja) * 1995-10-18 1997-05-02 Hitachi Ltd データ処理装置
JP4253796B2 (ja) 2001-11-08 2009-04-15 富士通株式会社 コンピュータ及び制御方法
US7873820B2 (en) * 2005-11-15 2011-01-18 Mips Technologies, Inc. Processor utilizing a loop buffer to reduce power consumption
US7721127B2 (en) * 2006-03-28 2010-05-18 Mips Technologies, Inc. Multithreaded dynamic voltage-frequency scaling microprocessor

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0869411A (ja) * 1994-08-30 1996-03-12 Toshiba Corp 半導体装置
JPH0991136A (ja) * 1995-09-25 1997-04-04 Toshiba Corp 信号処理装置
JP2009053861A (ja) * 2007-08-24 2009-03-12 Panasonic Corp プログラム実行制御装置
JP2009069921A (ja) * 2007-09-11 2009-04-02 Hitachi Ltd マルチプロセッサシステム
US20090113191A1 (en) * 2007-10-25 2009-04-30 Ronald Hall Apparatus and Method for Improving Efficiency of Short Loop Instruction Fetch
JP2009146243A (ja) * 2007-12-17 2009-07-02 Hitachi Ltd 基板バイアス制御を活用する電力性能最適化コンパイラ及びプロセッサシステム
JP2010066892A (ja) * 2008-09-09 2010-03-25 Renesas Technology Corp データプロセッサ及びデータ処理システム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022177955A (ja) * 2021-05-19 2022-12-02 株式会社ユニバーサルエンターテインメント 遊技機
JP7278632B2 (ja) 2021-05-19 2023-05-22 株式会社ユニバーサルエンターテインメント 遊技機

Also Published As

Publication number Publication date
CN102576318A (zh) 2012-07-11
US20120179924A1 (en) 2012-07-12
JP5853216B2 (ja) 2016-02-09
CN102576318B (zh) 2016-03-30
US8918664B2 (en) 2014-12-23
JPWO2011161884A1 (ja) 2013-08-19

Similar Documents

Publication Publication Date Title
JP5853216B2 (ja) 集積回路、コンピュータシステム、制御方法
US10551896B2 (en) Method and apparatus for dynamic clock and voltage scaling in a computer processor based on program phase
CN108027767B (zh) 寄存器读取/写入排序
JP5043560B2 (ja) プログラム実行制御装置
EP3686741B1 (en) Backward compatibility testing of software in a mode that disrupts timing
US10078357B2 (en) Power gating functional units of a processor
TWI461908B (zh) 於即時指令追蹤紀錄中之除錯動作的選擇性紀錄技術
US20070234094A1 (en) Methods and apparatus to control power consumption within a processor
JP2003516570A (ja) マルチスレッド・プロセッサ内の複数のスレッドに入り、出る方法と装置
KR20140113444A (ko) 공유 메모리에 대한 액세스들의 동기화를 완화하기 위한 프로세서들, 방법들 및 시스템들
US20170161075A1 (en) Increasing processor instruction window via seperating instructions according to criticality
KR20030051380A (ko) 마이크로프로세서
US8037366B2 (en) Issuing instructions in-order in an out-of-order processor using false dependencies
Rengasamy et al. Critics critiquing criticality in mobile apps
US20020156999A1 (en) Mixed-mode hardware multithreading
US8095780B2 (en) Register systems and methods for a multi-issue processor
US20140201505A1 (en) Prediction-based thread selection in a multithreading processor
US11880231B2 (en) Accurate timestamp or derived counter value generation on a complex CPU
CN118245187A (zh) 线程调度方法及装置、电子设备及存储介质
KR20240128829A (ko) 루프 재생 성능을 최적화하기 위한 프로세서에서 캡처된 루프의 최적화
JP2008186854A (ja) 半導体集積回路
JPWO2007004323A1 (ja) 情報処理装置
CN114356416A (zh) 处理器及其控制方法、装置、电子设备和存储介质

Legal Events

Date Code Title Description
WWE Wipo information: entry into national phase

Ref document number: 201180003832.3

Country of ref document: CN

121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 11797773

Country of ref document: EP

Kind code of ref document: A1

WWE Wipo information: entry into national phase

Ref document number: 2012521283

Country of ref document: JP

WWE Wipo information: entry into national phase

Ref document number: 13395985

Country of ref document: US

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 11797773

Country of ref document: EP

Kind code of ref document: A1