WO2014064798A1 - 実行制御方法及び情報処理装置 - Google Patents

実行制御方法及び情報処理装置 Download PDF

Info

Publication number
WO2014064798A1
WO2014064798A1 PCT/JP2012/077599 JP2012077599W WO2014064798A1 WO 2014064798 A1 WO2014064798 A1 WO 2014064798A1 JP 2012077599 W JP2012077599 W JP 2012077599W WO 2014064798 A1 WO2014064798 A1 WO 2014064798A1
Authority
WO
WIPO (PCT)
Prior art keywords
code
true
loop
conditional branch
condition
Prior art date
Application number
PCT/JP2012/077599
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 JP2014543074A priority Critical patent/JP6179524B2/ja
Priority to EP12887026.8A priority patent/EP2913761A4/en
Priority to PCT/JP2012/077599 priority patent/WO2014064798A1/ja
Publication of WO2014064798A1 publication Critical patent/WO2014064798A1/ja
Priority to US14/695,344 priority patent/US9459852B2/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/45525Optimisation or modification within the same instruction set architecture, e.g. HP Dynamo
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Definitions

  • This technology relates to object code execution control technology.
  • a code as shown in FIG. 1B is normally generated. That is, if x (i)> 0 is TRUE, the portion of the instruction enclosed by “TRUE” is executed, and if x (i)> 0 is FALSE, jump from the branch instruction fble to the L0 line. Then, a code for executing an instruction in the case of FALSE is generated. On the other hand, when an instruction with a predicate is used, a code as shown in FIG. 1C is generated. As indicated by the dotted box in FIG.
  • the branch instruction is not included, the instruction for TRUE and the instruction for FALSE are always executed, and if x (i)> 0 is FALSE, A code is generated in which the predicate “store” instruction is canceled and the operation result for TRUE is discarded.
  • FIG. A code as schematically shown is generated. That is, the loop c that repeats the operation only for the code c for the loop that sets the index i when the condition for the IF statement is true to the list vector index (jjj) and the index i that is set for the list vector index Code d) is also generated. That is, the IF clause and the THEN clause are separated to speed up the THEN clause without a branch instruction.
  • the code c for generating the list vector is always executed regardless of the true rate.
  • the true rate is as high as 90%, for example.
  • the number of indexes included in the list vector increases, and the processing time for the list vector loop increases.
  • the true rate is low, for example, 10%, the number of indexes included in the list vector decreases, and the processing time for the list vector loop decreases.
  • the condition in the IF statement is TRUE, there is an instruction, but when there is no instruction in FALSE, the processing time is shortened as the true rate is low.
  • the conventional technology does not present a method for dealing with such a problem.
  • an object of the present technology is to provide a technology for efficiently performing an operation when a loop process including a conditional branch therein is executed a plurality of times.
  • the execution control method includes: (A) a first loop for a loop that includes a conditional branch inside and is included in an object code generated from source code including a predesignated loop and the conditional branch is coded as it is.
  • the second code for executing the branch destination calculation when the condition is true only for the extracted loop index after extracting the loop index included in the code of 1 or the object code and in which the condition by the conditional branch is true (2) Based on the acquired feature quantity, the second code and the object code are obtained.
  • the calculation can be efficiently executed when the loop processing including the conditional branch inside is repeated.
  • FIG. 1A is a diagram illustrating an example of source code.
  • FIG. 1B is a diagram illustrating an example of a normal processing code.
  • FIG. 1C is a diagram illustrating an example of code using an instruction with a predicate.
  • FIG. 2 is a diagram for explaining the true rate and execution efficiency.
  • FIG. 3A is a diagram for explaining the true rate and execution efficiency.
  • FIG. 3B is a diagram for explaining the true rate and execution efficiency.
  • FIG. 3C is a diagram for explaining the true rate and execution efficiency.
  • FIG. 4A is a diagram illustrating an example of source code.
  • FIG. 4B is a diagram schematically illustrating a code for generating a list vector.
  • FIG. 5A is a diagram for explaining the true rate and the processing time.
  • FIG. 5A is a diagram for explaining the true rate and the processing time.
  • FIG. 5B is a diagram for explaining the true rate and the processing time.
  • FIG. 5C is a diagram for explaining the true rate and the processing time.
  • FIG. 6 is a diagram for describing preprocessing according to the embodiment.
  • FIG. 7 is a diagram showing an outline of execution control according to the present embodiment.
  • FIG. 8 is a diagram illustrating a configuration of a computer according to the present embodiment.
  • FIG. 9 is a diagram showing a processing flow in the present embodiment.
  • FIG. 10 is a diagram illustrating a process flow of the execution control process.
  • FIG. 11 is a diagram illustrating a processing flow of the true rate investigation processing.
  • FIG. 12 is a diagram illustrating an example of the result of true rate investigation.
  • FIG. 13 is a diagram illustrating a process flow of the code determination process.
  • FIG. 14 is a diagram illustrating a process flow of the execution control process.
  • FIG. 15 is a diagram illustrating an example of an object code according to a modification.
  • FIG. 16 is a diagram illustrating a modification of the processing flow of the execution control process.
  • FIG. 17 is a diagram for explaining the processing time of the modification.
  • FIG. 18 is a diagram illustrating an example of source code including two IF statements in a loop.
  • FIG. 19 is a diagram illustrating an example of loop division.
  • 20A to 20D are diagrams for explaining the processing time and the like when the loop is divided.
  • FIG. 21 is a functional block diagram of a computer.
  • the user who uses the runtime module according to the present embodiment uses “!” As a directive to the compiler 200 in the source code 100 immediately before the loop that includes the IF statement and is to be accelerated. Insert an “ocl select-if” statement.
  • an example will be described in which an operation is performed when the IF statement condition is true, but an operation is not performed when the IF statement condition is false.
  • the compiler 200 When the source code 100 in which such a directive is inserted is input, the compiler 200 according to the present embodiment compiles a portion in which the directive is not inserted as usual. On the other hand, the compiler 200 generates the following code for the portion in which the directive is inserted. That is, (A) code A that performs conditional branching as usual, (B) code B that uses an instruction with a predicate, (C) code C that generates a list vector, (D) and immediately before these, An instruction “setenv (loop ID)” that sets a runtime environment variable including a loop identifier (that is, loop ID), the number of iterations in the loop, and the number of times of execution of the loop, for the runtime module described in FIG. ) An instruction “getenv (loop ID, code type)” for receiving the setting of the loop ID and the code type from the runtime module is generated.
  • A code A that performs conditional branching as usual
  • code B that uses an instruction with a predicate
  • the code A is a code as shown in FIG. 1B, and is a code for a loop in which the conditional branch is coded as it is.
  • the code B is a code as shown in FIG. 1C, and is a code for a loop in which any operation result of a branch destination operation by a conditional branch is written in a memory using an instruction with a predicate. More specifically, it is a code for a loop that uses an instruction with a predicate to write an operation result of a branch destination operation to a memory only when the condition of the conditional branch is true.
  • the code C is a code as shown in FIG. 4B, and the conditional branch condition is true only for the loop index extracted after extracting the loop index for which the conditional branch condition is true as a list vector. This is a code for executing a branch destination operation in FIG.
  • Such generation of the object code 300 may be performed by the same computer as the computer that executes the object code 300 or may be performed by a different computer.
  • the runtime module executes the loop five times, for example, initially with code A, while the condition in the IF statement inside the loop is true, that is, Investigate the true rate.
  • the runtime module is one of code B and code C after the end of the true ratio survey section. Set to execute.
  • the code B is effective when the true rate is high, the code B is set to be executed when the true rate feature amount exceeds the threshold. If the feature amount of the rate is equal to or less than the threshold value, the code C is set to be executed.
  • the code C is executed as it is to acquire the true rate feature quantity.
  • the code B has been executed so far, the code A is executed in the true rate investigation section to acquire the true rate feature quantity.
  • the runtime module sets the code B to be executed when the true rate feature value exceeds the threshold value, and the true rate feature value is set to the threshold value. If so, the code C is set to be executed.
  • the hardware counter of the CPU is used.
  • Many types of CPUs perform the number of operations when the IF statement condition is true during the execution of the application program, the number of times the operation is executed when the IF statement condition is false, the number of loop executions, A hardware counter capable of counting the number of repetitions is provided.
  • the runtime module reduces the cost of acquiring data for calculating the true rate by reading the counter value held in such a hardware counter.
  • the computer 1000 includes a CPU (Central Processing Unit) 1100, a memory 1200, and a data storage unit 1300 such as a hard disk drive.
  • a CPU Central Processing Unit
  • the computer 1000 includes a CPU (Central Processing Unit) 1100, a memory 1200, and a data storage unit 1300 such as a hard disk drive.
  • a data storage unit 1300 such as a hard disk drive.
  • the data storage unit 1300 stores files of the object code 300 and the runtime module 400, and these are loaded into the memory 1200 according to instructions from the user.
  • the image of the object code 300 in the memory 1200 is represented as an object code 1220
  • the image of the runtime module 400 in the memory 1200 is represented as a runtime module 1210.
  • a loop specifying unit 1211, a true rate calculating unit 1212, and a code determining unit 1213 are realized.
  • the runtime module 1210 also has a setting data storage unit 1214 that stores setting data by the user.
  • the setting data storage unit 1214 stores a threshold value for the true rate feature value, the number of loop executions in the true rate survey interval, the number of loop executions corresponding to the interval of the true rate survey interval, and an index used as the true rate feature value (for example, average Value, minimum value, etc.).
  • the object code 1220 includes code A, code B, and code C for the loop designated by the user.
  • the CPU 1100 has a plurality of hardware counters, and counts the number of times the code is executed when the IF statement condition is true, and the number of times the loop is executed. It has a counter 2 and a counter 3 that counts the number of repetitions in the loop.
  • step S3 processing when the object code 300 is executed.
  • the loop identification unit 1211 waits until a loop that is a target of true rate investigation is detected (step S11).
  • the loop specifying unit 1211 of the runtime module 1210 recognizes that a portion where code dynamic switching should be performed is executed in response to the setenv instruction, Get an execution environment variable that includes the number of iterations and the number of loop executions.
  • the loop specifying unit 1211 initializes both the loop execution count counter and the true rate check counter to 0 (step S13).
  • the code determination unit 1213 executes code A, that is, the code for normal processing. Setting is performed (step S15).
  • the execution instruction of the code A is specified by the getenv instruction, and the execution of the code A is started.
  • the true rate calculation unit 1212 determines whether or not the true rate investigation section has ended based on the value of the true rate check counter (step S17). For example, in the example of FIG. 7, the loop execution count corresponding to the true rate investigation section is “5”, and therefore it is determined whether or not the counter value of the true rate check counter is “5” or more. If the true rate investigation section has not ended, the true rate calculation unit 1212 executes a true rate investigation process (step S19). The true rate investigation process will be described with reference to FIGS. 11 and 12.
  • the true rate calculation unit 1212 includes a counter 1 of the CPU 1100 (a counter that is counted up when the IF statement condition is true), a counter 2 (a counter for the number of loop executions), and a counter 3 (a counter for the number of loop iterations). ) And is stored in the memory 1200 (step S41). In order to acquire the current value of the counter 1, it is acquired before executing the loop. If the number of loop iterations is N, after the counter 3 has increased by N or the counter 2 has increased by 1 (step S43), the true rate calculation unit 1212 acquires the count value of the counter 1 of the CPU 1100, and the memory It is stored in 1200 (step S45).
  • the true rate calculation unit 1212 calculates the true rate of the current loop based on (count value of counter 1 acquired in step S45 ⁇ count value of counter 1 acquired in step S41) / N, and stores it in the memory 1200. (Step S47). Then, the true rate calculation unit 1212 increments the true rate check counter by 1 (step S49). Thereafter, the process returns to the caller process.
  • step S17 the processing returns to step S17 after step S19.
  • data as shown in FIG. 12 is obtained in the memory 1200, for example.
  • the true rate is obtained five times. Note that data of the number of times that the condition is true may be held.
  • step S17 When it is determined in step S17 that the true rate investigation section has ended, the true rate calculation unit 1212 initializes a true rate check counter to 0 (step S21). Then, the code determination unit 1213 executes code determination processing based on the true rate investigation result (step S23). The code determination process will be described with reference to FIG.
  • the code determination unit 1213 calculates the true feature amount (FIG. 13: step S51).
  • the true feature amount is a feature amount of a type set in the setting data storage unit 1214, and is, for example, an average value or a minimum value.
  • the average value is calculated by (r 1 + r 2 + r 3 + r 4 + r 5 ) / 5, and if it is the minimum value, the smallest value among r 1 to r 5 is specified. .
  • the reason why the minimum value is adopted is that it is less risky to execute the code C for generating the list vector. That is, if the code B that uses an instruction with a predicate is selected and the true rate is low, the penalty for processing time is large.
  • the code determination unit 1213 determines whether or not the true rate feature amount exceeds the threshold value stored in the setting data storage unit 1214 (step S53).
  • the setting is made to execute the code B, that is, the code using the predicated instruction (step S57).
  • the object code 1220 side starts executing the code B according to the setting. The process then returns to the caller process.
  • the code determination unit 1213 performs setting so as to execute the code C, that is, the code for generating the list vector (step S55).
  • the object code 1220 side starts executing the code C according to the setting. Then, the process returns to the process of the caller process.
  • the processing time can be shortened and the processing speed can be increased.
  • step S25 Yes route
  • the processing shifts to the processing of FIG.
  • step S27 the true rate calculation unit 1212 determines whether it is the true rate investigation timing (step S27). This determines whether the count value of the counter of the number of executions is equal to or greater than the interval (for example, 15) of the true rate investigation section stored in the setting data storage unit 1214.
  • step S27 No route
  • the true rate calculation unit 1212 increments the count value of the counter of the number of executions by 1 (step S33). Then, the process returns to step S27.
  • step S27 Yes route
  • the true rate calculation unit 1212 counts the counter of the number of execution times. The value is initialized to 0 (step S29), and the process returns to step S17. Thus, the true rate calculation is performed again.
  • the true rate calculation unit 1212 determines whether it is the true rate investigation timing (step S61). This determines whether the count value of the counter of the number of executions is equal to or greater than the interval (for example, 15) of the true rate investigation section stored in the setting data storage unit 1214.
  • step S61 When it is not the true rate investigation timing (step S61: No route), if the number of loop iterations is N, after the counter 3 has increased by N or the counter 2 has increased by 1 (step S63), the true rate calculation unit In step 1212, the count value of the execution counter is incremented by 1 (step S65). Then, the process returns to step S61.
  • step S61 Yes route
  • the true rate calculation unit 1212 counts the counter of the number of execution times. The value is initialized to 0 (step S67), and the process returns to step S15 in FIG.
  • FIG. 6 an example of processing for generating code A for processing a conditional branch as it is, code B for using a predicate instruction, and code C for generating a list vector is shown in FIG.
  • the object code 300b including only the code B and the code C may be generated without generating the code A.
  • the code C may be executed for the part that executes the code A in the execution control process. Since the true rate can be calculated by executing the code C, the code B and the code C can be dynamically switched according to the true rate.
  • a change point changes step S15 in the processing flow of FIG. 10 as follows. That is, the code determination unit 1213 performs setting so as to execute the code C for generating the list vector (FIG. 16: step S15b).
  • the processing time per DO loop is Tm
  • the total number of executions of the DO loop is a
  • the number of executions of the DO loop when the true rate is True is b
  • the processing time for generating a list is ⁇
  • the true rates Truex and True are assumed to be real numbers from 0 to 1.
  • aTm> (2) is expressed as follows. aTm> ((1-True) b + Trueya) Tm + (ab) ⁇ aTm ⁇ ((1-True) b + Trueya) Tm> (ab) ⁇ (1-True) aTm- (1-True) bTm> (ab) ⁇ (1-True) (ab) Tm> (ab) ⁇ (1-True) Tm> ⁇ (3)
  • the loop is divided as shown in FIG. That is, in the example of FIG. 19, it is divided into a loop X for the IF block x and a loop Y for the IF block y.
  • different codes can be executed in the loop X and the loop Y. For example, the code B is executed because the true rate is high for the loop X, and the code C is executed because the true rate is low for the loop Y.
  • the code B and code C can be dynamically switched according to the processing flow described above to efficiently execute the arithmetic processing. become able to.
  • FIG. 20 (a) when the loop X and the loop Y are executed with the code B, the loop Y becomes very inefficient execution and the processing time becomes long.
  • FIG. 20B when the loop X and the loop Y are executed with the code C, the processing time of the list vector loop for the loop X becomes long, so the processing time cannot be shortened much.
  • FIG. 20C if the loop X having a high true rate of 90%, for example, is executed by the code B, and the loop Y having a low true rate of, for example, 10%, is executed by the code C, the processing The time is shortened as a whole, and efficient arithmetic processing is performed.
  • the processing flow is an example, and as long as the processing result does not change, the processing order may be changed or the processing may be executed in parallel.
  • the functional block configuration of the runtime module 400 is an example, and may be different from the program module configuration.
  • the average value or the minimum value of the true rate is adopted.
  • a threshold is set for the true rate itself. Also good.
  • the true number of conditions, the average value of the true number of conditions, and the minimum value of the true number of conditions can be adopted as the feature quantity, not the true rate. good.
  • the true rate survey section is periodically provided. For example, while the true rate is decreasing, the interval of the true rate survey section is shortened so that the transition to the execution of the code C is performed early. Is also possible.
  • the computer 1000 in FIG. 8 shows only the part according to the present embodiment, but as a whole, for example, as shown in FIG. 21, a memory 2501, a CPU 2503, and a hard disk drive (HDD) 2505 are displayed.
  • a display control unit 2507 connected to the device 2509, a drive device 2513 for the removable disk 2511, an input device 2515, and a communication control unit 2517 for connecting to a network are connected by a bus 2519.
  • An operating system (OS: Operating System) and a program for executing processing in the present embodiment are stored in the HDD 2505, and are read from the HDD 2505 to the memory 2501 when executed by the CPU 2503.
  • OS Operating System
  • the CPU 2503 controls the display control unit 2507, the communication control unit 2517, and the drive device 2513 according to the processing contents of the program to perform a predetermined operation. Further, data in the middle of processing is mainly stored in the memory 2501, but may be stored in the HDD 2505.
  • an application program for performing the above-described processing is stored in a computer-readable removable disk 2511 and distributed, and installed from the drive device 2513 to the HDD 2505.
  • the HDD 2505 may be installed via a network such as the Internet and the communication control unit 2517.
  • Such a computer realizes various functions as described above by organically cooperating hardware such as the CPU 2503 and memory 2501 described above and programs such as the OS and application programs.
  • a branch destination calculation in the case where the condition is true only for the extracted loop index after extracting the loop index included in the first code or the object code and in which the condition by the conditional branch is true.
  • a process for acquiring a feature amount regarding the number of times the condition by the conditional branch becomes true a second code and an object based on the acquired feature amount To write the result of one of the branch destination operations by conditional branching to the memory using a predicate instruction that is included in the code And a process to be executed either in the processor of the third code.
  • the above-described feature amount may be the number of times, the ratio of the number of times, the average value of the number of times, the average value of the number of times of the number, the minimum value of the number of times, or the minimum value of the ratio of the number of times. is there.
  • processing to be acquired described above may be executed regularly or irregularly during the execution of the object code.
  • data regarding the number of times described above may be acquired from the counter of the processor. If counting is performed by the hardware counter, the cost of processing for execution control can be reduced.
  • a program for causing the processor to perform the process according to the execution control method can be created.
  • the program can be stored in a computer-readable storage such as a flexible disk, a CD-ROM, a magneto-optical disk, a semiconductor memory, or a hard disk. Stored in a medium or storage device.
  • the intermediate processing result is temporarily stored in a storage device such as a main memory.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

 本技術によれば、内部に条件分岐を含み且つ予め指定されたループを含むソースコードから生成されたオブジェクトコードに含まれ且つ条件分岐がそのままコード化されたループについての第1のコード、又はオブジェクトコードに含まれ且つ条件分岐による条件が真となるループインデックスを抽出した上で抽出されたループインデックスのみについて前記条件が真となる場合における分岐先演算を実行するための第2のコードを実行している間において、条件分岐による条件が真となった回数についての特徴量を取得する。そして、取得された特徴量に基づき、第2のコードと、オブジェクトコードに含まれ且つ述語付き命令を用いて条件分岐による分岐先演算のいずれかの演算結果をメモリに書き込むための第3のコードとのうちいずれかをプロセッサに実行させる。

