WO2012029111A1 - マルチコアプロセッサシステム、同期制御システム、同期制御装置、情報生成方法、および情報生成プログラム - Google Patents

マルチコアプロセッサシステム、同期制御システム、同期制御装置、情報生成方法、および情報生成プログラム Download PDF

Info

Publication number
WO2012029111A1
WO2012029111A1 PCT/JP2010/064740 JP2010064740W WO2012029111A1 WO 2012029111 A1 WO2012029111 A1 WO 2012029111A1 JP 2010064740 W JP2010064740 W JP 2010064740W WO 2012029111 A1 WO2012029111 A1 WO 2012029111A1
Authority
WO
WIPO (PCT)
Prior art keywords
core
synchronization
register
thread
cpu
Prior art date
Application number
PCT/JP2010/064740
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 EP10856664.7A priority Critical patent/EP2613269A4/en
Priority to PCT/JP2010/064740 priority patent/WO2012029111A1/ja
Priority to CN201080068873.6A priority patent/CN103080921B/zh
Priority to JP2012531592A priority patent/JP5488697B2/ja
Publication of WO2012029111A1 publication Critical patent/WO2012029111A1/ja
Priority to US13/765,338 priority patent/US9367311B2/en

Links

Images

Classifications

    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • 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
    • 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/458Synchronisation, e.g. post-wait, barriers, locks
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • 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/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • 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/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means

