WO2006038664A1 - Dynamic loading and unloading for processing unit - Google Patents
Dynamic loading and unloading for processing unit Download PDFInfo
- Publication number
- WO2006038664A1 WO2006038664A1 PCT/JP2005/018485 JP2005018485W WO2006038664A1 WO 2006038664 A1 WO2006038664 A1 WO 2006038664A1 JP 2005018485 W JP2005018485 W JP 2005018485W WO 2006038664 A1 WO2006038664 A1 WO 2006038664A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- program module
- local memory
- program
- processor
- module
- Prior art date
Links
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
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/169—Annotation, e.g. comment data or footnotes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/177—Editing, e.g. inserting or deleting of tables; using ruled lines
- G06F40/18—Editing, e.g. inserting or deleting of tables; using ruled lines of spreadsheets
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/25—Using a specific main memory architecture
- G06F2212/251—Local memory within processor subsystem
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/25—Using a specific main memory architecture
- G06F2212/253—Centralized memory
Definitions
- the present invention relates generally to computer program execution. More particularly, the present invention relates to improving program execution by manipulating program modules and by loading program modules in local storage of a processor based upon object modules.
- Computing systems are becoming increasingly more complex, achieving higher processing speeds while at the same time shrinking component size and reducing manufacturing costs. Such advances are critical to the success of many applications, such as real-time, multimedia gaming and other computation-intensive applications. Often, computing systems incorporate multiple processors that operate in parallel (or in concert) to increase processing efficiency.
- the processor or processors manipulate code and/or data (collectively "information") .
- Information is typically stored in a main memory.
- the main memory can be, for example, a dynamic random access memory (“DRAM”) chip that is physically separate from the chip containing the processor (s) .
- DRAM dynamic random access memory
- the main memory is physically or logically separate from the processor, there can be significant delays (“high latency”) that may be, for example, tens or hundreds of milliseconds in additional time required to access the information contained in the main memory. High latency adversely affects processing because the processor may have to idle or pause operation until the necessary information has been delivered from the main memory.
- Cache memory is a temporary storage located between the processor and the main memory.
- Cache memory generally has small access latency ("low latency") compared to the main memory, but has a much smaller storage size.
- low latency small access latency
- cache memory helps improve processor performance by temporarily storing data for repeated access.
- the effectiveness of cache memory relies on the locality of access. For example, using a "9 to 1" rule, where 90% of the time is spent accessing 10% of the data, retrieving even a small amount of data from main memory or external storage is not very effective since too much time is spent accessing that little amount of data. Thus, often-used data should be stored in the cache.
- a conventional hardware cache system contains "cache lines” which are basic units of storage management. Cache lines are selected to be the optimal size of data transfer between the cache memory and the main memory. As is known in the art, cache systems operate with certain rules mapping the cache lines to the main memory. For instance, Cache "tags” are utilized showing which part(s) of the main memory is stored on the cache lines, and the status of that portion of main memory. Another limitation besides memory access that can adversely affect program execution is memory size. The main memory may simply be too small to perform needed operations. In this case, “virtual memory” can be used to provide larger system address space than physically exists in main memory by utilizing external storage. However, external storage typically has much higher latency than main memory.
- MMU memory management unit
- the MMU manages mapping of virtual addresses (the addresses used by the program software) to physical addresses in memory.
- the MMU can detect when an access is made to a virtual address that is not tied to a physical address. When this occurs, the virtual memory manager software is called. If the virtual address has been saved in external storage, it will be loaded into main memory and a mapping will be made for the virtual address.
- the individual processing units may have local memories, which can supplement the storage in main memory.
- the local memories are often high speed, but with limited storage capacity. There is no visualization between the address used by software and the physical address of the local memory. This limits the amount of memory that a processing unit can use. While the processing unit may access main memory via a direct memory access (“DMA”) controller (“DMAC”) or other hardware, there is no hardware mechanism which links the local memory address space with the system address space.
- DMA direct memory access
- DMAC direct memory access
- the present invention addresses these and other problems, and is particularly suited to multiprocessor architectures with strict memory constraints.
- a method of managing operations in a processing apparatus which has a local memory comprises determining if a program module is loaded in the local memory, the program module being associated with a programming reference; loading the program module into the local memory if the program module is not loaded in the local memory; and obtaining information from the program module based upon the programming reference.
- the information obtained from the program module comprises at least one of data and code.
- the program module comprises an object module loaded in the local memory from a main memory.
- the programming reference comprises a direct reference within the program module.
- the programming reference comprises an indirect reference to a second program module.
- the program module is a first program module and the method further comprises storing the first program module and a second program module in a main memory, wherein the loading step includes loading the first program module into the local memory from the main memory.
- the programming reference may comprise a direct reference within the first program module.
- the programming reference may comprise an indirect reference to the second program module.
- the method when the information is obtained from the second program module, the method preferably further comprises determining if the second program module is loaded in the local memory; loading the second program module into the local memory if the second program module is not loaded in the local memory; and providing the information to the first program module.
- a method of managing operations in a processing apparatus which has a local memory is provided.
- the method comprises obtaining a first program module from a main memory; obtaining a second program module from the main memory; determining if a programming reference used by the first program module comprises an indirect reference to the second program module; and forming a new program module if the programming reference comprises the indirect reference, the new program module comprising at least a portion of the first program module so that the programming reference becomes a direct reference between portions of the new program module.
- the method further comprises loading the new program module into the local memory.
- the first and second program modules are loaded in the local memory before forming the new program module.
- the first program module comprises a first code function
- the second program module comprises a second code function
- the new program module is formed to include at least one of the first and second code functions.
- the first program module preferably further comprises a data group
- the new program module is formed to further include the data group.
- the programming reference is an indirect reference to the second program module and the method further comprises determining a new programming reference for use by the new program module based on the programming reference used by the first program module; wherein the new program module is formed to comprise at least the portion of the first program module and at least a portion of the second program module so that the new programming reference is a direct reference within the new program module.
- a method of processing operations in a processing apparatus which has a local memory comprises executing a first program module loaded in the local memory; determining an insertion point for a second program module; loading the second program module in the local memory during execution of the first program module; determining an anticipated execution time to begin execution of the second program module; determining whether loading of the second program module is complete; and executing the second program module after execution of the first program module is terminated.
- the method further comprises delaying execution of the second program module if loading is not complete.
- delaying execution desirably comprises performing one or more NOPs until loading is complete.
- the insertion point is determined statistically.
- the validity of the insertion point is determined based on runtime conditions.
- a processing system comprises a local memory capable of storing a program module; and a processor connected to the local memory.
- the processor includes logic to perform a management function comprising associating a programming reference with the program module, determining if the program module is currently loaded in the local memory, loading the program module into the local memory if the program module is not currently loaded in the local memory, and obtaining information from the program module based upon the programming reference.
- the local memory is preferably integrated with the processor.
- a processing system comprising a local memory capable of storing program modules; and a processor connected to the local memory.
- the processor includes logic to perform a management function comprising storing first and second ones of the program modules in a main memory, loading a selected one the first and second program modules into the local memory from the main memory, associating a programming reference with the selected program module, and obtaining information based upon the programming reference.
- the main memory comprises an on-chip memory. More preferably, the main memory is integrated with the processor.
- a processing system is provided.
- the processing system comprises a local memory capable of storing program modules; and a processor connected to the local memory.
- the processor includes logic to perform a management function comprising obtaining a first program module from a main memory, obtaining a second program module from the main memory, determining a first programming reference for use by the first program module, forming a new program module comprising at least a portion of the first program module so that the first programming reference becomes a direct reference within the new program module, and loading the new program module into the local memory.
- a processing system comprising a local memory capable of storing the program modules; and a processor connected to the local memory.
- the processor includes logic to perform a management function comprising determining an insertion point for a first program module, loading the first program module in the local memory during execution of a second program module by the processor, and executing the first program module after execution of the second program module is terminated and loading is complete.
- a storage medium storing a program for use by a processor is provided.
- the program cause the processor to: identify a program module associated with a programming reference; determine if the program module is currently loaded in a local memory associated with the processor; load the program module into the local memory if the program module is not currently loaded in the local memory; and obtain information from the program module based upon the programming reference.
- a storage medium storing a program for use by a processor.
- the program causes the processor to: store first and second program modules in a main memory; load the first program module into a local memory associated with the processor from the main memory, the first program module being associated with a programming reference; and obtain information based upon the programming reference.
- a storage medium storing a program for use by a processor.
- the program causes the processor to obtain a first program module from a main memory; obtain a second program module from the main memory; determine if a programming reference used by the first program module comprises an indirect reference to the second program module; and form a new program module if the programming reference comprises the indirect reference, the new program module comprising at least a portion of the first program module so that the programming reference becomes a direct reference between portions of the new program module.
- a storage medium storing a program for use by a processor.
- the program causes the processor to execute a first program module loaded in a local memory associated with the processor; determine an insertion point for a second program module; load the second program module in the local memory during execution of the first program module; determine an anticipated execution time to begin execution of the second program module; determine whether loading of the second program module is complete; and execute the second program module after execution of the first program module is terminated.
- a processing system comprises a processing element including a bus, a processing unit and at least one sub-processing unit connected to the processing unit by the bus. At least one of the processing unit and the at least one sub-processing units are operable to determine whether a programming reference belongs to a first program module, to load the first program module into a local memory, and to obtain information from the first program module based upon the programming reference.
- a computer processing system comprises a user input device; a display interface for attachment of a display device; a local memory capable of storing program modules; and a processor connected to the local memory.
- the processor comprises one or more processing elements. At least one of the processor elements includes logic to perform a management function comprising determining whether a programming reference belongs to a first program module, loading the first program module into the local memory, and obtaining information from the first program module based upon the programming reference.
- a computer network comprises a plurality of computer processing systems connected to one another via a communications' network.
- Each of the computer processing systems comprises a user input device; a display interface for attachment of a display device; a local memory capable of storing program modules; and a processor connected to the local memory.
- the processor comprises one or more processing elements.
- At least one of the processor elements includes logic to perform a management function comprising determining whether a programming reference belongs to a first program module, loading the first program module into the local memory, and obtaining information from the first program module based upon the programming reference.
- at least one of the computer processing systems comprises a gaming unit capable of processing multimedia gaming applications.
- FIG. 1 is a diagram illustrating an exemplary structure of a processing element that can be used in accordance with aspects of the present invention.
- FIG. 2 is a diagram illustrating an exemplary structure of a multiprocessing system of processing elements usable with aspects of the present invention.
- FIG. 3 is a diagram illustrating an exemplary structure of a sub-processing unit.
- FIGS. 4A-B illustrate a storage management diagram between main memory and a local store and an associated logic flow diagram in accordance with a preferred aspect of the present invention.
- FIGS. 5A-B illustrate diagrams of program module regrouping in accordance with preferred aspects of the present invention.
- FIGS. 6A-B illustrate diagrams of call tree regrouping in accordance with preferred aspects of the present invention.
- FIGS. 7A-B illustrate program module preloading logic and diagrams in accordance with preferred aspects of the present invention.
- FIG. 8 illustrates a computing network in accordance with aspects of the present invention.
- FIG. 1 is a block diagram of a basic processing module or processor element (“PE”) 100 that can be employed in accordance with aspects of the present invention.
- the PE 100 preferably comprises an I/O interface 102, a processing unit (“PU”) 104, a direct memory access controller (“DMAC”) 106, and a plurality of sub-processing units (“SPUs”) 108, namely SPUs 108a 108d. While four SPUs 108a-d are shown, the PE 100 may include any number of such devices.
- a local (or internal) PE bus 120 transmits data and applications among PU 104, the SPUs 108, I/O interface 102, DMAC 106 and a memory interface 110.
- Local PE bus 120 can have, for example, a conventional architecture or can be implemented as a packet switch network. Implementation as a packet switch network, while requiring more hardware, increases available bandwidth.
- the I/O interface 102 may connect to one or more external I/O devices (not shown) , such as frame buffers, disk drives, etc. via an I/O bus 124.
- PE 100 can be constructed using various methods for implementing digital logic.
- PE 100 preferably is constructed, however, as a single integrated circuit employing CMOS on a silicon substrate.
- PE 100 is closely associated with a memory 130 through a high bandwidth memory connection 122.
- the memory 130 desirably functions as the main memory for PE 100.
- the memory 130 may be embedded in or otherwise integrated as part of the processor chip incorporating the PE 100, as opposed to being a separate, external "off chip" memory.
- the memory 130 can be in a separate location on the chip or can be integrated with one or more of the processors that comprise the PE 100.
- the memory 130 is preferably a DRAM, the memory 130 could be implemented using other means, such as a static random access memory (“SRAM”), a magnetic random access memory (“MRAM”), an optical memory, a holographic memory, etc.
- DMAC 106 and memory interface 110 facilitate the transfer of data between the memory 130 and the SPUs 108 and PU 104 of the PE 100.
- PU 104 can be, for instance, a standard processor capable of stand-alone processing of data and applications. In operation, the PU 104 schedules and orchestrates the processing of data and applications by the SPUs 108.
- the PE 100 may include multiple PUs 104. Each of the PUs 104 may control one, all, or some designated group of the SPUs 108.
- the SPUs 108 are preferably single instruction, multiple data ("SIMD") processors. Under the control of PU 104, the SPUs 108 may perform the processing of the data and applications in a parallel and independent manner.
- DMAC 106 controls accesses by PU 104 and the SPUs 108 to the data and applications stored in the shared memory 130.
- a number of PEs, such as PE 100 may be joined or packed together, or otherwise logically associated with one another, to provide enhanced processing power.
- FIG. 2 illustrates a processing architecture comprised of multiple PEs 200 (PE 1, PE 2, PE 3, and PE 4) that can be operated in accordance with aspects of the present invention as described below.
- the PEs 200 are on a single chip.
- the PEs 200 may or may not include the subsystems such as the PU and/or SPUs discussed above with regard to the PE 100 of FIG. 1.
- the PEs 200 may be of the same or different types, depending upon the types of processing required.
- one or more of the PEs 200 may be a generic microprocessor, a digital signal processor, a graphics processor, microcontroller, etc.
- One of the PEs 200, such as PE 1, may control or direct some or all of the processing by PEs 2, 3 and 4.
- the PEs 200 are preferably tied to a shared bus 202.
- a memory controller or DMAC 206 may be connected to the shared bus 202 through a memory bus 204.
- the DMAC 206 connects to a memory 208, which may be of one of the types discussed above with regard to memory 130.
- the memory 208 may be embedded in or otherwise integrated as part of the processor chip incorporating one or more of the PEs 200, as opposed to being a separate, external off chip memory.
- the memory 208 can be in a separate location on the chip or can be integrated with one or more of the PEs 200.
- An I/O controller 212 may also be connected to the shared bus 202 through an I/O bus 210.
- the I/O controller 212 may connect to one or more I/O devices 214, such as frame buffers, disk drives, etc.
- FIG. 3 illustrates an SPU 300 that can be employed in accordance with aspects of the present invention.
- One or more SPUs 300 may be integrated in the PE 100.
- each of the PUs 104 may control one, all, or some designated group of the SPUs 300.
- SPU 300 preferably includes or is otherwise logically associated with local store (“LS") 302, registers 304, one or more floating point units (“FPUs”) 306 and one or more integer units (“IUs”) 308.
- the components of SPU 300 are, in turn, comprised of subcomponents, as will be described below. Depending upon the processing power required, a greater or lesser number of FPUs 306 and IUs 308 may be employed.
- LS 302 contains at least 128 kilobytes of storage, and the capacity of registers 304 is 128 X 128 bits.
- FPUs 306 preferably operate at a speed of at least 32 billion floating point operations per second (32 GFLOPS)
- IUs 308 preferably operate at a speed of at least 32 billion operations per second (32 GOPS) .
- LS 302 is preferably not a cache memory. Cache coherency support for the SPU 300 is unnecessary. Instead, the LS 302 is preferably constructed as an SRAM. A PU 104 may require cache coherency support for direct memory access initiated by the PU 104. Cache coherency support is not required, however, for direct memory access initiated by the SPU 300 or for accesses to and from external devices, for example, I/O device 214.
- LS 302 may be implemented as, for example, a physical memory associated with a particular SPU 300, a virtual memory region associated with the SPU 300, a combination of physical memory and virtual memory, or an equivalent hardware, software and/or firmware structure. If external to the SPU 300, the LS 302 may be coupled to the SPU 300 such as via a SPU-specific local bus or via a system bus such as the local PE bus 120.
- SPU 300 further includes bus 310 for transmitting applications and data to and from the SPU 300 through a bus interface (Bus I/F) 312.
- bus 310 is 1,024 bits wide.
- SPU 300 further includes internal busses 314, 316 and 318.
- bus 314 has a width of 256 bits and provides communication between local store 302 and registers 304.
- Busses 316 and 318 provide communications between, respectively, registers 304 and FPUs 306, and registers 304 and IUs 308.
- the width of the busses 316 and 318 from the FPU 306 or IUs 308 to the registers 304 is 128 bits.
- the larger width of the busses from the registers 304 to the FPUs 306 and the IUs 308 accommodates the larger data flow from the registers 304 during processing. In one example, a maximum of three words are needed for each calculation. The result of each calculation, however, is normally only one word.
- program module includes, but is not limited to, any logical set of program resources allocated in a memory.
- a program module may comprise data and/or code, which can be grouped by any logical means, such as a compiler.
- a program or other computing operations may be implemented using one or more program modules.
- FIG. 4A is an illustration 400 of storage management in accordance with one aspect of the present based on the use of program modules.
- the main memory for example, memory 130, may contain one or more program modules.
- a first program module 402 (Program Module A)
- a second program module 404 (Program Module B)
- the program module may be a compile- time object module, known as a "*.o" file.
- Object modules provide very clear logical partitioning between program parts. Because an object module is created during compilation, it provides accurate address referencing, whether made within the module (“direct referencing") or outside of it (“external referencing" or "indirect referencing”) . Indirect referencing is preferably implemented by calling a management routine, as will be discussed below.
- programs are loaded into the LS 302 per program module. More preferably, programs are loaded into the LS 302 per object module. As seen in FIG. 4A, Program Module- A can be loaded into the LS 302 as a first program module 406, and Program Module B can be loaded as a second program module 408.
- direct referencing is performed to access data or code within the module, as seen within program module 406, all of the references (e.g., pointers to code and/or data) can be accessed without overhead.
- a management routine 414 is preferably called.
- the management routine 414 which is preferably run by the processor's logic, can load the program module if needed, or can access the program module if it is already loaded. For example, assume indirect reference (dashed arrow 412) is made in the first program module 406 (Program Module A) . Further assume that the indirect reference (dashed arrow 412) is to Program Module B, which is not found in the local store 302. Then, the management routine 414 can load program module B, which resides in main memory 130 as the program module 404, into the local store 302 as the program module 408.
- FIG. 4B is a logic flow diagram 440 representing storage management according to a preferred aspect of the present invention. Storage management is initialized at step S442.
- a check is performed to determine which program module a reference belongs to.
- the management routine 414 (FIG. 4A) may perform the check, or the results of the check may be provided to the management routine 414 by, for example, another process, application or device.
- a check is performed at step S446 to determine whether that program module has been loaded into the LS 302. If the program module is loaded in the LS 302, the value (data) referenced from the program module is returned to the requesting entity, such as the program module 406 of FIG. 4A, at step S448. If the program module is not loaded in the LS 302, then the referenced module is loaded into the LS 302 at step S450. Once this occurs, the process proceeds to step S448 where the data is returned to the requesting entity.
- the storage management routine terminates at step S452.
- the management routine 414 preferably performs or oversees the storage management of diagram 400.
- program modules are implemented using object modules formed during compilation, how the object modules are structured can impact the effectiveness of the storage management process. For example, if the data for a code function is not properly associated with that code function, this could create a processing bottleneck. Thus, one should be cautious when separating programs and/or data into multiple source files. This problem can be avoided by analyzing the program, including the code and data (if any) .
- the code and/or data are preferably divided into separate modules.
- the code and/or data are divided into functions or groups of data, depending upon their usage.
- a compiler or other processing tool can analyze ⁇ the references made between functions and groups of data. Then, existing program modules can be repartitioned by grouping the data and/or code into new program modules based on the analysis to optimize the program module grouping.
- the process of determining how to split a module preferably begins by separating the module's code by functions.
- a tree structure can be extracted from the "call out" relationships of the functions.
- a function with no external call out, or a function which is not being referenced externally, can be identified as a "local" function.
- Functions having external references can be grouped by reference target modules, and should be identified as having an external reference. Similar groupings can be implemented for functions that are referenced externally, and such functions should be identified as being subject to an external reference.
- the data portion (s) of a module preferably undergo an equivalent analysis.
- the module groupings are preferably compared/matched to select a "best fit" combination.
- the best fit could be selected, for instance, based on the size of the LS 302, preferred transfer size, and/or alignment. Preferably, the more likely a reference is to be used, the higher it is weighted in the best fit analysis.
- Tools can also be used to automate the optimized grouping. For instance, the compiler and/or the linker may perform one or more compile/link iterations in order to generate a best fit executable file. References can also be statistically analyzed by runtime profiling.
- the input to the regrouping process includes multiple object files that will be linked together to form a program.
- the desired output includes multiple load modules grouped to minimize the delay caused in waiting for a load completion.
- FIG. 5A illustrates a program module group 500 having a first program module 502 and a second program module 504, which are preferably loaded in the LS 302 of an SPU. Because it is possible to share the same code module between different threads in a multithreaded process, it is possible to load the first program module 502 into a first local store and to load the second program module into a second local store. Alternatively, the entire program module group 500 could be loaded into a pair of local stores. However, data modules require separate instances.
- the first program module 502 includes code functions 506 and 508 and data groups 510 and 512.
- the code function 506 includes the code for operation A.
- the code function 508 includes the code for operations B and C.
- the data group 510 includes data set A.
- the data group 512 includes data sets B, C and D.
- the second program module 504 includes code functions 514, 516 and data groups 518, 520.
- the code function 514 includes the code for operations D and E.
- the code function 516 includes the code for operation F.
- the data group 518 includes data sets D and E.
- the data group 520 includes data sets F and G.
- the code function 506 may directly reference the data group 510 (arrow 521) and may indirectly reference the code function 514.
- the code function 508 may directly reference the data group 512 (arrow 523) .
- the code function 514 may directly reference the data group 520 (arrow 524) .
- the code function 516 may directly reference the data group 518 (arrow 526) .
- the indirect reference between code functions 506 and 514 (dashed arrow 522) creates unwanted overhead. Therefore, it is preferable to regroup the code functions and the data groups.
- FIG. 5B illustrates an exemplary regrouping of the program module group 500 of FIG. 5A.
- new program modules 530, 532 and 534 are generated.
- the program module 530 includes code functions 536, 538 and data groups 540,
- the code function 536 includes the code for operation A.
- the code function 538 includes the code for operations D and E.
- the data group 540 includes data set A.
- the data group 542 includes data sets F and G.
- the program module 532 includes code function 544 and data group 546.
- the code function 544 includes the code for operations B and C.
- the data group 546 includes data sets B, C and D.
- the program module 534 includes code function 548 and data group 550.
- the code function 548 includes the code for operation F.
- the data group 550 includes data sets D and E.
- the code function 536 may directly reference the data group 540 (arrow 521') and may directly reference the code function 538 (arrow 522') .
- the code function 544 may directly reference the data group 546 (arrow 523') .
- the code function 538 may directly reference the data group 542 (arrow 524') .
- the code function 548 may directly reference the data group 550 (arrow 526') . Grouping is optimized in FIG. 5B because direct referencing is maximized while indirect referencing is eliminated.
- FIG. 6A illustrates a function call tree 600 having a first module 602, a second module 604, a third module 606 and a fourth module 608, which may be loaded in the LS 302 of an SPU.
- the first module 602 includes code functions 610, 612, 614, 616 and 618.
- the code function 610 includes the code for operation A.
- the code function 612 includes the code for operation B.
- the code function 614 includes the code for operation C.
- the code function 616 includes the code for operation D.
- the code function 618 includes the code for operation E.
- the first module 602 also includes data groups 620, 622, 624, 626 and 628, which are associated with the code functions 610, 612, 614, 616 and 618, respectively.
- the data group 620 includes data set (or group) A.
- the data group 622 includes data set B.
- the data group 624 includes data set C.
- the data group 626 includes data set D.
- the data group 628 includes data set E.
- the second module 604 includes code functions 630 and
- the code function 630 includes the code for operation F.
- the code function 632 includes the code for operation G.
- the second module 604 includes data groups 634 and 636, which are associated with the code functions 630 and 632, respectively.
- Data group 638 is also included in the second module 604.
- the data group 634 includes data set (or group) F.
- the data group 636 includes data set G.
- the data group 638 includes data set FG.
- the third module 606 includes code functions 640 and 642.
- the code function 640 includes the code for operation H.
- the code function 642 includes the code for operation I.
- the third module 606 includes data groups 644 and 646, which are associated with the code functions 640 and 642, respectively.
- Data group 648 is also included in the third module 606.
- the data group 644 includes data set (or group) H.
- the data group 646 includes data set I.
- the data group 648 includes data set IE .
- the fourth module 608 includes code functions 650 and 652.
- the code function 650 includes the code for operation J.
- the code function 652 includes the code for operation K.
- the fourth module 608 includes data groups 654 and 656, which are associated with the code functions 640 and 642, respectively.
- the data group 654 includes data set (or group) J.
- the data group 656 includes data set K.
- the code function 610 directly references code function 612 (arrow 613) , code function 614 (arrow 615) , code function 616 (arrow 617), and code function 618 (arrow 619) .
- the code function 614 indirectly references code function 630 (dashed arrow 631) and code function 632 (dashed arrow 633) .
- the code function 616 indirectly references code function 640 (dashed arrow 641) and code function 642 (dashed arrow 643) .
- the code function 618 indirectly references code function 642 (dashed arrow 645) and data group 648 (dashed arrow 647) .
- the code function 630 directly references data group 638 (arrow 637) .
- the code function 632 also directly references data group 638 (arrow 639) .
- the code function 640 indirectly references code function 650 (dashed arrow 651) .
- the code function 640 also indirectly references code function 652 (dashed arrow 653) .
- the code function 642 directly references data group 648 (arrow 649) .
- the code function 650 directly references code function 652 (arrow 655) .
- FIG. 6B illustrates a regrouped function call tree 660 having a first module 662, a second module 664, a third module -666 and a fourth module 668, which may be loaded in the LS 302 of an SPU.
- the first module 662 includes the code functions 610 and 612, as well as the data groups 620 and 622.
- the second module 664 includes the code functions 614, 630 and 632.
- the second module 604 also includes the data groups 634, 636 and 638.
- the third module 666 includes the code functions 616, 618 and 642.
- the third module 666 also includes the data groups 626, 628, 646 and 648.
- the fourth module 668 includes code functions 640, 650 and 652, as well as the data groups 644, 654 and 656.
- the code function 610 directly references code function 612 (arrow 613) .
- the first code module 662 now indirectly references code function 614 (dashed arrow 615'), code function 616 (dashed arrow 617'), and code function 618 (dashed arrow 619') .
- the code function 614 now directly references code function 630 (arrow 631') and code function 632 (arrow 633') .
- the code function 630 still directly references data group 638 (arrow 637), and the code function 632 still directly references data group 638 ' (arrow 639) .
- the code function 616 indirectly references code function 640 (dashed arrow 641) , but now directly references code function 642 (arrow 643') .
- the code function 618 now directly references code function 642 (arrow 645') and data group 648 (arrow 647') .
- the code function 642 still directly references data group 648 (arrow 649) .
- the code function 640 now directly references code function 650 (arrow 651') .
- the code function 640 also directly references code function 652 (arrow 653') .
- the code function 650 still directly references code function 652 (arrow 655) .
- the number of modules that can be loaded into the LS 302 is limited by the size of the LS 302 and by the size of the modules themselves.
- code analysis on how references are addressed provides a powerful tool, which may enable the loading or unloading of program modules in the LS 302 before they are needed. If it can be determined at a certain point in the program that a program module will be needed, the loading can be performed ahead of time to reduce the latency of loading modules on demand. Even if it is not completely certain that a given module will be used, in many cases it is more efficient to predictively load the module if it is very likely (e.g., 75% or more) to be used.
- the references can be made strict, or on-demand checking may be permitted, depending upon the likeliness that the reference will actually be used.
- the insertion point in the program for such load routines can be determined statistically using a compiler or equivalent tool.
- the insertion point can also be determined statically before the module is created.
- the validity of the insertion point can be determined based upon runtime conditions. For example, a load routine may be utilized that judges whether the load should or should not be performed. Preferably, the amount of loading and unloading is minimized for a set of program modules loaded at run time. Runtime profiling analysis can provide up to date information to determine the locations of each module to be loaded. Due to typical stack management, arbitrary load locations should be chosen for modules that do not have further calls.
- stack frames are constructed by return pointers.
- the module containing the calling module must be located in the same location as when it was called. As long as a module is loaded to the same location when it returns, it is possible to load it to a different location each time the module is newly called. However, when returning from an external function call, the management routine loads the calling module to the original location.
- FIG. 7A is a flow diagram 700 illustrating a preloading process that initializes at step S702.
- an insertion point is determined for the program module.
- the insertion point may be determined, for example, by a compiler or by profiling analysis.
- the path of execution branching can be represented by a tree structure. It is the position in the tree structure that determines whether the reference is going to be used or is likely to be used, for example based on a probability ranging from 0% to 100%, wherein a 100% probability means that the reference will definitely be used and a 0% probability means that the reference will not be used. Insertion points should be placed after a branch. Then, in step S706, the module or modules are loaded by, for example, a DMA transfer.
- FIG. 7B illustrates an example of program module preloading in accordance with FIG. 7A.
- code execution 722 is performed by a processor, for example, SPU 300. Initially, a first function A may be executed by the processor. Once an insertion point 724 is determined for a second function B as discussed above, a program module containing function B is loaded by, for example, a DMA transfer 726.
- the DMA transfer 726 takes some period of time, shown as T LO AD> If the processor is ready to perform function B, for example due to a program jump 728 in function A, it is determined whether the load of program module B is complete as in step S708. As seen in FIG. 7B, the transfer 726 is not complete by the time the jump 728 occurs. Therefore, a wait period T WAIT occurs until the transfer 726 is complete.
- the processor may, for example, perform one or more "no operations" ("NOPs") during T wa i f Once T wa it is finished, the processor begins processing function B at point 730.
- NOPs "no operations"
- a key benefit of program module optimization in accordance with aspects of the present invention is the minimization of the time spent waiting for the loading and unloading of modules.
- One factor that comes into play is the latency and the bandwidth of module transfers.
- the time spent during the actual transfer is directly related to the following factors: (a) the number of times a reference is made; (b) the latency for a transfer setup; (c) the transfer size; and (d) the transfer bandwidth. Another factor is the size of the available memory space.
- static analysis may be used as part of the code organization process, it generally is limited to providing relationships between the functions and does not provide information on how many times calls are made to a given function in a set period of time. Preferably, a reference to such static data is used as a factor in regrouping. Additional analysis of the code may also be used to provide some level of information on the frequency and number of times function calls are made within a function. In one embodiment, optimization may be limited to the information that can be obtained using only a static analysis.
- Another element that can be included in the optimization algorithm is the size and expected layout of the modules. For example, if a caller module has to be unloaded to load the callee module, the unloading would add more latency to complete the function call.
- one or more factors are preferably included, which are used to quantify the optimization.
- the functional references are preferably weighted with the frequency of calls, the number of times the module is called, and the size of the module. For instance, the number of times a module may be called can be multiplied by the size of the module. In a static analysis mode, function calls farther down the call tree could be given more weighting to indicate that the call would be made more frequently.
- the weighting can be reduced or given a weight of zero.
- different weights can be set to call from a function with analysis of the code structure. For example, a call made only one time is desirably weighted lower than a call made numerous times as part of a loop. Furthermore, if the number of loop iterations can be determined, that number could be used as the weighting factor for the loop call.
- a static data reference used only by a single function should be considered as attached to that function. In another factor, if static data is shared between different functions, it may be desirable to include those functions in a single module.
- the program should be placed into a single module. Otherwise, the program should be split into multiple modules.
- the program module is split into multiple modules, it is preferable to organize the modules so that both caller and callee modules fit into the memory together. The last two factors relating to splitting a program into a module should be evaluated in view of the other factors in order to achieve a desirable optimization algorithm.
- the figures discussed above illustrate various reorganizations in accordance with one or more selected factors.
- FIG. 8 is a schematic diagram of a computer network depicting various computing devices that can be used alone or in a networked configuration in accordance with the present invention.
- the computing devices may comprise computer-type devices employing various types of user inputs, displays, memories and processors such as found in typical PCs, laptops, servers, gaming consoles, PDAs, etc.
- FIG. 8 illustrates a computer network 800 that has a plurality of computer processing systems 810, 820, 830, 840, 850 and 860, connected via a communications network 870 such as a LAN, WAN, the Internet, etc. and which can be wired, wireless, a combination, etc.
- a communications network 870 such as a LAN, WAN, the Internet, etc.
- Each computer processing system can include, for example, one or more computing devices having user inputs such as a keyboard 811 and mouse 812 (and various other types of known input devices such as pen-inputs, joysticks, buttons, touch screens, etc.), a display interface 813 (such as connector, port, card, etc.) for connection to a display 814, which could include, for instance, a CRT, LCD, or plasma screen monitor, TV, projector, etc.
- Each computer also preferably includes the normal processing components found in such devices such as one or more memories and one or more processors located within the computer processing system.
- the memories and processors within such computing device are adapted to perform, for instance, processing of program modules using programming references in accordance with the various aspects of the present invention as described herein.
- the memories can include local and external memories for storing code functions and data groups in accordance with the present invention.
- the present invention is applicable to a technology for computer program execution.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Stored Programmes (AREA)
Abstract
Description
Claims
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP05790425A EP1794674A1 (en) | 2004-10-01 | 2005-09-29 | Dynamic loading and unloading for processing unit |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/957,158 | 2004-10-01 | ||
US10/957,158 US20060075394A1 (en) | 2004-10-01 | 2004-10-01 | Dynamic loading and unloading for processing unit |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2006038664A1 true WO2006038664A1 (en) | 2006-04-13 |
Family
ID=35517186
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2005/018485 WO2006038664A1 (en) | 2004-10-01 | 2005-09-29 | Dynamic loading and unloading for processing unit |
Country Status (6)
Country | Link |
---|---|
US (2) | US20060075394A1 (en) |
EP (1) | EP1794674A1 (en) |
JP (1) | JP2006107497A (en) |
KR (1) | KR20080104073A (en) |
CN (1) | CN1914597A (en) |
WO (1) | WO2006038664A1 (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2457145A (en) * | 2007-12-31 | 2009-08-12 | Symbian Software Ltd | Preloading a dynamic link library upon occurrence of an event |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1842134A1 (en) | 2005-01-26 | 2007-10-10 | Infineon Technologies AG | Improvements in and relating to memory updating |
US20080005473A1 (en) * | 2006-06-30 | 2008-01-03 | Tong Chen | Compiler assisted re-configurable software implemented cache |
KR100866627B1 (en) * | 2007-01-29 | 2008-11-03 | 삼성전자주식회사 | Method for page preload using control flow and system thereof |
CN101193452B (en) * | 2007-03-15 | 2011-03-16 | 中兴通讯股份有限公司 | Method for control module registration in automatic switching optical network and its application method |
JP4339371B2 (en) * | 2007-03-22 | 2009-10-07 | 株式会社ソニー・コンピュータエンタテインメント | Information processing apparatus and information processing method |
JP5187944B2 (en) * | 2008-03-05 | 2013-04-24 | インターナショナル・ビジネス・マシーンズ・コーポレーション | Apparatus and method for executing computer usable code |
US8312254B2 (en) * | 2008-03-24 | 2012-11-13 | Nvidia Corporation | Indirect function call instructions in a synchronous parallel thread processor |
KR101670916B1 (en) * | 2009-03-03 | 2016-10-31 | 삼성전자 주식회사 | Method for storing function and system device using the same |
KR101633484B1 (en) * | 2009-12-11 | 2016-06-27 | 삼성전자주식회사 | Selective Booting Method And Broadcast Receiving Apparatus Using The Same |
US9710355B2 (en) * | 2010-01-14 | 2017-07-18 | Microsoft Technology Licensing, Llc | Selective loading of code elements for code analysis |
US8640115B2 (en) * | 2010-04-30 | 2014-01-28 | Oracle International Corporation | Access control in modules for software development |
KR102087395B1 (en) * | 2013-01-16 | 2020-03-10 | 삼성전자주식회사 | Method and apparatus for executing application prograom in an electronic device |
KR102547795B1 (en) * | 2016-05-04 | 2023-06-27 | 에스케이하이닉스 주식회사 | Data processing system and operating method of data processing system |
US10360005B2 (en) * | 2016-10-24 | 2019-07-23 | International Business Machines Corporation | Local function call tailoring for function pointer calls |
US10268465B2 (en) * | 2016-10-24 | 2019-04-23 | International Business Machines Corporation | Executing local function call site optimization |
US10534593B2 (en) * | 2016-10-24 | 2020-01-14 | International Business Machines Corporation | Optimized entry points and local function call tailoring for function pointers |
US10725838B2 (en) * | 2017-03-29 | 2020-07-28 | Microsoft Technology Licensing, Llc | Application startup control |
US10776133B2 (en) * | 2018-01-25 | 2020-09-15 | Salesforce.Com, Inc. | Preemptive loading of code dependencies for improved performance |
US12073199B2 (en) * | 2019-06-06 | 2024-08-27 | Amazon Technologies, Inc. | Reducing computation in neural networks using self-modifying code |
CN113821272B (en) * | 2021-09-23 | 2023-09-12 | 武汉深之度科技有限公司 | Application program running method, computing device and storage medium |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2003034229A1 (en) * | 2001-10-19 | 2003-04-24 | Telefonaktiebolaget Lm Ericsson | Data prefecthing in a computer system |
US20030115580A1 (en) * | 1999-11-08 | 2003-06-19 | Daniel T. Arai | Method and apparatus for optimization of inter-module calls from executables |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5123098A (en) * | 1989-02-28 | 1992-06-16 | Hewlett-Packard Company | Method for executing programs within expanded memory of a computer system using MS or PC DOS |
US5317718A (en) * | 1990-03-27 | 1994-05-31 | Digital Equipment Corporation | Data processing system and method with prefetch buffers |
IL100990A (en) * | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Multilanguage optimizing compiler using templates in multiple pass code generation |
DE59108956D1 (en) * | 1991-09-30 | 1998-04-23 | Siemens Ag | Method for creating an executable configuration of a system program that can be loaded into a system memory area of a processor system |
US5625822A (en) * | 1992-06-26 | 1997-04-29 | Digital Equipment Corporation | Using sorting to do matchup in smart recompilation |
US5566324A (en) * | 1992-12-24 | 1996-10-15 | Ncr Corporation | Computer apparatus including a main memory prefetch cache and method of operation thereof |
US5452457A (en) * | 1993-01-29 | 1995-09-19 | International Business Machines Corporation | Program construct and methods/systems for optimizing assembled code for execution |
US5475840A (en) * | 1993-04-13 | 1995-12-12 | Sun Microsystems, Inc. | High performance dynamic linking through caching |
US5751982A (en) * | 1995-03-31 | 1998-05-12 | Apple Computer, Inc. | Software emulation system with dynamic translation of emulated instructions for increased processing speed |
US5815718A (en) * | 1996-05-30 | 1998-09-29 | Sun Microsystems, Inc. | Method and system for loading classes in read-only memory |
JPH10116229A (en) * | 1996-10-09 | 1998-05-06 | Toshiba Corp | Data processor |
US5901291A (en) * | 1996-10-21 | 1999-05-04 | International Business Machines Corporation | Method and apparatus for maintaining message order in multi-user FIFO stacks |
US6080204A (en) * | 1997-10-27 | 2000-06-27 | Altera Corporation | Method and apparatus for contemporaneously compiling an electronic circuit design by contemporaneously bipartitioning the electronic circuit design using parallel processing |
JP3638770B2 (en) * | 1997-12-05 | 2005-04-13 | 東京エレクトロンデバイス株式会社 | Storage device with test function |
US6175957B1 (en) * | 1997-12-09 | 2001-01-16 | International Business Machines Corporation | Method of, system for, and computer program product for providing efficient utilization of memory hierarchy through code restructuring |
US7143421B2 (en) * | 1998-09-09 | 2006-11-28 | Microsoft Corporation | Highly componentized system architecture with a demand-loading namespace and programming model |
US6330623B1 (en) * | 1999-01-08 | 2001-12-11 | Vlsi Technology, Inc. | System and method for maximizing DMA transfers of arbitrarily aligned data |
DE10035270A1 (en) * | 2000-07-20 | 2002-01-31 | Siemens Ag | Procedures for selecting, editing and displaying data or data objects |
JP2002063042A (en) * | 2000-08-21 | 2002-02-28 | Nec Microsystems Ltd | Program module management system, management method therefor and recording medium with its management program recorded on the same |
US20020069263A1 (en) * | 2000-10-13 | 2002-06-06 | Mark Sears | Wireless java technology |
US6457023B1 (en) * | 2000-12-28 | 2002-09-24 | International Business Machines Corporation | Estimation of object lifetime using static analysis |
US7392390B2 (en) * | 2001-12-12 | 2008-06-24 | Valve Corporation | Method and system for binding kerberos-style authenticators to single clients |
-
2004
- 2004-10-01 US US10/957,158 patent/US20060075394A1/en not_active Abandoned
-
2005
- 2005-09-29 KR KR1020087026005A patent/KR20080104073A/en not_active Application Discontinuation
- 2005-09-29 EP EP05790425A patent/EP1794674A1/en not_active Withdrawn
- 2005-09-29 WO PCT/JP2005/018485 patent/WO2006038664A1/en active Application Filing
- 2005-09-29 JP JP2005283606A patent/JP2006107497A/en active Pending
- 2005-09-29 CN CNA2005800031390A patent/CN1914597A/en active Pending
-
2008
- 2008-08-15 US US12/228,689 patent/US20080313624A1/en not_active Abandoned
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030115580A1 (en) * | 1999-11-08 | 2003-06-19 | Daniel T. Arai | Method and apparatus for optimization of inter-module calls from executables |
WO2003034229A1 (en) * | 2001-10-19 | 2003-04-24 | Telefonaktiebolaget Lm Ericsson | Data prefecthing in a computer system |
Non-Patent Citations (3)
Title |
---|
"Performance Management Guide", INTERNET ARTICLE, 18 June 2004 (2004-06-18), pages 1 - 7, XP002363864, Retrieved from the Internet <URL:http://web.archive.org/web/20040618221113/http://www16.boulder.ibm.com/pseries/en_US/aixbman/prftungd/apptuning2.htm> [retrieved on 20060120] * |
DEEPAK MULCHANDANI: "Java for Embedded Systems", IEEE INTERNET COMPUTING, IEEE SERVICE CENTER, PISCATAWAY, NJ, US, June 1998 (1998-06-01), pages 30 - 39, XP002268549, ISSN: 1089-7801 * |
JOHN R. LEVINE: "Linkers & Loaders", 2000, MORGAN KAUFMANN PUBLISHERS, XP002364758 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2457145A (en) * | 2007-12-31 | 2009-08-12 | Symbian Software Ltd | Preloading a dynamic link library upon occurrence of an event |
Also Published As
Publication number | Publication date |
---|---|
EP1794674A1 (en) | 2007-06-13 |
US20060075394A1 (en) | 2006-04-06 |
KR20080104073A (en) | 2008-11-28 |
US20080313624A1 (en) | 2008-12-18 |
JP2006107497A (en) | 2006-04-20 |
CN1914597A (en) | 2007-02-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20080313624A1 (en) | Dynamic loading and unloading for processing unit | |
Vijaykumar et al. | A case for core-assisted bottleneck acceleration in GPUs: enabling flexible data compression with assist warps | |
US8327109B2 (en) | GPU support for garbage collection | |
Baskaran et al. | Optimizing sparse matrix-vector multiplication on GPUs | |
Fung et al. | Dynamic warp formation and scheduling for efficient GPU control flow | |
US9830158B2 (en) | Speculative execution and rollback | |
US8301672B2 (en) | GPU assisted garbage collection | |
US7392511B2 (en) | Dynamically partitioning processing across plurality of heterogeneous processors | |
US6848029B2 (en) | Method and apparatus for prefetching recursive data structures | |
US7209996B2 (en) | Multi-core multi-thread processor | |
EP3726382A1 (en) | Deep learning thread communication | |
US20060179198A1 (en) | Micro interrupt handler | |
US8490071B2 (en) | Shared prefetching to reduce execution skew in multi-threaded systems | |
CN114610394B (en) | Instruction scheduling method, processing circuit and electronic equipment | |
Yeh et al. | Dimensionality-aware redundant SIMT instruction elimination | |
Vijaykumar et al. | A Framework for Accelerating Bottlenecks in GPU Execution with Assist Warps | |
CN113094099A (en) | Matrix data broadcast architecture | |
WO2006006613A1 (en) | Methods and apparatus for updating of a branch history table | |
Raju et al. | Performance enhancement of CUDA applications by overlapping data transfer and Kernel execution | |
KR20070032294A (en) | Dynamic loading and unloading for processing unit | |
US20230195651A1 (en) | Host device performing near data processing function and accelerator system including the same | |
US20230115542A1 (en) | Programmable matrix multiplication engine | |
US20130290688A1 (en) | Method of Concurrent Instruction Execution and Parallel Work Balancing in Heterogeneous Computer Systems | |
Maquelin | Load balancing and resource management in the ADAM machine | |
Nishikawa et al. | A networking oriented data-driven processor: CUE |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AK | Designated states |
Kind code of ref document: A1 Designated state(s): AE AG AL AM AT AU AZ BA BB BG BR BW BY BZ CA CH CN CO CR CU CZ DE DK DM DZ EC EE EG ES FI GB GD GE GH GM HR HU ID IL IN IS JP KE KG KM KP KR KZ LC LK LR LS LT LU LV LY MA MD MG MK MN MW MX MZ NA NG NI NO NZ OM PG PH PL PT RO RU SC SD SE SG SK SL SM SY TJ TM TN TR TT TZ UA UG US UZ VC VN YU ZA ZM ZW |
|
AL | Designated countries for regional patents |
Kind code of ref document: A1 Designated state(s): GM KE LS MW MZ NA SD SL SZ TZ UG ZM ZW AM AZ BY KG KZ MD RU TJ TM AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HU IE IS IT LT LU LV MC NL PL PT RO SE SI SK TR BF BJ CF CG CI CM GA GN GQ GW ML MR NE SN TD TG |
|
WWE | Wipo information: entry into national phase |
Ref document number: 200580003139.0 Country of ref document: CN |
|
WWE | Wipo information: entry into national phase |
Ref document number: 2005790425 Country of ref document: EP |
|
WWE | Wipo information: entry into national phase |
Ref document number: 1020067018235 Country of ref document: KR |
|
121 | Ep: the epo has been informed by wipo that ep was designated in this application | ||
WWP | Wipo information: published in national office |
Ref document number: 1020067018235 Country of ref document: KR |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
WWP | Wipo information: published in national office |
Ref document number: 2005790425 Country of ref document: EP |