Description

実行制御方法及び情報処理装置
 本技術は、オブジェクトコードの実行制御技術に関する。
 スーパーコンピュータの進歩と共に、その上で動作するアプリケーションプログラムも複雑化してきている。例えば、空間軸や時間軸に沿って単一の処理内容を繰り返し行う処理(例えば単純なDOループ処理)が主流であったが、個々の空間によって処理内容を変えたり、時間進展と共に処理内容を変えたりするようになった。すなわち、繰り返し処理において様々な条件(プログラムコードではIF文に相当)に対応する処理を含むアプリケーションプログラムが開発され、より現実的なシミュレーションをコンピュータ上で実行するようになってきている。そして、このような複雑に動作するアプリケーションプログラムを、高性能なコンピュータ上でいかに高速に動作させるかが1つの課題となっている。
 DOループ中にIF文が含まれるコードをコンパイラ最適化によって高速化する方法として、述語付き命令(predicated instruction)を用いた高速化手法や、リストベクトルを生成して高速化する手法が存在する。
 例えば図1Aに示すようなIF文を含むDOループの場合、通常であれば図1Bに示すようなコードが生成される。すなわち、x(i)>0がTRUEであれば、「TRUE」で囲った部分の命令の実行が行われ、x(i)>0がFALSEであれば、分岐命令fbleからL0のラインにジャンプしてFALSEの場合の命令を実行するようなコードが生成される。一方、述語付き命令を用いる場合には、図1Cに示すようなコードが生成される。図1Cにおいて点線の四角で示すように、分岐命令は含まれておらず、常にTRUEの場合の命令及びFALSEの場合の命令が実行され、x(i)>0がFALSEであればTRUEについての述語付き「store」命令はキャンセルされ且つTRUEについての演算結果は破棄されるようなコードが生成される。
 従って、例えばDOループ内のIF文についてFALSEの時に何もしないというコードの場合、図2に示すように、IF文の条件が常に真と判断される場合、すなわち真率(=TRUEについての命令実行回数/DOループの実行回数)が100%であれば、実行する命令の全てが有効となる。一方、例えば真率が100%ではないが90%と高い場合には、実行する命令のうち有効な命令aは多いが、一部冗長な命令も出てくる。そして、真率が10%と低くなると、有効な命令が少なくなって、冗長な命令bが多くなってしまう。すなわち、真率が高くないと多くの演算結果が破棄されるので高命令実行効率の効果が得られない。
 この手法によれば、図3Aに示すようにDOループを何度も実行する場合に、真率が高いままでおおよそ一定であれば、全体としても有効な命令の数が多くなって、高速化の効果が得られる。一方、図3Bに示すように、真率が低いままでおおよそ一定であれば、全体としても冗長な命令数が多くなって、高命令実行効率の効果が全く得られない。このように真率がおおよそ一定であれば、真率が高い場合には述語付き命令を用いる手法を用いることが有効であるが、図3Cに示すように、DOループを繰り返して実行するうちに、途中で真率が大幅に変化するといった状況が発生すると、途中から大幅に命令の実行効率が低下するという問題がある。なお、述語付き命令を用いる場合には、図3A乃至図3Cに模式的に示すように、処理時間自体は真率に拘わらず一定であり、演算実行効率が変化することになる。
 また、図4Aに示すようなIF文を含むDOループであってTRUEの場合には命令が存在するがFALSEの場合に命令が存在しない場合、リストベクトルを生成する手法によれば、図4Bに模式的に示すようなコードが生成される。すなわち、IF文についての条件が真となるときのインデックスiをリストベクトルindex(jjj)に設定するループについてのコードcと、リストベクトルindexに設定されているインデックスiについてのみ演算を繰り返すループ(リストベクトルループとも呼ぶ)についてのコードdとが生成される。すなわち、IF節とTHEN節を分離して、分岐命令のないTHEN節を高速化するものである。
 このようなリストベクトルを生成する手法においては、リストベクトルを生成するコードcの実行は真率に拘わらず常に行われるが、図5Aに模式的に示すように、例えば90%と真率が高ければリストベクトルに含まれるインデックスの数が多くなり、リストベクトルループのための処理時間が長くなる。一方、図5Bに模式的に示すように、例えば10%と真率が低ければリストベクトルに含まれるインデックスの数は少なくなり、リストベクトルループのための処理時間が短くなる。このように、IF文における条件がTRUEの場合には命令が存在するがFALSEの場合に命令が存在しない場合、真率が低いほど処理時間が短くなる。このように真率が低い状態で一定であれば、真率が低い場合にはリストベクトルを生成する手法を採用することが効率的であるが、図5Cに示すように、初めは真率が低くて効率的な実行が行われていたとしても、途中で真率が高くなるように状況が変化すると、全体として効率的に実行できるわけではない。
 従来技術は、このような問題に対処するような手法を提示していない。