Definitions

  • the present invention relates to a multi-core processor system, a synchronization control system, a synchronization control device, an information generation method, and an information generation program that control synchronization between registers.
  • a technique related to the generation of an execution object a technique is disclosed in which a temporary register is mounted on an assembler program, a temporary register is determined by a flow analysis at the assembly stage, and a live range is determined and replaced with a real register.
  • a technique according to Patent Document 1 it is possible to clarify the register lifetime. Therefore, when the assembler code written in the single core is changed so as to be processed in parallel by the multi-core processor system, unnecessary insertion of synchronization processing or omission of insertion of synchronization processing can be avoided.
  • a technique related to load distribution in a multi-core processor system for example, a technique is disclosed in which profile information is included in a processing module and a processing module to be executed by each core is determined based on the profile information (for example, the following patents) See reference 2.) Further, as a hardware technique for parallel processing in a multi-core processor system, a technique is disclosed in which data transfer is facilitated by having a 2-port register that can be accessed from a plurality of cores (for example, (See Patent Document 3).
  • inventions there is a technique using a cache coherency mechanism (hereinafter referred to as “conventional technique 1”). For example, when synchronizing a register of a specific core with a register of another core, the specific core first writes the value of the register to the cache memory. The cache coherency mechanism that detects that the register value has been written to the cache memory notifies the cache value of the other core of the register value. Finally, the other core reads the value of the register from the cache memory of the other core and writes it to the register of the other core. Registers can be synchronized by the series of operations described above.
  • Patent Document 4 a technique for preparing a dedicated instruction for performing synchronization is disclosed (for example, see Patent Document 4 below).
  • a specific core executes a dedicated instruction
  • the specific core transmits a register value to the other core
  • the specific core executes the register transfer instruction. Until paused.
  • the processing content equivalent to the prior art 1 can be executed in one step in terms of software.
  • FIG. 13 is an explanatory diagram showing a register synchronization method when a C program or a C ++ program is executed in the multi-core processor system in the conventional example.
  • the compiler reads C source or C / C ++ source 1301 serving as C ++ source, and generates block 1302 and block 1303 as part of the execution object to which the synchronization control code is added.
  • the locations corresponding to the synchronization control code are block 1304 and block 1305.
  • the register Gr1 can be synchronized by the block 1304 and the block 1305 and can operate normally. Specifically, in the block 1304, the register Gr1 is stored in 0x0000FF00, which is an area such as a cache memory. Subsequently, in block 1305, the value stored in 0x0000FF00 is read and set in the register Gr1.
  • there is a technique for generating an execution object for a multi-core processor from a program for a single core by adding a synchronization control code at the time of compilation hereinafter referred to as “conventional technique 2”).
  • JP-A-8-234997 JP 2006-99156 A Japanese Patent Laid-Open No. 01-048163 Japanese Patent Laid-Open No. 04-195664
  • the synchronization control code is newly added in the prior art 1, the prior art 2, and the technique according to Patent Document 4. Therefore, when the techniques according to the prior art 1, the prior art 2, and the patent document 4 are applied to the assembler source, there is a problem that the execution code is changed to the generated execution object.
  • the assembler source is generated by a designer when, for example, it is desired to reduce the number of instructions even in one step. Therefore, the assembler source is expected to be converted into a machine language one-to-one, and there is a problem that the amount of code unintended by the designer is caused by inadvertently adding execution code. .
  • the present invention provides a multi-core processor system, a synchronization control system, a synchronization control device, an information generation method, and an information generation program that can be executed in parallel on multiple cores without modifying the assembler source in order to solve the above-described problems caused by the prior art.
  • the purpose is to do.
  • the disclosed multi-core processor system uses a specific core in the multi-core processor to transfer a thread running in the synchronization source core to the synchronization destination core in the multi-core processor. Referring to a table for identifying a combination of each thread of a thread group and a register associated with the thread by a specific core, the specific register corresponding to the thread detected to be migrated is detected.
  • Identifies and generates synchronization control information that identifies a specified specific register and synchronization destination core by a specific core is connected to be able to communicate with a multi-core processor, and acquires the generated synchronization control information from the specific core Reads the value of a specific register obtained from the synchronization control information from a specific register of the synchronization source core , A specific register of the destination core, writes the value read from a particular register of the synchronization source core.
  • the multi-core processor system, the synchronization control system, the synchronization control device, the information generation method, and the information generation program have the effect that the multi-core can be normally executed in parallel without modifying the assembler source for the single core.
  • FIG. 10 is an explanatory diagram illustrating an example of stored contents of a synchronization control register 603.
  • FIG. 2 is an explanatory diagram showing an overview at the time of designing a multi-core processor system 100. It is a flowchart which shows a schedule process. It is a flowchart which shows a register synchronous control process. It is explanatory drawing which shows the synchronizing method of a register at the time of execution of C program or C ++ program in the multi-core processor system in a prior art example.
  • FIG. 1 is a block diagram illustrating hardware of a multi-core processor system 100 according to the embodiment.
  • a multi-core processor system 100 includes CPUs 101 having a plurality of CPUs, a ROM (Read-Only Memory) 102, and a RAM (Random Access Memory) 103.
  • the multi-core processor system 100 includes a flash ROM 104, a flash ROM controller 105, and a flash ROM 106.
  • the multi-core processor system 100 includes a display 107, an I / F (Interface) 108, and a keyboard 109 as input / output devices for users and other devices. Each unit is connected by a bus 110.
  • I / F Interface
  • CPUs 101 are responsible for overall control of the multi-core processor system 100.
  • CPUs 101 refers to all CPUs in which single-core processors are connected in parallel.
  • CPUs 101 include CPU # 0 and CPU # 1. Further, the CPUs 101 may include three or more CPUs.
  • CPU # 0 and CPU # 1 each have a dedicated cache memory.
  • a multi-core processor system is a computer system including a processor having a plurality of cores. If a plurality of cores are mounted, a single processor having a plurality of cores may be used, or a processor group in which single core processors are arranged in parallel may be used. In the present embodiment, an example in which CPUs that are single-core processors are arranged in parallel will be described.
  • each of CPU # 0 and CPU # 1 has a dedicated register, and further has a dedicated register synchronization control device, which is a feature of this embodiment. Details of the register synchronization control apparatus will be described later with reference to FIG.
  • the ROM 102 stores a program such as a boot program.
  • the RAM 103 is used as a work area for the CPUs 101.
  • the flash ROM 104 stores system software such as an OS (Operating System), application software, and the like. For example, when updating the OS, the multi-core processor system 100 receives the new OS through the I / F 108 and updates the old OS stored in the flash ROM 104 to the received new OS.
  • OS Operating System
  • the flash ROM controller 105 controls reading / writing of data with respect to the flash ROM 106 under the control of the CPUs 101.
  • the flash ROM 106 stores data written under the control of the flash ROM controller 105. Specific examples of the data include image data and video data acquired by the user using the multi-core processor system 100 through the I / F 108.
  • As the flash ROM 106 for example, a memory card, an SD card, or the like can be adopted.
  • the display 107 displays data such as a document, an image, and function information as well as a cursor, an icon, or a tool box.
  • a TFT liquid crystal display can be adopted as the display 107.
  • the I / F 108 is connected to a network 111 such as a LAN (Local Area Network), a WAN (Wide Area Network), and the Internet through a communication line, and is connected to another device via the network 111.
  • the I / F 108 controls an internal interface with the network 111 and controls data input / output from an external device.
  • a modem or a LAN adapter can be employed as the I / F 108.
  • the keyboard 109 has keys for inputting numbers, various instructions, etc., and inputs data.
  • the keyboard 109 may be a touch panel type input pad or a numeric keypad.
  • FIG. 2 is a block diagram showing a state in which a register synchronization control device using a dedicated synchronization line is applied to the CPUs 101.
  • the hardware shown in FIG. 2 is a CPU # 0, a CPU # 1, a RAM 103, and a snoop mechanism 201 that is a kind of cache coherency mechanism included in the CPUs 101.
  • CPU # 0 and CPU # 1 there are an in-CPU arithmetic unit 202, an in-CPU register group 203, and a cache memory 204.
  • the suffixes “# 0” and “# 1” corresponding to each of CPU # 0 and CPU # 1 exist inside each CPU when assigned to each hardware and software. Hardware to be executed and software being executed by each CPU.
  • a register synchronization control device 205 and a communication unit 206, which are the features of this embodiment.
  • the CPU arithmetic unit 202 can access the CPU register group 203.
  • the CPU arithmetic unit 202 and the register synchronization control device 205 are connected by an address bus 207, and the communication unit 206 # 0 and the communication unit 206 # 1 are connected by a dedicated line 208.
  • the snoop mechanism 201 is a device for ensuring consistency between the CPU # 0 and the cache memory 204 # 0 and the cache memory 204 # 1 accessed by the CPU # 1.
  • the cache memory manages the update state of its own cache memory and the cache memory of another CPU, and exchanges update state information with other cache memories. By exchanging information about the update state, the snoop mechanism 201 determines which cache memory has the latest data. Further, the snoop mechanism 201 changes the state of its own cache memory or invalidates the cache memory so that each cache memory can acquire the latest data.
  • the CPU arithmetic unit 202 is an arithmetic unit that performs integer arithmetic operations, logical operations, bit shift operations, and the like.
  • the intra-CPU arithmetic unit 202 performs arithmetic operations according to the instruction code read from the intra-CPU register group 203 from the RAM 103 or the like.
  • the in-CPU register group 203 is a storage device that is used for the arithmetic unit 202 in the CPU to perform arithmetic operations.
  • the accumulator is a register that temporarily stores data, such as storing operation results.
  • the address register is a register used to specify an address when accessing the memory.
  • a general-purpose register is a register that does not have a specific purpose and performs various functions according to an instruction. In particular, the general-purpose register has functions of an accumulator and an address register.
  • the program counter is a register that indicates an address on the main memory in which an instruction to be executed next is stored.
  • the status register is a register that holds the overflow of the arithmetic result, the state that the accumulator is 0, or the state of various processors.
  • the arithmetic unit 202 in the CPU fetches instruction data written in machine language from the RAM 103.
  • the instruction data is expressed in mnemonic, it is assumed that “Store Gr1 Acc #” is written.
  • “Gr1” indicates a general-purpose register, and “Acc #” indicates an accumulator.
  • the arithmetic unit 202 in the CPU executes instruction data.
  • the CPU arithmetic unit 202 stores the accumulator value in the general-purpose register “Gr1”.
  • the cache memory 204 is a storage area in which a part of the data in the RAM 103 is copied so that the CPU # 0 and the CPU # 1 can access the data in the RAM 103 at high speed.
  • the register synchronization control device 205 is a device that controls the synchronization between the CPU register group 203 # 0 and the CPU register group 203 # 1.
  • the register synchronization control device 205 # 0 and the register synchronization control device 205 # 1 synchronize the Gr1 register, which is one of the general purpose registers, between the CPU # 0 and the CPU # 1.
  • the communication unit 206 is connected to the register synchronization control device 205 and communicates with other register synchronization control devices 205. Specifically, the communication unit 206 # 0 transfers the register value of the CPU # 0 acquired by the register synchronization control device 205 # 0 to the register synchronization control device 205 # 1 through the dedicated line 208. Receiving the register value, the communication unit 206 # 1 notifies the register synchronization control device 205 # 1 of the register value.
  • FIG. 3 is a block diagram showing a state in which a register synchronous control device using the snoop mechanism 201 is applied to the CPUs 101.
  • the communication unit 206 # 0 and the communication unit 206 # 1 communicate with each other via the dedicated line 208, but in FIG. 3, register values and the like are transferred using the cache memory 204 and the snoop mechanism 201.
  • the protected area 301 is an area that is used by a thread assigned to the CPU among areas of the cache memory 204 and is different from an area where data is replaced, and is an area protected so that data is not erased.
  • the communication unit 206 # 0 writes the register value in the protection area 301 # 0.
  • the snoop mechanism 201 that has detected that data has been written to the protection area 301 # 0 copies the contents of the protection area 301 # 0 to the protection area 301 # 1.
  • the communication unit 206 # 1 notifies the register synchronization controller 205 # 1 of the value of the register written in the protected area 301 # 1.
  • FIG. 4 is an explanatory diagram showing a state in which a synchronization event occurs.
  • FIG. 4 shows a state in which a synchronization event occurs when the execution object 402 from the assembler source 401 is executed.
  • An explanatory diagram indicated by reference numeral 403 shows a case where the execution object operates with a single core
  • an explanatory diagram indicated by reference numeral 404 shows a case where the execution object operates by multi-core.
  • the assembler reads the assembler source 401 and generates an execution object 402 that has been converted one-to-one.
  • the assembler generates a block 405 and a block 406 as the execution object 402.
  • the block 405 describes an instruction to store the accumulator value in the register Gr1 and jump to address 0x02FF0000 where func () exists.
  • block 406 an instruction to re-read the contents of the register Gr1 into the accumulator is described.
  • the CPU executes block 405 and block 406, the CPU generates a thread and executes each block on the thread.
  • the single core executes the thread by the block 405 and the thread by the block 406.
  • the register Gr1 of the block 405 and the register Gr1 of the block 406 are the same, and thus operate normally.
  • the blocks 405 and 406 can be operated normally with multicore. Specifically, synchronization can be achieved by overwriting the value of the register Gr1 of the CPU #M in the register Gr1 of the CPU #N.
  • the CPU #M that is the synchronization source of the register is the synchronization source CPU
  • the CPU #N that is the synchronization destination of the register is the synchronization destination CPU.
  • the synchronization source thread is a synchronization source thread
  • the synchronization destination thread is a synchronization destination thread.
  • the thread by block 405 is the synchronization source thread
  • the thread by block 406 is the synchronization destination thread.
  • the synchronization source thread and the synchronization destination thread are the same thread.
  • the synchronization destination thread is a thread branched from the synchronization source thread, the synchronization source thread and the synchronization destination thread are different threads.
  • FIG. 5 is a block diagram showing functions of the multi-core processor system 100.
  • the multi-core processor system 100 includes a detection unit 502, a specification unit 503, a generation unit 504, a synchronization control unit 505, a setting unit 506, an acquisition unit 507, a reading unit 508, a writing unit 509, and a transmission unit. 510 and a receiving unit 511.
  • the detection unit 502 to the generation unit 504 and the setting unit 506 realize the functions by the CPUs 101 executing the programs stored in the storage device.
  • the storage device is, for example, the ROM 102, the RAM 103, the flash ROM 104, the flash ROM 106, etc. shown in FIG.
  • the synchronization control unit 505, the acquisition unit 507, the reading unit 508, the writing unit 509, the transmission unit 510, and the reception unit 511 realize their functions by the register synchronization control device 205 shown in FIG. .
  • CPU # 0 is a master CPU that controls multi-core processor system 100, and that CPU #M and CPU #N are CPUs subject to synchronization control between registers. Further, CPU # 0 may be a master CPU and a CPU that is subject to synchronization control between registers. For example, when the CPU # 0 is a master CPU and becomes a synchronization target CPU for synchronization control between registers, the setting unit 506 may be included as a function of the CPU # 0.
  • the multi-core processor system 100 can access the register dependency table 501 that specifies a combination of each thread of the thread group and a register associated with the thread.
  • the register dependency table 501 stores information between blocks and a register that takes over values between blocks when the execution object is divided into blocks that can be executed in parallel for execution objects to be executed by threads. Details of the register dependence table 501 will be described later with reference to FIG.
  • the register associated with the thread in the register dependency table 501 may not specify any core of the multi-core processor.
  • the register dependency table 501 stores information on two blocks that are part of an execution object corresponding to a thread, and register names. Regarding the register name, all the CPUs of the CPUs 101 have a register name, and any one of the CPUs 101 is not specified by the register name.
  • the register dependence table 501 does not have to specify a storage area other than the register. Specifically, the register dependency table 501 stores register names, and does not specify the cache memory 204, the RAM 103, the flash ROM 104, or the like as other storage areas.
  • the detecting unit 502 has a function of detecting that a thread being executed in the synchronization source core in the multicore processor is transferred to the synchronization destination core by a specific core in the multicore processor. For example, the detection unit 502 detects that the CPU # 0 in the CPUs 101 shifts the thread being executed by the CPU #M to the CPU #N.
  • the detecting unit 502 may detect that the second thread branched from the first thread being executed in the synchronization source core is generated in the synchronization destination core. For example, the detection unit 502 detects that the CPU #N generates a second thread branched from the first thread being executed by the CPU #M. Note that the information that is detected is stored in a storage area such as the in-CPU register group 203 # 0, the cache memory 204 # 0, and the RAM 103.
  • the specifying unit 503 has a function of specifying a specific register corresponding to the thread detected by the detecting unit 502 with reference to the register dependency table 501 by a specific core. Further, the specifying unit 503 may specify a specific register corresponding to the second thread that is branched from the first thread and the first thread being executed by the CPU #M and executed by the CPU #N. .
  • the identification unit 503 performs the corresponding processing based on the execution object block executed by CPU #M and the execution object block executed by CPU #N among the records of the register dependency table 501 by CPU # 0. Specify the record to be executed.
  • the specifying unit 503 specifies the register name stored in the corresponding record as a specific register.
  • the specified register information is stored in a storage area such as the in-CPU register group 203 # 0, the cache memory 204 # 0, and the RAM 103.
  • the generation unit 504 has a function of generating synchronization control information for specifying a specific register and a synchronization destination core specified by the specification unit 503 by a specific core. For example, it is assumed that the Gr1 register is specified by the specifying unit 503. At this time, the generation unit 504 generates synchronization control information for specifying the Gr1 register and the CPU #N by the CPU # 0.
  • the name of a specific register or ID is stored in the synchronization control information, and the CPU number of the synchronization destination core is stored.
  • the generated synchronization control information is stored in a storage area such as the RAM 103 and stored in a synchronization control register that is a storage area of the register synchronization control apparatus 205 by a driver of the register synchronization control apparatus 205 that operates on the synchronization source CPU. Is done.
  • the synchronization control register will be described in detail later with reference to FIG.
  • the synchronization control unit 505 is communicably connected to the multi-core processor, acquires the synchronization control information generated by the generation unit 504 from a specific core, and specifies the value of a specific register obtained from the synchronization control information to identify the synchronization source core Read from the register. Subsequently, the synchronization control unit 505 has a function of writing a value read from a specific register of the synchronization source core into a specific register of the synchronization destination core. For example, the synchronization control unit 505 acquires the synchronization control information from the CPU # 0, and reads the value of the register Gr1 from the register Gr1 in the CPU register group 203 # M of the CPU #M. Subsequently, the synchronization control unit 505 writes the value read from the register Gr1 of the CPU #M into the register Gr1 of the in-CPU register group 203 # N of the CPU #N.
  • the synchronization control unit 505 may notify the synchronization destination core of information that the detected thread can be executed.
  • the information indicating that the thread detected by the synchronization destination core can be executed is, for example, an interrupt signal, and the synchronization control unit 505 notifies the synchronization destination core of the interrupt signal.
  • the synchronization control unit 505 writes a value read from the register Gr1 of the CPU #M into the register Gr1 of the CPU internal register group 203 # N of the CPU #N
  • the synchronization control unit 505 outputs an interrupt signal to the CPU #N. To be notified.
  • the setting unit 506 has a function of setting a detected thread to be executable in the synchronization destination core by the synchronization destination core. Further, when the setting unit 506 receives information indicating that the detected thread can be executed from the synchronization control unit 505, the setting unit 506 may set the detected thread to a state that can be executed by the synchronization destination core. For example, the setting unit 506 causes the CPU #N to shift the detected thread and set it to an executable state. Further, when the second thread branched from the first thread being executed in the synchronization source core is generated in the synchronization destination core, the CPU #N stores an area accessed by the second thread, for example, a thread context in the RAM 103. And the second thread is set in an executable state.
  • the acquisition unit 507 has a function of acquiring synchronization control information from a specific core when the generation unit 504 generates synchronization control information for specifying a specific register and a synchronization destination core. Specifically, the acquisition unit 507 acquires synchronization control information for the CPU number of the Gr1 register and CPU #N. The acquired information is stored in the storage area of the register synchronization control device 205 # M.
  • the reading unit 508 has a function of reading a specific register value obtained from the synchronization control information acquired by the acquisition unit 507 from a specific register of the synchronization source core. Specifically, the reading unit 508 reads the value of the register Gr1 from the register Gr1 in the CPU register group 203 # M of the CPU #M. The read value is stored in the storage area of the register synchronization control device 205 # M.
  • the writing unit 509 writes the value read from the specific register of the synchronization source core by the reading unit 508 to the specific register of the synchronization destination core. Specifically, the writing unit 509 writes the value read from the register Gr1 of the CPU #M into the register Gr1 in the CPU register group 203 # N of the CPU #N.
  • the transmission unit 510 has a function of transmitting the specific register and the value of the specific register read by the reading unit 508 to the synchronization destination core. Specifically, transmission unit 510 transmits the values of register Gr1 and register Gr1 to register synchronization control device 205 # N.
  • the receiving unit 511 has a function of receiving a specific register and a value of the specific register by another synchronization control device. Specifically, the receiving unit 511 receives the values of the register Gr1 and the register Gr1 by the register synchronization control device 205 # M. The received registers and register values are stored in the storage area of the register synchronization control device 205 # N.
  • FIG. 6 is an explanatory diagram showing an overview of the register synchronization control device 205 when no synchronization event has occurred.
  • description will be made using the inside of CPU # 0.
  • the inside of CPUs other than CPU # 0 is also equal to the inside of CPU # 0 shown in FIG.
  • the hardware shown in FIG. 6 is an in-CPU arithmetic unit 202 # 0, an in-CPU external I / O 601 # 0, an interrupt controller 602 # 0, an in-CPU register group 203 # 0, and a register synchronization control device 205 # 0.
  • the CPU external I / O 601 # 0 and the register synchronization control device 205 # 0 are connected by an address bus 207 # 0.
  • the address bus 207 # 0 is connected to the cache memory 204 # 0 and the bus 110, and is connected to peripheral registers such as the RAM 103 and the display 107 through the bus 110.
  • the register synchronization control device 205 # 0 includes a synchronization control register 603 # 0, a register reader 604 # 0, a register writer 605 # 0, a reception FIFO 606 # 0, a transmission FIFO 607 # 0, and an interrupt controller 608 # 0. .
  • the synchronization control register 603 # 0 is connected to the address bus 207 # 0, and the reception FIFO 606 # 0 and the transmission FIFO 607 # 0 are connected to the communication unit 206 # 0.
  • the interrupt controller 608 # 0 is connected to the interrupt controller 602 # 0.
  • the multi-core processor system 100 takes the form of a memory mapped I / O in which the address space of the input / output device coexists in the address space of the RAM 103.
  • the address area of the cache memory 204 is 32 [kilobytes] and is 0x00008000 to 0x0000FFFF
  • the address area of the RAM 103 is 32 [megabytes] and is 0x02000000 to 0x03FFFFFFFF.
  • 0x00010000 to 0x01FFFFFF are unallocated areas.
  • the designer sets the address area of the synchronization control register 603 # 0 to 0x0020000 to 0x00020003 among the unallocated areas.
  • the arithmetic unit 202 in the CPU can access the synchronization control register 603 # 0 by addressing.
  • the multi-core processor system 100 is a port-mapped I / O in which the address space of the input / output device does not coexist in the address space of the RAM 103, each CPU accesses the address space of the input / output device.
  • the synchronization control register 603 # 0 can be accessed.
  • the CPU internal I / O 601 # 0 is a port through which the CPU arithmetic unit 202 # 0 inputs and outputs to the address bus 207 # 0.
  • the CPU arithmetic unit 202 # 0 accesses the RAM 103 and the synchronization control register 603 # 0 via the CPU internal I / O 601 # 0.
  • the interrupt controller 602 # 0 receives the interrupt signal and notifies the CPU arithmetic unit 202 # 0 of the interrupt number.
  • the interrupt controller 602 # 0 accepts an interrupt signal input from the interrupt controller 608 # 0, but accepts another interrupt signal, for example, an interrupt signal from the keyboard 109. Then, the interrupt number is notified to the arithmetic unit 202 # 0 in the CPU.
  • the interrupt controller 602 # 0 has a plurality of interrupt input terminals, and sets an interrupt number for each terminal.
  • one terminal of the interrupt controller 602 # 0 accepts an interrupt signal from the interrupt controller 608 # 0, and another terminal accepts an interrupt signal from the keyboard 109.
  • the interrupt controller 602 # 0 has a function of notifying an interrupt number according to the priority set in the interrupt signal when a plurality of interrupt signals are received.
  • the synchronization control register 603 # 0 is a register for setting synchronization control information including information on a register to be synchronized and information on a synchronization destination CPU. Unlike the accumulators such as general-purpose registers and floating-point registers of each CPU, the synchronization control register 603 # 0 is a register that appears as a kind of peripheral via the address bus. The synchronization control register 603 # 0 realizes coherence of a register group used by the user program, for example, an accumulator, a general-purpose register, and a floating-point register. Specifically, the synchronization control register 603 stores the name of the register that performs coherence in the synchronization target register name. Details of the synchronization control information set in the synchronization control register 603 will be described later with reference to FIG.
  • the register reader 604 # 0 reads the value of the register corresponding to the synchronization target register name in the register group 203 # 0 in the CPU from the register name written in the synchronization target register name of the synchronization control register 603 # 0. For example, when “Gr1” is stored in the synchronization target register name, the register reader 604 # 0 reads the value of the Gr1 register of the in-CPU register group 203 # 0.
  • the register writer 605 # 0 receives the register name and value from the reception FIFO 606 # 0 and writes the received value to the register corresponding to the register name received from the in-CPU register group 203 # 0. For example, when data “Gr1 1” is received from the reception FIFO 606 # 0, the register writer 605 # 0 writes “1” to the Gr1 register of the in-CPU register group 203 # 0.
  • the reception FIFO 606 # 0 stores the register name and value sent from the communication unit 206 # 0. Further, the reception FIFO 606 # 0 notifies the interrupt controller 608 of an interrupt signal as CPU control after the register writer 605 # 0 completes the register writing in order to realize barrier synchronization.
  • the transmission FIFO 607 # 0 stores the information of the synchronization destination CPU, the register name, and the register value transmitted from the register reader 604 # 0. Also, the transmission FIFO 607 # 0 transmits the information of the synchronization destination CPU, the register name, and the register value to the communication unit 206 # 0. The transmission FIFO 607 # 0 transmits an interrupt signal serving as a synchronization signal when transmitting a register name and a register value.
  • the interrupt controller 608 # 0 receives an interrupt signal from another transmission FIFO 607 other than the transmission FIFO 607 # 0, and notifies the interrupt controller 602 # 0 of the interrupt number.
  • the other transmission FIFO 607 other than the transmission FIFO 607 # 0 is, for example, the transmission FIFO 607 # 1.
  • the interrupt controller 608 # 0 also receives an interrupt signal from the reception FIFO 606 # 0 and notifies the interrupt controller 602 # 0 of the interrupt number.
  • the interrupt controller 608 # 0 and the other interrupt controller 608 are directly connected without passing through the communication unit 206.
  • the correspondence between the functional unit of the register synchronization control device 205 shown in FIG. 5 and each unit shown in FIG. 6 is that the acquisition unit 507 corresponds to the synchronization control register 603 and the reading unit 508 corresponds to the register reader 604.
  • the writing unit 509 corresponds to the register writer 605.
  • the transmission unit 510 corresponds to the transmission FIFO 607, and the reception unit 511 corresponds to the reception FIFO 606.
  • FIG. 7 is an explanatory diagram showing an example of the contents stored in the synchronization control register 603.
  • the synchronization control register 603 is an area of 32 [bits] and has three fields: a synchronization flag, a synchronization target register name, and a synchronization destination CPU number.
  • the synchronization control information includes a synchronization target register name and a synchronization destination CPU number, but may include a synchronization flag.
  • the synchronization flag field is an area of 1 [bit] and stores a flag indicating whether or not the register synchronization processing is being executed. In the following description, it is assumed that the synchronization process is being executed when the synchronization flag is 1.
  • the synchronization target register name field is an area of 8 [bits] and stores a register number to be synchronized.
  • the synchronization destination CPU number field is an area of 8 [bits] and stores the CPU number to be synchronized.
  • the area of the synchronization target register name field and the synchronization destination CPU number field is 8 [bits], and 256 types of registers and CPU numbers can be handled. Further, even when the number of CPUs is more than 256, it is possible to cope with the problem by using a spare 15 [bits].
  • the CPU number to be synchronized is normally stored as unicast, but when there is a possibility that the same register value is transmitted to a plurality of CPUs, a mode for sending to a plurality of CPUs is set. May be.
  • the transmission FIFO 607 may set the synchronization destination CPU number field such that the register value is broadcast to all CPUs except its own CPU. .
  • 1 is stored in the synchronization flag
  • the register number of the Gr1 register is stored in the synchronization target register name field
  • the CPU number of CPU # 1 is stored in the synchronization destination CPU number field.
  • FIG. 8 is an explanatory diagram showing an overview of the register synchronization control device 205 of the synchronization source CPU when a synchronization event occurs.
  • CPU # M which is the synchronization source CPU, sets synchronization control information in synchronization control register 603 # M by driver 801 # M running on CPU # M.
  • the synchronization control information is output by a master CPU, for example, CPU # 0.
  • the register reader 604 # M After setting, the register reader 604 # M reads the register value from the in-CPU register group 203 # M according to the synchronization control information, and stores the synchronization destination CPU number, register name, and register value in the buffer of the transmission FIFO 607 # M. Write. After writing, the transmission FIFO 607 # M transmits an interrupt signal serving as a synchronization signal to the interrupt controller 608 of the register synchronization control device 205 of the synchronization destination CPU. Along with the interrupt signal, the transmission FIFO 607 # M transmits the register name and the register value to the reception FIFO 606 of the register synchronization control device 205 of the synchronization destination CPU. After transmission, the transmission FIFO 607 # M overwrites the synchronization flag with 0.
  • the CPU #M sets the synchronization control information in the synchronization control register 603 # M, not all the contents of the synchronization control information are set when a synchronization event occurs, and some information is set in advance. Also good. For example, in the case of static scheduling in which a synchronization destination CPU is assigned in advance by an assembler or the like, the CPU #M may set a synchronization target register name and a synchronization destination CPU number before the occurrence of a synchronization event. The CPU #M may set a synchronization flag when a synchronization event occurs. In the case of dynamic scheduling in which the synchronization destination CPU is determined by the scheduler, the CPU #M sets a synchronization target register name, a synchronization destination CPU number, and a synchronization flag when a synchronization event occurs.
  • FIG. 9 is an explanatory diagram showing an overview of the register synchronization control device 205 of the synchronization destination CPU when a synchronization event occurs.
  • the interrupt controller 608 # N of the CPU #N serving as the synchronization destination CPU notifies the interrupt controller 602 # N of the interrupt number.
  • the in-CPU arithmetic unit 202 # N notified of the interrupt number via the interrupt controller 602 # N generates a synchronization destination thread and suppresses I / O to the in-CPU register group 203 # N.
  • the reception FIFO 606 # N acquires the register name and the register value. After the acquisition, the register writer 605 # N writes the acquired register value in the in-CPU register group 203 # N. After the writing is completed, the reception FIFO 606 # N notifies the interrupt controller 608 # N of an interrupt signal as a writing completion notification. When receiving the interrupt signal, the interrupt controller 608 # N notifies the interrupt controller 602 # N of the interrupt number.
  • the interrupt number based on the interrupt signal from the register synchronous control device 205 # M and the interrupt number based on the interrupt signal from the reception FIFO 606 # N should be different. Due to the different interrupt numbers, the CPU arithmetic unit 202 # N that has received the interrupt number from the interrupt controller 602 # N and the OS being executed by the CPU # N determine the cause of the interrupt number. Judgment can be made.
  • FIG. 10 is an explanatory diagram showing an outline at the time of designing the multi-core processor system 100.
  • the assembler reads the assembler source 401 and generates an execution object 402 that has been converted one-to-one. Furthermore, the assembler analyzes the structure of the assembler source 401 and generates a register dependency table 501. Note that some assembler sources may be mixed in the C / C ++ source. Even in that case, the multi-core processor system 100 treats it as an assembler source.
  • the structural analysis program reads the assembler source and extracts the block structure with jumps and conditional branches as clauses. Further, the structure analysis program extracts the finally read / written register and the address space on the memory as the input / output data of each block. Subsequently, the structural analysis program uses input / output data to define a case in which a register is used as an input / output value between blocks instead of an address space as a block having a register dependency relationship. The structure analysis program outputs the two blocks having the register dependency relationship and the register having the dependency relationship to the register dependency table 501 as one record.
  • the register dependency table 501 is information describing register names having a dependency relationship between blocks. Specifically, the register dependency table 501 has three fields: a synchronization source block name, a synchronization destination block name, and a dependency register name.
  • the synchronization source block name field stores information on a block that becomes a synchronization source thread
  • the synchronization destination block name field stores information on a block that becomes a synchronization destination thread.
  • the names of the block 405 and the block 406 are stored in the synchronization source block name field and the synchronization destination block name field, for example. Instead of the block name, the head address and end address of the block may be stored.
  • the dependency register name field stores a register name having a dependency relationship between the blocks stored in the synchronization source block name field and the synchronization destination block name field. If the example of FIG. 4 is used, the character string “Gr1” is stored in the dependent register name field.
  • FIG. 11 is a flowchart showing the schedule processing.
  • the flowcharts shown in FIGS. 11 and 12 assume a case in which the thread schedule of the entire multi-core processor system 100 is performed by the CPU # 0 which is the master CPU, and the synchronization source thread is executed by the CPU #M.
  • CPU #M and CPU # 0 may be the same CPU.
  • CPU # 0 determines the type of event (step S1101).
  • the CPU # 0 determines whether or not the execution object to be rescheduled is described in the assembler source (step S1102).
  • CPU # 0 can determine by referring to the register dependency table 501. Specifically, CPU # 0 is described in the assembler source when the execution object of the synchronization source thread exists in the synchronization source block name field and the execution object to be rescheduled exists in the synchronization destination block name field. Judge as.
  • the cause of rescheduling is, for example, when the load on the CPUs 101 is unbalanced.
  • the load is unbalanced and a load is applied to a specific CPU, it is possible to equalize the load by migrating a thread being executed by a high-load CPU to a low-load CPU.
  • the CPU # 0 sets the CPU #N to be assigned after rescheduling to the synchronization destination CPU (step S1103). Note that when the route of step S1102: Yes is passed, a synchronization event for synchronizing the registers between the two CPUs has occurred.
  • step S1101 thread activation
  • the CPU # 0 determines whether or not the execution object of the new thread is described in the assembler source (step S1104). Specifically, CPU # 0 determines that the execution object of the synchronization source thread exists in the synchronization source block name field and the execution object of the new thread exists in the synchronization destination block name field, and is described in the assembler source to decide.
  • a case specialized in parallel execution is, for example, a case where a block of an execution object is an iterative process. Specifically, if the specific block is a block that performs processing 100 times, the synchronization source thread executes 50 times, and the synchronization destination thread executes the remaining 50 times as a new thread.
  • step S1104 If it is described in the assembler (step S1104: Yes), the CPU # 0 sets the CPU #N to which the new thread is assigned as the synchronization destination CPU (step S1105). Note that when the route of step S1104: Yes is passed, a synchronization event for synchronizing the registers between the two CPUs has occurred. After the process of step S1103 or step S1105, CPU # 0 generates synchronization control information from the synchronization target register name, the synchronization destination CPU number, and the synchronization flag (step S1106).
  • the CPU # 0 obtains the synchronization target register name from the value stored in the dependency register name field of the record in which the synchronization source block name field and the synchronization destination block name field exist in the register dependency table 501. After the generation, the CPU # 0 outputs the generated synchronization control information to the synchronization control register 603 # M of the register synchronization control device 205 # M serving as the synchronization source CPU (step S1107).
  • the CPU # 0 notifies the synchronization control information to the driver 801 # M operating on the CPU #M, and the synchronization control information is transmitted to the synchronization control register 603 when the driver 801 # M is executed. Is set. After setting the synchronization control information in the synchronization control register 603 # M, the CPU # 0 proceeds to the process of step S1101.
  • step S1101 If the event is other than rescheduling or thread activation (step S1101: other), the CPU # 0 executes normal scheduling processing according to the event (step S1108). Further, even if not described in the assembler (step S1102: No, step S1104: No), the CPU # 0 executes the process of step S1108. Note that events other than rescheduling and thread activation include when a thread's time slice time expires or when a thread ends.
  • the register synchronization control unit 205 # M of the CPU #M which is the synchronization source CPU, executes the register synchronization control process based on the synchronization control information output in the process of step S1107 (step S1109). Further, the register synchronization control device 205 # N of the CPU #N that is the synchronization destination CPU also executes the register synchronization control processing in conjunction with the register synchronization control device 205 # M. Details of the register synchronization control processing will be described later with reference to FIG.
  • FIG. 12 is a flowchart showing the register synchronization control process.
  • the register synchronization control device 205 # M obtains the synchronization target register name and the synchronization destination CPU name from the synchronization control register 603 # M (step S1201). After the acquisition, the register synchronization control device 205 # M reads the value of the register corresponding to the synchronization target register name from the in-CPU register group 203 # M by the register reader 604 # M (step S1202). The register synchronization control device 205 # M transmits the interrupt signal, the synchronization target register name, and the value to the register synchronization control device 205 # N corresponding to the synchronization destination CPU name by the transmission FIFO 607 # M (step S1203). After the transmission, the register synchronization control device 205 # M sets the synchronization flag to 0, and ends the register synchronization control process as the register synchronization source.
  • the register synchronization control device 205 # N receives an interrupt signal by the interrupt controller 608 # N (step S1204).
  • the register synchronization controller 205 # N that has received the interrupt signal notifies the interrupt controller 602 # N of an interrupt number indicating reception of the register value by the interrupt controller 608 # N (step S1205).
  • the register synchronization control device 205 # N receives the synchronization target register name and value by the reception FIFO 606 # N (step S1206).
  • the register synchronization control device 205 # N After the reception, the register synchronization control device 205 # N writes the received register value from the in-CPU register group 203 # N to the register corresponding to the synchronization target register name by the register writer 605 # N (step S1207). After the writing, the register synchronization control device 205 # N notifies the interrupt controller 602 # N of the interrupt number indicating the completion of writing by the interrupt controller 608 # N (step S1208). After the notification, the register synchronization control device 205 # N ends the register synchronization control process as the register synchronization destination. In step S1205, the CPU #N that has received the interrupt number generates a new thread and starts or starts a rescheduled thread (step S1209).
  • step S1207 since the register synchronization control device 205 # N is accessing the in-CPU register group 203 # N, the CPU # N is prevented from accessing the in-CPU register group 203 # N. . Accordingly, at the end of the processing in step S1209, a new thread or a rescheduled thread cannot access the CPU register group 203 # N, and the above-described thread is not in an executable state.
  • the CPU #N that has received the interrupt number through the processing of step S1208 starts access to the in-CPU register group 203 # N (step S1210). Since the CPU #N can access the in-CPU register group 203 # N, a new thread or a rescheduled thread is set in an executable state.
  • the synchronization control system when the thread of the synchronization source core is transferred to the synchronization destination core, the thread is associated with the thread. Identify the register. Subsequently, the multi-core processor system inherits the specified register value from the synchronization source core to the synchronization destination core. As a result, the multi-core processor system can execute in parallel in multi-core without modifying the assembler source generated for the single core, and can ensure the inheritance of the assembler source.
  • the multi-core processor system when the value read from the specific register of the synchronization source core is written, the multi-core processor system notifies the synchronization destination core of information indicating that the detected thread is executable, and then detects the detected thread. It may be set to an executable state. As a result, the multi-core processor system can execute the thread after the synchronization destination core register inherits the value of the synchronization source core register and the synchronization destination core thread can operate normally.
  • the register in the table for specifying the combination with the register associated with the thread does not need to specify any core of the multi-core processor.
  • the multi-core processor system can determine that the register in the table is an execution object generated from a source for a single core because none of the cores of the multi-core processor is specified.
  • the table specifying the combination with the register associated with the thread does not need to specify a storage area other than the register.
  • An execution object by the C ++ source is added with a synchronization control code for saving data in a cache block or RAM in a front block and reading data saved in a back block between blocks having a dependency relationship.
  • the execution object by the assembler source is not added with the synchronization control code, and does not access the storage area other than the register between the blocks having the dependency relationship. Therefore, the multi-core processor system can determine that the table is an execution object generated from the assembler source because the table does not designate a storage area other than the register.
  • the multi-core processor system transfers the register value from the synchronization source core to the synchronization destination core when it is detected that the second thread branched from the first thread of the synchronization source core is generated in the synchronization destination core. You may copy. Thereby, even when a new thread is generated, the multi-core processor system can execute in parallel in multi-core without modifying the assembler source generated for a single core.
  • the number of processing clocks of the synchronization control according to the prior art 2 was about 100 to 1000 clocks.
  • the number of processing clocks of the synchronization control according to the present embodiment is about 10 clocks even when the operations of the synchronization control register are combined, and an efficiency of 90 to 99% can be achieved per synchronization control.
  • the processing time of the synchronization control according to the prior art 2 is about 0.2 to 2 [microseconds] per one time, but the processing time of the synchronization control according to the present embodiment is completed in about 20 [nanoseconds]. become.
  • the appearance frequency of the synchronous control is about once every 1 [microseconds]
  • the performance is improved by about 10% as a multi-core processor system.
  • the information generation method described in the present embodiment can be realized by executing a program prepared in advance on a computer such as a personal computer or a workstation.
  • the information generation program is recorded on a computer-readable recording medium such as a hard disk, a flexible disk, a CD-ROM, an MO, and a DVD, and is executed by being read from the recording medium by the computer.
  • the information generation program may be distributed through a network such as the Internet.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)
  • Hardware Redundancy (AREA)

