This application is a continuation of International Application No. PCT/JP2007/000653, filed on Jun. 20, 2007, now pending, herein incorporated by reference.
The present invention relates to an instruction execution control device and instruction execution control method which controls instructions in an out-of-order processing during an operation of a plurality of threads operate in a simultaneous multi-thread system, and more particularly to an instruction execution control device and an instruction execution control method for preventing generation of a hang state during the operation in the simultaneous multi-thread system.
Higher speed processing is demanded for a CPU (Central Processing Unit). And for this, the processing of a CPU has been improved using various technologies. The methods used for this purpose are pipeline processing, a superscalar system which performs parallel processing, and an out-of-order execution system which executes instructions having completed input data with priority, without executing according to the sequence assigned to the program instructions.
The out-of-order execution system is a technology to improve performance of a CPU by executing a subsequent instruction first if data required for the first instruction is not completed and data required for the subsequent instruction processing is completed (e.g. see Patent Document 1).
For example, in the case of the processing instructions in the sequence written in a program, if a first instruction processing 1 is an instruction involving memory access, and a subsequent instruction processing 2 is an instruction which does not involve memory access, then the instruction processing 2 is executed in parallel with the memory access of the instruction processing 1, and the instruction processing 1 is executed after executing the instruction processing 2.
Further multi-thread system for improving processing of a CPU by allowing not a single program but a plurality of programs to run has been proposed (e.g. see Patent Document 2).
In this multi-thread system of allowing a plurality of programs to run, by providing a plurality of sets of programmable resources for a CPU, the system is equivalent to a plurality of CPUs operating under software emulation, therefore a plurality of programs can be executed.
One example of this multi-thread system is a VMT (Vertical Multi-Threading) system. According to this system, only one program can run at a time, but programs can be switched when a long data wait time is generated, or when a predetermined interval time elapses. For the circuit amount used for a VMT system, programmable resources are provided for the number of programs, but the circuit amount to be added is low, because of running only one program at a time, which is easily implemented.
Another example of a multi-thread system is a simultaneous multi-thread (SMT) system which allows a plurality of programs to run simultaneously. Since a plurality of programs run simultaneously, circuit control becomes more difficult and resources increase, compared with the case of allowing a single program to run, but the circuits can be efficiently used since a plurality of programs run at the same time.
Controlling the reservation station for processing the out-of-order execution allows an execution of functions from an entry which is ready for executing the function, with priority.
When the functions are executed by the pipeline processing and a type of instruction requiring a different time for executing a respective function are executed, the reservation station controls execution of the entries, so that the timings to output the result of a respective execution of the function do not overlap.
In
The precedent instruction requires 4 cycles: X1, X2, X3 and X4 for executing a function, and the subsequent instruction requires 2 cycles: X1 and X2 for executing a function. When the reservation station selects the precedent instruction in cycle T1, the U processing does not overlap, so the subsequent instruction requiring 2 cycles can be executed at timing T2. At timing T3, however, if the subsequent instruction requiring 2 cycles is executed, the timing T7, to store the execution result in the result register (U processing), becomes the same as the precedent instruction requiring 4 cycles, therefore the subsequent instruction cannot be executed here. At timing T4, the subsequent instruction requiring 2 cycles can be executed.
The reservation station issues (executes) entries sequentially as an entry becomes ready for execution. When there are a plurality of entries that can be executed at the same time, the entries are selected and executed in the decoded sequence.
Therefore even if an entry is ready for execution of the function, the entry may not become an entry which can be executed depending on the result output timing of the previous entry being executed.
When such a state continues for a long time, it is impossible to execute an entry from the reservation station.
In the case of
In the case of a single thread, if a predetermined number of instructions are decoded by the instruction decoder after the state where an entry cannot be issued from the reservation station is generated, the entry having the instruction completion control function become FULL state.
In other words, the instruction cannot be completed because the entry cannot be issued from the reservation station. A subsequent instruction can be executed from the reservation station, but the instruction cannot be completed.
As a result, the entry having the function to control completion of an instruction becomes FULL state, and instructions cannot be decoded by the instruction decoder (instruction decoder stopping state). Since an instruction is not decoded and a new entry cannot be created in the reservation station, the entry which cannot be executed (entry having 2 cycles in
Patent Document 2: Published Japanese Translation of PCT application No. 2006-502504 (WO 2004/034209)
In the case of a simultaneous multi-thread system, on the other hand, when an entry of the reservation station is shared by threads, an entry, among entries being readied for execution of a function, of which result output timing is not the same as that of the precedent entry, is selected and executed from the reservation station as an executable entry, regardless the thread of the entry in the reservation station.
In this simultaneous multi-thread system as well, just like the single thread system, even if an entry is ready for execution of a function, the entry may not become an executable entry, depending on the result output timing of the previous entry being executed. If such a state continues for a long time, executing an entry from the reservation station becomes impossible.
In this state, if an entry requiring 2 cycles for execution is decoded by the instruction decoder in the thread 1, and then an entry requiring 4 cycles for execution is continuously decoded in the thread 0, the entry requiring 2 cycles for execution in the thread 1 cannot be executed from the reservation station even if this is attempted, since the timing of being stored in the result register becomes the same as that of the precedent instruction.
In the case of the simultaneous multi-thread system, even if an entry which cannot be executed from the reservation station is generated, the other thread can operate without the resource becoming FULL state, and the instruction decoder does not stop, unlike the case of the single thread system.
In other words, in the case of the simultaneous multi-thread system, the instruction in the thread 0 can be completed even after the instruction is executed, so the instruction decoder can decode the instruction in the thread 0. Hence the thread 0 can continuously operate without stopping.
An entry in the thread 1, however, cannot be executed from the reservation station, so the instruction cannot be completed, and the device enters the hang state.
In other words, in the state where execution from the reservation station is impossible, a state where an instruction cannot be completed for a predetermined period (hang state) is detected as an abnormal state, and the CPU stops operation.
With the foregoing in view, it is an object of the present invention to provide an instruction execution control device and an instruction execution control method to enable execution of an entry in the reservation station before the hang state occurs in the processing of the simultaneous multi-thread system.
It is another object of the present invention to provide an instruction execution control device and an instruction execution control method to enable execution of an entry in the reservation station, and to prevent a major performance drop in the processing of the simultaneous multi-thread system.
It is still another object of the present invention to provide an instruction execution control device and an instruction execution control method to enable execution of an entry in the reservation station and to prevent a CPU stop in the processing of the simultaneous multi-thread system.
To attain the above-described object, this invention provides an instruction execution control device, which operates a plurality of thread in a simultaneous multi-thread system and executes an instruction control in an out of order processing, including: an instruction decoder for decoding an instruction; a computing processing reservation station which receives a decoding result from the instruction decoder, and controls computing processing; a main storage reservation station which controls the generation of an address of an operand to be stored in a main storage; an instruction control mechanism which controls executed instructions so that the instructions are completed according to the sequence of a program; and a hang prevention circuit which, when the instruction control mechanism detects that an instruction in one thread cannot be completed in a predetermined period, selects a thread of an entry that can be executed from all of the reservation stations to be the same as the thread of which incompletion in the predetermined period has been detected.
Further, this invention provides an instruction execution control method which operates a plurality of thread in a simultaneous multi-thread system and executes an instruction control in an out of order processing, including: a step of creating an entry by a computing processing reservation station based on a decoding result by an instruction decoder, and issuing an entry which is ready for execution to a computing processing mechanism; a step of creating an entry from the instruction by a main storage reservation station which controls the generation of an address of an operand to be stored in a main storage, and issuing an entry which is ready for execution to a main storage operand address generator; a step of controlling the executed instructions so that the instructions are completed according to the sequence of a program; and a step of, when it is detected that an instruction in one thread cannot be completed in a predetermined period, selecting a thread of an entry that can be executed from all of the reservation stations to be the same as the thread of which incompletion in the predetermined period has been detected.
Also in the present invention, it is preferable that the hang prevention circuit includes a thread selection circuit which, when it is detected to have not completed the thread in the predetermined period, selects a thread of an entry that is executed from the reservation station to be the same as the thread of which incompletion in the predetermined period has been detected.
Also in the present invention, it is preferable that the hang prevention circuit further includes an executability selection circuit which, when a thread selected by the thread selection circuit matches with a thread of an entry of the reservation station, enables the entry to be executed from the reservation station.
Also in the present invention, it is preferable that the thread selection circuit is constructed as a thread selection circuit which changes a thread to be selected depending on an elapsed time.
Also in the present invention, it is preferable that the thread selection circuit prohibits selecting a thread which is not operating based on a signal to indicate a thread which is operating.
Also in the present invention, it is preferable that the hang prevention circuit stops the control of the reservation station when the uncompleted instruction is completed.
Also in the present invention, it is preferable that the reservation station includes: an entry generation circuit which enters an instruction from the instruction decoder to the reservation station; and an execution entry selection circuit which selects an entry that can be executed from the reservation station.
Also in the present invention, it is preferable that the computing processing reservation station executes an entry which is ready for execution, at a timing which does not overlap with the timing of executing the precedent entry or the timing of storing the execution result of the precedent entry.
A state where an instruction is not completed for a predetermined period is detected during simultaneous multi-thread operation, and it is controlled so that all the reservation stations can execute only a predetermined thread, therefore if an entry that cannot be executed from the reservation station exists, execution of an entry in the thread that cannot be executed can be enabled by stopping the execution of the thread which has been continuously executed.
Embodiments of the present invention will now be described with reference to the drawings, in the sequence of an information processing device, an instruction execution control device, a hang prevention mechanism, a thread selection circuit and other embodiments. The present invention, however, is not limited to the following embodiments, but can be modified in various ways.
(Information Processing Device)
In order to fetch instructions, an instruction fetch address generator 1 selects an instruction address and sends an instruction fetch request for the selected instruction address to the primary instruction cache 2. The instruction fetched from the primary instruction cache 2 is stored in an instruction buffer 3. The stored instructions are supplied to an instruction decoder 4 in the execution sequence of the program from the instruction buffer 3.
The instruction decoder 4 decodes the instructions according to the execution sequence of the program. Depending on the type of instruction to be decoded, the instruction decoder 4 creates a required entry for a reservation station unit for generating a main storage operand address (RSA: Reservation Station for Address generate) 5, a reservation station unit for computing a fixed point (RSE: Reservation Station for Execute) 6, a reservation station unit for computing a floating point (RSF: Reservation Station for Floating) 7, and a reservation station unit for branch instruction (RSBR (Reservation Station for BRanch) 8, which controls execution of instructions.
In other words, the instruction decoder 4 decodes a fetched instruction in-order, and the decoded instruction is stored in the reservation station units 5, 6, 7, 8 and 9, which control the execution of functions respectively, depending on the type of instruction. A reservation station unit has reservation station units for computing 6 and 7, and reservation station unit for generating a main storage operand address 5.
An entry is created in a commit stack entry (CSE: Commit Stack Entry) 9 for controlling completion of an instruction, for all the decoded instructions.
If a decoded instruction is a load instruction when an entry is created in RSA5, the RSA5 instructs an operand address generator 10 to generate an operand address, reads the corresponding data from the primary data cache 11 to a fixed point update buffer (GUB: General Update Buffer) 13 and a floating point update buffer (FUB: Floating Update Buffer) 16.
If the decoded instruction created an entry in RSE6 and RSF7, each computing unit 12 and 15 is operated so as to execute corresponding computing processing. In the case when the decoded instruction creates an entry in RSA5, RSE6 and RSF7, an out-of-order execution can be enabled by renaming registers corresponding to GUB13 and FUB16, and the execution result is stored in GUB13 and FUB16.
Instructions executed based on an out-of-order by the reservation stations 5, 6 and 7 are completed according to the sequence of the program by the control of CSE9. Programmable resources, such as a fixed point register 14 and floating point register 17 and program counters (PC, NEXT_PC) 18 and 19, are updated only for the completed instructions.
The branching forecasting mechanism 21 forecasts branching by an instruction from the reservation station for branching instruction 8, so as to control the instruction fetch address generator 1.
As mentioned later, the reservation station units 5, 6, 7 and 8 selects a thread for each computing cycle, instructs an execution of the selected thread to the operand address generators 10 and computing units 12 and 15, and reads and writes operand data of the thread selected from and to the registers 14 and 17, whereby the simultaneous multi-thread processing is executed.
(Instruction Execution Control Device)
In
The entries in the reservation station units 5, 6 and 7 are used to share the threads 0 and 1. In other words, an entry stores: a VALID signal to indicate that the entry is valid, a thread ID to indicate a thread of the entry, a signal to indicate to read the operand data from the architecture register and the read address, a signal to indicate to read from the register update buffer and the read address, and an instruction identifier to indicate a number of an instruction to be allocated to each instruction when the instruction is decoded, for example.
As described in detail in
In the hang prevention mode, the executability selection circuit 52, 62 or 72 compares the entries of the entry circuit 50, 60 or 70, and the reservation station 54, 64 or 74 with the thread ID of the thread selection circuit 30, and selects an executable entry.
The execution entry selection circuit 56, 66 or 76 selects an executable entry from the entries of the reservation station 54, 64 or 74, and issues it to the function execution unit 10, 12 or 15.
These operations will now be described. When a plurality of threads operates in the simultaneous multi-thread system, the reservation station 54, 64 or 74 can use out-of-order execution. In other words, the entries of the reservation station 54, 64 or 74 can execute from the entry of which operand data required for execution has become ready.
The entry selected by the execution entry selection circuit 46, 56 or 66 for selecting an entry to be executed is executed from the reservation station 54, 64 or 74. If a plurality of entries is ready for execution simultaneously, the execution entry selection circuit 46, 56 or 66 selects and executes an entry in the decoded sequence.
For the entry executed from the reservation station for floating point 74, a function is executed by pipeline processing. The function execution completes, and the function execution result is stored in the result register. Completion of the execution of the function is reported to the function CSE9, which controls completion of instructions.
The instruction completion control function CSE9 performs control of a complete of the instruction according to the sequence of the program. When function execution completes, the instruction can be completed, but since the completion control of the instruction are executed according to the sequence of the program, the subsequent instruction cannot be completed even if the execution thereof is completed, unless the oldest instruction is completed. The instructions are completed in each thread independently, so the instruction can be completed without being interrupted by other threads.
As described in
Now the operation in the configuration in
In the normal running time depicted in
In the hang prevention mode, however, only the thread number selected by the thread selection circuit 30, which operates during the hang prevention mode, can be an executable thread number. In other words, as
When the thread selection circuit 30 is notified from CSE9 that the instruction which could not be completed for a predetermined time completed, the thread selection circuit 30 returns the mode to the normal running mode as depicted in
In this way, while the reservation stations execute the executable entries, regardless the thread in the normal running mode, only a thread determined by each reservation station is allowed to execute in the hang prevention mode.
In other words, when an entry of one thread cannot be executed and subsequent entries of another thread are sequentially executed, execution of this other thread, where entries are sequentially executed, is stopped, whereby the entry of the one thread which cannot be executed can be set to the executable state. When a hang state occurs by a cause other than the reservation station as well, the reservation stations are controlled so that only a predetermined thread can be executed.
If this control is performed, however, execution of the entry in a thread which is not in the hang state is stopped, therefore control is performed so that performance does not drop considerably even if the hang state occurs, and then the thread in the hang state is executed.
(Hang Prevention Mechanism)
The instruction execution control device in
The configuration of the thread selection circuit 30 will be described with reference to
The hang prevention mode start circuit 42 starts the thread switching time selection circuit 34, thread decision circuit 38 and executability selection circuits 52, 62 and 72 according to a detection signal when an instruction, which has not completed for a predetermined time, was detected in CSE9 in
The thread switching time selection circuit 34 has a thread switching time to indicate time to select a same thread continuously, and instructs the thread decision circuit 38 to switch the thread when the thread switching time arrives. The thread switching time can be changed when a counter value reaches a certain value by the timer counter 32, which increments 1 every 1 cycle.
The thread decision circuit 38 selects a thread ID of the thread ID generation circuit 36 using the thread switching time and the counter value of the timer counter.
The thread ID generation circuit 36 outputs a thread ID, which is different from the thread ID of the hang prevention thread ID register 40, to the thread decision circuit 38. The thread selected by this thread decision circuit 38 becomes the hang prevention thread ID, and is sent to the executability selection circuit 52, 62 and 72, so as to select an entry which can be executed from the reservation station 54, 64 or 74.
Therefore by selecting the thread switching time using the thread switching time selection circuit 34, elapse time to select the same thread can be changed.
Now the executability selection circuit 52, 62 and 72 will be described with reference to
For the entry of which a thread matches, it is judged whether or not this entry is ready for execution, and if ready, this entry is determined as an entry having a possibility to be selected by the execution entry selection circuit 56, 66 or 76 in the next cycle (S24). Then a flag, for example, is assigned to this entry.
The entry of which a thread does not match with the selected thread, on the other hand, is determined as an entry having no possibility to be selected by the execution entry selection circuit in the next cycle (S26).
In a cycle where an instruction is decoded and is newly registered in an entry in the reservation station, it is judged whether or not a thread of an entry registered from the entry generation circuit 50, 60 or 70 matches with a thread selected by the thread selection circuit 30 (S20). If there is no match, processing advances to step S26.
For the entry of which thread matches, it is judged whether or not this entry is ready for execution, and if ready, this entry is decided as an entry having a possibility to be selected by the execution entry selection circuit 56, 66 or 76 in the next cycle (S24). Then a flag, for example, is assigned to this entry.
The entry of which thread does not match with the selected thread, on the other hand, is decided as an entry having no possibility to be selected by the execution entry selection circuit in the next cycle (S26).
A thread selection example by the thread selection circuit 30 will be described with reference to
After entering the hang prevention mode, the thread switching time initially becomes 1 cycle mode, and the thread selection circuit 30 selects a different thread at every one cycle.
If the hang prevention mode is still continuing when 100 cycles are counted by the timer counter, the thread switching time becomes 2 cycle mode, so the thread selection circuit 30 selects a different thread at every 2 cycles.
If the hang prevention mode is still continuing when 300 cycles are counted by the timer counter, the thread switching time becomes 4 cycle mode, so the thread selection circuit 30 selects a different thread at every 4 cycles.
If the hang prevention mode is still continuing when 600 cycles are counted by the timer counter, the thread switching time becomes 16 cycle mode, so the thread selection circuit selects a different thread at every 16 cycles.
In this way, for a thread to be selected by the thread selection circuit 30, a pattern of selecting a same thread continuously for a predetermined period of operation can be changed according to many different patterns.
If an instruction which has not completed is completed, the hang prevention mode returns to the normal running state. And the thread selection circuit 30 is also reset. And if the hang prevention mode starts again, selection of a thread is started with the first state (a different thread is selected at every one cycle).
This hang prevention mode is activated when 2 or more threads operate in a simultaneous multi-thread, and the instruction execution control device never enters the hang prevention mode when only one thread is operating, since there is no need to select a thread. If there is a thread which is not operating when the hang prevention mode is activated, it can be controlled so that the thread selection circuit does not select this thread which is not operating.
At time T1, the hang prevention mode is activated. Since the thread selection circuit 30 selected thread 0 at time T1, an entry of the thread 0 is executed at time T2. The thread selection circuit 30 selects the thread 1 at time T2, but this overlaps with the timing of storing the result of the precedent instruction in the result register, therefore the entry of the thread 1 cannot be executed at time T3.
At time T4, the entry of the thread 0 is executed since the thread selection circuit 30 selected the thread 0 at time T3. At time T5, the entry of the thread 1, which could not be executed thus far, can be executed since the thread selection circuit 30 selected the thread 1 at time T4. At time T6, the entry in the thread 0 is executed since the thread selection circuit 30 selected the thread 0 at time T5.
When the instruction of the entry in the thread 1 is competed thereafter, the control of the reservation station returns from the hang prevention mode to the normal running state.
In the above mentioned description, the reservation station for floating point was used as an example. The reservation station for fixed point, however, has the entry execution restrictions depicted in
If the entry to be executed from the reservation station is an entry requiring 2 cycles for execution (precedent instruction), and the subsequent instruction is also an entry requiring 2 cycles for execution, then the precedent instruction is executed from the reservation station at T1 as depicted in
Therefore, just like the entry execution control of the reservation station for floating point in
In this way, when a plurality of threads are operating in a simultaneous multi-thread system, an entry which cannot be executed from the reservation station, depending on the timing of storing the function execution result in the result register or timing of executing the function, can be executed in the hang prevention mode by selecting a thread of the entry to be executed from the reservation station, whereby the hang state can be prevented.
An advantage of changing the switching cycle will now be described.
As
At time T3, the entry which has all the operand data required for execution and is ready for execution cannot be executed, since this overlaps with the execution of the precedent instruction. At this time, the thread selection circuit selects the thread 0 for the 1 cycle mode. At time T4, the thread 0 is executed, and the thread selection circuit 30 selects the thread 1, but the thread 1 cannot be executed at time T5.
At this time, the 1 cycle mode is changed to 2 cycle mode because of the thread switching time. At time T7, the thread selection circuit 30 selects the thread 1, and the thread 1 can be executed at time T8.
In
In this way, when the hang prevention mode is activated because of a cause other than the reservation station, and function execution blocks processing of a subsequent instruction, it is preferable to set a time longer than the longest time required for function execution as a time to select a same thread continuously, which is a thread selection method in hang prevention mode.
For this, the thread selection circuit can change the thread to be selected depending on the elapsed time, and switches the thread based on the time of continuously selecting a same thread.
The time to continuously select a same thread can also be changed depending on the elapsed time.
Since only an entry of a thread selected by the thread selection circuit can be executed, a drop in performance when normal running time is expected, and since the performance drops more as the time to continuously select a same thread by the thread selection circuit becomes longer, a major drop in performance can be delayed by increasing the time to select a same thread in stages.
(Thread Selection Circuit)
The above mentioned thread selection circuit 30 to select a thread will now be described. This thread selection circuit 30 is constructed by logical circuits.
In
The +HUNG_THREAD_ID—1T_MODE signal is a signal to indicate that the selected thread is changed at every 1 cycle, and indicates a thread selected by the +NEXT—1T_MODE_THREAD_ID signal. This signal to indicate a selected thread is acquired in the circuit depicted in
This combination of signals is provided for 1 cycle, 2 cycles, 4 cycles and 16 cycles, and a thread selected from 4 AND gates 384-1 to 384-4 is input to the AND gate 380 via the OR gate 382, and becomes a hang prevention thread ID in the next cycle.
The thread ID generation circuit in
The circuits 362, 364 and 366 in the 2 cycle mode invert the polarity of +HUNG_MODE_THREAD_ID, which indicates the hang prevention thread ID, using the AND gate 366, if +2T_MODE_THREAD_ID_CHANGE, which indicates that 2 cycles have elapsed since the change of the thread, became ON. If +2T_MODE THREAD_ID CHANGE is OFF, the circuits 362, 364 and 366 output +HUNG_MODE_THREAD_ID to indicate the hang prevention thread ID from the AND gate 364.
The OR gate 362 outputs a signal to change the thread if +2T_MODE_THREAD_ID_CHANGE is ON, and a signal not to change the thread if +2T_MODE_THREAD_ID_CHANGE is OFF.
For 4 cycle mode and 16 cycle mode as well, if +4 T_MODE_THREAD_ID_CHANGE, to indicate that 4 cycles have elapsed, or if +16 T_MODE_THREAD_ID_CHANGE, to indicate that 16 cycles have elapsed is ON by the combination of 2 AND gates 370 and 372 or 376 and 378, and OR gate 368 or 374 respectively, the thread is changed.
If switching time occurs during the 1 cycle mode, the +1T_MODE_TIMER_CHANGE signal turns ON to switch to the 2 cycle mode via the AND gate 356, OR gate 354 and AND gate 346.
The same circuit is used for mode change from the 2 cycle mode to the 4 cycle mode or from the 4 cycle mode to the 16 cycle mode. In other words, each of these circuits has AND gates 353 and 355, OR gate 351 and AND gate 348; or has AND gates 359 and 349, OR gate 357 and AND gate 350.
Since the thread switching time is valid only during hang prevention, as described above, AND with a signal to indicate that the signal, to indicate that the hang prevention mode is latched once, is determined. This signal becomes the thread switching signal, and the signal latched once to select a thread is related to
In the above embodiment, a simultaneous multi-thread system in which two threads (thread 0 and 1) operate simultaneously was described, but the present invention can also be applied to a system where three or more threads operate simultaneously.
The present invention was described using the embodiments, but the present invention can be modified in various ways within a scope of the spirit of the present invention, and these variant forms shall not be excluded from the scope of the present invention.
A state where an instruction is not completed for a predetermined period is detected during simultaneous multi-thread operation, and it is controlled so that all the reservation stations can execute only a predetermined thread, therefore if an entry that cannot be executed from the reservation station exists, execution of an entry in the thread that cannot be executed can be enabled by stopping the execution of the thread which has been continuously executed.
Number | Date | Country | |
---|---|---|---|
Parent | PCT/JP07/00653 | Jun 2007 | US |
Child | 12591994 | US |