特開昭59-165147号公報
 従って、本技術の目的は、一側面によれば、内部に条件分岐を含むループ処理を複数回実行する場合に効率的に演算実行するための技術を提供することである。
 本技術に係る実行制御方法は、(A)内部に条件分岐を含み且つ予め指定されたループを含むソースコードから生成されたオブジェクトコードに含まれ且つ条件分岐がそのままコード化されたループについての第1のコード、又はオブジェクトコードに含まれ且つ条件分岐による条件が真となるループインデックスを抽出した上で抽出されたループインデックスのみについて条件が真となる場合における分岐先演算を実行するための第2のコードを実行している間において、条件分岐による条件が真となった回数についての特徴量を取得する処理と、(B)取得された特徴量に基づき、第2のコードと、オブジェクトコードに含まれ且つ述語付き命令を用いて条件分岐による分岐先演算のいずれかの演算結果をメモリに書き込むための第3のコードとのうちいずれかをプロセッサに実行させる処理とを含む。
 一側面によれば、内部に条件分岐を含むループ処理を繰り返す場合に効率的に演算実行できるようになる。
図1Aは、ソースコードの一例を示す図である。 図1Bは、通常処理のコードの一例を示す図である。 図1Cは、述語付き命令を用いたコードの一例を示す図である。 図2は、真率と実行効率を説明するための図である。 図3Aは、真率と実行効率を説明するための図である。 図3Bは、真率と実行効率を説明するための図である。 図3Cは、真率と実行効率を説明するための図である。 図4Aは、ソースコードの一例を示す図である。 図4Bは、リストベクトルを生成するコードを模式的に示す図である。 図5Aは、真率と処理時間を説明するための図である。 図5Bは、真率と処理時間を説明するための図である。 図5Cは、真率と処理時間を説明するための図である。 図6は、実施の形態の前処理について説明するための図である。 図7は、本実施の形態に係る実行制御の概要を示す図である。 図8は、本実施の形態に係るコンピュータの構成を示す図である。 図9は、本実施の形態における処理フローを示す図である。 図10は、実行制御処理の処理フローを示す図である。 図11は、真率調査処理の処理フローを示す図である。 図12は、真率調査結果の一例を示す図である。 図13は、コード決定処理の処理フローを示す図である。 図14は、実行制御処理の処理フローを示す図である。 図15は、変形例に係るオブジェクトコードの一例を示す図である。 図16は、実行制御処理の処理フローの変形例を示す図である。 図17は、変形例の処理時間について説明するための図である。 図18は、ループに2つのIF文を含むソースコードの一例を示す図である。 図19は、ループ分割の一例を示す図である。 図20(a)乃至(d)は、ループ分割した場合の処理時間等を説明するための図である。 図21は、コンピュータの機能ブロック図である。
 図6を用いて、本技術の実施の形態における前処理の概要を説明する。図6に示すように、本実施の形態に係るランタイムモジュールを利用するユーザは、ソースコード100において、IF文を含み且つ高速化を図るべきループの直前に、コンパイラ200への指示文として「!ocl select-if」文を挿入しておく。本実施の形態では、IF文の条件が真の場合には演算を行うが、IF文の条件が偽の場合には演算を行わないような場合を例に説明する。
 本実施の形態に係るコンパイラ200は、このような指示文が挿入されたソースコード100が入力されると、指示文が挿入されていない部分については通常どおりコンパイルを行う。一方、指示文が挿入されている部分について、コンパイラ200は、以下のコードを生成する。すなわち、(A)通常どおり条件分岐を行うコードAと、(B)述語付き命令を用いたコードBと、(C)リストベクトルを生成するコードCと、(D)さらにこれらの直前に、以下で説明するランタイムモジュールに対して、ループの識別子(すなわちループID)とループ内における繰り返し回数とループの実行回数とを含む実行時環境変数をセットする命令「setenv(ループID)」と、(E)ランタイムモジュールからループID及びコード種別の設定を受け取る命令「getenv(ループID,コード種別)」とが生成される。
 コードAは、図1Bに示すようなコードであって、条件分岐がそのままコード化されたループについてのコードである。また、コードBは、図1Cに示すようなコードであって、述語付き命令を用いて条件分岐による分岐先演算のいずれかの演算結果をメモリに書き込むようにしたループについてのコードである。より具体的には、述語付き命令を用いて条件分岐の条件が真の場合にのみ真の場合における分岐先演算の演算結果をメモリに書き込むようにしたループについてのコードである。さらに、コードCは、図4Bに示すようなコードであって、条件分岐の条件が真となるループインデックスをリストベクトルとして抽出した上で抽出されたループインデックスのみについて条件分岐の条件が真の場合における分岐先演算を実行するためのコードである。
 このようなオブジェクトコード300の生成は、オブジェクトコード300を実行するコンピュータと同じコンピュータで行っても良いし、異なるコンピュータで行っても良い。
 次に、図7を用いて、このように生成したオブジェクトコード300の実行制御の概要を説明する。図7における横軸の刻みは、コードA乃至Cが生成されたループの実行回数を表している。図7の例では、ループそのものが何度も繰り返し実行されるため、ランタイムモジュールは、5回ループを例えば最初はコードAで実行する間にループ内部のIF文における条件が真である割合、すなわち真率を調査する。この真率調査区間において取得された真率の特徴量(真率の平均値、最小値など)に応じて、真率調査区間終了後、ランタイムモジュールは、コードBとコードCとのうちいずれかを実行するように設定する。背景技術の欄にも述べたようにコードBは真率が高い場合に有効であるから、真率の特徴量が閾値を超えている場合には、コードBを実行するように設定し、真率の特徴量が閾値以下であれば、コードCを実行するように設定する。
 その後、図7の例では、15回ループを、設定したコードで実行した後、再度真率調査区間となる。2回目以降の真率調査区間では、本実施の形態では、それまでにコードCを実行している場合にはそのままコードCを実行して真率の特徴量を取得する。一方、それまでにコードBを実行している場合には、真率調査区間ではコードAを実行して真率の特徴量を取得する。そして、真率調査区間終了後、ランタイムモジュールは、上で述べたように、真率の特徴量が閾値を超える場合には、コードBを実行するように設定し、真率の特徴量が閾値以下である場合には、コードCを実行するように設定する。
 以上のような処理を、指定されたDOループが実行されなくなるまで繰り返す。これによって、DOループの実行を繰り返しているうちに真率が変化した場合においても、非効率なコードを実行し続けることなく、効率的なコードに実行を動的に切り替えることができるようになる。
 なお、以下でも述べるが、真率を算出するためのデータを取得するのにコストが大きくかかるようでは高速化の効果を得ることができないので、CPUが有するハードウエアカウンタを活用する。多くの種類のCPUは、アプリケーションプログラムの実行中にIF文の条件が真の場合の演算を実行した回数やIF文の条件が偽の場合の演算を実行した回数、ループの実行回数、ループ内の繰り返し回数などをカウントすることが可能なハードウエアカウンタを備えている。ランタイムモジュールは、このようなハードウエアカウンタに保持されているカウンタ値を読み出すことで真率算出のためのデータを取得するコストを抑える。
 次に、図8を用いて、オブジェクトコード300を実行するコンピュータ1000について説明する。コンピュータ1000は、CPU(Central Processing Unit)1100と、メモリ1200と、ハードディスクドライブなどのデータ格納部1300とを有する。
 データ格納部1300は、オブジェクトコード300とランタイムモジュール400とのファイルを格納しており、これらはユーザからの指示に応じてメモリ1200にロードされる。メモリ1200におけるオブジェクトコード300のイメージについてはオブジェクトコード1220として表し、メモリ1200におけるランタイムモジュール400のイメージについてはランタイムモジュール1210として表すものとする。ランタイムモジュール1210がCPU1100により実行されると、ループ特定部1211と、真率計算部1212と、コード決定部1213とが実現される。また、ランタイムモジュール1210は、ユーザによる設定データを格納する設定データ格納部1214を有する。設定データ格納部1214は、真率の特徴量についての閾値、真率調査区間のループ実行回数、真率調査区間の間隔に相当するループ実行回数、真率の特徴量として使用する指標(例えば平均値、最低値など)などの設定データを格納する。オブジェクトコード1220は、ユーザにより指定されたループについてコードA、コードB及びコードCを含んでいる。
 また、CPU1100は、上で述べたように複数のハードウエアカウンタを有しており、IF文の条件が真の場合のコードを実行した回数をカウントするカウンタ1と、ループの実行回数をカウントするカウンタ2と、ループ内の繰り返し回数をカウントするカウンタ3とを有する。
 次に、オブジェクトコード300の実行時の処理について図9乃至図20を用いて説明する。まず、ユーザからの指示に応じて、オブジェクトコード300及びランタイムモジュール400をデータ格納部1300からメモリ1200にロードしてCPU1100による実行を開始する(ステップS1)。そして、ユーザが指定したループについてのコードを実行する段階になると、ランタイムモジュール1210は、実行制御処理を実行する(ステップS3)。実行制御処理については、図10乃至図14を用いて説明する。
 まず、ループ特定部1211は、真率調査対象のループが検出されるまで待機する(ステップS11)。図6に模式的に示したように、setenv命令に応じてランタイムモジュール1210のループ特定部1211は、コードの動的切替を実施すべき箇所を実行することを認識し、ループIDとループ内における繰り返し回数とループの実行回数とを含む実行環境変数を取得する。
 また、ループ特定部1211は、ループの実行回数のカウンタ及び真率チェックのカウンタを共に0に初期化する(ステップS13)。初めて検出したループIDの場合には、まだどのコードを実行するのが好ましいのかが不明であるから、コード決定部1213は、本実施の形態ではコードA、すなわち通常処理のコードを実行するように設定を行う(ステップS15)。オブジェクトコード1220側では、getenv命令で、コードAの実行指示を特定し、コードAの実行を開始する。
 そして、真率計算部1212は、真率チェックのカウンタの値に基づき、真率調査区間が終了したか判断する(ステップS17)。例えば、図7の例では、真率調査区間に相当するループ実行回数は「5」であるから、真率チェックのカウンタのカウンタ値が「5」以上となったか否かを判断する。真率調査区間が終了していない場合には、真率計算部1212は、真率調査処理を実行する(ステップS19)。真率調査処理については、図11及び図12を用いて説明する。
 真率計算部1212は、CPU1100のカウンタ1(IF文の条件が真の場合にカウントアップされるカウンタ)、カウンタ2(ループの実行回数についてのカウンタ)及びカウンタ3(ループの繰り返し回数についてのカウンタ)のカウント値を取得して、メモリ1200に格納する(ステップS41)。カウンタ1の現在値を取得するため、ループを実行する前に取得する。そして、ループの繰り返し回数がNであればカウンタ3がN増加した後又はカウンタ2が1増加した後(ステップS43)、真率計算部1212は、CPU1100のカウンタ1のカウント値を取得し、メモリ1200に格納する(ステップS45)。そして、真率計算部1212は、(ステップS45で取得したカウンタ1のカウント値-ステップS41で取得したカウンタ1のカウント値)/Nによって、今回のループの真率を算出し、メモリ1200に格納する(ステップS47)。そして、真率計算部1212は、真率チェックのカウンタを1インクリメントする(ステップS49)。その後、処理は呼び出し元の処理に戻る。
 図10の処理の説明に戻って、処理はステップS19の後にステップS17に戻る。このような真率調査処理を5回繰り返すと、メモリ1200には、例えば図12に示すようなデータが得られる。図12の例では、真率が5回分得られたことになる。なお、条件が真となった回数のデータを保持するようにしても良い。
 ステップS17で真率調査区間が終了したと判断された場合、真率計算部1212は、真率チェックのカウンタを0に初期化する(ステップS21)。そして、コード決定部1213は、真率の調査結果に基づきコード決定処理を実行する(ステップS23)。コード決定処理については、図13を用いて説明する。
 コード決定部1213は、真率の特徴量を算出する(図13:ステップS51)。真率の特徴量は、設定データ格納部1214に設定されている種別の特徴量であり、例えば平均値、最小値である。例えば、図12の例であれば、(r1+r2+r3+r4+r5)/5によって平均値を算出し、最小値であれば、r1乃至r5のうち最も小さい値を特定する。なお、最小値を採用するのは、リストベクトルを生成するコードCを実行する方がリスクが低いためである。すなわち、述語付き命令を用いるコードBを選択して真率が低くなってしまうと、処理時間についてのペナルティが大きいためである。
 そして、コード決定部1213は、真率の特徴量が、設定データ格納部1214に格納されている閾値を超えているか判断する(ステップS53)。真率の特徴量が、閾値を超えている場合には、コードB、すなわち述語付き命令を用いるコードを実行するように設定を行う(ステップS57)。オブジェクトコード1220側は、設定に応じてコードBを実行し始める。そして処理は呼び出し元の処理に戻る。
 このように真率が高ければ処理時間は変わらないが、演算結果が採用される可能性が高いので、効率的に実行できるようになる。
 一方、真率の特徴量が閾値以下であれば、コード決定部1213は、コードC、すなわちリストベクトルを生成するコードを実行するように設定を行う(ステップS55)。オブジェクトコード1220側は、設定に応じてコードCを実行し始める。そして処理は呼び出し元の処理の処理に戻る。
 このように真率が低ければ処理時間を短縮でき、処理の高速化が図られる。
 図10の説明に戻って、ステップS23の後に、述語付き命令を用いるコードBを実行中であれば(ステップS25:Yesルート)、処理は端子Aを介して図14の処理に移行する。一方、コードCを実行中であれば(ステップS25:Noルート)、真率計算部1212は、真率調査タイミングであるか判断する(ステップS27)。これは、実行回数のカウンタのカウント値が、設定データ格納部1214に格納されている真率調査区間の間隔(例えば15)以上となったかを判断する。
 真率調査タイミングではない場合には(ステップS27:Noルート)、ループの繰り返し回数がNであればカウンタ3がN増加した後又はカウンタ2が1増加した後(ステップS31)、真率計算部1212は、実行回数のカウンタのカウント値を1インクリメントする(ステップS33)。そして処理はステップS27に戻る。
 一方、ループの実行回数が、真率調査区間の間隔(例えば15)に達して、真率調査タイミングとなれば(ステップS27:Yesルート)、真率計算部1212は、実行回数のカウンタのカウント値を0に初期化し(ステップS29)、処理はステップS17に戻る。これによって、真率計算を再度行うようにする。
 次に図14の処理の説明に移行して、コードBを実行中であれば、真率計算部1212は、真率調査タイミングであるか判断する(ステップS61)。これは、実行回数のカウンタのカウント値が、設定データ格納部1214に格納されている真率調査区間の間隔(例えば15)以上となったかを判断する。
 真率調査タイミングではない場合には(ステップS61:Noルート)、ループの繰り返し回数がNであればカウンタ3がN増加した後又はカウンタ2が1増加した後(ステップS63)、真率計算部1212は、実行回数のカウンタのカウント値を1インクリメントする(ステップS65)。そして処理はステップS61に戻る。
 一方、ループの実行回数が、真率調査区間の間隔(例えば15)に達して、真率調査タイミングとなれば(ステップS61:Yesルート)、真率計算部1212は、実行回数のカウンタのカウント値を0に初期化し(ステップS67)、処理は図10のステップS15に戻る。
 コードBを実行中は、IF文が除去されているので、CPU1100におけるカウンタ1を用いた真率の算出ができない。従って、ステップS15に戻って、通常処理のコードAの実行を指示することで、真率を算出できるようにする。
 このような処理を、オブジェクトコード1220の実行が終了するまで繰り返すことで、真率の変動が生じていても、真率に応じたコードを実行することで、演算処理を効率化することができるようになる。
 上で述べた例では、条件分岐をそのまま処理するコードAと、述語付き命令を用いるコードBと、リストベクトルを生成するコードCとを生成する処理の例を示したが、図15に模式的に示すように、コードAを生成せずに、コードB及びコードCだけを含むオブジェクトコード300bを生成するようにしてもよい。
 すなわち、実行制御処理においてコードAを実行する部分についてはコードCを実行するようにしてもよい。コードCを実行すれば、真率を算出することができるので、真率に応じたコードBとコードCの動的な切替を実施できる。なお、変更点は、図10の処理フローにおけるステップS15を、以下のように変更する。すなわち、コード決定部1213が、リストベクトルを生成するコードCを実行するように設定する(図16:ステップS15b)。
 コードBとコードCを用いる場合、図17に模式的に示すように、真率が90%で高い状態から急に真率が10%で低い状態に変化すると、コードBの実行状態からコードCの実行状態に遷移するものとする。そうすると、処理時間は、コードCを実行するようになると急激に削減され、効率的な演算実行が行われるようになる。なお、コードBを実行している間のハッチングは有効な命令の実行の割合を模式的に示すものであり、コードCを実行している間のハッチングはリストベクトルループの処理時間を模式的に示すものである。
 なお、DOループ1回あたりの処理時間をTmとし、DOループの全実行回数をaとし、真率Truexの時のDOループの実行回数をbとし、1回あたりのリスト生成の処理時間をαとし、真率Truex及びTrueyは0以上1以下の実数であるものとする。
 このような状態で、a回すべてコードBを実行した場合には、コードBによる処理時間はaTmとなる。また、コードCによる処理時間は以下のように表される。