Abstract

 マルチコアプロセッサの中のCPU(#0)は、検出部(502)によって、マルチコアプロセッサ内において同期元コアとなるCPU(#M)で実行中のスレッドを同期先コアとなるCPU(#N)に移行することを検出する。検出後、CPU(#0)は、特定部(503)によって、レジスタ依存テーブル(501)を参照して、移行することが検出されたスレッドに対応する特定のレジスタを特定する。特定後、CPU(#0)は、生成部(504)によって、特定された特定のレジスタおよび同期先コアを特定する同期制御情報を生成する。マルチコアプロセッサと通信可能に接続される同期制御部(505)は、生成された同期制御情報をCPU(#0)から取得する。続けて、同期制御部(505)は、同期制御情報から得られる特定のレジスタの値をCPU(#M)の特定のレジスタから読み込み、CPU(#N)の特定のレジスタに、読み込んだ値を書き込む。

Description

マルチコアプロセッサシステム、同期制御システム、同期制御装置、情報生成方法、および情報生成プログラム
 本発明は、レジスタ間の同期を制御するマルチコアプロセッサシステム、同期制御システム、同期制御装置、情報生成方法、および情報生成プログラムに関する。
 近年、プロセッサコアが1つ搭載されたコンピュータであるシングルコアプロセッサに代わって、プロセッサが複数搭載されたコンピュータであるマルチコアプロセッサの形態を取る装置が増えている。従来のシングルコア向けのソフトウェア資産を、マルチコアプロセッサに適用する場合、1つのプログラムを複数のコアで実行するため、レジスタの値の継承性を考慮することが要求される。
 たとえば、実行オブジェクトの生成に関する技術として、アセンブラプログラム上では仮のレジスタで実装し、アセンブルの段階で仮のレジスタをフロー解析によって生存区間を判断し、実レジスタに置換するという技術が開示されている(たとえば、下記特許文献1を参照。)。特許文献1にかかる技術では、レジスタの生存区間を明確にすることができる。したがって、シングルコアに書かれたアセンブラコードを、マルチコアプロセッサシステムによって並列処理するように変更する場合、不用な同期処理の挿入、または同期処理の挿入漏れを回避することができる。
 また、マルチコアプロセッサシステムでの負荷分散に関する技術として、たとえば、処理モジュールにプロファイル情報を持ち、プロファイル情報に基づいて各コアが実行する処理モジュールを決定するという技術が開示されている(たとえば、下記特許文献2を参照。)。また、マルチコアプロセッサシステムにおける並列処理のためのハードウェアの技術として、複数のコアからアクセス可能となる2ポートのレジスタを有することで、データ転送を容易に行える技術が開示されている(たとえば、下記特許文献3を参照。)。
 また、マルチコアプロセッサシステムのレジスタの同期方法として、キャッシュコヒーレンシ機構を利用した技術が存在する(以下、「従来技術1」と称する。)。たとえば、特定のコアのレジスタと、他のコアのレジスタの同期を取る場合、特定のコアは、はじめに、レジスタの値をキャッシュメモリに書き込む。キャッシュメモリにレジスタの値が書き込まれたことを検出したキャッシュコヒーレンシ機構は、他のコアのキャッシュメモリにレジスタの値を通知する。最後に、他のコアが、他のコアのキャッシュメモリからレジスタの値を読み込み、他のコアのレジスタに書き込む。前述の一連の動作により、レジスタの同期を行うことができる。
 また、マルチコアプロセッサシステムのレジスタの同期方法として、たとえば、同期を行う専用命令を用意する技術が開示されている(たとえば、下記特許文献4を参照。)。特許文献4にかかる技術では、特定のコアが専用命令を実行した際に、特定のコアは他のコアへレジスタの値を送信し、特定のコアは、他のコアがレジスタ転送命令を実行するまで一時停止状態にする。これにより、従来技術1と等しい処理内容を、ソフトウェア的には1ステップで実行することができる。
 図13は、従来例におけるマルチコアプロセッサシステムにて、CプログラムまたはC++プログラムの実行時の、レジスタの同期方法を示す説明図である。設計時、コンパイラが、Cソース、またはC++ソースとなるC/C++ソース1301を読み込み、同期制御コードが追加された実行オブジェクトの一部として、ブロック1302とブロック1303を生成する。また、同期制御コードに対応する箇所は、ブロック1304、ブロック1305となる。具体的に、C/C++ソース1301は、“A=A+1;func(A);”という2ステートメントを含んでおり、ブロック1302とブロック1303は、前述の2ステートメントに対応する実行オブジェクトである。
 図13の例では、ブロック1302とブロック1303を実行するCPUが異なっても、ブロック1304、ブロック1305によって、レジスタGr1の同期を取ることができ、正常に動作することができる。具体的に、ブロック1304では、レジスタGr1をキャッシュメモリ等の領域である0x0000FF00に格納する。続けて、ブロック1305では、0x0000FF00に格納した値を読み込んでレジスタGr1に設定する。このように、コンパイル時に、同期制御コードを追加することにより、シングルコア向けのプログラムからマルチコアプロセッサ向けの実行オブジェクトを生成する技術が存在する(以下、「従来技術2」と称する。)。
特開平8-234997号公報 特開2006-99156号公報 特開平01-048163号公報 特開平04-195664号公報
 しかしながら、上述した従来技術において、従来技術1、従来技術2、また特許文献4にかかる技術では、新たに同期制御コードを追加している。したがって、従来技術1、従来技術2、また特許文献4にかかる技術をアセンブラソースに適用すると、生成される実行オブジェクトに実行コードが改変するという問題があった。アセンブラソースは、たとえば、1ステップでも命令数を減らしたい場合に、設計者によって生成される。したがって、アセンブラソースは、機械語に1対1変換されることが期待されており、不用意に実行コードが追加されることによって、設計者の意図しないコード量となってしまうという問題があった。
 本発明は、上述した従来技術による問題点を解消するため、アセンブラソースを改変せずにマルチコアで並列実行できるマルチコアプロセッサシステム、同期制御システム、同期制御装置、情報生成方法、および情報生成プログラムを提供することを目的とする。
 上述した課題を解決し、目的を達成するため、開示のマルチコアプロセッサシステムは、マルチコアプロセッサの中の特定のコアにより、マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出し、特定のコアにより、スレッド群の各々のスレッドとスレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、移行することが検出されたスレッドに対応する特定のレジスタを特定し、特定のコアにより、特定された特定のレジスタおよび同期先コアを特定する同期制御情報を生成し、マルチコアプロセッサと通信可能に接続され、生成された同期制御情報を特定のコアから取得し、同期制御情報から得られる特定のレジスタの値を同期元コアの特定のレジスタから読み込み、同期先コアの特定のレジスタに、同期元コアの特定のレジスタから読み込んだ値を書き込む。
 本マルチコアプロセッサシステム、同期制御システム、同期制御装置、情報生成方法、および情報生成プログラムによれば、シングルコア向けのアセンブラソースを改変することなく、マルチコアで正常に並列実行できるという効果を奏する。
実施の形態にかかるマルチコアプロセッサシステム100のハードウェアを示すブロック図である。 CPUs101に専用同期回線を用いたレジスタ同期制御装置を適用した状態を示すブロック図である。 CPUs101にスヌープ機構201を用いたレジスタ同期制御装置を適用した状態を示すブロック図である。 同期イベントが発生する状態を示す説明図である。 マルチコアプロセッサシステム100の機能を示すブロック図である。 同期イベント未発生時におけるレジスタ同期制御装置205の概要を示す説明図である。 同期制御レジスタ603の記憶内容の一例を示す説明図である。 同期イベント発生時における同期元CPUのレジスタ同期制御装置205の概要を示す説明図である。 同期イベント発生時における同期先CPUのレジスタ同期制御装置205の概要を示す説明図である。 マルチコアプロセッサシステム100の設計時における概要を示す説明図である。 スケジュール処理を示すフローチャートである。 レジスタ同期制御処理を示すフローチャートである。 従来例におけるマルチコアプロセッサシステムにて、CプログラムまたはC++プログラムの実行時の、レジスタの同期方法を示す説明図である。
 以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、同期制御システム、同期制御装置、情報生成方法、および情報生成プログラムの好適な実施の形態を詳細に説明する。
(マルチコアプロセッサシステムのハードウェア)
 図1は、実施の形態にかかるマルチコアプロセッサシステム100のハードウェアを示すブロック図である。図1において、マルチコアプロセッサシステム100は、CPUを複数搭載するCPUs101と、ROM(Read‐Only Memory)102と、RAM(Random Access Memory)103と、を含む。また、マルチコアプロセッサシステム100は、フラッシュROM104と、フラッシュROMコントローラ105と、フラッシュROM106と、を含む。また、マルチコアプロセッサシステム100は、ユーザやその他の機器との入出力装置として、ディスプレイ107と、I/F(Interface)108と、キーボード109と、を含む。また、各部はバス110によってそれぞれ接続されている。
 ここで、CPUs101は、マルチコアプロセッサシステム100の全体の制御を司る。CPUs101は、シングルコアのプロセッサを並列して接続した全てのCPUを指している。CPUs101は、CPU#0、CPU#1を含む。さらに、CPUs101は、3つ以上のCPUを含んでいてもよい。CPU#0、CPU#1は、それぞれ専用のキャッシュメモリを有する。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるCPUが並列されている形態を例にあげて説明する。
 また、CPU#0、CPU#1は、それぞれ専用のレジスタを持ち、さらに本実施の形態の特徴となる、それぞれ専用のレジスタ同期制御装置を有している。レジスタ同期制御装置の詳細については、図2にて後述する。
 ROM102は、ブートプログラムなどのプログラムを記憶している。RAM103は、CPUs101のワークエリアとして使用される。フラッシュROM104は、OS(Operating System)などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、OSを更新する場合、マルチコアプロセッサシステム100は、I/F108によって新しいOSを受信し、フラッシュROM104に格納されている古いOSを、受信した新しいOSに更新する。
 フラッシュROMコントローラ105は、CPUs101の制御に従ってフラッシュROM106に対するデータのリード/ライトを制御する。フラッシュROM106は、フラッシュROMコントローラ105の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム100を使用するユーザがI/F108を通して取得した画像データ、映像データなどである。フラッシュROM106は、たとえば、メモリカード、SDカードなどを採用することができる。
 ディスプレイ107は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ107は、たとえば、TFT液晶ディスプレイなどを採用することができる。
 I/F108は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク111に接続され、ネットワーク111を介して他の装置に接続される。そして、I/F108は、ネットワーク111と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F108には、たとえばモデムやLANアダプタなどを採用することができる。
 キーボード109は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード109は、タッチパネル式の入力パッドやテンキーなどであってもよい。
 図2は、CPUs101に専用同期回線を用いたレジスタ同期制御装置を適用した状態を示すブロック図である。図2において示されるハードウェアは、CPUs101に含まれるCPU#0、CPU#1、RAM103、キャッシュコヒーレンシ機構の一種であるスヌープ機構201である。また、CPU#0、CPU#1の内部には、CPU内演算ユニット202、CPU内レジスタ群203、キャッシュメモリ204が存在する。以下、CPU#0、CPU#1の各々に対応する意味で、接尾記号である“#0”、“#1”を、各ハードウェア、ソフトウェアに付与した場合は、それぞれのCPUの内部に存在するハードウェア、それぞれのCPUで実行中のソフトウェアであることを示す。
 さらにCPU#0、CPU#1の内部には、本実施の形態での特徴である、レジスタ同期制御装置205と通信部206が存在する。また、CPU内演算ユニット202は、CPU内レジスタ群203にアクセス可能である。また、CPU内演算ユニット202とレジスタ同期制御装置205は、アドレスバス207で接続され、通信部206#0、通信部206#1は、専用回線208で接続されている。
 スヌープ機構201は、CPU#0、CPU#1がアクセスするキャッシュメモリ204#0、キャッシュメモリ204#1の整合性を取る装置である。スヌープ機構201は、キャッシュメモリが自身のキャッシュメモリや他CPUのキャッシュメモリの更新状態を管理し、他のキャッシュメモリと更新状態の情報を交換する。更新状態の情報を交換することで、スヌープ機構201は、どのキャッシュメモリに最新のデータが存在するかを判断する。また、各キャッシュメモリが最新のデータを取得できるように、スヌープ機構201は、自身のキャッシュメモリの状態を変更したりキャッシュメモリの無効化を行ったりする。
 CPU内演算ユニット202は、整数演算操作、論理演算、ビットシフト操作等を行う演算ユニットである。CPU内演算ユニット202は、CPU内レジスタ群203をRAM103等から読み込んだ命令コードに従って演算を行う。
 CPU内レジスタ群203は、CPU内演算ユニット202が演算を行うために用いられる記憶装置である。CPU内レジスタ群203は、用途に応じていくつかの種類が存在する。たとえば、アキュムレータ、アドレスレジスタ、汎用レジスタ、プログラムカウンタ、ステータスレジスタ等が存在する。
 アキュムレータは、演算結果を記憶するといった、データを一時的に記憶するレジスタである。アドレスレジスタは、メモリをアクセスする場合のアドレスを指定するときに用いるレジスタである。汎用レジスタは、特定の目的を持たず、命令により各種機能を果たすレジスタであり、特に、アキュムレータとアドレスレジスタの機能を有している。
 プログラムカウンタは、次に実行するべき命令が格納されているメインメモリ上のアドレスを指し示すレジスタである。ステータスレジスタは、演算結果によって生じた桁あふれやアキュムレータが0であることの状態、あるいは各種のプロセッサの状態を保持するレジスタである。なお、アキュムレータ、アドレスレジスタ、汎用レジスタ、プログラムカウンタ、ステータスレジスタ以外に、CPUの仕様によっては、専用レジスタも存在する。たとえば、浮動小数点を扱う浮動小数点レジスタが存在する。
 たとえば、CPU内演算ユニット202は、RAM103から、機械語で書かれた命令データをフェッチする。ここで、命令データがニーモニックで表現すると“Store Gr1 Acc#”と書かれていたと想定する。“Gr1”は、汎用レジスタを指しており、“Acc#”はアキュムレータを指している。フェッチ後、CPU内演算ユニット202は、命令データを実行する。前述の例では、CPU内演算ユニット202は、アキュムレータの値を汎用レジスタ“Gr1”に格納する。キャッシュメモリ204は、CPU#0、CPU#1がRAM103のデータに高速にアクセス可能とするため、RAM103のデータの一部をコピーした記憶領域である。
 レジスタ同期制御装置205は、CPU内レジスタ群203#0とCPU内レジスタ群203#1の同期を制御する装置である。たとえば、レジスタ同期制御装置205#0、レジスタ同期制御装置205#1は、汎用レジスタの一つであるGr1レジスタをCPU#0とCPU#1で同期を取る。
 通信部206は、レジスタ同期制御装置205に接続されており、他のレジスタ同期制御装置205との通信を行う。具体的には、通信部206#0は、レジスタ同期制御装置205#0が取得したCPU#0のレジスタの値を、専用回線208を通じてレジスタ同期制御装置205#1に転送する。レジスタの値を受信した通信部206#1は、レジスタの値をレジスタ同期制御装置205#1に通知する。
 図3は、CPUs101にスヌープ機構201を用いたレジスタ同期制御装置を適用した状態を示すブロック図である。図2では、通信部206#0と通信部206#1が専用回線208によって通信を行っていたが、図3では、キャッシュメモリ204とスヌープ機構201を用いてレジスタの値等を転送する。
 具体的には、マルチコアプロセッサシステム100の設計時、設計者が、キャッシュメモリ204の中に、レジスタ同期のための保護領域301を確保する。保護領域301は、キャッシュメモリ204の領域のうち、CPUに割り当てられるスレッドなどによって使用され、データが入れ替わる領域とは別の領域であり、データが消去されないように保護されている領域である。初めに、通信部206#0は、保護領域301#0にレジスタの値を書き込む。保護領域301#0に書き込まれたことを検出したスヌープ機構201は、保護領域301#0の内容を保護領域301#1にコピーする。コピー後、通信部206#1は、保護領域301#1に書き込まれたレジスタの値をレジスタ同期制御装置205#1に通知する。
 図4は、同期イベントが発生する状態を示す説明図である。図4では、アセンブラソース401からの実行オブジェクト402が実行されることによって、同期イベントが発生する状態を示している。また、符号403に示す説明図は、実行オブジェクトがシングルコアで動作する場合を示しており、符号404に示す説明図は、実行オブジェクトがマルチコアで動作する場合を示している。
 設計時、アセンブラがアセンブラソース401を読み込み、1対1変換された実行オブジェクト402を生成する。図4の例では、アセンブラは、実行オブジェクト402として、ブロック405とブロック406を生成する。なお、アセンブラソース401は、C/C++ソース1301と同様の内容となる“A=A+1;func(A);”という2ステートメントが記載されている。また、アセンブラソース401は、前述の2ステートメントを最小の命令数で実行するため、意図的な同期制御コードは挿入されていない。
 各ブロックの処理内容として、ブロック405は、アキュムレータの値をレジスタGr1に格納し、func()が存在する0x02FF0000番地にジャンプするといった命令が記載されている。ブロック406は、レジスタGr1の内容をアキュムレータに読み直すといった命令が記載されている。
 CPUがブロック405、ブロック406を実行する際には、CPUはスレッドを生成し、スレッド上で各ブロックを実行する。符号403に示す説明図では、ブロック405によるスレッドとブロック406によるスレッドをシングルコアが実行する場合を想定している。このとき、ブロック405のレジスタGr1とブロック406のレジスタGr1は同一であるため、正常に動作する。
 符号404に示す説明図では、ブロック405によるスレッドをCPUs101のうちのCPU#Mが実行し、ブロック406をCPU#Mとは異なるCPUであるCPU#Nが実行するといった、マルチコアで動作する場合を想定している。なお、MとNは、0以上の整数である。このとき、ブロック405のレジスタGr1は、CPU#MのレジスタGr1であり、ブロック406のレジスタGr1はCPU#NのレジスタGr1となるため、正常に動作しない。
 値が等しくなれば正常に動作するため、たとえば、CPU#MのレジスタGr1とCPU#NのレジスタGr1が同期を取ることで、マルチコアでブロック405、ブロック406を正常に動作させることができる。具体的には、CPU#MのレジスタGr1の値を、CPU#NのレジスタGr1に上書きすることで、同期を取ることができる。
 以下、正常動作するために、2つのCPU間のレジスタの同期を取る契機が発生した場合、同期イベントが発生したとする。また、レジスタの同期元となるCPU#Mを、同期元CPUとし、レジスタの同期先となるCPU#Nを、同期先CPUとする。さらに、図4の例では、同期元となるスレッドを同期元スレッド、同期先となるスレッドを同期先スレッドとする。図4の例では、ブロック405によるスレッドが同期元スレッド、ブロック406によるスレッドが同期先スレッドとなる。なお、同期元CPUから、同期先CPUにスレッドが移行した場合、同期元スレッドと同期先スレッドは同一のスレッドである。また、同期先スレッドが同期元スレッドから分岐されたスレッドである場合、同期元スレッドと同期先スレッドは異なるスレッドとなる。
(マルチコアプロセッサシステム100の機能)
 次に、マルチコアプロセッサシステム100の機能について説明する。図5は、マルチコアプロセッサシステム100の機能を示すブロック図である。マルチコアプロセッサシステム100は、検出部502と、特定部503と、生成部504と、同期制御部505と、設定部506と、取得部507と、読込部508と、書込部509と、送信部510と、受信部511と、を含む。
 この制御部となる機能のうち、検出部502~生成部504、設定部506は、記憶装置に記憶されたプログラムをCPUs101が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図1に示したROM102、RAM103、フラッシュROM104、フラッシュROM106などである。
 また、同期制御部505と、取得部507と、読込部508と、書込部509と、送信部510と、受信部511は、図2に示したレジスタ同期制御装置205によってその機能を実現する。
 また、図5では、CPU#0がマルチコアプロセッサシステム100を制御するマスタCPUとして、またCPU#MとCPU#Nがレジスタ間の同期制御対象のCPUであることを想定している。また、CPU#0がマスタCPUであり、かつレジスタ間の同期制御対象のCPUとなってもよい。たとえば、CPU#0がマスタCPUであり、レジスタ間の同期制御対象の同期先CPUとなる場合、CPU#0の機能として設定部506を含んでもよい。
 また、マルチコアプロセッサシステム100は、スレッド群の各々のスレッドとスレッドに対応付けされたレジスタとの組み合わせを特定するレジスタ依存テーブル501にアクセス可能である。レジスタ依存テーブル501は、スレッドの実行対象となる実行オブジェクトについて、実行オブジェクトを並列で実行可能なブロックに分割した際に、ブロック間の情報とブロック間で値を引き継ぐレジスタを記憶している。レジスタ依存テーブル501の詳細は、図10にて後述する。
 また、レジスタ依存テーブル501におけるスレッドに対応付けされたレジスタは、マルチコアプロセッサのいずれのコアも特定しなくてもよい。具体的には、レジスタ依存テーブル501には、スレッドに対応する実行オブジェクトの一部である2つのブロックの情報と、レジスタ名が格納されている。レジスタ名に関しては、CPUs101の全てのCPUが有するレジスタ名であり、レジスタ名でCPUs101のうちいずれかのCPUを特定しない。
 また、レジスタ依存テーブル501は、レジスタ以外の他の記憶領域を指定しなくてもよい。具体的には、レジスタ依存テーブル501は、レジスタ名が格納されており、他の記憶領域となるキャッシュメモリ204、RAM103、フラッシュROM104等を指定しない。
 検出部502は、マルチコアプロセッサの中の特定のコアにより、マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出する機能を有する。たとえば、検出部502は、CPUs101の中のCPU#0により、CPU#Mで実行中のスレッドをCPU#Nに移行することを検出する。
 また、検出部502は、同期元コアで実行中の第1のスレッドから分岐された第2のスレッドを同期先コアに生成することを検出してもよい。たとえば、検出部502は、CPU#Mで実行中の第1のスレッドから分岐される第2のスレッドをCPU#Nに生成することを検出する。なお、検出されたという情報は、CPU内レジスタ群203#0、キャッシュメモリ204#0、RAM103などの記憶領域に記憶される。
 特定部503は、特定のコアにより、レジスタ依存テーブル501を参照して、検出部502によって移行することが検出されたスレッドに対応する特定のレジスタを特定する機能を有する。また、特定部503は、CPU#Mで実行中の第1のスレッドおよび第1のスレッドから分岐され、CPU#Nで実行される第2のスレッドに対応する特定のレジスタを特定してもよい。
 具体的には、特定部503は、CPU#0により、レジスタ依存テーブル501のレコードのうち、CPU#Mが実行する実行オブジェクトのブロックとCPU#Nが実行する実行オブジェクトのブロックに基づいて、該当するレコードを特定する。該当するレコードが特定できた場合に、特定部503は、該当するレコードに記憶されているレジスタ名を、特定のレジスタとして特定する。なお、特定されたレジスタの情報は、CPU内レジスタ群203#0、キャッシュメモリ204#0、RAM103などの記憶領域に記憶される。
 生成部504は、特定のコアにより、特定部503によって特定された特定のレジスタおよび同期先コアを特定する同期制御情報を生成する機能を有する。たとえば、特定部503によってGr1レジスタが特定されたと想定する。このとき、生成部504は、CPU#0により、Gr1レジスタおよびCPU#Nを特定する同期制御情報を生成する。
 特定のレジスタおよび同期先コアを特定する方法としては、たとえば、同期制御情報は、特定のレジスタの名称、または、ID(IDentification)が格納され、同期先コアのCPU番号が格納される。なお、生成された同期制御情報は、RAM103などの記憶領域に記憶され、同期元CPU上で動作するレジスタ同期制御装置205のドライバによって、レジスタ同期制御装置205の記憶領域である同期制御レジスタに記憶される。同期制御レジスタについては、図6にて詳細に後述する。
 同期制御部505は、マルチコアプロセッサと通信可能に接続され、生成部504によって生成された同期制御情報を特定のコアから取得し、同期制御情報から得られる特定のレジスタの値を同期元コアの特定のレジスタから読み込む。続けて、同期制御部505は、同期先コアの特定のレジスタに、同期元コアの特定のレジスタから読み込んだ値を書き込む機能を有する。たとえば、同期制御部505は、同期制御情報をCPU#0から取得し、レジスタGr1の値をCPU#MのCPU内レジスタ群203#MのうちレジスタGr1から読み込む。続けて、同期制御部505は、CPU#NのCPU内レジスタ群203#NのレジスタGr1に、CPU#MのレジスタGr1から読み込んだ値を書き込む。
 また、同期制御部505は、同期元コアの特定のレジスタから読み込んだ値を書き込んだ場合に、同期先コアに、検出されたスレッドが実行可能となった情報を通知してもよい。同期先コアに検出されたスレッドが実行可能となった情報とは、たとえば、割込信号であり、同期制御部505は、割込信号を同期先コアに通知する。具体的には、同期制御部505は、CPU#NのCPU内レジスタ群203#NのうちレジスタGr1に、CPU#MのレジスタGr1から読み込んだ値を書き込んだ場合、CPU#Nに割込信号を通知する。
 設定部506は、同期先のコアにより、検出されたスレッドを同期先コアにて実行可能な状態に設定する機能を有する。また、設定部506は、同期制御部505から検出されたスレッドが実行可能となった情報を受け取った場合、検出されたスレッドを同期先コアにて実行可能な状態に設定してもよい。たとえば、設定部506は、CPU#Nにより、検出されたスレッドを移行し、実行可能な状態に設定する。また、同期元コアで実行中の第1のスレッドから分岐した第2のスレッドが同期先コアに生成される場合、CPU#Nは、第2のスレッドがアクセスする領域、たとえば、スレッドコンテキストをRAM103に確保し、第2のスレッドが実行可能な状態に設定する。
 取得部507は、生成部504によって特定のレジスタおよび同期先コアを特定する同期制御情報が生成された場合、特定のコアから同期制御情報を取得する機能を有する。具体的には、取得部507は、Gr1レジスタおよびCPU#NのCPU番号の同期制御情報を取得する。なお、取得された情報は、レジスタ同期制御装置205#Mの記憶領域に格納される。
 読込部508は、取得部507によって取得された同期制御情報から得られる特定のレジスタの値を同期元コアの特定のレジスタから読み込む機能を有する。具体的には、読込部508は、レジスタGr1の値を、CPU#MのCPU内レジスタ群203#MのうちレジスタGr1から読み込む。なお、読み込まれた値は、レジスタ同期制御装置205#Mの記憶領域に格納される。
 書込部509は、同期先コアの特定のレジスタに、読込部508によって同期元コアの特定のレジスタから読み込まれた値を書き込む。具体的には、書込部509は、CPU#NのCPU内レジスタ群203#NのうちレジスタGr1に、CPU#MのレジスタGr1から読み込まれた値を書き込む。
 送信部510は、特定のレジスタおよび読込部508によって読み込まれた特定のレジスタの値を、同期先コアに送信する機能を有する。具体的には、送信部510は、レジスタGr1およびレジスタGr1の値を、レジスタ同期制御装置205#Nに送信する。
 受信部511は、他の同期制御装置により特定のレジスタおよび特定のレジスタの値を受信する機能を有する。具体的には、受信部511は、レジスタ同期制御装置205#MによりレジスタGr1およびレジスタGr1の値を受信する。なお、受信したレジスタとレジスタの値は、レジスタ同期制御装置205#Nの記憶領域に格納される。
 図6は、同期イベント未発生時におけるレジスタ同期制御装置205の概要を示す説明図である。図6ではCPU#0の内部を用いて説明を行う。CPU#0以外のCPUの内部も、図6で示すCPU#0の内部と等しい。図6で示すハードウェアは、CPU内演算ユニット202#0、CPU内外部I/O601#0、割込コントローラ602#0、CPU内レジスタ群203#0、レジスタ同期制御装置205#0である。CPU内外部I/O601#0とレジスタ同期制御装置205#0は、アドレスバス207#0によって接続されている。また、アドレスバス207#0は、キャッシュメモリ204#0、バス110に接続しており、バス110を通して、RAM103、ディスプレイ107等のペリフェラルのレジスタに接続している。
 また、レジスタ同期制御装置205#0には、同期制御レジスタ603#0、レジスタリーダ604#0、レジスタライタ605#0、受信FIFO606#0、送信FIFO607#0、割込コントローラ608#0が含まれる。同期制御レジスタ603#0は、アドレスバス207#0に接続されており、受信FIFO606#0と送信FIFO607#0は、通信部206#0に接続されている。割込コントローラ608#0は、割込コントローラ602#0に接続している。
 ここで、マルチコアプロセッサシステム100は、RAM103のアドレス空間に入出力機器のアドレス空間が共存するメモリマップドI/Oの形態を取っている。ここで、キャッシュメモリ204のアドレス領域が32[キロバイト]であり、0x00008000~0x0000FFFFであり、RAM103のアドレス領域が32[メガバイト]であり、0x02000000~0x03FFFFFFである状態を想定する。また、0x00010000~0x01FFFFFFは未割当領域とする。
 たとえば、設計者は、同期制御レジスタ603#0のアドレス領域を、未割当領域のうち0x00020000~0x00020003に設定する。これにより、CPU内演算ユニット202は、アドレス指定によって同期制御レジスタ603#0にアクセスすることができる。なお、マルチコアプロセッサシステム100がRAM103のアドレス空間に入出力機器のアドレス空間が共存しないポートマップドI/Oであっても、各CPUが、入出力機器のアドレス空間に対してアクセスすることで、同期制御レジスタ603#0にアクセスすることができる。
 CPU内外部I/O601#0は、CPU内演算ユニット202#0がアドレスバス207#0に入出力するためのポートである。たとえば、CPU内演算ユニット202#0は、RAM103や、同期制御レジスタ603#0にアクセスする際に、CPU内外部I/O601#0を経由してアクセスする。
 割込コントローラ602#0は、割込信号を受け付け、CPU内演算ユニット202#0に割込番号を通知する。図6の例では、割込コントローラ602#0は、割込コントローラ608#0からの割込信号の入力を受け付けているが、他の割込信号、たとえば、キーボード109からの割込信号を受け付け、CPU内演算ユニット202#0に割込番号を通知する。割込コントローラ602#0は、複数の割込み入力端子を有し、端子ごとに割込番号を設定している。
 たとえば、割込コントローラ602#0のある1端子が、割込コントローラ608#0からの割込信号を受け付け、また別の端子が、キーボード109からの割込み信号を受け付けている。また、割込コントローラ602#0は、複数の割込信号を受け付けた場合に、割込信号に設定された優先順位に従って割込み番号を通知する機能を有する。
 同期制御レジスタ603#0は、同期対象となるレジスタの情報と同期先のCPUの情報が含まれる同期制御情報を設定するレジスタである。同期制御レジスタ603#0は、各CPUの汎用レジスタ、浮動小数点レジスタといったアキュムレータとは異なり、アドレスバス経由で一種のペリフェラルとして見えているレジスタである。同期制御レジスタ603#0は、ユーザプログラムから使用されるレジスタ群、たとえば、アキュムレータ、汎用レジスタ、浮動小数点レジスタ、のコヒーレンスを実現する。具体的には、同期制御レジスタ603は、同期対象レジスタ名に、コヒーレンスを実行するレジスタの名称を記憶する。同期制御レジスタ603に設定される同期制御情報の詳細は、図7にて後述する。
 レジスタリーダ604#0は、同期制御レジスタ603#0の同期対象レジスタ名に書き込まれたレジスタ名から、CPU内レジスタ群203#0のうち同期対象レジスタ名に対応するレジスタの値を読み込む。たとえば、同期対象レジスタ名に“Gr1”が記憶された場合、レジスタリーダ604#0は、CPU内レジスタ群203#0のGr1レジスタの値を読み込む。
 レジスタライタ605#0は、受信FIFO606#0からレジスタ名と値を受け取って、CPU内レジスタ群203#0から受け取ったレジスタ名に対応するレジスタに受け取った値を書き込む。たとえば、受信FIFO606#0から、“Gr1 1”というデータを受け取った場合、レジスタライタ605#0は、CPU内レジスタ群203#0のGr1レジスタに“1”を書き込む。
 受信FIFO606#0は、通信部206#0から送られてきたレジスタ名と値を格納する。また、受信FIFO606#0は、バリア同期を実現するため、レジスタライタ605#0がレジスタの書き込み完了後に、CPU制御として割込信号を割込コントローラ608に通知する。
 送信FIFO607#0は、レジスタリーダ604#0から送られてきた同期先CPUの情報とレジスタ名とレジスタの値を格納する。また、送信FIFO607#0は、通信部206#0に同期先CPUの情報とレジスタ名とレジスタの値を送信する。また、送信FIFO607#0は、レジスタ名とレジスタの値を送信する際に、同期信号となる割込信号を送信する。
 割込コントローラ608#0は、送信FIFO607#0以外となる他の送信FIFO607からの割込信号を受け付け、割込コントローラ602#0に割込番号を通知する。送信FIFO607#0以外となる他の送信FIFO607とは、たとえば、送信FIFO607#1である。また、割込コントローラ608#0は受信FIFO606#0からも割込信号を受け付け、割込コントローラ602#0に割込番号を通知する。なお、割込コントローラ608#0と他の割込コントローラ608とは、通信部206を経由せず、直接結線されている。
 なお、図5に示したレジスタ同期制御装置205の機能部と、図6で示した各部の対応としては、取得部507は同期制御レジスタ603が対応し、読込部508はレジスタリーダ604が対応し、書込部509はレジスタライタ605が対応する。また、送信部510は送信FIFO607が対応し、受信部511は、受信FIFO606が対応する。
 図6の例では、同期イベントが発生していない状態であり、CPU内演算ユニット202は、RAM103からフェッチした命令によって、CPU内レジスタ群203#0のリード、ライトを行う。
 図7は、同期制御レジスタ603の記憶内容の一例を示す説明図である。同期制御レジスタ603は32[ビット]の領域で、同期フラグ、同期対象レジスタ名、同期先CPU番号という3つのフィールドを有する。同期制御情報は、同期対象レジスタ名、同期先CPU番号となるが、同期フラグを含めてもよい。同期フラグフィールドは1[ビット]の領域で、レジスタの同期処理が実行中か否かを示すフラグを格納する。以下、同期フラグが1の場合に、同期処理を実行中であるとして説明を行う。同期対象レジスタ名フィールドは8[ビット]の領域で、同期を行うレジスタ番号を格納する。同期先CPU番号フィールドは8[ビット]の領域で、同期を行うCPU番号を格納する。
 なお、同期対象レジスタ名フィールドと同期先CPU番号フィールドの領域は8[ビット]であり、256種類のレジスタやCPU番号を取り扱うことができる。また、CPU数が256より多い場合でも、予備の15[ビット]を使用することで、対応可能である。
 また、同期先CPU番号フィールドについて、通常はユニキャストとして同期を行うCPU番号が格納されるが、複数のCPUに同じレジスタの値を送信する可能性がある場合、複数のCPUに送るモードを設定してもよい。たとえば、同期先CPU番号フィールドに0xFFが格納された場合は、送信FIFO607は、レジスタの値を自身のCPUを除く全てのCPUにブロードキャストする、というように同期先CPU番号フィールドを設定してもよい。具体的には、同期フラグに1が格納され、同期対象レジスタ名フィールドに、Gr1レジスタのレジスタ番号、同期先CPU番号フィールドにCPU#1のCPU番号が格納される。
 図8は、同期イベント発生時における同期元CPUのレジスタ同期制御装置205の概要を示す説明図である。同期イベントが発生すると、同期元CPUであるCPU#Mが、CPU#M上で実行しているドライバ801#Mによって、同期制御レジスタ603#Mに同期制御情報を設定する。なお、同期制御情報は、マスタCPU、たとえば、CPU#0が出力する。
 設定後、レジスタリーダ604#Mは、同期制御情報によって、CPU内レジスタ群203#Mから、レジスタの値を読み込み、送信FIFO607#Mのバッファに同期先CPUの番号とレジスタ名とレジスタの値を書き込む。書き込み後、送信FIFO607#Mは、同期信号となる割込信号を同期先CPUのレジスタ同期制御装置205の割込コントローラ608に送信する。割込信号とあわせて、送信FIFO607#Mは、レジスタ名とレジスタの値を同期先CPUのレジスタ同期制御装置205の受信FIFO606に送信する。送信後、送信FIFO607#Mは、同期フラグを0に上書きする。
 なお、CPU#Mが同期制御情報を同期制御レジスタ603#Mに設定する場合、同期イベントの発生時に同期制御情報の全ての内容を設定せず、一部の情報を事前に設定してあってもよい。たとえば、アセンブラ等によって予め同期先CPUがアサインされているスタティックスケジューリングの場合であれば、CPU#Mは、同期対象レジスタ名、同期先CPU番号を同期イベントの発生前に設定してもよい。そして、CPU#Mは、同期イベントの発生時に同期フラグを設定してもよい。なお、スケジューラにより同期先CPUが決定されるダイナミックスケジューリングであれば、CPU#Mは、同期イベントの発生時に、同期対象レジスタ名、同期先CPU番号、同期フラグを設定する。
 図9は、同期イベント発生時における同期先CPUのレジスタ同期制御装置205の概要を示す説明図である。同期先CPUとなるCPU#Nの割込コントローラ608#Nは、割込信号を受けると、割込コントローラ602#Nに割込番号を通知する。また、割込コントローラ602#N経由で割込番号を通知されたCPU内演算ユニット202#Nは、同期先スレッドを生成し、CPU内レジスタ群203#NへのI/Oを抑止する。
 割込コントローラ608#Nが割込信号を受けた後、受信FIFO606#Nは、レジスタ名とレジスタの値を取得する。取得後、レジスタライタ605#Nは、取得されたレジスタの値を、CPU内レジスタ群203#Nに書き込む。書き込み完了後、受信FIFO606#Nは、書き込み完了通知として、割込信号を割込コントローラ608#Nに通知する。割込コントローラ608#Nは、割込信号を受けると、割込コントローラ602#Nに割込番号を通知する。
 このとき、好ましくは、レジスタ同期制御装置205#Mからの割込信号による割込番号と、受信FIFO606#Nからの割込信号による割込番号は異なっていた方がよい。割込番号が異なることで、割込コントローラ602#Nから割込番号を受けたCPU内演算ユニット202#Nや、CPU#Nで実行中のOSは、どの要因による割込番号であるかを判断することができる。
 図10は、マルチコアプロセッサシステム100の設計時における概要を示す説明図である。アセンブラは、アセンブラソース401を読み込み、1対1変換された実行オブジェクト402を生成する。さらに、アセンブラは、アセンブラソース401の構造解析を行い、レジスタ依存テーブル501を生成する。なお、C/C++ソースの中に、一部アセンブラソースが混入していることもある。その場合も、マルチコアプロセッサシステム100は、アセンブラソースであるとして扱う。
 具体的な構造解析としては、構造解析プログラムがアセンブラソースを読み込み、ジャンプや条件分岐を節としたブロック構造を抽出する。さらに、構造解析プログラムは、各ブロックの入出力データとして、最終的に読み書きしたレジスタ、メモリ上のアドレス空間を抽出する。続けて、構造解析プログラムは、入出力データを用いて、ブロック間の入出力値としてアドレス空間ではなくレジスタが用いられるケースをレジスタ依存関係のあるブロックとして定義する。構造解析プログラムは、レジスタ依存関係にある2つのブロックと、依存関係があるとされたレジスタとを、1レコードとしてレジスタ依存テーブル501に出力する。
 レジスタ依存テーブル501は、ブロック間で、依存関係のあるレジスタ名を記載した情報である。具体的に、レジスタ依存テーブル501は、同期元ブロック名、同期先ブロック名、依存レジスタ名、という3つのフィールドを有している。
 同期元ブロック名フィールドは、同期元スレッドとなるブロックの情報が、同期先ブロック名フィールドは、同期先スレッドとなるブロックの情報が格納されている。図4の例を用いると、同期元ブロック名フィールドと同期先ブロック名フィールドは、たとえば、ブロック405、ブロック406の名称が格納されている。なお、ブロックの名称の代わりに、ブロックの先頭アドレスと末尾アドレスが格納されてもよい。依存レジスタ名フィールドは、同期元ブロック名フィールドと同期先ブロック名フィールドで格納されたブロック間で依存関係のあるレジスタ名が格納されている。図4の例を用いると、依存レジスタ名フィールドは、“Gr1”という文字列が格納されている。
 図11は、スケジュール処理を示すフローチャートである。図11、図12に示すフローチャートは、マルチコアプロセッサシステム100全体のスレッドのスケジュールをマスタCPUであるCPU#0で行い、同期元スレッドをCPU#Mが実行する場合を想定している。また、CPU#MとCPU#0が同一のCPUであってもよい。
 CPU#0は、イベントの種類を判断する(ステップS1101)。イベントの種類が再スケジューリングである場合(ステップS1101:再スケジューリング)、CPU#0は、再スケジューリング対象の実行オブジェクトがアセンブラソースで記述されていたか否かを判断する(ステップS1102)。なお、判断基準としては、CPU#0が、レジスタ依存テーブル501を参照することで判断できる。具体的に、CPU#0は、同期元スレッドの実行オブジェクトが同期元ブロック名フィールドに存在し、かつ再スケジューリング対象の実行オブジェクトが同期先ブロック名フィールドに存在する場合、アセンブラソースで記述されていたとして判断する。
 また、再スケジューリングが発生する要因としては、たとえば、CPUs101の負荷がアンバランスになった場合である。負荷がアンバランスとなり、特定のCPUに負荷がかかる場合に、負荷の高いCPUで実行中のスレッドを、負荷の低いCPUにマイグレーションすることで、負荷を均等にすることができる。アセンブラソースで記述されていた場合(ステップS1102:Yes)、CPU#0は、再スケジューリング後に割り当てるCPU#Nを同期先CPUに設定する(ステップS1103)。なお、ステップS1102:Yesのルートを通った際に、2つのCPU間のレジスタの同期を取る同期イベントが発生したことになる。
 イベントの種類がスレッド起動である場合(ステップS1101:スレッド起動)、CPU#0は、新規スレッドの実行オブジェクトがアセンブラソースで記述されていたか否かを判断する(ステップS1104)。具体的に、CPU#0は、同期元スレッドの実行オブジェクトが同期元ブロック名フィールドに存在し、かつ新規スレッドの実行オブジェクトが同期先ブロック名フィールドに存在する場合、アセンブラソースで記述されていたとして判断する。
 なお、スレッド起動が発生する要因のうち、特に並列実行に特化した要因として、たとえば、実行オブジェクトのブロックが繰り返し処理であった場合である。具体的には、特定のブロックが100回処理を行うブロックであった場合、同期元スレッドが50回分実行し、さらに新規スレッドとして同期先スレッドが残りの50回分実行する。
 アセンブラで記述された場合(ステップS1104:Yes)、CPU#0は、新規スレッドを割り当てるCPU#Nを同期先CPUに設定する(ステップS1105)。なお、ステップS1104:Yesのルートを通った際に、2つのCPU間のレジスタの同期を取る同期イベントが発生したことになる。ステップS1103、またはステップS1105の処理後、CPU#0は、同期対象レジスタ名と同期先CPU番号と同期フラグとから同期制御情報を生成する(ステップS1106)。
 なお、CPU#0は、同期対象レジスタ名を、レジスタ依存テーブル501の、同期元ブロック名フィールドおよび同期先ブロック名フィールドが存在したレコードの依存レジスタ名フィールドに格納された値から取得する。生成後、CPU#0は、同期元CPUとなるレジスタ同期制御装置205#Mの同期制御レジスタ603#Mに生成された同期制御情報を出力する(ステップS1107)。
 具体的には、CPU#0は、CPU#M上で動作するドライバ801#Mに対して同期制御情報を通知し、ドライバ801#Mが実行されることにより、同期制御レジスタ603に同期制御情報が設定される。同期制御レジスタ603#Mに同期制御情報を設定後、CPU#0は、ステップS1101の処理に移行する。
 イベントが再スケジューリング、スレッド起動以外である場合(ステップS1101:その他)、CPU#0は、イベントに沿った通常のスケジューリング処理を実行する(ステップS1108)。また、アセンブラで記述されていない場合も(ステップS1102:No、ステップS1104:No)、CPU#0は、ステップS1108の処理を実行する。なお、再スケジューリング、スレッド起動以外のイベントとしては、スレッドのタイムスライス時間が満了した場合、または、スレッドが終了した場合、等がある。
 同期元CPUであるCPU#Mのレジスタ同期制御装置205#Mは、ステップS1107の処理にて出力された同期制御情報を基に、レジスタ同期制御処理を実行する(ステップS1109)。また、同期先CPUとなるCPU#Nのレジスタ同期制御装置205#Nも、レジスタ同期制御装置205#Mと連動してレジスタ同期制御処理を実行する。レジスタ同期制御処理の詳細は、図12にて後述する。
 図12は、レジスタ同期制御処理を示すフローチャートである。レジスタ同期制御装置205#Mは、同期制御レジスタ603#Mから、同期対象レジスタ名、同期先CPU名を取得する(ステップS1201)。取得後、レジスタ同期制御装置205#Mは、レジスタリーダ604#Mにより、CPU内レジスタ群203#Mから、同期対象レジスタ名に対応するレジスタの値を読み込む(ステップS1202)。レジスタ同期制御装置205#Mは、送信FIFO607#Mにより、同期先CPU名に対応するレジスタ同期制御装置205#Nに、割込信号と同期対象レジスタ名と値を送信する(ステップS1203)。送信後、レジスタ同期制御装置205#Mは、同期フラグを0に設定し、レジスタの同期元としてのレジスタ同期制御処理を終了する。
 レジスタ同期制御装置205#Nは、割込コントローラ608#Nにより、割込信号を受け付ける(ステップS1204)。割込信号を受け付けたレジスタ同期制御装置205#Nは、割込コントローラ608#Nにより、レジスタの値の受信を示す割込番号を割込コントローラ602#Nに通知する(ステップS1205)。通知後、レジスタ同期制御装置205#Nは、受信FIFO606#Nにより、同期対象レジスタ名と値を受信する(ステップS1206)。
 受信後、レジスタ同期制御装置205#Nは、レジスタライタ605#Nにより、受信したレジスタの値をCPU内レジスタ群203#Nから同期対象レジスタ名に対応するレジスタに書き込む(ステップS1207)。書き込み後、レジスタ同期制御装置205#Nは、割込コントローラ608#Nにより、書き込み完了を示す割込番号を割込コントローラ602#Nに通知する(ステップS1208)。通知後、レジスタ同期制御装置205#Nは、レジスタの同期先としてのレジスタ同期制御処理を終了する。ステップS1205の処理により、割込番号を受け付けたCPU#Nは、新規スレッドを生成し起動、または再スケジューリングされたスレッドを起動する(ステップS1209)。
 なお、ステップS1207の処理にて、レジスタ同期制御装置205#NがCPU内レジスタ群203#Nにアクセスしているため、CPU#NによるCPU内レジスタ群203#Nへのアクセスが抑止されている。したがって、ステップS1209の処理終了の段階では、新規スレッド、または再スケジューリングされたスレッドはCPU内レジスタ群203#Nへのアクセスが行えず、前述のスレッドは実行可能な状態とはなっていない。
 ステップS1208の処理により、割込番号を受け取ったCPU#Nは、CPU内レジスタ群203#Nへのアクセスを開始する(ステップS1210)。CPU#NがCPU内レジスタ群203#Nへのアクセスが可能になったことで、新規スレッド、または再スケジューリングされたスレッドが実行可能な状態に設定されたことになる。
 以上説明したように、マルチコアプロセッサシステム、同期制御システム、同期制御装置、情報生成方法、および情報生成プログラムによれば、同期元コアのスレッドを同期先コアに移行する場合、スレッドに対応付けられたレジスタを特定する。続けて、マルチコアプロセッサシステムは、特定されたレジスタの値を同期元コアから同期先コアに継承する。これにより、マルチコアプロセッサシステムは、シングルコア向けに生成されたアセンブラソースを改変することなく、マルチコアで並列実行することができ、アセンブラソースの継承性を確保することができる。
 また、マルチコアプロセッサシステムは、同期元コアの前記特定のレジスタから読み込んだ値を書き込んだ場合に、同期先コアに検出されたスレッドが実行可能となった情報を通知した後に、検出されたスレッドを実行可能な状態に設定してもよい。これにより、マルチコアプロセッサシステムは、同期先コアのレジスタが同期元コアのレジスタの値を継承し、同期先コアのスレッドが正常動作できる状態になってから、スレッドを実行することができる。
 また、マルチコアプロセッサシステムは、スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルにおけるレジスタが、マルチコアプロセッサのいずれのコアも特定しなくてよい。シングルコア向けに生成されたソースでは、コアが1つしか存在しないため、どのCPUのどのレジスタであるかという情報は存在しない。したがって、マルチコアプロセッサシステムは、テーブルにおけるレジスタがマルチコアプロセッサのいずれのコアも特定していないことで、シングルコア向けのソースから生成された実行オブジェクトであるということを判断することができる。
 また、マルチコアプロセッサシステムは、スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルが、レジスタ以外の他の記憶領域を指定しなくてよい。C++ソースによる実行オブジェクトは、依存関係のあるブロック間において、前方のブロックにてキャッシュメモリ、またはRAMに退避し、後方のブロックにて退避したデータを読み込むという同期制御コードが追加されている。しかしながら、アセンブラソースによる実行オブジェクトは、同期制御コードが追加されず、依存関係のあるブロック間において、レジスタ以外の他の記憶領域にアクセスしない。したがって、マルチコアプロセッサシステムは、テーブルがレジスタ以外の他の記憶領域を指定していないということで、アセンブラソースから生成された実行オブジェクトであることを判断することができる。
 また、マルチコアプロセッサシステムは、同期元コアの第1のスレッドから分岐される第2のスレッドが同期先コアに生成することが検出された場合に、レジスタの値を同期元コアから同期先コアにコピーしてもよい。これにより、マルチコアプロセッサシステムは、新規スレッドが生成される場合でも、シングルコア向けに生成されたアセンブラソースを改変することなく、マルチコアで並列実行することができる。
 また、従来技術2による同期制御の処理クロック数は、100~1000クロック程であった。本実施の形態による同期制御の処理クロック数は、同期制御レジスタの操作を合わせても10クロック程度であり、1回の同期制御あたり、90~99%の効率化を図ることができる。より具体的な例として、クロック周波数が500[MHz]で動作するCPUがあった場合を想定する。従来技術2による同期制御の処理時間は、1回あたり0.2~2[マイクロ秒]程度であるが、本実施の形態による同期制御の処理時間は、20[ナノ秒]程度で完了することになる。同期制御の出現頻度が、1[マイクロ秒]に1回程度である場合、マルチコアプロセッサシステムとして、10%程の性能改善となる。
 なお、本実施の形態で説明した情報生成方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本情報生成プログラムは、ハードディスク、フレキシブルディスク、CD-ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本情報生成プログラムは、インターネット等のネットワークを介して配布してもよい。
 #0、#M、#N CPU
 110 バス
 203 CPU内レジスタ群
 205 レジスタ同期制御装置
 501 レジスタ依存テーブル
 502 検出部
 503 特定部
 504 生成部
 505 同期制御部
 506 設定部
 507 取得部
 508 読込部
 509 書込部
 510 送信部
 511 受信部

Claims (9)

  1.  マルチコアプロセッサの中の特定のコアにより、前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出する検出手段と、
     前記特定のコアにより、スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、前記検出手段によって移行することが検出されたスレッドに対応する特定のレジスタを特定する特定手段と、
     前記特定のコアにより、前記特定手段によって特定された前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成手段と、
     前記マルチコアプロセッサと通信可能に接続され、前記生成手段によって生成された同期制御情報を前記特定のコアから取得し、前記同期制御情報から得られる前記特定のレジスタの値を前記同期元コアの前記特定のレジスタから読み込み、前記同期先コアの前記特定のレジスタに、前記同期元コアの前記特定のレジスタから読み込んだ値を書き込む同期制御手段と、
     を備えることを特徴とするマルチコアプロセッサシステム。
  2.  マルチコアプロセッサの中の特定のコアにより、前記マルチコアプロセッサ内において同期元コアで実行中の第1のスレッドから分岐される第2のスレッドを同期先コアに生成することを検出する検出手段と、
     前記特定のコアにより、スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、前記第1および第2のスレッドに対応する特定のレジスタを特定する特定手段と、
     前記特定のコアにより、前記特定手段によって特定された前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成手段と、
     前記マルチコアプロセッサと通信可能に接続され、前記生成手段によって生成された同期制御情報を前記特定のコアから取得し、前記同期制御情報から得られる前記特定のレジスタの値を前記同期元コアの前記特定のレジスタから読み込み、前記同期先コアの前記特定のレジスタに、前記同期元コアの前記特定のレジスタから読み込んだ値を書き込む同期制御手段と、
     を備えることを特徴とするマルチコアプロセッサシステム。
  3.  前記同期先コアにより、前記検出されたスレッドを前記同期先コアにて実行可能な状態に設定する設定手段をさらに備え、
     前記同期制御手段は、
     前記同期元コアの前記特定のレジスタから読み込んだ値を書き込んだ場合に、前記同期先コアに前記検出されたスレッドが実行可能となった情報を通知し、
     前記設定手段は、
     前記同期制御手段から前記検出されたスレッドが実行可能となった情報を受け取った場合、前記検出されたスレッドを前記同期先コアにて実行可能な状態に設定することを特徴とする請求項1または2に記載のマルチコアプロセッサシステム。
  4.  前記テーブルにおける前記スレッドに対応付けされた前記レジスタは、前記マルチコアプロセッサのいずれのコアも特定しないことを特徴とする請求項1または2に記載のマルチコアプロセッサシステム。
  5.  前記テーブルは、前記レジスタ以外の他の記憶領域を指定していないことを特徴とする請求項1または2に記載のマルチコアプロセッサシステム。
  6.  マルチコアプロセッサに通信可能に接続された同期制御システムであって、
     前記マルチコアプロセッサの中の特定のコアにより、前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出し、前記実行中のスレッドに対応する特定のレジスタおよび前記同期先コアを特定する同期制御情報を取得する取得手段と、
     前記取得手段によって取得された同期制御情報から得られる前記特定のレジスタの値を前記同期元コアの前記特定のレジスタから読み込む読込手段と、
     前記同期先コアの前記特定のレジスタに、前記読込手段によって同期元コアの前記特定のレジスタから読み込まれた値を書き込む書込手段と、
     を備えることを特徴とする同期制御システム。
  7.  マルチコアプロセッサの各々のコアに通信可能に接続された同期制御装置群の中の任意の同期制御装置であって、
     前記同期制御装置と通信可能な接続先コアが、当該接続先コアで実行中のスレッドを同期先コアに移行させる同期元コアである場合、前記マルチコアプロセッサのうち前記移行を実行する特定のコアから、前記実行中のスレッドに対応する特定のレジスタおよび前記同期先コアを特定する同期制御情報を取得する取得手段と、
     前記接続先コアが前記同期元コアである場合、前記取得手段によって取得された同期制御情報から得られる前記特定のレジスタの値を前記同期元コアの前記特定のレジスタから読み込む読込手段と、
     前記接続先コアが前記同期元コアである場合、前記特定のレジスタの識別情報および前記特定のレジスタの値を、前記同期制御装置群のうち前記同期先コアの同期制御装置に送信する送信手段と、
     前記接続先コアが前記同期先コアである場合、前記同期制御装置群のうち前記同期元コアに接続されている同期制御装置から、前記特定のレジスタの識別情報および前記特定のレジスタの値を受信する受信手段と、
     前記接続先コアが前記同期先コアである場合、前記同期先コアの前記特定のレジスタに、前記受信手段によって受信された前記特定のレジスタの値を書き込む書込手段と、
     を備えることを特徴とする同期制御装置。
  8.  マルチコアプロセッサの中の特定のコアが、
     前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出する検出工程と、
     スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、前記検出工程によって移行することが検出されたスレッドに対応する特定のレジスタを特定する特定工程と、
     前記特定工程によって特定された前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成工程と、
     前記マルチコアプロセッサの各々のコアのレジスタ間の同期を制御する同期制御装置群のうち、前記同期元コアの同期制御装置に前記生成工程によって生成された同期制御情報を出力する出力工程と、
     を実行することを特徴とする情報生成方法。
  9.  マルチコアプロセッサの中の特定のコアに、
     前記マルチコアプロセッサ内において同期元コアで実行中のスレッドを同期先コアに移行することを検出する検出工程と、
     スレッド群の各々のスレッドと当該スレッドに対応付けされたレジスタとの組み合わせを特定するテーブルを参照して、前記検出工程によって移行することが検出されたスレッドに対応する特定のレジスタを特定する特定工程と、
     前記特定工程によって特定された前記特定のレジスタおよび前記同期先コアを特定する同期制御情報を生成する生成工程と、
     前記マルチコアプロセッサの各々のコアのレジスタ間の同期を制御する同期制御装置群のうち、前記同期元コアの同期制御装置に前記生成工程によって生成された同期制御情報を出力する出力工程と、
     を実行させることを特徴とする情報生成プログラム。
PCT/JP2010/064740 2010-08-30 2010-08-30 マルチコアプロセッサシステム、同期制御システム、同期制御装置、情報生成方法、および情報生成プログラム WO2012029111A1 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
EP10856664.7A EP2613269A4 (en) 2010-08-30 2010-08-30 MULTICORE PROCESSOR SYSTEM, SYNCHRONIZATION CONTROL SYSTEM, SYNCHRONIZATION CONTROL DEVICE, INFORMATION GENERATION PROCESS AND INFORMATION GENERATION PROGRAM
PCT/JP2010/064740 WO2012029111A1 (ja) 2010-08-30 2010-08-30 マルチコアプロセッサシステム、同期制御システム、同期制御装置、情報生成方法、および情報生成プログラム
CN201080068873.6A CN103080921B (zh) 2010-08-30 2010-08-30 多核处理器系统、同步控制系统、同步控制装置、信息生成方法
JP2012531592A JP5488697B2 (ja) 2010-08-30 2010-08-30 マルチコアプロセッサシステム、同期制御方法、および同期制御プログラム
US13/765,338 US9367311B2 (en) 2010-08-30 2013-02-12 Multi-core processor system, synchronization control system, synchronization control apparatus, information generating method, and computer product

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2010/064740 WO2012029111A1 (ja) 2010-08-30 2010-08-30 マルチコアプロセッサシステム、同期制御システム、同期制御装置、情報生成方法、および情報生成プログラム

Related Child Applications (1)

Application Number Title Priority Date Filing Date
US13/765,338 Continuation US9367311B2 (en) 2010-08-30 2013-02-12 Multi-core processor system, synchronization control system, synchronization control apparatus, information generating method, and computer product

Publications (1)

Publication Number Publication Date
WO2012029111A1 true WO2012029111A1 (ja) 2012-03-08

Family

ID=45772251

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2010/064740 WO2012029111A1 (ja) 2010-08-30 2010-08-30 マルチコアプロセッサシステム、同期制御システム、同期制御装置、情報生成方法、および情報生成プログラム

Country Status (5)

Country Link
US (1) US9367311B2 (ja)
EP (1) EP2613269A4 (ja)
JP (1) JP5488697B2 (ja)
CN (1) CN103080921B (ja)
WO (1) WO2012029111A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014021995A1 (en) * 2012-07-31 2014-02-06 Empire Technology Development, Llc Thread migration across cores of a multi-core processor
KR101521701B1 (ko) * 2012-09-19 2015-05-19 후지쯔 세미컨덕터 가부시키가이샤 실행 제어 방법 및 멀티프로세서 시스템

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2587382A4 (en) 2010-06-22 2014-11-26 Fujitsu Ltd MULTIKERNPROCESSORSYSTEM, CONTROL PROGRAM AND CONTROL PROCEDURES
WO2015047427A1 (en) * 2013-09-30 2015-04-02 Empire Technology Development, Llc Data transfer in a multi-core processor
IN2013CH04449A (ja) 2013-09-30 2015-04-03 Empire Technology Dev Llc
CN104361553B (zh) * 2014-11-02 2017-04-12 中国科学院光电技术研究所 一种提高图形处理器处理效率的同步方法
US9830198B2 (en) * 2015-12-22 2017-11-28 International Business Machines Corporation Translation entry invalidation in a multithreaded data processing system
TWI575951B (zh) * 2016-02-02 2017-03-21 晨星半導體股份有限公司 視訊訊號處理系統、視訊訊號處理晶片及視訊訊號處理方法
US10552212B2 (en) 2016-11-28 2020-02-04 Arm Limited Data processing
US10671426B2 (en) 2016-11-28 2020-06-02 Arm Limited Data processing
US10423446B2 (en) * 2016-11-28 2019-09-24 Arm Limited Data processing
DE102017100655A1 (de) * 2017-01-13 2018-07-19 Beckhoff Automation Gmbh Steuerung eines technischen Prozesses auf einer Mehr-Rechenkern-Anlage
US10565126B2 (en) 2017-07-14 2020-02-18 Arm Limited Method and apparatus for two-layer copy-on-write
US10534719B2 (en) 2017-07-14 2020-01-14 Arm Limited Memory system for a data processing network
US10613989B2 (en) * 2017-07-14 2020-04-07 Arm Limited Fast address translation for virtual machines
US10489304B2 (en) 2017-07-14 2019-11-26 Arm Limited Memory address translation
US10467159B2 (en) 2017-07-14 2019-11-05 Arm Limited Memory node controller
US10592424B2 (en) 2017-07-14 2020-03-17 Arm Limited Range-based memory system
US10353826B2 (en) 2017-07-14 2019-07-16 Arm Limited Method and apparatus for fast context cloning in a data processing system
US20190102274A1 (en) * 2017-09-29 2019-04-04 Intel Corporation Utilization Metrics for Processing Engines
US10884850B2 (en) 2018-07-24 2021-01-05 Arm Limited Fault tolerant memory system
CN114911741B (zh) * 2021-02-08 2024-04-19 南京宏泰半导体科技股份有限公司 一种基于浮动地址系统的信号同步方法及装置
US20220382478A1 (en) * 2021-06-01 2022-12-01 Samsung Electronics Co., Ltd. Systems, methods, and apparatus for page migration in memory systems
CN115061803A (zh) * 2022-06-29 2022-09-16 Oppo广东移动通信有限公司 一种多核处理系统及其任务调度方法、芯片、存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6448163A (en) 1987-08-19 1989-02-22 Fujitsu Ltd Multiprocessor system
JPH04195664A (ja) 1990-11-28 1992-07-15 Hitachi Ltd マルチプロセッサシステム
JPH08234997A (ja) 1995-02-28 1996-09-13 Nec Corp レジスタ割付け方法
JP2001236221A (ja) * 2000-02-21 2001-08-31 Keisuke Shindo マルチスレッドを利用するパイプライン並列プロセッサ
JP2006099156A (ja) 2004-09-28 2006-04-13 Sony Corp 情報処理装置および方法、並びにプログラム
JP2010092101A (ja) * 2008-10-03 2010-04-22 Renesas Technology Corp 情報処理装置

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0630094B2 (ja) * 1989-03-13 1994-04-20 インターナショナル・ビジネス・マシーンズ・コーポレイション マルチプロセツサ・システム
JP2779032B2 (ja) * 1990-01-23 1998-07-23 株式会社日立製作所 情報処理装置
US5860108A (en) * 1995-04-26 1999-01-12 Nec Corporation Method and clustered multi-processor system for controlling a clock phase for clusters
JP3250729B2 (ja) * 1999-01-22 2002-01-28 日本電気株式会社 プログラム実行装置及びそのプロセス移動方法並びにプロセス移動制御プログラムを格納した記憶媒体
US6976155B2 (en) * 2001-06-12 2005-12-13 Intel Corporation Method and apparatus for communicating between processing entities in a multi-processor
JP3702813B2 (ja) 2001-07-12 2005-10-05 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
GB2380825B (en) * 2001-10-12 2004-07-14 Siroyan Ltd Processors and compiling methods for processors
US7080225B1 (en) * 2002-12-10 2006-07-18 Emc Corporation Method and apparatus for managing migration of data in a computer system
US20050050305A1 (en) * 2003-08-28 2005-03-03 Kissell Kevin D. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US7610473B2 (en) * 2003-08-28 2009-10-27 Mips Technologies, Inc. Apparatus, method, and instruction for initiation of concurrent instruction streams in a multithreading microprocessor
US20070204268A1 (en) * 2006-02-27 2007-08-30 Red. Hat, Inc. Methods and systems for scheduling processes in a multi-core processor environment
US8312455B2 (en) * 2007-12-19 2012-11-13 International Business Machines Corporation Optimizing execution of single-threaded programs on a multiprocessor managed by compilation
KR101366075B1 (ko) * 2007-12-20 2014-02-21 삼성전자주식회사 멀티코어 플랫폼에서의 태스크 이동 방법 및 장치
KR101400286B1 (ko) * 2008-01-22 2014-05-26 삼성전자주식회사 다중 프로세서 시스템에서 작업을 이동시키는 방법 및 장치
US20100125717A1 (en) * 2008-11-17 2010-05-20 Mois Navon Synchronization Controller For Multiple Multi-Threaded Processors
US8316368B2 (en) * 2009-02-05 2012-11-20 Honeywell International Inc. Safe partition scheduling on multi-core processors
CN101593097B (zh) * 2009-05-22 2011-07-27 西安交通大学 嵌入式同构对称双核risc微处理器的设计方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6448163A (en) 1987-08-19 1989-02-22 Fujitsu Ltd Multiprocessor system
JPH04195664A (ja) 1990-11-28 1992-07-15 Hitachi Ltd マルチプロセッサシステム
JPH08234997A (ja) 1995-02-28 1996-09-13 Nec Corp レジスタ割付け方法
JP2001236221A (ja) * 2000-02-21 2001-08-31 Keisuke Shindo マルチスレッドを利用するパイプライン並列プロセッサ
JP2006099156A (ja) 2004-09-28 2006-04-13 Sony Corp 情報処理装置および方法、並びにプログラム
JP2010092101A (ja) * 2008-10-03 2010-04-22 Renesas Technology Corp 情報処理装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
See also references of EP2613269A4

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014021995A1 (en) * 2012-07-31 2014-02-06 Empire Technology Development, Llc Thread migration across cores of a multi-core processor
US9804896B2 (en) 2012-07-31 2017-10-31 Empire Technology Development Llc Thread migration across cores of a multi-core processor
KR101521701B1 (ko) * 2012-09-19 2015-05-19 후지쯔 세미컨덕터 가부시키가이샤 실행 제어 방법 및 멀티프로세서 시스템

Also Published As

Publication number Publication date
EP2613269A1 (en) 2013-07-10
EP2613269A4 (en) 2013-08-21
US9367311B2 (en) 2016-06-14
CN103080921B (zh) 2015-11-25
JP5488697B2 (ja) 2014-05-14
JPWO2012029111A1 (ja) 2013-10-28
US20130179666A1 (en) 2013-07-11
CN103080921A (zh) 2013-05-01

Similar Documents

Publication Publication Date Title
JP5488697B2 (ja) マルチコアプロセッサシステム、同期制御方法、および同期制御プログラム
JP6342970B2 (ja) トランザクショナルメモリ(tm)システムにおける読み出し及び書き込み監視属性
US7533246B2 (en) Application program execution enhancing instruction set generation for coprocessor and code conversion with marking for function call translation
JP4896376B2 (ja) コプロセッサの性能を強化するシステムおよび方法
KR101240092B1 (ko) 컴퓨터 플랫폼에서의 방법 및 컴퓨터 플랫폼
EP2483772B1 (en) Trap handler architecture for a parallel processing unit
JP4979880B2 (ja) グラフィックス処理ユニットのマルチスレッド式カーネル
JP5780243B2 (ja) スケジューリング方法、およびマルチコアプロセッサシステム
US9996394B2 (en) Scheduling accelerator tasks on accelerators using graphs
JP4667206B2 (ja) マルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法
US8782611B1 (en) Visual inspection and debugging of threads in parallel computing systems
WO2011158320A1 (ja) マルチコアプロセッサシステム、キャッシュコヒーレンシ制御方法、およびキャッシュコヒーレンシ制御プログラム
JP5733385B2 (ja) エンディアン変換方法、およびシステム
Gaster et al. HRF-Relaxed: Adapting HRF to the complexities of industrial heterogeneous memory models
WO2012127589A1 (ja) マルチコアプロセッサシステム、および分岐予測方法
US8127074B2 (en) Mechanism for a reader page for a ring buffer
JP5811211B2 (ja) マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム
JP5687603B2 (ja) プログラム変換装置、プログラム変換方法、および変換プログラム
JP2007094986A (ja) シミュレーション装置およびシミュレーション方法
JP5293609B2 (ja) マルチプロセッサ並びにそのキャッシュ同期制御方法及びプログラム
US20130239113A1 (en) Information processing apparatus, computer product, and information processing method
KR101881039B1 (ko) 비휘발성 메모리에 저장된 메모리 매핑 파일의 비동기식 원자적 업데이트 방법 및 제어 장치
WO2014119003A1 (ja) コンパイラ、オブジェクトコード生成方法、情報処理装置及び情報処理方法

Legal Events

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

Ref document number: 201080068873.6

Country of ref document: CN

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

Ref document number: 10856664

Country of ref document: EP

Kind code of ref document: A1

WWE Wipo information: entry into national phase

Ref document number: 2012531592

Country of ref document: JP

WWE Wipo information: entry into national phase

Ref document number: 2010856664

Country of ref document: EP

NENP Non-entry into the national phase

Ref country code: DE