WO2008105558A1 - メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム - Google Patents
メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム Download PDFInfo
- Publication number
- WO2008105558A1 WO2008105558A1 PCT/JP2008/053891 JP2008053891W WO2008105558A1 WO 2008105558 A1 WO2008105558 A1 WO 2008105558A1 JP 2008053891 W JP2008053891 W JP 2008053891W WO 2008105558 A1 WO2008105558 A1 WO 2008105558A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- data
- program
- memory
- block
- processor
- Prior art date
Links
- 230000015654 memory Effects 0.000 title claims abstract description 315
- 238000000034 method Methods 0.000 title claims abstract description 55
- 238000007726 management method Methods 0.000 title claims description 60
- 230000010365 information processing Effects 0.000 title claims description 6
- 238000003860 storage Methods 0.000 claims abstract description 29
- 230000005055 memory storage Effects 0.000 claims abstract description 11
- 238000012546 transfer Methods 0.000 claims description 51
- 238000004458 analytical method Methods 0.000 claims description 11
- 238000012545 processing Methods 0.000 description 44
- 238000010586 diagram Methods 0.000 description 38
- 238000005192 partition Methods 0.000 description 21
- 238000003491 array Methods 0.000 description 12
- 230000008878 coupling Effects 0.000 description 8
- 238000010168 coupling process Methods 0.000 description 8
- 238000005859 coupling reaction Methods 0.000 description 8
- 230000008859 change Effects 0.000 description 6
- 238000009826 distribution Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 101150110014 empA gene Proteins 0.000 description 4
- 238000005111 flow chemistry technique Methods 0.000 description 3
- 238000007781 pre-processing Methods 0.000 description 3
- 230000003252 repetitive effect Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 239000013256 coordination polymer Substances 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 230000004927 fusion Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000036316 preload Effects 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 101000759879 Homo sapiens Tetraspanin-10 Proteins 0.000 description 1
- 241000348346 Suta Species 0.000 description 1
- 102100024990 Tetraspanin-10 Human genes 0.000 description 1
- 241000219977 Vigna Species 0.000 description 1
- 235000010726 Vigna sinensis Nutrition 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 206010062113 splenic marginal zone lymphoma Diseases 0.000 description 1
- 238000010408 sweeping Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000007497 verbal memory Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0284—Multiple user address space allocation, e.g. using different base addresses
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/453—Data distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5033—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering data affinity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/483—Multiproc
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5017—Task decomposition
Definitions
- the present invention relates to a memory management method in a multiprocessor system composed of a plurality of processor cores, and in particular, based on information acquired by a compiler, data accessed by a processor is a divided area of the memory. On how to assign to. Background art
- Multi-core processor with multiple processor cores integrated on a single chip The power has been announced one after another by each microprocessor manufacturer.
- chips multiprocessor The power has been announced one after another by each microprocessor manufacturer.
- information appliances and devices embedded eg, mobile phones, game machines, car navigation systems, digital television receivers, HD DZD VD recorders) : Coders, players, etc.
- multi-core microprocessors there is a trend toward multi-core microprocessors.
- multi-core processors are now being used in almost all information devices from information appliances to supercomputers, and it is expected that multi-core processors will be incorporated into more information devices in the future.
- Multi-core processors can utilize not only fine-grained instruction level parallelism but also more parallel loop-level parallelism, coarser-grained parallelism between loops, and coarse-grained task parallelism between functions . In this way, multi-core processors can improve processor performance by utilizing greater parallelism. This is advantageous in that Multi-core processors can achieve the same performance using n processor cores. Therefore, by reducing the applied frequency to 1 / n and reducing the applied voltage, power consumption (2 It is also advantageous in that it can be kept low.
- Multi-grain parallelization combines the parallelism of all statements at the statement level, loop level, and coarser levels (for example, between loops, between subroutines, and between basic blocks) to extract parallelism through the earliest executable condition analysis.
- Japanese Patent Laid-Open No. 2 0 0 1-1 7 5 6 19 Disclosure of the invention
- the data size used by one loop is often larger Ri by the size of the local memory, c this when the load of the data and Suta has occurred in the loop, the processor then uses data Need to wait until it is ready There was an overhead of processing by the processor.
- the processing performance will not improve much even if the programs are parallelized. This is because the memory wall problem is that even if the processor runs faster, the data used by the processor cannot be supplied to the memory at the appropriate timing due to the increase in the difference between the processing speed of the processor and the memory access speed. This is because
- the memory capacity of the memory close to the processor is small, so when large data is required, it is necessary to divide the data and place it in the memory. Furthermore, since data transfer between memories takes time, it is necessary to schedule the program processing order so that the data in the memory can be reused. In addition, it is necessary to use a DMA controller to hide the overhead when transferring data between memories.
- the compiler Information on the execution order of tasks in the program is obtained, and data dependency relationships (definition and reference relationships) between tasks are also analyzed. Also, once branching is determined, you can see programs that use the same data. In this way, the information acquired by the compiler can be used to determine when the data stored in the memory is used, and the data can be reused between multiple tasks.
- data is arranged efficiently so that processing can be continued while keeping data stored in a high-speed memory arranged near the processor as long as possible.
- the necessary data is stored in a high-speed memory near the processor, and unnecessary data is sequentially transferred to a low-speed but large-capacity memory.
- data is divided and allocated to the local memory. Also, in order to make the data stored in the local memory usable for a long period of time, the data to be expelled is determined based on the information held by the compiler (information on when and where the data is used). Also, schedule the DMA to load the necessary data first.
- present invention can be applied not only to memory management in the same type of processor, but also to memory management in different types of heterogeneous multiprocessors.
- the management of the storage area of the memory is facilitated, so that the arrangement of data in the local memory and the distributed shared memory can be optimized.
- the data stored in the memory can be reused, and the data transfer between the memories can be reduced.
- FIG. 1 is a configuration diagram of a single-chip multi-core processor according to an embodiment of the present invention.
- FIG. 2 is an explanatory diagram of multigrain parallel processing according to the embodiment of this invention.
- FIG. 3 is an explanatory diagram of a macro flow graph according to the embodiment of this invention.
- FIG. 4 is an explanatory diagram outlining local memory management according to the embodiment of this invention.
- FIG. 5 is an explanatory diagram of a state of dividing the storage area of the memory according to the embodiment of this invention.
- FIG. 6 is an explanatory diagram of the sweep priority of the memory according to the embodiment of this invention.
- FIG. 7 is an explanatory diagram of changes in variables loaded in the memory according to the embodiment of this invention.
- FIG. 8 is an explanatory diagram of a specific example of a loop division procedure according to the embodiment of this invention.
- FIG. 9 is an explanatory diagram of a specific example of a loop division procedure according to the embodiment of this invention.
- FIG. 10 is an explanatory diagram of a specific example of a loop division procedure according to the embodiment of this invention.
- FIG. 11 is an explanatory diagram of a specific example of a loop division procedure according to the embodiment of this invention.
- FIG. 12 is an explanatory diagram of a specific example of the procedure for determining the block size according to the embodiment of this invention.
- FIG. 13 is an explanatory diagram of a specific example of the procedure for determining the block size according to the embodiment of this invention.
- FIG. 14 is an explanatory diagram of a specific example (before distribution) of generating a local memory management macro task according to the embodiment of the present invention.
- FIG. 15 is an explanatory diagram of a specific example (after distribution) of generating a local memory management macro task according to the embodiment of the present invention.
- FIG. 16 shows an example of a template creation procedure according to the embodiment of the present invention.
- FIG. 17 is an explanatory diagram of the state of the local memory to which the template according to the embodiment of this invention is mapped.
- FIG. 18 is an explanatory diagram of the state of the local memory to which the template according to the embodiment of this invention is mapped.
- Fig. 1 9 A and Fig. 1 9 B are examples of creating a code image according to the embodiment of the present invention It is explanatory drawing of the state 1).
- FIG. 2 OA and FIG. 20B are explanatory diagrams of a creation example (state 2) of the code image according to the embodiment of the present invention.
- FIG. 21A and FIG. 21B are explanatory diagrams of a code image creation example (state 3) according to the embodiment of the present invention.
- 22A and 22B are explanatory diagrams of a code image creation example (state 4) according to the embodiment of the present invention.
- FIG. 23A and FIG. 23B are explanatory diagrams of a code image creation example (state 5) according to the embodiment of the present invention.
- FIG. 24A and FIG. 24B are explanatory diagrams of a code image creation example (state 6) according to the embodiment of the present invention.
- FIG. 25A and FIG. 25B are explanatory diagrams of a creation example (state 7) of the code image according to the embodiment of the present invention.
- FIG. 26A and FIG. 26B are explanatory diagrams of a creation example (state 8) of the code image according to the embodiment of the present invention.
- FIG. 27A and FIG. 27B are explanatory diagrams of a code image creation example (state 9) according to the embodiment of the present invention.
- FIG. 28A and FIG. 28B are explanatory diagrams of a creation example (state 10) of the code image according to the embodiment of the present invention.
- FIG. 29A and FIG. 29B are explanatory diagrams of a code image creation example (state 11) according to the embodiment of the present invention.
- FIG. 3 OA and FIG. 30B are explanatory diagrams of a code image creation example (state 12) according to the embodiment of the present invention.
- FIG. 31A and FIG. 31B are explanatory diagrams of a code image creation example (state 13) according to the embodiment of the present invention.
- FIG. 3 2 A and FIG. 3 2 B are explanatory diagrams of a code image creation example (state 14) according to the embodiment of the present invention.
- FIGS. 33A and 33B are explanatory diagrams of a code image creation example (state 15) according to the embodiment of the present invention.
- FIGS. 34A and 34B are explanatory diagrams of a code image creation example (state 16) according to the embodiment of the present invention.
- the present invention manages a memory storage area based on information acquired by a compiler through program analysis.
- the compiler compiles a program, it obtains program information.
- the compiler can obtain information on data used in the program, information on timing when the data is next used, and information on a processor on which the data is used by analyzing the program. . That is, the timing at which data is used by the program can be acquired.
- the first feature of the present invention is to manage the allocation of memory storage areas based on information obtained by analyzing a program. ,
- the compiler has information on the execution schedule of the program (eg, processing of each nested hierarchy), so it can obtain information on when the data is accessed. Therefore, the memory storage area can be optimally allocated to the data based on the program execution schedule, so that the data transfer can be minimized.
- the processor does not stop waiting for data to be supplied to memory, and the compiler can obtain information on when the data is accessed by the program, so that data that is no longer needed or immediately Data that is not accessed can be identified, and data that is no longer needed by the DMA controller or data that is not immediately accessed can be swept from the memory storage area (store).
- the data sweep based on this future information does not sweep out data that has not been used recently but may be used immediately. Can optimize data usage and reduce data transfer between memories.
- the second feature of the present invention is that the timing for transferring data to and / or from the memory is determined based on information obtained by analyzing the program.
- the memory area is divided into fixed-size blocks, and data is allocated to each block.
- the size of the block into which the storage area is divided is determined appropriately depending on the nature of the program acquired at compilation (array size used in the program, array shape, program execution pattern, etc.).
- the block size should be an integer multiple (eg, a multiple of 2).
- the third feature of the present invention is that data is allocated by dividing the storage area of the memory into blocks of an appropriate size based on information obtained by analyzing the program. Dividing the storage area into fixed-size blocks according to the characteristics of the program is not possible with hardware or OS (Operating System). This is because when a storage area is divided by hardware or OS, it is always divided at a fixed size.
- OS Operating System
- the size of the data may vary, so prepare blocks of multiple sizes to fit the size of the data used in the program. Then change the size of the block allocated to fit the size of the data.
- the program is divided in accordance with the division of the data necessary for program execution (data that must be stored in memory at a certain moment is called “working set”). For example, if you divide the loop in half, the data used is also halved.
- the fourth feature of the present invention is that the number of divisions of the program is determined so that the working set is placed in the memory storage area based on the information obtained by analyzing the program. For example, dividing a program involves dividing a large loop and repeatedly executing a loop of small units.
- multi-dimensional array variables are usually used in multiple loops.
- assign a multidimensional array variable to a fixed-size block with a one-dimensional address space assign a multidimensional array template to the one-dimensional block.
- the shape and size of this multidimensional array template is determined based on the shape and size of the array variables used in the program.
- the fifth feature of the present invention is that a template assigned to a block is determined based on information obtained by analyzing a program. As a result, it is possible to assign an arbitrary array to an arbitrary address in the memory while avoiding the trouble of converting the subscript of the array variable and the complexity of the program.
- the use of data will be specifically described.
- the definition of data (calculation and storage of data in memory)
- the memory management in (2) is also within the scope of the present invention. That is, the present invention is applicable to data access including both use and definition of data.
- FIG. 1 is a configuration diagram of a single chip multi-core processor according to an embodiment of the present invention. It is.
- the single chip multiprocessor 10 includes a plurality of multicore chips (CMP 0,..., CMPm) 1 including a plurality of processor cores (PC 0, PC 1, “', PCn) 1 6.
- CMP 0,..., CMPm multicore chips
- PC 0, PC 1, “', PCn) 1 processor cores
- PC 0, PC 1, “', PCn) 1 processor cores
- PC 0, PC 1, “', PCn) 1 processor cores
- C SM0, ⁇ , C SM j Multiple centralized shared memories
- I / O control I / O control
- I / OCSP I / O control
- I / OCSP k Inter-chip connection network
- the chip-to-chip network 1 2 is realized by existing connection technology (cross burst, bus, multi-stage network, etc.), and includes multiple processor cores 16, multiple centralized shared memories 14 and input / output chips 18. Connecting.
- the centralized shared memory 14 is shared by all the processor cores 16 in the system and is accessible from each processor core 16.
- the centralized shared memory 14 complements the centralized shared memory 28 provided in the multi-core chip 10.
- Each multi-core chip 10 includes a plurality of processor cores (PC) 16, a centralized shared memory (C SMZL 2 C a c h e) 28, and an intra-chip connection network (In t ra a CC N) 34.
- Each processor core 16 has a CPU 20, distributed shared memory (DSM) 2 2, low power program memory (L PM I—C a c h) 24, local memory
- LDMZD—c a c h e data transfer controller
- N I network interface
- F VR power control register
- the CPU 20 is not particularly limited as long as it can perform integer arithmetic and floating point arithmetic.
- a single load RISC architecture CPU with a simple data load and store architecture can be used.
- a superscalar processor, a VL IW processor, or the like can also be used.
- the distributed shared memory (DSM) 2 2 is composed of a dual port memory. Data can be directly read from and written to other processor cores 16 via the data transfer controller 30 and data transfer between tasks. Used for.
- the local program memory (LPM) 24 caches the instructions to be executed by prefetching them from other memories according to the task execution order determined by the scheduler. Depending on the characteristics of the program, it can also be used as a normal data cache memory, and it can also be used as a cache to reduce hit misses.
- LDM Local data memory
- LDM 26 is memory that can be accessed only within each processor core 16 and stores data (eg, array variables) used by tasks assigned to each processor core 16 To do. The local data memory 26 can be switched to the L1 data cache.
- the data transfer controller (DTC) 30 is configured by a known DMA controller, and transfers instructions to be executed and data to be used between memories in accordance with timings determined by the scheduler. Specifically, local memory 26 on its own or other processor core 16, distributed shared memory 22 on its own and other processor cores 16, centralized shared memory 2 on its own and other multi-core chips 10 8, and data is transferred between centralized shared memories 14 provided on other chips.
- the broken line between the local data memory 26 and the data transfer controller 30 can be configured so that the data transfer controller 30 can access the local data memory 26 depending on the use of the single chip multiprocessor. It is good. In such a case, a C P U 20 force transfer instruction can be given to the data transfer controller 30 via the local data memory 26. In addition, C P U 20 can check the transferred data after the transfer is completed.
- the CPU 20 instructs the data transfer controller 30 to transfer data via the local data memory 26, the distributed shared memory 22 or a dedicated buffer (not shown). To do.
- the data transfer controller 30 reports the end of data transfer to the CPU 20 via the local data memory 26, the distributed shared memory 22 or a dedicated buffer (not shown).
- which memory or buffer is used is determined at the time of designing the processor according to the purpose of the processor. Alternatively, multiple hard-duty methods may be prepared so that the compiler or the user can use the software properly according to the characteristics of the program.
- the data transfer instruction to the data transfer controller 30 (for example, from what address to how many bytes of data is stored or loaded, and the data transfer mode (continuous data transfer, stride transfer, etc.))
- the compiler stores the data transfer instruction in memory or a dedicated buffer, and issues only an instruction for which data transfer instruction is executed when the program is executed, so that an overhead for driving the data transfer controller 30 can be obtained. It is desirable to reduce
- the network interface (N I) 3 2 is connected to the intra-chip coupling network 3 4 in order to enable communication between the processor cores 16 in each multi-core chip 10.
- the intra-chip coupling network 3 4 is connected to the inter-chip coupling network 12.
- the processor core 16 can communicate with the processor cores 16 in other multi-core chips 10 through the interchip coupling network 12.
- the processor core 16 is connected to the centralized shared memory 14 via the chip-connected network 34.
- the centralized shared memory 14 is connected to the chip-to-chip coupling network 12.
- the network interface 3 2 can also be directly connected to the inter-chip coupling network 12 without going through the intra-chip connection network 3 4. Such a configuration enables all processor cores 16 in the system to access the centralized shared memory 28 and the distributed shared memory 2 2 distributed on each chip evenly. Also, by providing a directly connected path, the data transfer capability of the entire system can be increased even when the amount of data transferred between chips is large.
- the power control register (FVR) 36 the power supply voltage and clock frequency supplied to the processor core 16 are set in order to control the operating frequency and operating voltage of the processor core 16.
- the power control register is not only the processor core 16, but also the multi-core chip 10, the inter-chip coupling network 12, the centralized shared memory 14, the input / output chip 18, the centralized shared memory 2 8 and the on-chip coupling network 34, which store data for controlling the operating frequency and operating voltage of each of these components.
- FIG. 2 is a diagram for explaining multigrain parallel processing according to the embodiment of the present invention.
- Multigrain parallel processing is a parallel processing method that uses coarse grain parallelism, medium grain parallelism, and near fine grain parallelism hierarchically.
- Coarse-grain parallelism is the parallelism between subroutines, loops, and basic blocks.
- Medium-grain parallelism is the parallelism between iterations of loops.
- Near-fine-grain parallelism is a statement.
- Parallelism between instructions and between instructions. This multi-grain parallel processing is different from the conventional local and single-grain parallelism (such as loop parallelism and instruction-level parallelism). Parallel processing is possible.
- a block is the outermost loop in each hierarchy.
- a pseudo assignment statement block is a basic block that is combined and / or divided in consideration of scheduling overhead and parallelism.
- the pseudo assignment statement block is basically an ordinary basic block, but a single basic block may be divided into a plurality of blocks for the purpose of parallelism extraction. If the processing time of one pseudo assignment statement block is short and the overhead during dynamic scheduling cannot be ignored, multiple pseudo assignment statement blocks are combined to generate one pseudo assignment statement block.
- the loop index is divided into multiple partial D oa 1 1 loops, and the divided D oa 1 1 loop is newly created. It is defined as a repeating block. If the iteration block is n o n—D o a 1 1 loop, the hierarchical macro data flow processing should be applied to the parallelism within the iteration block.
- Subroutine blocks should be expanded inline whenever possible. However, subroutines that cannot be inlined effectively as a result of code length consideration are left as subroutine blocks. In this case, hierarchical macro data flow processing should be applied to the parallelism of subroutine block IV.
- the macro flow graph shows the control flow between macro tasks (MT).
- MT macro tasks
- a macrotask graph is a graph that expresses this earliest execution start condition.
- the compiler then assigns the macrotasks on the macrotask graph to a processor cluster (a group of processors defined by the compiler or user).
- This task assignment includes static scheduling assigned at compile time and dynamic scheduling assigned at run time.
- dynamic scheduling a dynamic scheduling code is generated using a dynamic CP algorithm, and the generated dynamic scheduling code is embedded in the program.
- dynamic scheduling it is not known which macrotask is executed by which processor until the execution time. Therefore, if the data shared between the macrotasks is allocated to the centralized shared memory 14 that is visible from all processors, Good.
- a loop block that is assigned to a processor cluster by the Mac mouth data flow process, if the loop block is a Doa 1 1 loop or a Doacross loop, multiple processor cores in the processor cluster 1 6
- the loop is split at the iteration level, and the loops are parallelized so that they are processed by.
- Rebuilding loops includes changing the order of statement execution, loop distribution usage, node splitting scalar extension, loop interchange, loop unrolling, strip mining, array privateization, and unimodular transformation (loop Conventional techniques such as reversal, permutation, and scanning can be used as they are.
- Near-fine-grain parallel processing in a multiprocessor system is efficient by scheduling near-fine-grain tasks to processors so that not only the load balance between processors but also the data transfer between processors is minimized. Realize parallel processing. Furthermore, in the scheduling required by this near-fine-grain parallel processing, the execution order of tasks becomes a problem because there is a data-dependent execution order constraint between near-fine-grain tasks.
- the near-fine-grained task graph generated in this way is statically scheduled for each processor.
- a scheduling algorithm in order to minimize the execution time in consideration of the data transfer overhead, a known heuristic algorithm (CP / DT ZM ISF method, CPZETF ZM ISF method, ETFZCP method, or Apply the DTZCP method) to determine the optimal schedule.
- the compiler After scheduling ends, the compiler generates the machine code for each processor by arranging the sequence of tasks assigned to the processor core in order, and inserting data transfer instructions and synchronization instructions where necessary. .
- the inserted data transfer instruction can determine the timing for storing data in the local memory 26 and sweeping out the data from the local memory 26 according to control dependence and data dependence between macro tasks.
- the data transfer instruction and the synchronization flag are set with low overhead by the transmitting processor directly writing to the distributed shared memory 22 on the receiving processor core 16. It can be carried out.
- FIG. 4 is a diagram illustrating an overview of local memory management according to the embodiment of this invention.
- Programs are generally divided into multiple layers by subroutines and multiple loops. Therefore, it is important to consider at what timing the data necessary for program execution is transferred. For example, in a loop, data should be transferred before and after the loop. Specifically, data is transferred to local memory before the loop is executed, and data is transferred from local memory after the loop is executed. And in the loop, leave the data in local memory and place the data so that the loop can be executed. In this way, the unit of a program that can be executed while data is stored in local memory is called a “local memory management macro task”. In other words, the data handled by the local memory management macro task is always the size of data that can be loaded on the local memory. Data necessary for execution of the local memory management macrotask is transferred (loaded or stored) at an appropriate timing before or after execution of the local memory management macrotask. In addition, a local memory management macro task is determined so that data transfer does not occur within the task.
- a loop that cannot place all necessary data in local memory defines the part of the loop where all used data is in local memory as a local memory management macrotask.
- the program is divided so that all necessary data is stored in the local memory, and the local memory management macro task is determined.
- the local memory management macrotask is determined.
- the data required for executing the local memory management macrotask is transferred before and after the macrotask execution (loading to local memory, storing from local memory to centralized shared memory).
- the loop has been described above, but the basic block and support in the program The same is true for pull-in. For subroutines, there are exceptions described later.
- the present invention can be applied to any memory having a limited capacity (a memory capacity is smaller than that of data used).
- the present invention can be applied to the distributed shared memory 22 in the processor core 16, the on-chip central shared memory 28, and the off-chip central shared memory 14 in addition to the local memory 26.
- this program includes a double loop with variables i and j.
- array variable A [1:30, 1:20] uses 600 elements
- array variable B [1:30] uses 30 elements
- array variable C [1:30, 1:20] ] Uses 600 elements.
- this loop uses 1230 array elements. Therefore, it is not possible to execute this loop by loading all data in local memory.
- the transfer (loading) of data to local memory may not be performed immediately before execution of the macro task, but may be performed at an earlier point in consideration of allocation of other data to the block. In this way, execution of macro tasks that use array variables (data) are executed. Loading an array variable used by the macro task into memory at any time before the beginning is called “preload”. This preload is performed even if other macrotasks are running, as long as the block into which the data is to be loaded is free.
- Data can be transferred by DMA. In this way, data can be loaded even before execution of the macro task due to the free state of the block, and the data required before program execution can be prepared. For this reason, the waiting time of the processor due to the fact that the necessary data is not loaded in the memory can be reduced.
- the transfer (store) of data from local memory may be performed at a later time in consideration of allocation of other data to the block, not immediately after the completion of the macro task execution.
- poststore loading an array variable used in a macro task into memory at any time after the end of the macro task in which the array variable (data) is used is referred to as “poststore”.
- This poststore can transfer data from local memory to centralized shared memory by DMA even while other macrotasks are running. In this way, by storing data at an arbitrary timing, it is possible to avoid concentrating the DMA load before and after execution of the macro task.
- the array variable used by the subroutine caller is loaded. For example, saving, common and Data variables, C static variables, and global variables, these variables cannot be managed by the caller. Therefore, it is necessary to transfer the used variables to the shared memory after the subroutine processing in the macro task is completed. This is because data consistency cannot be achieved unless variables are read from local memory and written to shared memory at the end of the subroutine. Since the macro task is executed by one physical processor, the correct value is guaranteed even if data is loaded and stored in the macro task.
- FIG. 5 is a diagram for explaining a state of division of the storage area of the memory according to the embodiment of the present invention.
- the memory to be managed by the storage area is a local memory and a distributed shared memory.
- the storage area of these managed memories is divided into a plurality of blocks (including sub-blocks) 10 1 to 10 4.
- Figure 5 shows a block that divides the local memory storage area.
- Block 1 0 1 is a fixed-length area in which the storage area of the local memory is divided into 1 powers of 2 (1/8 in the state shown).
- the blocks 4 to 7 are divided into sub-blocks 8 to 15 (1 0 2) which are half of the block size.
- the sub-blocks 1 2 to 15 are divided into sub-sub-blocks 2 4 to 3 1 (1 0 3) which are half the sub-block size.
- the sub-subblocks 28 to 31 are divided into sub-sub-subblocks 5 6 to 6 3 (1 0 4) which are half of the sub-subblock size.
- Block 1 0 1, sub block 1 0 2, sub sub block 1 0 3, sub sub block 1 0 4 are managed independently.
- the compiler can set a block of any size between each address space in memory.
- the compiler sets blocks of appropriate size according to the program to be compiled. That is, By preparing large blocks for programs that handle large data and small blocks for programs that handle small data, local memory can be used efficiently and efficiently.
- sub-blocks, etc. are assigned serial numbers from the start address of the storage area. For this reason, the area indicated by one address is included in multiple blocks and sub-blocks. For example, block 0, sub-block 0 to 1, sub-sub block 0 to 3, and sub-sub sub block 0 to 7 indicate the same memory space (address 0 to 1 2 7). In this way, by setting multiple types of blocks to the same address in the memory space, it is possible to manage the memory so that appropriate types of blocks are used at any time.
- the sub-block size set in this way is 1 2 of the block size
- the sub-sub block size is 1/4 of the block size
- the sub-sub sub-block size is 1 block of the block size.
- the memory storage area is divided into blocks of multiple sizes that have a power-of-two size relationship (twice the size of adjacent blocks), and multiple divided blocks of size are stored. Offered as an area.
- the block size is determined by the program information obtained when the compiler compiles the program, so it does not change from the start to the end of program execution.
- the number and size of blocks differ to suit the characteristics of the program being compiled.
- the block serving as the management unit of the storage area of the local memory according to the present invention is not a completely fixed size, but based on information obtained by the compiler analyzing the program, an optimum block size for the data size used in the program. You can decide the size.
- the block size is fixed in the program, but the optimal block size is selected for each program. The block size may be changed during program execution.
- the block size is determined so that all data used in one local memory management macrotask can be stored in one block.
- the size of the block determines the size of the local memory management macro task. Note that the timing for putting data in and out of the specified block size is then determined by the scheduler based on the execution timing of the macro task.
- the necessary data is loaded into the block of the optimum size for the data used in the local memory management macrotask.
- the local memory storage area as a fixed-size area, it is possible to avoid the problem of fragmentation that occurs when managing it as a variable-size area.
- the array variable A fits in one block of local memory.
- Array variable B fits in one sub-subblock.
- the block size is determined by the compiler according to the nature of the program. More specifically, the block size is determined so that the array variable A fits in one block of local memory, and the loop is divided. Normally, the block size does not change from the beginning to the end of the program to be compiled.
- the memory used to divide the storage area is loaded with data used in the local memory management macro task.
- the scheduler determines the memory power to load the data: local memory or distributed shared memory. At this time, data shared by multiple processor cores should be loaded into the distributed shared memory.
- the scheduler uses the data loaded in that block as it is.
- the necessary data is not loaded in any block, an empty block is allocated to the loaded data, and the data necessary for the allocated block is loaded.
- the data with the highest sweep priority is read from local memory 26 and written to centralized shared memory 28 or 14 and the necessary data is loaded into the storage area that has become free blocks. To do.
- FIG. 6 is a diagram for explaining the sweep priority of the memory according to the embodiment of the present invention, and the time is shown on the horizontal axis.
- the sweep-out priority is determined in the following order.
- Data that is not accessed thereafter is, for example, a variable that has been recalculated. You don't need to keep these already dead variables
- the priority is the highest. Data that is accessed by other processors but not accessed by its own processor in the future can be transferred to the distributed shared memory 22 of the processor core 16 that needs the data, so that it has the next highest sweep priority. Data accessed by other processors can be transferred immediately to the distributed shared memory 22. However, if the data cannot be transferred immediately due to the memory status of the other processor core 16, the shared shared memory is shifted slightly before the data is transferred. Force to transfer to 22, transfer to centralized shared memory 28 or 14. In this way, in order to provide flexibility in the timing of data transfer from the local memory 26, the sweep priority is set lower than the data that is not accessed.
- the priority for data accessed by its own processor is determined according to the time until it is next used. The earlier the time the data is used, the higher the sweep priority, and the data used in the immediate vicinity is lowered so that it remains in memory as much as possible.
- processor core 0 (PC 0) defines array variable A (De f A) and uses array variable A (10 02).
- array variable D When comparing array variable C and array variable D, array variable D is used before array variable C. Therefore, the sweep priority of array variable C is higher than the sweep priority of array variable D. Since array variables C and D are used later, they can be written back to the centralized shared memory CSM and loaded when needed next time.
- the sweep priority is in the order of A, B, C, D.
- FIG. 7 is a diagram for explaining the transition of variables loaded in the memory according to the embodiment of the present invention.
- Figure 7 shows the memory of the program before the start of program execution when a program containing two low-power memory management macrotasks (MT 1, MT 2) is executed in one layer on one processor core.
- the status of the memory at the end of execution of Macrotask 1 (MT1), the status of the memory at the start of execution of Macrotask2 (MT2), and the memory at the end of execution of Macrotask2 (MT2) Indicates the state.
- the storage area of the local memory is divided as shown in FIG.
- macrotask 1 Before the execution of macrotask 1 (MT 1), all memory storage areas (blocks) are empty (101 1).
- blocks are allocated to the data (array variables A, B, C, D, E, and F) required by macrotask 1, and each array variable is loaded into memory. Thereafter, processing by macro task 1 starts.
- the array variable A is assigned to block 0 by the declaration statement def A.
- array variable B is assigned to block 1
- array variable C is assigned to block 2
- array variable D is assigned to block 3
- array variable E is assigned to subblock 8
- array variable F Is a sub-pro Is assigned to
- each array variable is loaded into the block (1 0 1 2).
- macro task 2 (MT 2) execution, all data used by macro task 2 must be loaded into memory.
- array variables A, B, C, G, E, H, I and J are used, so 4 blocks and 4 sub-blocks are required.
- array variables A, B, C, and E are already loaded into local memory, so the array variables to be newly loaded when executing macrotask 2 are array variables G, H, and I. And J.
- array variable H is preloaded in sub-block 10 before the start of execution of macrotask 2.
- Sub-block 1 1 is empty. Therefore, one block and one sub-block need to be freed at the start of macro task 2 execution.
- array variable D is swept from block 3 according to the sweep priority, and array variable F is swept from sub-block 9.
- one empty block and one empty sub-block are secured (1 0 1 4).
- array variable G is assigned to block 3
- array variable I is assigned to sub-block 9
- array variable J is assigned to sub-block 1 1.
- macrotask 2 is executed, and array variables G, I, and J are used in macrotask 2 (1 0 1 4).
- data is stored from memory to distributed shared memory or centralized shared memory according to the priorities described above. It can be optimized and data transfer between memories can be reduced. In other words, according to the conventional LRU, data that has not been used recently but may be used soon is also transferred from the memory. However, according to the information acquired by the compiler as in the present invention, the timing when the data is used next can be known, and the memory can be used optimally.
- the loop is divided by matching multiple loops.
- the most widely accessed range in the multiplexed loop is analyzed to obtain the global index range. In other words, there is a range where the local memory needs to be accessed and a range where communication with the adjacent processor is required.
- the data access range is analyzed and separated. Therefore, analyze the program structure and select the target loop group (T L G).
- T L G target loop group
- each loop is either a Doa 1 1 loop, a Reduction loop, or a Sequentia l loop depending on loop carrier data (recurrence).
- all the unselected loops are also the target loop group. And allow loops that contain indirect references, allowing nesting of target loop groups. In other words, if a loop exists inside the loop selected as the target loop group, a target loop group is also generated for the inner loop. In addition, loops that cannot be matched with other loops form a target loop group only by that loop.
- a target loop group is a set of repetitive blocks (RB) to which loop-consistent division can be applied on a macro task, and is a set of repetitive blocks that have direct data-dependent predecessor and successor relationships on the macrotask graph.
- RB repetitive blocks
- the same data is used between loops, the same area can be reused to prevent cache misses.
- a TLG set is generated when the TLG satisfies all of the following generation conditions.
- a split candidate TLG set is generated.
- the TLG set with the highest cost is selected, and the selected TLG set is selected as a candidate for division.
- GIR is calculated for each candidate TLG set for division. This way, you can cover all the code in the program.
- TLG set 1 is a candidate partition TLG set 1
- GIR is [1: 10].
- the partition reference area is a storage area that must contain the data used in each TLG set. Specifically, the ratio of the data size used in the split candidate TLG set is calculated.
- the data size used in set 1 is 300 k
- the data size used in set 2 is 200 k
- the data size used in set 3 is 100 k. If so, the ratio of data sizes is 3: 2: 1.
- a minimum memory area (local memory or distributed shared memory with a smaller capacity) is assigned to each partition candidate TLG set.
- the division candidate TLG set is divided so that the data used in the division candidate TLG set fits in an area smaller than the minimum memory area.
- the data used in the division candidate T L G set can be placed in areas other than the area allocated at this time, but such processing is performed as a guide for division.
- the partition candidate TLG set with the highest cost is used as a criterion for determining the block size.
- the maximum number of divisions is adopted for the division candidate TLG set.
- the maximum number of divisions is the maximum number of divisions in consideration of the configuration of the processor core (PC) in the allocated processor duplication (PG) and the overhead due to parallel processing. If the number of CPUs is one, the maximum number of divisions is the number of iterations of the loop. Since then, multiple divisions have become necessary T
- the LG set is not selected as a candidate for splitting TLG. Then, again, a division candidate TLG set is generated.
- TLG set 1 is divided by the maximum number of divisions, so the next TLG set 2 is selected as a division candidate TLG.
- the TLG set 2 that is a candidate for splitting has a GIR of [1:20].
- the block size determination pre-processing is executed. Calculate the number of partitions in which the data accessed in the reference partition candidate TLG set is smaller in size than the partition reference region. Here, only the size of the accessed data is considered, and access to indirectly referenced data is not considered. Select the number of divisions to be an integer multiple of the number of processor groups. Attempts to divide each loop in the TLG set with the number of divisions obtained.
- the outermost loop (loop of i) is tried in 4 divisions.
- templates for all local arrays in the TLG set are created, and the size of the created template is the temporary block size. Details of template creation will be described later. Again, access to indirectly referenced array data is not considered. If template creation fails, increase the number of divisions and start over from block size determination preprocessing.
- the provisional block size determines whether it can be allocated to the division reference area. In this step, if the data is indirectly referenced, the dimension is determined using the declared size of the array. If an indirectly referenced array does not fit in the block, you may decide to place it in shared memory. If the data used in the TLG set can be allocated to the temporary block size, the number of divisions when the template is created is adopted (ie, no further division is performed). Then, the temporary block size is determined as the block size.
- the data used in the TLG set cannot be allocated to the temporary block size, increase the number of divisions and start over from the block size determination pre-processing. Furthermore, if allocation is not possible even with the maximum number of partitions, the maximum number of partitions is adopted, and a TLG set that cannot be allocated thereafter is not selected as a partition candidate TLG set. Then, again, a division candidate T L G set is generated.
- each partition candidate TLG set calculate how many blocks can be secured in the area determined by determining the partition reference area based on the block size determined earlier, and obtain the number of partitions that can be allocated. As a result, if any of the partition candidate TLG sets fails to be allocated, a split candidate TLG set is generated again.
- the maximum number of partitions is adopted for the partition candidate TLG set that could not be assigned.
- the TLG set that could not be assigned is not selected as the partition candidate TLG set, and the block size is not recalculated.
- the data size of the partition candidate TLG set for which the number of partitions has already been determined is subtracted from the local memory size, and the TLG set is allocated again based on the ratio of the data size of the remaining partition candidate TLG sets.
- Each loop in the candidate TLG set for which the number of divisions is determined.
- Local memory management A macro task candidate.
- TLG set 1 the data size used in TLG set 1 is 300 k
- the data size used in TLG set 2 is 200 k
- the data size used in TLG set 3 is 100 k.
- the block size is determined based on TLG set 1. If TLG set 2 fails to allocate even with the maximum number of partitions, and TLG set 2 contains TLG set 4, TLG set 5, and TLG set 6, these Is added to the next candidate TLG set for partitioning.
- the division is performed assuming that which data is used in what pattern and which data uses which block size This information is stored for assigning data to the low-power memory.
- the processes performed here are macro task division, loop distribution, loop fusion, and loop reconstruction.
- loop distribution is a process for reusing data when multiple division is performed, as will be described in detail in FIGS. 14 and 15.
- Loop fusion is a process for reusing registers.
- a macrotask with the number of divisions set in order from the outer layer loop is searched, and the found macrotask is set as a local memory management macrotask.
- the macro task is not searched inside the macro task set as the local memory management macro task.
- a template is a unit for assigning array variables to local memory.
- the compiler prepares templates according to the pattern in which the program accesses the data.
- the size of the provided template is the same as the size of the block or sub-block. Templates are prepared for each dimension (1D array, 2D array, 3D array, ...) and are larger than the size accessed by the program.
- a template with the same size as the block size is used to manage local memory while maintaining program readability.
- a template is a template in which array variables are stored. By storing the necessary data in the template, it is possible to place data in an arbitrary block on the oral memory.
- the template is created by the following procedure.
- For the third dimension select the larger number of rotations of the loop and set it to 3 rotations.
- the size of the largest temporary template is taken as the block size. In the above example, the block size is 4 k elements.
- division reference area size Z block size the number of available blocks (B 1 o c k _ n u m) is obtained by rounding down the decimal part of the quotient obtained by division. On the other hand, if the quotient obtained is less than 1, no block can be created with this template size, so it is determined that template creation failed.
- the block size is divided by the size of each template (block size / size of each template), and the quotient is the number of sub-blocks.
- three templates [1: 3 2, 1: 3 2, 1: 4, 0: 2] of 4 k element size are prepared. Since the template size and the number of templates have been determined, the number of loop divisions is fixed at 4.
- the optimal block size is determined by looking at the entire program. For this reason, the number of program divisions for placing the data (working set) used in the macro task in the oral memory is determined. Then, select the number of divisions so that the block size is larger than the divided data size.
- the data accessed in the loop To determine the block size, first, the data accessed in the loop To create a template with a power of 2.
- the local memory size (excluding the flag area) is assumed to be 2 kB, the size of each array element is assumed to be 4 BZ elements, and the existence of distributed shared memory is not considered.
- the outermost loop 1020 by the variable i, the inner loop 1021 by the variable j in the loop 1020, and the innermost loop 1022 by the variable k in the loop 1021 have a triple loop structure. ing.
- a temporary template is created according to the procedure described above.
- the outermost loop (variable i) 1020 is divided by the maximum number of divisions (10 divisions).
- the maximum number of divisions is the number of iterations of the loop. Note that it is desirable to divide the inner loop when the outer loop is not able to secure the necessary number of blocks even if it is divided to the limit.
- the created template is [1:16, 1: 8, 1: 1, 0: 3].
- the loops 1030 and 1031 are divided in the same way.
- the local memory management macro task suitable for the local memory size can be determined by dividing the inner (other dimensions) loop (multi-dimensional division). it can.
- the local memory size (excluding the flag area) is assumed to be 2 kB, the size of each array element is 4 BZ elements, and the existence of distributed shared memory is not considered.
- this program has a triple loop with variables j and k.
- Loop 1051 is executed after loop 1041, and loop 1042 and loop 1052 have the same data (array variable A [1:30, 1:10, 1: 1: 1] and array variable B [1:30, 1 : 10, 1: 1]), loop 1043 and loop 1053 have the same data (array variable A [1: 30, 1 1: 20, 1: 1] and array variable B [1: 30, 1 1 : 20, 1: 1]).
- the divided outermost loop 1041 B and outermost loop 1051 B can be executed in order (that is, the inner loop 1043 and the inner loop 1053 are executed in order). For this reason, the array data used in loop 1043 is not changed. It can also be used in loop 1 0 5 3. In other words, no data (array variable) is transferred between the end of execution of loop 1 0 4 1 B and the start of execution of loop 1 0 5 1 B.
- the distribution of the loop is executed so that the loop that handles the same data is executed continuously. This prevents data transfer from occurring during the execution of the loop.
- FIG. 16 shows an example of a procedure for creating a template bowl according to the embodiment of the present invention.
- a template is a unit that allocates array variables to local memory in order to handle local memory on a macro task.
- Templates are prepared as 1D arrays, 2D arrays, 3D arrays, etc., and their shapes vary depending on the array variables used in the macro task. For example, considering a two-dimensional array, squares with the same maximum value of each subscript of the array variable, or rectangles with different maximum values of subscripts (vertical and horizontal) Force to match the size of the array variable used in the macro task To be prepared.
- the size of the template is larger than the size of data used by the local memory management macrotask.
- the maximum number of subscripts in each dimension of the template is selected to be the smallest power of two that is greater than the maximum value of each dimension subscript in the array variable used by the local memory management macrotask. For this reason, the size of a template is the same as the size of either a block or a sub-block, even if its shape changes.
- the size of the template is equal to the block size or one power of 2 of the block size.
- a template with the smallest size that can fit the data is created, and the program is created so that the data fits in the created template. (Loop). And when allocating array variables to local memory, they can be allocated to blocks of the same size, and the storage capacity of local memory can be used without waste.
- the template assigned to block 0 uses block 0 memory space and the template assigned to block 1 uses block 1 memory space.
- the prepared template is the template in which a plurality of the same templates are arranged (dimension of array variable used by placing data + one dimension).
- the newly created dimension is the dimension for specifying blocks, and the number of elements is the number of blocks.
- the dimension of the template is one dimension larger than the dimension of the array variable. This is to change the block to be accessed by switching multiple array variables depending on the value of the added dimension of the template.
- Each template is assigned to a different block (different address) in local memory. If the array variables have the same shape and size, the same template can be used. For example, evenly divided loops use array variables of the same shape and size, so it is effective to prepare such a template. For example, if the number of blocks is 8, and each size is [1: 2, 1, 1:16, 1: 4], t empA [l: 2, 1:16, 1: 4, 0: 7 ] Template in local memory.
- Figure 17 shows the state of local memory to which the template is mapped.
- FORTRAN uses the EQUIVALENCE statement for mapping the template.
- EQUIVALENCE (LM (1), tem P A (l, 1, 1,0)) Te cowpea to declare that can be assigned to block 0 of the local memory, the template A.
- Template A is a template for a 3D array where each dimension is t empA
- t empA [1, 1, 1, 0] is assigned to block 0 (address 0 to 127), and t empA [1, 1, 1, 1] is assigned to block 1 (address 1 28 to 255). Assigned.
- the outermost fourth dimension of the template is not the dimension of the template itself, but the block number to which the template is assigned.
- the data of array variable G A is stored in block 2 of local memory.
- Figure 18 shows the state of verbal memory to which another template is mapped. Unlike the example above, if the array size that appears in the program is [1: 2, 1,8, 1: 4], the template te mp_s ub A [1: 2, 1: 8, 1: 4, 0: 1 5] can be assigned to local memory. In this way, the sub-block to be accessed is variable depending on the value of the outermost element.
- template (sub) A can be assigned to subblock 0 of local memory. .
- Template A is a template for a three-dimensional array, and its size is t emp—sub A [1: 2, 2, 1: 8, 1: 4, 0:15]. Therefore, sub block 0 (address 0 to 63) is assigned t emp— su bA [l, 1, 1, 0], and sub block 1 (address 64 to: I 27) is assigned t emp — su bA [1 , 1, 1, 1] are assigned.
- the data of array variable GA is stored in subblock 4 of local memory.
- the compiler based on the information obtained by analyzing the program, the compiler identifies the shape of the array variable used in the program, creates a template, and decides which template to assign the variable to.
- the one-dimensional address space of the memory can be made to appear multidimensional, and the multidimensional array used in the program can be allocated to the memory as it is.
- the local memory size is 1024
- the block size is 128
- the local memory area is 4 blocks 101, 4 sub-blocks 102, 4 sub-sub-blocks 10 3, 8
- the compiler When divided into sub-sub-sub-blocks 104, it shows how the compiler rewrites the code and the state of the local memory during program execution.
- Figure 19 shows the state of the original code and local memory (state 1) before compilation.
- This original code contains three loops and two subroutine calls, and these loops and subroutine calls are local memory management macrotasks.
- Figure 20 shows the state (state 2) where the template is set to a block. LM region and template sequence are defined, and template template is transferred to low power / rememory by EQUIVALENCE statement.
- Assign to address space With this allocation, the local / memory and the template point to the same area. And the corresponding area changes by changing the index (0-7) of the template. Although it is declared by the template array, after t emp i (1, 4), it is an area allocated to sub-blocks, so it is not used as a block.
- Figure 21 shows the state (state 3) converted to the template array.
- the array names a (i), b (i), c (i) in the original code are te mp i (i, 0), t emp i (i, 1), t emp i ( It can be rewritten as i and 2).
- Figure 22 shows the situation (state 4) where data is being swept from the block.
- the second macrotask uses four arrays b, c, d, and e, so four blocks are required.
- the required number of blocks is released according to the sweep priority.
- three arrays a, b, and c are stored in local memory, but arrays b and c are used continuously. So to load array e, array a is swept out.
- the data stored in the block to be swept out is transferred to the central shared memory 28 or 14. Therefore, an instruction for transferring the data stored in the template array to the central shared memory 28 or 14 array is inserted into the original code. .
- Figure 23 shows the state converted to the template array (state 5). Similar to the state shown in state 3 (Fig. 21), the array to be used in local memory is converted to the newly defined template array. Array a is swept from block 0 and array d is stored.
- Figure 24 shows the situation where the subroutine is analyzed (state 6). Analyzes subroutine arguments and the number of blocks required for processing within the subroutine.
- subroutine sub 1 uses argument array X and automatic variable array y. That is, one block for arguments and one block for internal processing. A total of two books are required.
- Figure 25 shows the state (state 7) that is converted into a template array using block specification variables within the subroutine.
- block_nol the block specification variable
- Figure 26 shows the state (state 8) where a block for subroutine processing is reserved. Since the analysis in the subroutine has already been completed and the number of blocks required for the subroutine is already known, the necessary number of blocks are freed when the subroutine is called, and a block for subroutine processing is secured. If the required number of blocks is not available, sweep out the data already loaded. The data to be swept is determined according to the sweep priority.
- this subroutine requires one argument block and one internal processing block.
- arrays b, c, d, and e are used as an argument. Therefore, it is necessary to free one block for internal processing.
- arrays c and d are used immediately, so array b is swept out.
- Figure 27 shows the state (state 9) where the block specification variable is set.
- the internal processing array used in the subroutine can be set to any block by the block specification variable block_nol.
- the block number assigned to the array variable for internal processing is set in the specified variable.
- Figure 28 shows the state in which the subroutine is executed (state 10).
- subroutine The block specification variable set at the time of the call determines the block used. That is, block 1 is assigned to the array y for internal processing, and block 3 is assigned to the array X for arguments. In the subroutine, the subroutine is processed using the specified block.
- Figure 29 shows the state at the end of subroutine execution (state 1 1).
- the block for internal processing becomes NULL.
- the argument prox returns to the original array received as an argument.
- FIG. 30 shows a state (state 1 2) that is converted into a template array. Similar to the states shown in state 3 (Fig. 21) and state 5 (Fig. 23), the array to be used in the local memory is converted to a newly defined template array.
- Figure 31 shows the state (state 13) in which a block for subroutine processing is secured. Since the analysis in the subroutine has already been completed and the number of blocks required for the subroutine is already known, the necessary number of blocks are freed when the subroutine is called, and blocks for subroutine processing are secured. If the required number of blocks is not free, the data already loaded is swept out. The data to be swept is determined according to the sweep priority.
- next macro task (subroutine call) it is necessary to release one block for the internal processing of the subroutine.
- the array a is used as an argument of the subroutine. Since the lj d, c, and e have the same sweep priority, the array d stored in block 0 with the smallest block number is swept out. Since it is known that the array a is required in the next macro task, the array a is transferred to an empty block 1 in the local memory by the data transfer unit.
- Figure 32 shows the state (state 14) in which the block specification variable is set.
- the internal processing array used in the subroutine is determined by the block specification variable block—nol. Any block
- the block number assigned to the array variable for internal processing is set in the specified variable when the subroutine is called.
- a block number different from the previous subroutine call (state 9 shown in Fig. 27) can be set.
- Figure 33 shows the state in which the subroutine is executed (state 15).
- the block used is determined by the block specification variable set when the subroutine is called. That is, block 0 is assigned to the array y for internal processing, and block 1 is assigned to the array X for arguments.
- the subroutine is processed using the specified block. Processing is performed in a different area from the previous subroutine call (state 10 shown in Fig. 28).
- Figure 34 shows the state when the subroutine is finished (state 16).
- the code shown in Figure 34 is the code at the completion of compilation.
- the block for internal processing becomes NU L L.
- the argument block returns to the original array received as an argument.
- the present invention can be applied to management of a storage area of a memory used by a processor, and is particularly suitable for management of a storage area of a memory used by a multitask processor.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Memory System (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
Description
Claims
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/525,404 US8438359B2 (en) | 2007-02-28 | 2008-02-27 | Memory management method, information processing device, program creation method, and program |
CN2008800037808A CN101601017B (zh) | 2007-02-28 | 2008-02-27 | 存储器管理方法以及程序的生成方法 |
GB0914592.1A GB2459802B (en) | 2007-02-28 | 2008-02-27 | Memory management method and information processing device implementing the method |
KR1020097017059A KR101186174B1 (ko) | 2007-02-28 | 2008-02-27 | 메모리 관리방법, 정보처리장치, 프로그램의 작성방법 및 프로그램 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007050269A JP5224498B2 (ja) | 2007-02-28 | 2007-02-28 | メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム |
JP2007-050269 | 2007-02-28 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2008105558A1 true WO2008105558A1 (ja) | 2008-09-04 |
Family
ID=39721378
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2008/053891 WO2008105558A1 (ja) | 2007-02-28 | 2008-02-27 | メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム |
Country Status (6)
Country | Link |
---|---|
US (1) | US8438359B2 (ja) |
JP (1) | JP5224498B2 (ja) |
KR (1) | KR101186174B1 (ja) |
CN (1) | CN101601017B (ja) |
GB (2) | GB2459802B (ja) |
WO (1) | WO2008105558A1 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013001614A1 (ja) * | 2011-06-28 | 2013-01-03 | 富士通株式会社 | データ処理方法およびデータ処理システム |
JPWO2013001614A1 (ja) * | 2011-06-28 | 2015-02-23 | 富士通株式会社 | データ処理方法およびデータ処理システム |
Families Citing this family (46)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8219740B2 (en) * | 2008-06-25 | 2012-07-10 | International Business Machines Corporation | Flash sector seeding to reduce program times |
CN101499034A (zh) * | 2009-03-05 | 2009-08-05 | 北京中星微电子有限公司 | 内存管理方法 |
US8335897B2 (en) * | 2009-12-15 | 2012-12-18 | Seagate Technology Llc | Data storage management in heterogeneous memory systems |
JP5810918B2 (ja) * | 2009-12-24 | 2015-11-11 | 日本電気株式会社 | スケジューリング装置、スケジューリング方法及びプログラム |
US8723877B2 (en) * | 2010-05-20 | 2014-05-13 | Apple Inc. | Subbuffer objects |
KR101754998B1 (ko) | 2011-01-27 | 2017-07-06 | 삼성전자주식회사 | 멀티 코어 시스템 및 멀티 코어 시스템에서의 데이터 병렬 처리 방법 |
CN102622206A (zh) * | 2011-01-28 | 2012-08-01 | 中兴通讯股份有限公司 | 一种处理器及其处理数据的方法 |
JP2012173870A (ja) * | 2011-02-18 | 2012-09-10 | Toshiba Corp | 半導体装置及びメモリ保護方法 |
US9354988B2 (en) * | 2011-03-28 | 2016-05-31 | Sap Se | Allocation strategies for data storage applications |
JP5708216B2 (ja) * | 2011-05-09 | 2015-04-30 | ソニー株式会社 | フラッシュメモリ装置、メモリ制御装置、メモリ制御方法、ストレージシステム |
US9830133B1 (en) * | 2011-12-12 | 2017-11-28 | Significs And Elements, Llc | Methods and apparatus for automatic communication optimizations in a compiler based on a polyhedral representation |
US20140281369A1 (en) * | 2011-12-23 | 2014-09-18 | Ashish Jha | Apparatus and method for sliding window data gather |
US10193927B2 (en) * | 2012-02-27 | 2019-01-29 | University Of Virginia Patent Foundation | Method of instruction location randomization (ILR) and related system |
WO2013137862A1 (en) | 2012-03-13 | 2013-09-19 | Intel Corporation | Dynamically controlling interconnect frequency in a processor |
WO2013137859A1 (en) | 2012-03-13 | 2013-09-19 | Intel Corporation | Providing energy efficient turbo operation of a processor |
US9436245B2 (en) | 2012-03-13 | 2016-09-06 | Intel Corporation | Dynamically computing an electrical design point (EDP) for a multicore processor |
US8984313B2 (en) | 2012-08-31 | 2015-03-17 | Intel Corporation | Configuring power management functionality in a processor including a plurality of cores by utilizing a register to store a power domain indicator |
US8510531B1 (en) | 2012-09-20 | 2013-08-13 | Google Inc. | Fast, dynamic cache packing |
KR101537725B1 (ko) * | 2013-01-18 | 2015-07-20 | 서울대학교산학협력단 | 워크 그룹 크기 결정 방법, 시스템 및 컴퓨터 판독가능 기록매체 |
JP6161396B2 (ja) * | 2013-05-15 | 2017-07-12 | オリンパス株式会社 | 演算装置 |
JP6161395B2 (ja) * | 2013-05-15 | 2017-07-12 | オリンパス株式会社 | 演算装置 |
JP6018022B2 (ja) | 2013-06-14 | 2016-11-02 | 株式会社デンソー | 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置 |
JP5915624B2 (ja) * | 2013-11-14 | 2016-05-11 | 株式会社デンソー | 電子制御装置 |
JP6201788B2 (ja) * | 2014-01-29 | 2017-09-27 | 富士通株式会社 | ループ分割検出プログラム及びループ分割検出方法 |
JP6200824B2 (ja) * | 2014-02-10 | 2017-09-20 | ルネサスエレクトロニクス株式会社 | 演算制御装置及び演算制御方法並びにプログラム、OpenCLデバイス |
KR101771289B1 (ko) * | 2014-05-19 | 2017-08-24 | 엘에스산전 주식회사 | Plc 프로그램 관리 장치 |
CN104168079B (zh) * | 2014-09-03 | 2017-02-01 | 成都朗锐芯科技发展有限公司 | 一种多通道分组定时器 |
JP6488739B2 (ja) | 2015-02-05 | 2019-03-27 | 株式会社デンソー | 並列化コンパイル方法、及び、並列化コンパイラ |
JP6488738B2 (ja) | 2015-02-05 | 2019-03-27 | 株式会社デンソー | 並列化コンパイル方法、及び、並列化コンパイラ |
US10491667B1 (en) * | 2015-03-16 | 2019-11-26 | Amazon Technologies, Inc. | Customized memory modules in multi-tenant service provider systems |
JP6427054B2 (ja) | 2015-03-31 | 2018-11-21 | 株式会社デンソー | 並列化コンパイル方法、及び並列化コンパイラ |
JP6427053B2 (ja) | 2015-03-31 | 2018-11-21 | 株式会社デンソー | 並列化コンパイル方法、及び並列化コンパイラ |
EP3113026B1 (en) | 2015-06-29 | 2019-07-24 | aicas GmbH | Automatic memory management using a memory management unit |
CN110874212B (zh) | 2015-06-30 | 2021-08-20 | 华为技术有限公司 | 一种硬件加速方法、编译器以及设备 |
DE102017209697A1 (de) * | 2016-06-13 | 2017-12-14 | Denso Corporation | Parallelisierungsverfahren, Parallelisierungswerkzeug und fahrzeuginterne Vorrichtung |
DE102016211386A1 (de) * | 2016-06-14 | 2017-12-14 | Robert Bosch Gmbh | Verfahren zum Betreiben einer Recheneinheit |
JP2017228029A (ja) * | 2016-06-21 | 2017-12-28 | 株式会社デンソー | 並列化方法、並列化ツール、車載装置 |
US10289309B2 (en) | 2016-09-12 | 2019-05-14 | Toshiba Memory Corporation | Automatic detection of multiple streams |
US10073640B1 (en) | 2017-03-10 | 2018-09-11 | Toshiba Memory Corporation | Large scale implementation of a plurality of open channel solid state drives |
US10542089B2 (en) | 2017-03-10 | 2020-01-21 | Toshiba Memory Corporation | Large scale implementation of a plurality of open channel solid state drives |
US10339983B1 (en) | 2017-12-29 | 2019-07-02 | Micron Technology, Inc. | Temperature-based memory operations |
US11475306B2 (en) | 2018-03-22 | 2022-10-18 | Amazon Technologies, Inc. | Processing for multiple input data sets |
US11461631B2 (en) * | 2018-03-22 | 2022-10-04 | Amazon Technologies, Inc. | Scheduling neural network computations based on memory capacity |
JP7060803B2 (ja) | 2018-06-20 | 2022-04-27 | 富士通株式会社 | 情報処理装置、コンパイラプログラム及びコンパイル方法 |
CN109634518A (zh) * | 2018-10-29 | 2019-04-16 | 成都华为技术有限公司 | 一种存储资源配置方法及装置 |
CN110704362B (zh) * | 2019-09-12 | 2021-03-12 | 无锡江南计算技术研究所 | 一种处理器阵列局部存储混合管理方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003015883A (ja) * | 2001-06-29 | 2003-01-17 | Nec Corp | プロセッサ間通信削減方法と並列化コンパイラ装置並びにプログラム |
WO2005081113A2 (en) * | 2004-02-13 | 2005-09-01 | Jaluna Sa | Memory allocation |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5784699A (en) * | 1996-05-24 | 1998-07-21 | Oracle Corporation | Dynamic memory allocation in a computer using a bit map index |
US6088777A (en) * | 1997-11-12 | 2000-07-11 | Ericsson Messaging Systems, Inc. | Memory system and method for dynamically allocating a memory divided into plural classes with different block sizes to store variable length messages |
JP4784792B2 (ja) | 1999-12-22 | 2011-10-05 | 学校法人早稲田大学 | マルチプロセッサ |
DE10228103A1 (de) | 2002-06-24 | 2004-01-15 | Bayer Cropscience Ag | Fungizide Wirkstoffkombinationen |
US20050268049A1 (en) | 2002-08-30 | 2005-12-01 | Koninklijke Philips Electronics N.V. | Dynamic memory management |
US7563748B2 (en) | 2003-06-23 | 2009-07-21 | Cognis Ip Management Gmbh | Alcohol alkoxylate carriers for pesticide active ingredients |
-
2007
- 2007-02-28 JP JP2007050269A patent/JP5224498B2/ja active Active
-
2008
- 2008-02-27 GB GB0914592.1A patent/GB2459802B/en active Active
- 2008-02-27 KR KR1020097017059A patent/KR101186174B1/ko active IP Right Grant
- 2008-02-27 CN CN2008800037808A patent/CN101601017B/zh active Active
- 2008-02-27 WO PCT/JP2008/053891 patent/WO2008105558A1/ja active Application Filing
- 2008-02-27 US US12/525,404 patent/US8438359B2/en active Active
- 2008-02-27 GB GB1109237.6A patent/GB2478874B/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003015883A (ja) * | 2001-06-29 | 2003-01-17 | Nec Corp | プロセッサ間通信削減方法と並列化コンパイラ装置並びにプログラム |
WO2005081113A2 (en) * | 2004-02-13 | 2005-09-01 | Jaluna Sa | Memory allocation |
Non-Patent Citations (2)
Title |
---|
YOSHIDA A.: "A Data-Localization Scheme among Doall/Sequential Loops for Fortran Coarse-Grain Parallel Processing", THE TRANSACTIONS OF THE INSTITUTE OF ELECTRONICS, INFORMATION AND COMMUNICATION ENGINEERS D-I, vol. J-78-D-I, no. 2, 25 February 1995 (1995-02-25), pages 162 - 169 * |
YOSHIDA A.: "A Near-Fine-Grain Task Scheduling Scheme for Multi-Grain Data-Localization", IEICE TECHNICAL REPORT, vol. 96, 27 August 1996 (1996-08-27), pages 71 - 78 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013001614A1 (ja) * | 2011-06-28 | 2013-01-03 | 富士通株式会社 | データ処理方法およびデータ処理システム |
JPWO2013001614A1 (ja) * | 2011-06-28 | 2015-02-23 | 富士通株式会社 | データ処理方法およびデータ処理システム |
Also Published As
Publication number | Publication date |
---|---|
CN101601017A (zh) | 2009-12-09 |
GB2478874B (en) | 2011-12-28 |
GB0914592D0 (en) | 2009-09-30 |
GB2478874A (en) | 2011-09-21 |
GB2459802B (en) | 2012-01-04 |
GB201109237D0 (en) | 2011-07-13 |
KR20090106613A (ko) | 2009-10-09 |
US20100174876A1 (en) | 2010-07-08 |
CN101601017B (zh) | 2013-10-09 |
JP5224498B2 (ja) | 2013-07-03 |
US8438359B2 (en) | 2013-05-07 |
KR101186174B1 (ko) | 2012-10-02 |
GB2459802A (en) | 2009-11-11 |
JP2008217134A (ja) | 2008-09-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2008105558A1 (ja) | メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム | |
JP4082706B2 (ja) | マルチプロセッサシステム及びマルチグレイン並列化コンパイラ | |
EP1881405B1 (en) | Global compiler for controlling heterogeneous multiprocessor | |
JP4936517B2 (ja) | ヘテロジニアス・マルチプロセッサシステムの制御方法及びマルチグレイン並列化コンパイラ | |
US7926046B2 (en) | Compiler method for extracting and accelerator template program | |
JP6018022B2 (ja) | 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置 | |
US8528001B2 (en) | Controlling and dynamically varying automatic parallelization | |
US20140137123A1 (en) | Microcomputer for low power efficient baseband processing | |
WO2013184380A2 (en) | Systems and methods for efficient scheduling of concurrent applications in multithreaded processors | |
JP2016192153A (ja) | 並列化コンパイル方法、並列化コンパイラ、及び車載装置 | |
JP2007305148A (ja) | マルチプロセッサシステム | |
JP4784792B2 (ja) | マルチプロセッサ | |
JP2016192152A (ja) | 並列化コンパイル方法、並列化コンパイラ、及び車載装置 | |
JP4304347B2 (ja) | マルチプロセッサ | |
JP4784842B2 (ja) | マルチプロセッサ及びマルチプロセッサシステム | |
Ghadge | Improving Code Overlay Performance by Pre-fetching in Scratch Pad Memory Systems | |
Lam et al. | Hierarchical Reduction | |
JP2009230764A (ja) | マルチプロセッサシステム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
WWE | Wipo information: entry into national phase |
Ref document number: 200880003780.8 Country of ref document: CN |
|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 08721311 Country of ref document: EP Kind code of ref document: A1 |
|
WWE | Wipo information: entry into national phase |
Ref document number: 1020097017059 Country of ref document: KR |
|
ENP | Entry into the national phase |
Ref document number: 0914592 Country of ref document: GB Kind code of ref document: A Free format text: PCT FILING DATE = 20080227 |
|
WWE | Wipo information: entry into national phase |
Ref document number: 0914592.1 Country of ref document: GB |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
WWE | Wipo information: entry into national phase |
Ref document number: 12525404 Country of ref document: US |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 08721311 Country of ref document: EP Kind code of ref document: A1 |