b(TruexTm+α)+(a-b)(TrueyTm+α)
=TruexbTm+bα+TrueyaTm-TrueybTm+(a-b)α
=(Truex-Truey)bTm+TrueyaTm+aα   (1)
 さらに、本実施の形態のように真率Truexの場合にコードBを実行し、真率Trueyの場合にコードCを実行する場合の処理時間は以下のように表される。
bTm+(a-b)(TrueyTm+α)
=bTm+TrueyaTm-TrueybTm+(a-b)α
=(1-Truey)bTm+TrueyaTm+(a-b)α
=((1-Truey)b+Trueya)Tm+(a-b)α   (2)
 ここでaTm>(2)式となる条件は以下のように表される。
aTm>((1-Truey)b+Trueya)Tm+(a-b)α
aTm-((1-Truey)b+Trueya)Tm>(a-b)α
(1-Truey)aTm-(1-Truey)bTm>(a-b)α
(1-Truey)(a-b)Tm>(a-b)α
(1-Truey)Tm>α (3)
 さらに、(1)式>(2)式となる条件は以下のように表される。
(Truex-Truey)bTm+Trueya+aα>((1-Truey)b+Trueya)Tm+(a-b)α
TruexbTm-bTm>-bα
bα>(1-Truex)bTm
α>(1-Truex)Tm (4)
 従って、(3)式及び(4)式から、以下のような条件が分かる。
