This patent application is a U.S. National Phase Application under 35 U.S.C. §371 of International Application No. PCT/ES2013/070209, filed Mar. 27, 2013, entitled MECHANISM FOR FACILITATING DYNAMIC AND EFFICIENT FUSION OF COMPUTING INSTRUCTIONS IN SOFTWARE PROGRAMS by Marc LUPON, et al., the benefit and priority are claimed thereof and the entire contents of which are incorporated herein by reference.
Embodiments described herein generally relate to computer programming. More particularly, embodiments relate to a mechanism for facilitating dynamic and efficient fusion of computing instructions in software programs.
Fused instructions (e.g., Combined FP Multiply-Add (“CMULADD”), etc.) are commonly performed, but not intelligently or efficiently. Using conventional techniques, a fusion operation is often applied blindly regardless of whether the operation is needed at the time. Further, when encountering multiple fusion opportunities, fusion operations are indiscriminately performed because none of the conventional techniques provides for an appropriate prioritization, wasting a significant amount of time and resources.
Embodiments are illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings in which like reference numerals refer to similar elements.
In the following description, numerous specific details are set forth. However, embodiments, as described herein, may be practiced without these specific details. In other instances, well-known circuits, structures and techniques have not been shown in details in order not to obscure the understanding of this description.
Embodiments provide a macro fusion mechanism for facilitating dynamic and efficient fusion of computing instructions. The conventional fusion of combination of multiple instructions is not always regarded as profitable with regard to time, power, or performance. Conventional fusion can take more cycles than the execution time of the operations to fuse and may end up increasing the critical path of the executed code as well as the time and energy spent in the sequence. Furthermore, conventional hardware- or software-based solutions are inflexible and unintelligent and they are applied blindly and indiscriminately further complicating the processes as inappropriate and/or untimely fusion operations may be performed, further negatively affecting performance.
Embodiments provide a macro fusion mechanism for facilitating dynamic and efficient fusion of computing instructions, where the mechanism may be integrated into a dynamic binary optimizer or a compiler (e.g., Just-In-Time (“JIT”) Compiler) or may be generalized to be included or represented as a static compiler or provided in other macro fusion forms.
Macro fusion may refer to a dynamic, intelligent, and efficient joining or combining of programming computation sequences into a single instruction. Macro fusion may be performed by the mechanism which can be incorporated into, but not limited to, a static compiler, a hardware unit in a core front-end to dynamically fuse sequences of instructions, a dynamic binary optimizer or a JIT compiler, etc. For brevity, clarity and ease of understanding, CMULADD instructions are used as examples throughout the document and that embodiments are not limited to only such instructions and are applicable to any number and type of computing instructions (such as CMULADD, Combined FP Multiply-Subtract (“CMULSUB”), 3-sourced Integer Addition (“ADD3”), Packed Integer Multiply-Add (“XMA”), Fused Multiply-Add (“FMA”), Fused Multiply-Subtract (“FMS”), etc.) provided by, for example, an industry standard architecture (ISA) or in an internal instruction set on a co-designed hardware (“HW”)/software (“SW”) processor (such that in case when fusion is applied by a dynamic binary optimizer and where the fusion instructions are not incorporated in the ISA, the machine may be used to execute them).
Computing device 100 may include mobile computing devices, such as cellular phones including smartphones (e.g., iPhone® by Apple®, BlackBerry® by Research in Motion®, etc.), personal digital assistants (PDAs), etc., tablet computers (e.g., iPad® by Apple®, Galaxy 3® by Samsung®, etc.), laptop computers (e.g., notebook, netbook, Ultrabook™, etc.), e-readers (e.g., Kindle® by Amazon®, Nook® by Barnes and Nobles®, etc.), etc. Computing device 100 may further include set-top boxes (e.g., Internet-based cable television set-top boxes, etc.), and larger computing devices, such as desktop computers, server computers, etc.
Computing device 100 includes an operating system (OS) 106 serving as an interface between any hardware or physical resources of the computer device 100 and a user. Computing device 100 further includes one or more processors 102, memory devices 104, network devices, drivers, or the like, as well as input/output (I/O) sources 108, such as touchscreens, touch panels, touch pads, virtual or regular keyboards, virtual or regular mice, etc. It is to be noted that terms like “computing device”, “node”, “computing node”, “client”, “host”, “server”, “memory server”, “machine”, “device”, “computing device”, “computer”, “computing system”, and the like, may be used interchangeably throughout this document.
In one embodiment, monitoring logic 202 continuously monitors a computer program hot code regions where fusion or combination of instructions may be performed. As the program is monitored by monitoring logic 202, its detection module 204 detects any number of operations inside hot code regions to be potential candidates for fusion. As aforementioned, simply because a fusion operation can be performed does not necessary mean the operation is timely or appropriate. For example, an untimely or inappropriate or even a high frequency of fusion operations may unnecessarily consume power, waste time, and/or compromise performance of the software program. Macro fusion of candidate instructions is illustrated in
In one embodiment, evaluation logic 206 evaluates each fusion operation to determine whether it would be profitable to run or execute the fusion operation. Evaluation logic 206 may evaluate all the necessary and relevant information available related to the candidate instructions for fusion. As illustrated with reference to
In one embodiment, using the precise and relevant information, evaluation logic 206 determines the criticality of each candidate instruction as one of the metrics for measuring the performance benefit or value of the fusing candidate instructions. Furthermore, the triggering of macro fusion mechanism 110 at or around or within one of the last processes of the dynamic binary optimizer/complier, as illustrated in
For example, based on the evaluation results as provided by evaluation logic 206 and decided or determined by decision logic 208, once a fusion operation has been proven practical and valuable and right instruction candidates have been chosen to perform the operation, modification module 212 may modify the internal structure of the sequence of fused instructions, so that the sequence may be converted into a combined or fused instruction by execution logic 210. This is further described with reference to
For example, a fusion candidate instruction may be regarded as critical if it is detected, by detection module 204, in a critical path of the hot code region. In other words, the depth of the instruction (e.g., distance from the hot code region entry node to the instruction the DDG) plus the height of the instruction (e.g., distance from the instruction to the hot code region exit mode) is equal to the length of the longest dependence chain in the hot code region. The depth and height may be computed, by evaluation logic 206, by adding the latencies of the producer/consumer chains of the instruction following dependencies in the DDG. Further, critical sequences are those formed by chain of dependent critical instructions and in order to provide some flexibility, those instructions that are close to the critical path are treated as pseudo-critical, so evaluation logic 206 takes into account for macro fusion purposes.
In one embodiment, decision logic 208 may decide, based on the evaluation data, to disallow a fusion operation from being performed because performing the operation would hurt the programming process more than it would help, such as causing waste of time, power, and other resources, etc. For example, the macro fusion pass may be temporarily disabled if it is determined by evaluation logic 206 that would be unworthy or not valuable (e.g., in terms of rounding faults, etc.) for a particular hot code region.
As aforementioned, evaluation logic 206 may consider various pieces information relating to candidate instructions prior to forwarding to the evaluation results to decision logic 208. For example, on occasions, two or more instructions when fused together may end up creating more instructions, as shown in
Furthermore, detection logic 204 may detect more than one candidate for fusion for a given program instruction. In one embodiment, evaluation logic 206 may consider the benefits of each fusion opportunity and select the most appropriate one taken into consideration the timing, power or performance of individual fused instructions, etc. For instance, if an instruction can be fused with two candidates, the evaluation logic 206 may fuse the sequence that impacts more the critical path of the hot code region. This applies for fusions of the same or different type.
Yet in another embodiment, evaluation logic 206 may not only consider increments of power, but also consider smart heuristic numbers (e.g., using highly-accurate timing simulator, etc.) based on the characteristics of candidate instructions (such as their criticality to the region and/or the overall program, number of relevant consumers, etc.) to allow for intelligent and confident power/performance-guided decisions to save power and increase performance (as indicated from latency cycles and further illustrated with reference to
Similarly, option 240 may be not be considered good by evaluation logic 206 and rejected by decision block 208 of
Communication/configuration logic 214 may facilitate the ability to dynamically communicate and stay configured with various dynamic optimizers, compilers, programming codes, instruction and fusion types, etc. Communication/configuration logic 214 further facilitates the ability to dynamically communicate and stay configured with various computing devices (e.g., mobile computing devices (such as various types of smartphones, tablet computers), networks (e.g., Internet, cloud-computing network, etc.), websites, (such as social networking websites (e.g., Facebook®, LinkedIn®, Google+®, etc.)), etc., while ensuring compatibility with changing technologies, parameters, protocols, standards, etc.
It is contemplated that any number and type of components may be added to and/or removed from macro fusion mechanism 110 to facilitate various embodiments including adding, removing, and/or enhancing certain features. For brevity, clarity, and ease of understanding of the macro fusion mechanism 110 many of the standard and/or known components, such as those of a computing device, are not shown or discussed here. It is contemplated that embodiments, as described herein, are not limited to any particular technology, topology, system, architecture, and/or standard and are dynamic enough to adopt and adapt to any future changes.
For example, sequence 300 lists various optimizer/compiler processes including code formation 302, code generation 304, code optimization 306, code scheduling 308, and code assembly 310. In one embodiment, the code scheduling stage 308, various processes are performed, such as include DDG formation 312, critical path reduction optimization 314 and just prior to static scheduling 318, macro fusion 316 is performed. Macro fusion 316 is further described with reference to
Referring now to
Method 350 starts at block 352 with the encountering of or entering into a hot code region of the software program code. In one embodiment, detection module 352 of
Upon inspection/evaluation of the candidate instructions, the process moves on to block 358 where those instructions that are to be fused are selected and, at block 360, the instructions are fused to achieve a profitable fusion. The process may then end at block 362 with the exit from the hot code region or the fused instructions remain available for inspection for subsequent fusion operations and the process returns to block 356. Referring back to block 358, if proper candidate instructions are not found (e.g., the fusion is not likely to be profitable), the fusion operation may be denied and the process may continue with block 356. Now referring back to block 356, if the last instruction of the hot code region is detected, the process ends with the exit at block 362. Further, the process may continue to iterate in checking of a next fusion candidate instruction in the data flow at block 356. The process of block 358 is further explored with reference to
Referring back to block 358 of
Referring back to block 360 of
Computing system 500 includes bus 505 (or a link, an interconnect, or another type of communication device or interface to communicate information) and processor 510 coupled to bus 505 that may process information. While computing system 500 is illustrated with a single processor, electronic system 500 and may include multiple processors and/or co-processors, such as one or more of central processors, graphics processors, and physics processors, etc. Computing system 500 may further include random access memory (RAM) or other dynamic storage device 520 (referred to as main memory), coupled to bus 505 and may store information and instructions that may be executed by processor 510. Main memory 520 may also be used to store temporary variables or other intermediate information during execution of instructions by processor 510.
Computing system 500 may also include read only memory (ROM) and/or other storage device 530 coupled to bus 505 that may store static information and instructions for processor 510. Date storage device 540 may be coupled to bus 505 to store information and instructions. Date storage device 540, such as magnetic disk or optical disc and corresponding drive may be coupled to computing system 500.
Computing system 500 may also be coupled via bus 505 to display device 550, such as a cathode ray tube (CRT), liquid crystal display (LCD) or Organic Light Emitting Diode (OLED) array, to display information to a user. User input device 560, including alphanumeric and other keys, may be coupled to bus 505 to communicate information and command selections to processor 510. Another type of user input device 560 is cursor control 570, such as a mouse, a trackball, or cursor direction keys to communicate direction information and command selections to processor 510 and to control cursor movement on display 550. Camera and microphone arrays 590 of computer system 500 may be coupled to bus 505 to observe gestures, record audio and video and to receive and transmit visual and audio commands.
Computing system 500 may further include network interface(s) 580 to provide access to a network, such as a local area network (LAN), a wide area network (WAN), a metropolitan area network (MAN), a personal area network (PAN), Bluetooth, a cloud network, a mobile network (e.g., 3rd Generation (3G), etc.), an intranet, the Internet, etc. Network interface(s) 580 may include, for example, a wireless network interface having antenna 585, which may represent one or more antenna(e). Network interface(s) 580 may also include, for example, a wired network interface to communicate with remote devices via network cable 587, which may be, for example, an Ethernet cable, a coaxial cable, a fiber optic cable, a serial cable, or a parallel cable.
Network interface(s) 580 may provide access to a LAN, for example, by conforming to IEEE 802.11b and/or IEEE 802.11g standards, and/or the wireless network interface may provide access to a personal area network, for example, by conforming to Bluetooth standards. Other wireless network interfaces and/or protocols, including previous and subsequent versions of the standards, may also be supported.
In addition to, or instead of, communication via the wireless LAN standards, network interface(s) 580 may provide wireless communication using, for example, Time Division, Multiple Access (TDMA) protocols, Global Systems for Mobile Communications (GSM) protocols, Code Division, Multiple Access (CDMA) protocols, and/or any other type of wireless communications protocols.
Network interface(s) 580 may including one or more communication interfaces, such as a modem, a network interface card, or other well-known interface devices, such as those used for coupling to the Ethernet, token ring, or other types of physical wired or wireless attachments for purposes of providing a communication link to support a LAN or a WAN, for example. In this manner, the computer system may also be coupled to a number of peripheral devices, clients, control surfaces, consoles, or servers via a conventional network infrastructure, including an Intranet or the Internet, for example.
It is to be appreciated that a lesser or more equipped system than the example described above may be preferred for certain implementations. Therefore, the configuration of computing system 500 may vary from implementation to implementation depending upon numerous factors, such as price constraints, performance requirements, technological improvements, or other circumstances. Examples of the electronic device or computer system 500 may include without limitation a mobile device, a personal digital assistant, a mobile computing device, a smartphone, a cellular telephone, a handset, a one-way pager, a two-way pager, a messaging device, a computer, a personal computer (PC), a desktop computer, a laptop computer, a notebook computer, a handheld computer, a tablet computer, a server, a server array or server farm, a web server, a network server, an Internet server, a work station, a mini-computer, a main frame computer, a supercomputer, a network appliance, a web appliance, a distributed computing system, multiprocessor systems, processor-based systems, consumer electronics, programmable consumer electronics, television, digital television, set top box, wireless access point, base station, subscriber station, mobile subscriber center, radio network controller, router, hub, gateway, bridge, switch, machine, or combinations thereof.
Embodiments may be implemented as any or a combination of: one or more microchips or integrated circuits interconnected using a parentboard, hardwired logic, software stored by a memory device and executed by a microprocessor, firmware, an application specific integrated circuit (ASIC), and/or a field programmable gate array (FPGA). The term “logic” may include, by way of example, software or hardware and/or combinations of software and hardware.
Embodiments may be provided, for example, as a computer program product which may include one or more machine-readable media having stored thereon machine-executable instructions that, when executed by one or more machines such as a computer, network of computers, or other electronic devices, may result in the one or more machines carrying out operations in accordance with embodiments described herein. A machine-readable medium may include, but is not limited to, floppy diskettes, optical disks, CD-ROMs (Compact Disc-Read Only Memories), and magneto-optical disks, ROMs, RAMs, EPROMs (Erasable Programmable Read Only Memories), EEPROMs (Electrically Erasable Programmable Read Only Memories), magnetic or optical cards, flash memory, or other type of media/machine-readable medium suitable for storing machine-executable instructions.
Moreover, embodiments may be downloaded as a computer program product, wherein the program may be transferred from a remote computer (e.g., a server) to a requesting computer (e.g., a client) by way of one or more data signals embodied in and/or modulated by a carrier wave or other propagation medium via a communication link (e.g., a modem and/or network connection).
References to “one embodiment”, “an embodiment”, “example embodiment”, “various embodiments”, etc., indicate that the embodiment(s) so described may include particular features, structures, or characteristics, but not every embodiment necessarily includes the particular features, structures, or characteristics. Further, some embodiments may have some, all, or none of the features described for other embodiments.
In the following description and claims, the term “coupled” along with its derivatives, may be used. “Coupled” is used to indicate that two or more elements co-operate or interact with each other, but they may or may not have intervening physical or electrical components between them.
As used in the claims, unless otherwise specified the use of the ordinal adjectives “first”, “second”, “third”, etc., to describe a common element, merely indicate that different instances of like elements are being referred to, and are not intended to imply that the elements so described must be in a given sequence, either temporally, spatially, in ranking, or in any other manner.
The following clauses and/or examples pertain to further embodiments or examples. Specifics in the examples may be used anywhere in one or more embodiments. The various features of the different embodiments or examples may be variously combined with some features included and others excluded to suit a variety of different applications. Some embodiments pertain to a method comprising: monitoring a software program for a program region having fusion candidate instructions for a fusion operation at a computing system; evaluating whether the macro operation of the candidate instructions is valuable to the software program; and performing the fusion operation if it is evaluated to be valuable.
Embodiments or examples include any of the above methods further comprising allowing the performance of the macro operation upon reviewing results of the evaluation.
Embodiments or examples include any of the above methods further comprising detecting candidate instructions for the fusion operation in the program region.
Embodiments or examples include any of the above methods further comprising rejecting the macro fusion if the fusion operation is evaluated to be not valuable to the software program.
Embodiments or examples include any of the above methods further comprising selecting a most-suited candidate instruction for the fusion operation given a set of potential candidate instructions to be applied on an individual candidate instruction.
Embodiments or examples include any of the above methods further comprising modifying the candidate instructions prior to performing the fusion operation.
Embodiments or examples include any of the above methods wherein the candidate instructions comprise a Combined Multiply-Add (CMULADD) instruction or a Combined Multiply-Subtract (CMULSUB) instruction.
Embodiments or examples include any of the above methods wherein the evaluation is performed in a dynamic binary optimizer or a compiler, wherein evaluating further includes evaluating a data dependency graph (DDG) relating to the candidate instructions to determine depth or length of each candidate instruction to further determine whether the fusion operation is critical to the software program.
Embodiments or examples include any of the above methods wherein the evaluation of the DDG relating to the candidate instructions is further to determine if the fusion operation reduces or increases either a number of executed instructions or an amount of energy spent in the software program.
Embodiments or examples include any of the above methods wherein computing system comprises one or more of a desktop computer, a server computer, a set-top box, a mobile computer including one or more of a smartphone, a personal digital assistant (PDA), a tablet computer, an e-reader, and a laptop computer.
Another embodiment or example includes an apparatus to perform any of the methods mentioned above.
In another embodiment or example, an apparatus comprises means for performing any of the methods mentioned above.
In yet another embodiment or example, at least one machine-readable storage medium comprising a plurality of instructions that in response to being executed on a computing device, causes the computing device to carry out a method according to any of the methods mentioned above.
In yet another embodiment or example, at least one non-transitory or tangible machine-readable storage medium comprising a plurality of instructions that in response to being executed on a computing device, causes the computing device to carry out a method according to any of the methods mentioned above.
In yet another embodiment or example, a computing device arranged to perform a method according to any of the methods mentioned above.
Some embodiments pertain to an apparatus comprising: monitoring logic to monitor a software program for a program region having fusion candidate instructions for a fusion operation at a computing system; evaluation logic to evaluate whether the macro operation of the candidate instructions is valuable to the software program; and execution logic to perform the fusion operation if it is evaluated to be valuable.
Embodiments or examples include any of the above apparatus further comprising decision logic to allow the performance of the macro operation upon reviewing results of the evaluation.
Embodiments or examples include any of the above apparatus wherein the monitoring logic comprises a detection module to detect the candidate instructions for the fusion operation in the program region.
Embodiments or examples include any of the above apparatus wherein the decision logic comprises an evaluation module to reject macro fusion if the fusion operation is evaluated to be not valuable to the software program.
Embodiments or examples include any of the above apparatus wherein the decision logic comprises an evaluation module to select a most-suited candidate instruction for the fusion operation given a set of potential candidate instructions to be applied on an individual candidate instruction.
Embodiments or examples include any of the above apparatus wherein the execution logic comprises a modification module to modify the candidate instructions prior to performing the fusion operation.
Embodiments or examples include any of the above apparatus wherein the candidate instructions comprise a Combined Multiply-Add (CMULADD) instruction or a Combined Multiply-Subtract (CMULSUB) instruction.
Embodiments or examples include any of the above apparatus wherein evaluation is performed in a dynamic binary optimizer or a compiler, wherein the evaluation includes evaluating a data dependency graph (DDG) relating to the candidate instructions to determine depth or length of each candidate instruction to further determine whether the fusion operation is critical to the software program.
Embodiments or examples include any of the above apparatus wherein the evaluation logic is further to evaluate the DDG relating to the candidate instructions to determine if the fusion operation reduces or increases either a number of executed instructions or an amount of energy spent in the software program.
Embodiments or examples include any of the above apparatus wherein computing system comprises one or more of a desktop computer, a server computer, a set-top box, a mobile computer including one or more of a smartphone, a personal digital assistant (PDA), a tablet computer, an e-reader, and a laptop computer.
Some embodiments pertain to a system comprising: a computing device having a memory to store instructions, and a processing device to execute the instructions, the computing device further having a mechanism to: monitor a software program for a program region having fusion candidate instructions for a fusion operation at a computing system; evaluate whether the macro operation of the candidate instructions is valuable to the software program; and perform the fusion operation if it is evaluated to be valuable.
Embodiments or examples include any of the above system wherein the mechanism is further to allow performance of the fusion operation upon reviewing results of the evaluation and detecting the fusion candidate instructions in the program region.
Embodiments or examples include any of the above system wherein the mechanism is further to reject macro fusion if the fusion operation is evaluated to be not valuable to the software program.
Embodiments or examples include any of the above system wherein the mechanism is further to select a most-suited instruction for the fusion operation given a set of potential candidate instructions to be applied on an individual candidate instruction.
Embodiments or examples include any of the above system wherein the mechanism is further to modify the candidate instructions prior to performing the fusion operation, wherein the candidate instructions comprise a Combined Multiply-Add (CMULADD) instruction or a Combined Multiply-Subtract (CMULSUB) instruction.
Embodiments or examples include any of the above system wherein the mechanism is further to perform the evaluation in a dynamic binary optimizer or a compiler, wherein the mechanism is further to evaluate a data dependency graph (DDG) relating to the candidate instructions to determine depth or length of each candidate instruction to further determine whether the fusion operation is critical to the software program.
Embodiments or examples include any of the above system wherein the mechanism is further to evaluate the DDG relating to the candidate instructions to determine if the fusion operation reduces or increases either a number of executed instructions or an amount of energy spent in the software program.
Embodiments or examples include any of the above system wherein computing system comprises one or more of a desktop computer, a server computer, a set-top box, a mobile computer including one or more of a smartphone, a personal digital assistant (PDA), a tablet computer, an e-reader, and a laptop computer.
The drawings and the forgoing description give examples of embodiments. Those skilled in the art will appreciate that one or more of the described elements may well be combined into a single functional element. Alternatively, certain elements may be split into multiple functional elements. Elements from one embodiment may be added to another embodiment. For example, orders of processes described herein may be changed and are not limited to the manner described herein. Moreover, the actions any flow diagram need not be implemented in the order shown; nor do all of the acts necessarily need to be performed. Also, those acts that are not dependent on other acts may be performed in parallel with the other acts. The scope of embodiments is by no means limited by these specific examples. Numerous variations, whether explicitly given in the specification or not, such as differences in structure, dimension, and use of material, are possible. The scope of embodiments is at least as broad as given by the following claims.
Filing Document | Filing Date | Country | Kind |
---|---|---|---|
PCT/ES2013/070209 | 3/27/2013 | WO | 00 |
Publishing Document | Publishing Date | Country | Kind |
---|---|---|---|
WO2014/154917 | 10/2/2014 | WO | A |
Number | Name | Date | Kind |
---|---|---|---|
5392228 | Burgess | Feb 1995 | A |
6889318 | Wichman | May 2005 | B1 |
7039909 | Wu | May 2006 | B2 |
9081561 | Chow | Jul 2015 | B2 |
20030236967 | Samra | Dec 2003 | A1 |
20040128485 | Nelson | Jul 2004 | A1 |
20040139429 | Ronen | Jul 2004 | A1 |
20080092124 | Archambault | Apr 2008 | A1 |
20100115248 | Ouziel | May 2010 | A1 |
20100299505 | Uesugi | Nov 2010 | A1 |
20110072066 | Lutz | Mar 2011 | A1 |
20110296146 | Anand | Dec 2011 | A1 |
20130173452 | O'Connor | Jul 2013 | A1 |
20130311754 | Brown | Nov 2013 | A1 |
20140046535 | Hinnant, Jr. | Feb 2014 | A1 |
20140047221 | Irwin | Feb 2014 | A1 |
20150026671 | Lupon | Jan 2015 | A1 |
Entry |
---|
PCT/ES2013/070209, “Notification of Transmittal of the International Search Report and the Written Opinion of the International Searching Authority, or the Declaration” mailed Jan. 14, 2014, pp. 10. |
Leupers, R., et al: “Instruction selection for embedded DSPs with complex instructions”, Proceedings of EURO-DAC '96: European Design Automation Conference With EURO-VDL '96 and Exhibition. Geneva, Sep. 16-20, 1996; [Proceedings of EURO-DAC : European Design Automation Conference With EURO-VDL and Exhibition], Los Alamitos, IEEE Comp., Sep. 16, 1996, pp. 200-205, XP010198599, DOI: 10.1109/EURDAC.1996.558205 ISBN: 978-0-8186-7573-7. |
Lua Y-S et al: “Optimal subgraph covering for customisable VLIW processors”, IET Computers and Digital Techniques, vol. 3, No. 1, Jan. 12, 2009, pp. 14-23, XP006032326, ISSN:1751-861X, DOL: 10.1049/IET-CDT:20070104. |
Number | Date | Country | |
---|---|---|---|
20150026671 A1 | Jan 2015 | US |