(1-Truex)Tm<α<(1-Truey)Tm
 なお、図18のようにループ内にIFブロックxとIFブロックyとが含まれる場合がある。一般的に、IFブロックx内の演算と、IFブロックy内の演算とに相互依存性がなければ、図19のようにループ分割される。すなわち、図19の例では、IFブロックxについてのループXと、IFブロックyについてのループYとに分割する。このようにすれば、ループXとループYとで異なるコードを実行することができるようになる。例えば、ループXについては真率が高いためコードBを実行し、ループYについては真率が低いためコードCを実行するものである。
 さらに、片方のループ又は両方のループで、途中で真率が大きく変化した場合についても、上で述べた処理フローに従ってコードBとコードCとを動的に切り替えれば、演算処理を効率的に実行できるようになる。
 例えば、図20(a)に示すように、ループX及びループYをコードBで実行すると、ループYがきわめて非効率な実行となり処理時間も長くなる。一方、図20(b)に示すように、ループX及びループYをコードCで実行すると、ループXについてはリストベクトルループの処理時間が長くなってしまうので、あまり処理時間を短縮できない。一方、図20(c)に示すように、真率が例えば90%と高いループXについてはコードBで実行し、真率が例えば10%と低いループYについてはコードCで実行すれば、処理時間が全体として短くなり効率的な演算処理が行われるようになる。同様に、途中で真率が変化して、ループXについて真率が例えば10%となり、ループYについては真率が例えば90%となったとすると、本実施の形態によればループXについてコードCを実行し、ループYについてはコードBを実行するようになる。この場合、図20(d)に示すように、ループの実行回数が同じであれば図20(c)と処理時間自体は変化しない。但し、動的な切替を実施しなければ、コードCを実行しているループの方の処理時間が増加してしまう。
 以上本技術の実施の形態を説明したが、本技術はこれに限定されない。例えば、処理フローは一例であって、処理結果が変わらない限り、処理順番を入れ替えたり、処理を並列実行させるようにしても良い。また、ランタイムモジュール400の機能ブロック構成は一例であって、プログラムモジュール構成とは異なる場合もある。
 また、上で述べた例では、真率の平均値又は最小値を採用する例を示したが、真率調査区間が短い場合等には、真率そのものに対して閾値を設定するようにしても良い。さらに、ループ内の繰り返し回数が分かっていれば、真率ではなく、特徴量として、条件が真の回数、条件が真の回数の平均値、条件が真の回数の最小値を採用しても良い。
 さらに、真率調査区間を定期的に設ける例を示したが、例えば真率が下落している間は真率調査区間の間隔を短くして早期にコードCの実行に遷移するようにすることも可能である。
 なお、図8におけるコンピュータ1000は、本実施の形態に係る部分のみを示すものであったが、全体としては例えば図21に示すように、メモリ2501とCPU2503とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施の形態における処理を実施するためのプログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータは、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
 以上述べた本実施の形態をまとめると以下のようになる。
 本実施の形態に係る実行制御方法は、(A)内部に条件分岐を含み且つ予め指定されたループを含むソースコードから生成されたオブジェクトコードに含まれ且つ条件分岐がそのままコード化されたループについての第1のコード、又はオブジェクトコードに含まれ且つ条件分岐による条件が真となるループインデックスを抽出した上で抽出されたループインデックスのみについて条件が真となる場合における分岐先演算を実行するための第2のコードを実行している間において、条件分岐による条件が真となった回数についての特徴量を取得する処理と、(B)取得された特徴量に基づき、第2のコードと、オブジェクトコードに含まれ且つ述語付き命令を用いて条件分岐による分岐先演算のいずれかの演算結果をメモリに書き込むための第3のコードとのうちいずれかをプロセッサに実行させる処理とを含む。
 このように動的に実行するコードを切り替えることで、条件が真となる回数が動的に変化しても効率的に演算処理を実行できるようになる。
 なお、上で述べた特徴量が、上記回数、上記回数の割合、上記回数の平均値、上記回数の割合の平均値、上記回数の最小値、又は上記回数の割合の最小値である場合もある。
 さらに、上で述べた取得する処理を、オブジェクトコードの実行中定期的又は不定期に実行するようにしても良い。
 さらに、上で述べた回数についてのデータを、上記プロセッサのカウンタから取得するようにしても良い。ハードウエアカウンタによりカウントを行えば、実行制御のための処理のコストを下げることができるようになる。
 なお、上記実行制御方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD-ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。

Claims (6)

  1.  内部に条件分岐を含み且つ予め指定されたループを含むソースコードから生成されたオブジェクトコードに含まれ且つ前記条件分岐がそのままコード化された前記ループについての第1のコード、又は前記オブジェクトコードに含まれ且つ前記条件分岐による条件が真となるループインデックスを抽出した上で抽出されたループインデックスのみについて前記条件が真となる場合における分岐先演算を実行するための第2のコードを実行している間において、前記条件分岐による条件が真となった回数についての特徴量を取得し、
     取得された前記特徴量に基づき、前記第2のコードと、前記オブジェクトコードに含まれ且つ述語付き命令を用いて前記条件分岐による分岐先演算のいずれかの演算結果をメモリに書き込むための第3のコードとのうちいずれかをプロセッサに実行させる
     処理を、前記プロセッサに実行させるためのプログラム。
  2.  前記特徴量が、前記回数、前記回数の割合、前記回数の平均値、前記回数の割合の平均値、前記回数の最小値、又は前記回数の割合の最小値である
     請求項1記載のプログラム。
  3.  前記取得する処理を、前記オブジェクトコードの実行中定期的又は不定期に実行する
     請求項1記載のプログラム。
  4.  前記回数についてのデータを、前記プロセッサのカウンタから取得する
     請求項1乃至3のいずれか1つ記載のプログラム。
  5.  内部に条件分岐を含み且つ予め指定されたループを含むソースコードから生成されたオブジェクトコードに含まれ且つ前記条件分岐がそのままコード化された前記ループについての第1のコード、又は前記オブジェクトコードに含まれ且つ前記条件分岐による条件が真となるループインデックスを抽出した上で抽出されたループインデックスのみについて前記条件が真となる場合における分岐先演算を実行するための第2のコードを実行している間において、前記条件分岐による条件が真となった回数についての特徴量を取得し、
     取得された前記特徴量に基づき、前記第2のコードと、前記オブジェクトコードに含まれ且つ述語付き命令を用いて前記条件分岐による分岐先演算のいずれかの演算結果をメモリに書き込むための第3のコードとのうちいずれかをプロセッサに実行させる
     処理を含み、前記プロセッサにより実行される実行制御方法。
  6.  内部に条件分岐を含み且つ予め指定されたループを含むソースコードから生成されたオブジェクトコードに含まれ且つ前記条件分岐がそのままコード化された前記ループについての第1のコード、又は前記オブジェクトコードに含まれ且つ前記条件分岐による条件が真となるループインデックスを抽出した上で抽出されたループインデックスのみについて前記条件が真となる場合における分岐先演算を実行するための第2のコードを実行している間において、前記条件分岐による条件が真となった回数についての特徴量を取得する手段と、
     取得された前記特徴量に基づき、前記第2のコードと、前記オブジェクトコードに含まれ且つ述語付き命令を用いて前記条件分岐による分岐先演算のいずれかの演算結果をメモリに書き込むための第3のコードとのうちいずれかをプロセッサに実行させる手段と、
     有する情報処理装置。
PCT/JP2012/077599 2012-10-25 2012-10-25 実行制御方法及び情報処理装置 WO2014064798A1 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2014543074A JP6179524B2 (ja) 2012-10-25 2012-10-25 実行制御方法及び情報処理装置
EP12887026.8A EP2913761A4 (en) 2012-10-25 2012-10-25 EXECUTION CONTROL METHOD AND INFORMATION PROCESSING DEVICE
PCT/JP2012/077599 WO2014064798A1 (ja) 2012-10-25 2012-10-25 実行制御方法及び情報処理装置
US14/695,344 US9459852B2 (en) 2012-10-25 2015-04-24 Execution control method and information processing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2012/077599 WO2014064798A1 (ja) 2012-10-25 2012-10-25 実行制御方法及び情報処理装置

Related Child Applications (1)

Application Number Title Priority Date Filing Date
US14/695,344 Continuation US9459852B2 (en) 2012-10-25 2015-04-24 Execution control method and information processing apparatus

Publications (1)

Publication Number Publication Date
WO2014064798A1 true WO2014064798A1 (ja) 2014-05-01

Family

ID=50544196

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2012/077599 WO2014064798A1 (ja) 2012-10-25 2012-10-25 実行制御方法及び情報処理装置

Country Status (4)

Country Link
US (1) US9459852B2 (ja)
EP (1) EP2913761A4 (ja)
JP (1) JP6179524B2 (ja)
WO (1) WO2014064798A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10521208B2 (en) * 2017-06-23 2019-12-31 Microsoft Technology Licensing, Llc. Differentiated static analysis for dynamic code optimization
JP7091726B2 (ja) * 2018-03-08 2022-06-28 富士通株式会社 情報処理装置,プログラム及び情報処理方法
US20230315453A1 (en) * 2022-04-01 2023-10-05 Intel Corporation Forward conditional branch event for profile-guided-optimization (pgo)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59165147A (ja) 1983-03-11 1984-09-18 Fujitsu Ltd コンパイラにおける条件文のベクトル命令化方式
JPS608942A (ja) * 1983-06-28 1985-01-17 Fujitsu Ltd 条件文のベクトル処理方式
JPH03110670A (ja) * 1989-09-25 1991-05-10 Nec Corp ベクトル計算機

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63632A (ja) * 1986-06-19 1988-01-05 Fujitsu Ltd 原始プログラムの最適化処理方式
JPS6353646A (ja) * 1986-08-22 1988-03-07 Nec Corp 最適目的プログラム生成方式
JP3152194B2 (ja) * 1996-12-26 2001-04-03 日本電気株式会社 コンパイル装置、コンパイル方法およびコンパイラを記録した記録媒体
JP3699354B2 (ja) * 1998-12-22 2005-09-28 富士通株式会社 最適化オブジェクト生成装置及び方法
US8069440B2 (en) * 2006-10-27 2011-11-29 Oracle America, Inc. Adaptive code through self steered execution
US8793675B2 (en) * 2010-12-24 2014-07-29 Intel Corporation Loop parallelization based on loop splitting or index array

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59165147A (ja) 1983-03-11 1984-09-18 Fujitsu Ltd コンパイラにおける条件文のベクトル命令化方式
JPS608942A (ja) * 1983-06-28 1985-01-17 Fujitsu Ltd 条件文のベクトル処理方式
JPH03110670A (ja) * 1989-09-25 1991-05-10 Nec Corp ベクトル計算機

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"System Kaisetsusho", FACOM VP, 1988, NIPPON, pages 103 - 108, 127 TO 130, XP008176593 *
See also references of EP2913761A4

Also Published As

Publication number Publication date
US9459852B2 (en) 2016-10-04
EP2913761A4 (en) 2016-06-15
EP2913761A1 (en) 2015-09-02
JP6179524B2 (ja) 2017-08-16
US20150234641A1 (en) 2015-08-20
JPWO2014064798A1 (ja) 2016-09-05

Similar Documents

Publication Publication Date Title
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
US9311730B2 (en) Aggregating graph structures
KR100875836B1 (ko) 병렬 처리 vliw 컴퓨터를 위한 인스트럭션 명령어 압축장치 및 그 방법
US9569179B1 (en) Modifying models based on profiling information
US20240070114A1 (en) Method, apparatus, and computer-readable medium for parallelization of a computer program on a plurality of computing cores
US20120154412A1 (en) Run-time allocation of functions to a hardware accelerator
JP6245573B2 (ja) 制御フロー・グラフ上の実行パスの実行頻度情報を得るための方法、並びに、当該情報を得るためのコンピュータ及びそのコンピュータ・プログラム
JP2015118609A (ja) 予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うための方法、並びに、当該命令を使用してツリーの検索を行うためのコンピュータ及びそのコンピュータ・プログラム
CN111367786B (zh) 一种符号执行方法、电子设备以及存储介质
US20130318540A1 (en) Data flow graph processing device, data flow graph processing method, and data flow graph processing program
JP6179524B2 (ja) 実行制御方法及び情報処理装置
CN113485840A (zh) 基于Go语言的多任务并行处理装置及方法
EP3268859A1 (en) Scheduling heterogenous processors
US10564947B2 (en) Computer system and method for multi-processor communication
US8850404B2 (en) Relational modeling for performance analysis of multi-core processors using virtual tasks
CN105404635B (zh) 字符串匹配的方法、设备和异构计算系统
KR102603377B1 (ko) 데이터 처리
US10599554B2 (en) Dynamic instrumentation based on detected errors
US20130151485A1 (en) Apparatus and method for storing trace data
US8826234B2 (en) Relational modeling for performance analysis of multi-core processors
US9804849B2 (en) Space reduction in processor stressmark generation
JP2016224814A (ja) 性能情報生成プログラム、性能情報生成方法及び情報処理装置
US11061988B2 (en) Reducing web page load times
WO2015062369A1 (zh) 轮廓技术编译的优化方法及装置
JP6528531B2 (ja) コンパイラプログラム、コンパイル方法、及び情報処理装置

Legal Events

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

Ref document number: 12887026

Country of ref document: EP

Kind code of ref document: A1

ENP Entry into the national phase

Ref document number: 2014543074

Country of ref document: JP

Kind code of ref document: A

WWE Wipo information: entry into national phase

Ref document number: 2012887026

Country of ref document: EP

NENP Non-entry into the national phase

Ref country code: DE