The present invention relates to software analysis, particularly to reordering the condition checks within software code.
Elseif is a conditional statement in computer code that combines the if and else conditional statements. Elseif will extend an if statement to execute a different statement in case the preceding if expression is evaluated as FALSE. Unlike an else statement, the body block of an elseif statement is executed only if the elseif conditional expression is evaluated as TRUE.
When a computer program contains if and elseif statements, the if statement is checked first. As indicated, when the if statement is evaluated as FALSE, then the elseif statement is checked.
In computer programming languages such as Java™ and other scripting languages, there are many elseif statements that use instanceof operations to test and evaluate objects. The syntax of an instanceof statement is “object instanceof constructor”. The constructer is the function that the object is tested against. Instanceof statements carry a high cost in terms of computer run time, processing resources, etc., particularly when compared to comparing and testing variables of primitive data types, such as integers.
In the execution of the computer program, when the if statement is rarely evaluated as TRUE and the elseif statement is frequently evaluated as TRUE, then the cost in terms of computer run time, processing resources, etc. is increased.
According to present principles, described herein is a computer-implemented method of reordering condition checks. In the method, two or more condition checks in computer code that can be reordered are identified. It is determined that a later one of the condition checks is satisfied at a frequency that is greater than the frequency at which a preceding one of the condition checks is satisfied. It is determined that there is an absence of side effects in the two or more condition checks. Values are propagated to satisfy the condition checks and abstract interpretation is performed on the values that are propagated. It is then determined that the condition checks are exclusive of each other, and the condition checks are reordered within the computer code. At least one of the above occur in a hardware processor.
Further in accordance with present principles, described is a system for reordering condition checks. The system includes one or more processors including memory that processes and stores computer code that includes two or more condition checks. A condition check frequency determiner is used to determine the frequency at which two or more condition checks are satisfied. A value propagator propagates values of the conditions in order to evaluate the condition checks, and an abstract interpreter performs abstract interpretation on the propagated values to determine if the condition checks are exclusive to each other. A condition check reorderer reorders a later condition check and a preceding condition check that are found to be exclusive of each other.
Still further in accordance with present principles, described is computer program product for reordering condition checks, the computer program product comprising a non-transitory computer readable storage medium having program instructions embodied therewith, the program instructions being executable by a computer to cause the computer to perform a method in which two or more condition checks in a computer code that can be reordered within the code are identified. It is determined that a later one of the condition checks is satisfied at a frequency that is greater than the frequency at which a preceding one of the condition checks is satisfied. It is determined that there is an absence of side effects in the two or more condition checks. Values are propagated to satisfy the condition checks and abstract interpretation is performed on the values that are propagated. It is then determined that the condition checks are exclusive of each other, and the condition checks are reordered within the computer code.
These and other features and advantages will become apparent from the following detailed description of illustrative embodiments thereof, which is to be read in connection with the accompanying drawings.
The disclosure will provide details in the following description of preferred embodiments with reference to the following figures wherein:
According to present principles, described is a system and method for reordering condition checks in software programs. As indicated, the presence of condition checks in a software program that are not often executed, e.g., an if condition that is rarely evaluated as TRUE may increase computer run time costs, and drain computer processing resources, among other undesirable effects.
According to an embodiment of the present principles, the costs of condition checks are reduced by a method described herein in which if and elseif statements are reordered, if certain conditions are met, in order to more accurately reflect the frequencies at which the conditions are evaluated as TRUE. In one embodiment, when the condition checks are reordered, their positions within the code are switched, e.g., the elseif condition moves to the position of the if statement, and the if statement moves to the position of the elseif statement. Other reordering positions may be possible.
According to one other embodiment of the present principles, the condition checks of instanceof operations are reordered, if certain conditions are met, in order to more accurately reflect the execution frequency. The costs of condition checks may be reduced by reordering the instanceof operations as indicated herein.
According to one other embodiment of the present principles, the condition checks are reordered when a number of conditions are met. For example, if the frequency that an elseif condition check is evaluated as TRUE is greater than the frequency that a preceding if or elseif condition check is evaluated as TRUE, then the condition checks may be considered for reordering if (1) the condition checks do not have side effects, for example, the condition checks do not have side effects such as exceptions, stores to variables, and method calls; and (2) the if and elseif conditions are exclusive. When the if and elseif condition checks are reordered, the body blocks for the condition checks are also reordered.
Referring to
A first storage device 122 and a second storage device 124 are operatively coupled to system bus 102 by the I/O adapter 120. The storage devices 122 and 124 can be any of a disk storage device (e.g., a magnetic or optical disk storage device), a solid state magnetic device, and so forth. The storage devices 122 and 124 can be the same type of storage device or different types of storage devices.
A speaker 132 is operatively coupled to system bus 102 by the sound adapter 130. A transceiver 142 is operatively coupled to system bus 102 by network adapter 140. A display device 162 is operatively coupled to system bus 102 by display adapter 160.
A first user input device 152, a second user input device 154, and a third user input device 156 are operatively coupled to system bus 102 by user interface adapter 150. The user input devices 152, 154 and 156 can be any of a keyboard, a mouse, a keypad, an image capture device, a motion sensing device, a microphone, a device incorporating the functionality of at least two of the preceding devices, and so forth. Of course, other types of input devices can also be used, while maintaining the spirit of the present principles. The user input devices 152, 154, and 156 can be the same type of user input device or different types of user input devices. The user input devices 152, 154, and 156 are used to input and output information to and from system 100.
The processing system 100 may also include other elements (not shown), as readily contemplated by one of skill in the art, as well as omit certain elements. For example, various other input devices and/or output devices can be included in processing system 100, depending upon the particular implementation of the same, as readily understood by one of ordinary skill in the art. For example, various types of wireless and/or wired input and/or output devices can be used. Moreover, additional processors, controllers, memories, and so forth, in various configurations can also be utilized as readily appreciated by one of ordinary skill in the art. It is to be appreciated that the terms processors and controllers can be used interchangeably herein. These and other variations of the processing system 100 are readily contemplated by one of ordinary skill in the art given the teachings of the present principles provided herein.
According to embodiments of present principles, a comparison is made between two or more condition checks to determine if they should be reordered. For example the two or more condition checks are monitored to determine how frequently each one is evaluated as TRUE. If it is found that the frequency that an elseif condition check is evaluated as TRUE is greater than the frequency that a preceding if or else if condition check is evaluated as TRUE, then the condition checks may be reordered, if the following additional conditions are met:
The condition checks do not have side effects (e.g., exceptions, stores to variables, and method calls), and the condition checks are exclusive to each other. If they are exclusive to each other, then the condition checks may be reordered. When the condition checks are reordered, the body blocks for the condition checks are also reordered.
A side effect is an operation that changes the state of an executed program. It may occur when a value is stored in a variable. Operations that include stores to variables are regarded as causing side effects. An example of a side effect operation is throwing an exception in a Java™ program since this involves the stores to the variables in a Java™ virtual machine. Another example is to call a method because stores to variables may exist in the called method. If it is known that the called method does not have any stores to variables, calling the method is not considered to have a side effect. Condition checks are never reordered if one of them has any side effect so as to avoid changing the program semantics.
From abstract interpretation, it is determined whether the succeeding condition checks are satisfied or not satisfied. When the succeeding condition checks are not satisfied, then they are found to be exclusive for the preceding condition checks. With the finding of exclusivity, all conditions that support the reordering of the condition checks are found to be present. This is shown in
According to an embodiment of present principles depicted in
As shown in
The class hierarchies are examined for classes A and B. The value of CLASS_A is propagated (value of o: CLASS_A) and an abstract interpretation is performed. In the first (left) case, CLASS_A is an ancestor of CLASS_B. Thus, the condition checks if (o instanceof CLASS A) and elseif (o instanceof CLASS_B) are interpreted as nonexclusive because both condition checks can be evaluated as TRUE for an object. In the second (middle) case, CLASS_B is an ancestor of CLASS_A. Thus, the condition checks if (o instanceof CLASS_A) and elseif (o instanceof CLASS_B) are interpreted as nonexclusive because both condition checks can be evaluated as TRUE for an object. In the third (right) case, CLASS_B is not an ancestor of CLASS_A, and vice versa. Thus, the condition checks if (o instanceof CLASS_A) and elseif (o instanceof CLASS_B) are interpreted as exclusive because both condition checks are not evaluated as TRUE at the same time for an object. The statements involved in the nonexclusive determinations are not suitable for reordering, whereas the statement involved in the exclusive determination are suitable for reordering.
Referring to
For example, in checking whether there is equality between a and x (“a==x”), the value of a is propagated as a value of x (value of a: [x]) and the value of x is propagated as a value of [a] (value of x: [a]). The next condition check “else if (a>x)” is evaluated by using the propagated values. The abstract interpretation for this condition check with the propagated value for the variable a (i.e. [x]) returns FALSE because x>x is not satisfied. Similarly, the abstract interpretation for this condition check with the propagated value for x (i.e. [a]) returns FALSE because a>a is not satisfied. Since the results for all the abstract interpretations are FALSE, the if and elseif condition checks can be reordered. In further value propagations (e.g., value of a: [INT_MAX . . . x] and value of x: [a: . . . INT_MIN]), the abstract interpretation for the condition check else if (a<x) with the propagated values for the variable a (i.e. [INT_MAX . . . x]) returns FALSE because INT_MAX<x is not satisfied and x<x is not satisfied. The abstract interpretation for the condition check else if (a<x) with the propagated values for the variable x (i.e. [a . . . MIN_INT]) returns FALSE because a<INT_MIN is not satisfied and a<a is not satisfied
Referring to
The type of array that is kept in a string object has either a char[ ] type or a byte [ ] type. In one embodiment, type checks (e.g., “{” are used to access the characters. In one embodiment, the overhead of the type checks is reduced when the elseif blocks are reordered. Byte type string objects (byte[ ]) can be checked first for English applications and check for char type string object (char[ ]) for the other applications
With reference to
Further, it is to be appreciated that processing system 100 may perform at least part of the method described herein including, for example, at least part of method 300 of
System 200 is shown with respect to an operational environment in which it can be utilized, in accordance with an embodiment of the present principles. System 200 preferably includes a condition check reordering system 202 that includes one or more processors 204 and memory 206 for storing applications, modules and other data. In one embodiment, the memory unit 206 includes a large number of memory blocks. The system 200 may also include one or more displays 207 for viewing content. The display 207 may permit a user to interact with the system and its components and functions. This may be facilitated by the inclusion of a user interface 208, which may include a mouse, joystick, or any other peripheral or control to permit user interaction with the system and/or its devices. It should be understood that the components and functions of the system may be represented as one or more discrete systems or workstations, or may be integrated as part of a larger system or workstation.
System 200 is depicted as a computer-implemented approach to a condition check reordering system, resulting in faster processing time, lower system latency and more efficient use of memory space. This is particularly true in checking a computer program as it runs for purposes of determining whether condition checks can be reordered when the conditions for doing same are met. Reordering the condition checks in this manner may insure that the data is processed and the program code is executed as efficiently as possible.
System 200 receives input 210, which may include program code 212 that may contain if and elseif condition checks that may not be ordered according to the frequencies that the condition checks are evaluated as TRUE. For example, if the if condition set forth in a block is rarely TRUE and elseif condition set forth in a subsequent condition block is frequently TRUE, then reordering the condition blocks may reduce the cost of performing condition checks and provide for more efficient execution of program code.
The condition check reordering system 202 includes a condition check frequency determiner 210, a value propagator 212, an abstract interpreter 214, a class hierarchy checker 216, and a condition check reorderer 218. After the system 200 performs operations, revised program code 222 containing reordered condition checks 224, e.g., reordered if and elseif condition checks, may be output 220 from the system.
The condition check frequency determiner 210 determines the number of times if and elseif condition checks are evaluated as TRUE. In one embodiment, the condition check frequency determiner 210 searches for instances where the frequency that an elseif condition check is evaluated as TRUE is greater than the frequency of a preceding if or elseif condition check is evaluated as TRUE. In one other embodiment, the condition check frequency determiner 210 further determines if the condition checks set forth in the blocks do not have side effects, e.g., no exceptions, no stores to variables, and no method calls, among others.
The value propagator 212 propagates the values to satisfy the condition checks. The abstract interpreter 214 uses the information generated by the value propagator 212 to perform abstract interpretation on the propagated values of the condition checks. For example, the abstract interpreter 214 uses the values propagated by the value propagator to determine if there are instances where the classes of data are exclusive to each other.
The class hierarchy checker 216 is an optional unit provided for situations in which the condition checks include instanceof statements. The class hierarchy checker 216 performs checks on classes subject to instanceof conditions. After the value propagator 212 propagates the values of the instanceof conditions, the class hierarchy checker 216 determines if a variable is a member of two or more classes, which would show that the variable is not exclusive to one particular class (e.g., that one class is an ancestor of another class). If it is found that a class is an ancestor of another class, then the instanceof operation is evaluated as TRUE, e.g., no exclusivity. Further, if a class is not loaded at the time of compiling, then the operation is also evaluated as TRUE e.g., no exclusivity. In one embodiment, the class hierarchy checker is a separate unit. In another embodiment, the class hierarchy checker functions are performed by the abstract interpreter.
Condition check reorderer 218 receives information from the condition check frequency determiner 210, the value propagator 212, and the abstract interpreter 214, and when the condition checks include instanceof statements, then the class hierarchy checker 216. The condition check reorder 218 determines if 1) the frequency that an elseif condition check is evaluated as TRUE is greater than the frequency of a preceding if or elseif condition check is evaluated as TRUE; 2) there are no side effects of the condition check; and 3) the if and elseif condition checks are exclusive to each other. If the outcomes of all three conditions are TRUE, then the block reorderer will reorder two or more condition checks and the body blocks for the condition checks.
The above embodiment of system 200 is merely exemplary. Variations of this embodiment and other embodiments altogether that implement the present principles are within the scope of the present disclosure. For example, it the value propagator and the abstract interpreter may be combined into a unit. Similarly, the condition check execution frequency determiner may also perform the block reordering, thus combining the condition check frequency determiner and the block reorderer in a single unit.
Referring to
In block 305, condition checks (e.g., if and elseif condition checks) are identified in computer code to determine if the condition checks may be reordered.
In block 310, the frequencies that the two or more condition checks are evaluated as TRUE are determined.
Block 315 is a decision block in which it is determined if the frequency at which a later condition check is satisfied greater than the frequency at which a preceding condition check is satisfied. If the determination is YES, then proceed to block 320. If the determination is NO, then proceed to block 325.
Block 320 is a decision block in which it is determined whether the condition checks have side effects. For example, the side effects may be exceptions, stores to variables, and method calls. If there are no side effects associated with the condition checks (e.g., the determination is NO), then proceed to block 330. If there are side effects associated with the condition checks (e.g., the determination is YES), then proceed to block 325.
In block 330, the values of the conditions are propagated, to provide information used in determining whether the conditions are exclusive to each other.
In block 335, the succeeding condition checks are executed by performing abstract interpretation using the propagated values.
Block 340 is a decision block in which it is determined whether the condition checks include instanceof statements. If the determination is YES, then proceed to block 350. If the determination is NO, then proceed to block 345.
Block 345 is a decision block that determines, after value propagation and abstract interpretation (and in certain instances, after class hierarchies are checked in block 350), whether the conditions set forth in the condition checks are exclusive to each other. If the determination is YES, then proceed to block 355. If the determination is NO, then proceed to block 325.
Block 350 is implemented when decision block 340 determines YES—the condition checks under consideration include instanceof statements. Block 350 checks the class hierarchies of the instanceof statements. In one embodiment, class hierarchies are checked by propagating the values of the instanceof statements and by executing the succeeding condition checks by performing abstract interpretation using the propagated values.
When the condition checks contain instanceof statements, a further decision is made in block 345 on whether the classes that are the subject of the instanceof statements are exclusive to each other. Block 345 makes the determination based on the information generated in block 350, where the values of the instanceof statements are propagated and abstract interpretation is performed. If the determination is YES (e.g., exclusive) then proceed to block 355 from block 345. If the determination is NO (e.g., not exclusive) then proceed to block 325 from block 345.
In block 355, the body blocks containing the condition checks are reordered in the computer code. In one embodiment, a body block containing a later condition check that is satisfied at a frequency that is greater than the frequency at which a preceding condition check is satisfied (e.g., decision in block 315 returns YES) is moved up in the code, and the condition check executing less frequently is moved down. In addition to finding a later condition check that executes more frequently than one that preceded it, the following additional conditions should been met for reordering: the condition checks should not have side effects (decision block 320 returns NO), after value propagation (block 330) and abstract interpretation (block 335) the conditions should be found to be exclusive to each other (decision block 345 returns YES), and in the case where the condition checks are found to include instanceof statements (decision block 340 returns YES), then exclusivity is found after the class hierarchies are checked (decision block 345 returns YES).
In block 325, the instruction is given to not reorder the body blocks. This instruction should be given in case one of the following occurs: a body block containing a later condition check is satisfied at a frequency that is less than the frequency at which a preceding condition check is satisfied (decision in block 315 returns NO); the condition checks have side effects (decision block 320 returns YES); the conditions are found to not be exclusive to each other (decision block 345 returns NO after value propagation (block 330) and abstract interpretation (block 335) are executed); and in the case where the condition checks are found to include instanceof statements (decision block 340 returns YES), then a lack of exclusivity is found after the class hierarchies are checked in block 350 (decision block 345 returns NO).
The method of reordering condition checks offers several advantages. For example,
The right plot of
In a scripting language such as Python, which is a dynamically typed language, the variables are not static type. Where there are many if and elseif condition checks used with instanceof operations in an application written in Python, the variable type is always checked when it is accessed. For example, when a large number of condition checks are used with instanceof operations to access variables, e.g., when 6 or so condition checks are set forth, condition check reordering should effectively improve the run time performance, particularly when the frequencies at which the condition checks evaluated as TRUE are biased towards later condition checks.
While the present disclosure includes a detailed description on cloud computing, it should be understood that implementation of the subject matter described herein is not limited to a cloud computing environment. Rather, embodiments of the present invention are capable of being implemented in conjunction with any other type of computing environment now known or later developed.
Cloud computing is a model of service delivery for enabling convenient, on-demand network access to a shared pool of configurable computing resources (e.g. networks, network bandwidth, servers, processing, memory, storage, applications, virtual machines, and services) that can be rapidly provisioned and released with minimal management effort or interaction with a provider of the service. This cloud model may include at least five characteristics, at least three service models, and at least four deployment models.
Characteristics are as follows:
On-demand self-service: a cloud consumer can unilaterally provision computing capabilities, such as server time and network storage, as needed automatically without requiring human interaction with the service's provider.
Broad network access: capabilities are available over a network and accessed through standard mechanisms that promote use by heterogeneous thin or thick client platforms (e.g., mobile phones, laptops, and PDAs).
Resource pooling: the provider's computing resources are pooled to serve multiple consumers using a multi-tenant model, with different physical and virtual resources dynamically assigned and reassigned according to demand. There is a sense of location independence in that the consumer generally has no control or knowledge over the exact location of the provided resources but may be able to specify location at a higher level of abstraction (e.g., country, state, or datacenter).
Rapid elasticity: capabilities can be rapidly and elastically provisioned, in some cases automatically, to quickly scale out and rapidly released to quickly scale in. To the consumer, the capabilities available for provisioning often appear to be unlimited and can be purchased in any quantity at any time.
Measured service: cloud systems automatically control and optimize resource use by leveraging a metering capability at some level of abstraction appropriate to the type of service (e.g., storage, processing, bandwidth, and active user accounts). Resource usage can be monitored, controlled, and reported providing transparency for both the provider and consumer of the utilized service.
Service Models are as follows:
Software as a Service (SaaS): the capability provided to the consumer is to use the provider's applications running on a cloud infrastructure. The applications are accessible from various client devices through a thin client interface such as a web browser (e.g., web-based email). The consumer does not manage or control the underlying cloud infrastructure including network, servers, operating systems, storage, or even individual application capabilities, with the possible exception of limited user-specific application configuration settings.
Platform as a Service (PaaS): the capability provided to the consumer is to deploy onto the cloud infrastructure consumer-created or acquired applications created using programming languages and tools supported by the provider. The consumer does not manage or control the underlying cloud infrastructure including networks, servers, operating systems, or storage, but has control over the deployed applications and possibly application hosting environment configurations.
Infrastructure as a Service (IaaS): the capability provided to the consumer is to provision processing, storage, networks, and other fundamental computing resources where the consumer is able to deploy and run arbitrary software, which can include operating systems and applications. The consumer does not manage or control the underlying cloud infrastructure but has control over operating systems, storage, deployed applications, and possibly limited control of select networking components (e.g., host firewalls).
Deployment Models are as follows:
Private cloud: the cloud infrastructure is operated solely for an organization. It may be managed by the organization or a third party and may exist on-premises or off-premises.
Community cloud: the cloud infrastructure is shared by several organizations and supports a specific community that has shared concerns (e.g., mission, security requirements, policy, and compliance considerations). It may be managed by the organizations or a third party and may exist on-premises or off-premises.
Public cloud: the cloud infrastructure is made available to the general public or a large industry group and is owned by an organization selling cloud services.
Hybrid cloud: the cloud infrastructure is a composition of two or more clouds (private, community, or public) that remain unique entities but are bound together by standardized or proprietary technology that enables data and application portability (e.g., cloud bursting for load balancing between clouds).
A cloud computing environment is service oriented with a focus on statelessness, low coupling, modularity, and semantic interoperability. At the heart of cloud computing is an infrastructure comprising a network of interconnected nodes.
Referring now to
In cloud computing node 510 there is a computer system/server 512, which is operational with numerous other general purpose or special purpose computing system environments or configurations. Examples of well-known computing systems, environments, and/or configurations that may be suitable for use with computer system/server 512 include, but are not limited to, personal computer systems, server computer systems, thin clients, thick clients, handheld or laptop devices, multiprocessor systems, microprocessor-based systems, set top boxes, programmable consumer electronics, network PCs, minicomputer systems, mainframe computer systems, and distributed cloud computing environments that include any of the above systems or devices, and the like.
Computer system/server 512 may be described in the general context of computer system executable instructions, such as program modules, being executed by a computer system. Generally, program modules may include routines, programs, objects, components, logic, data structures, and so on that perform particular tasks or implement particular abstract data types. Computer system/server 512 may be practiced in distributed cloud computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed cloud computing environment, program modules may be located in both local and remote computer system storage media including memory storage devices.
As shown in
Bus 518 represents one or more of any of several types of bus structures, including a memory bus or memory controller, a peripheral bus, an accelerated graphics port, and a processor or local bus using any of a variety of bus architectures. By way of example, and not limitation, such architectures include Industry Standard Architecture (ISA) bus, Micro Channel Architecture (MCA) bus, Enhanced ISA (EISA) bus, Video Electronics Standards Association (VESA) local bus, and Peripheral Component Interconnect (PCI) bus.
Computer system/server 512 typically includes a variety of computer system readable media. Such media may be any available media that is accessible by computer system/server 512, and it includes both volatile and non-volatile media, removable and non-removable media.
System memory 528 can include computer system readable media in the form of volatile memory, such as random access memory (RAM) 530 and/or cache memory 532. Computer system/server 512 may further include other removable/non-removable, volatile/non-volatile computer system storage media. By way of example only, storage system 534 can be provided for reading from and writing to a non-removable, non-volatile magnetic media (not shown and typically called a “hard drive”). Although not shown, a magnetic disk drive for reading from and writing to a removable, non-volatile magnetic disk (e.g., a “floppy disk”), and an optical disk drive for reading from or writing to a removable, non-volatile optical disk such as a CD-ROM, DVD-ROM or other optical media can be provided. In such instances, each can be connected to bus 518 by one or more data media interfaces. As will be further depicted and described below, memory 528 may include at least one program product having a set (e.g., at least one) of program modules that are configured to carry out the functions of embodiments of the invention.
Program/utility 540, having a set (at least one) of program modules 542, may be stored in memory 528 by way of example, and not limitation, as well as an operating system, one or more application programs, other program modules, and program data. Each of the operating system, one or more application programs, other program modules, and program data or some combination thereof, may include an implementation of a networking environment. Program modules 542 generally carry out the functions and/or methodologies of embodiments of the invention as described herein.
Computer system/server 512 may also communicate with one or more external devices 514 such as a keyboard, a pointing device, a display 524, etc.; one or more devices that enable a user to interact with computer system/server 512; and/or any devices (e.g., network card, modem, etc.) that enable computer system/server 512 to communicate with one or more other computing devices. Such communication can occur via Input/Output (I/O) interfaces 522. Still yet, computer system/server 512 can communicate with one or more networks such as a local area network (LAN), a general wide area network (WAN), and/or a public network (e.g., the Internet) via network adapter 520. As depicted, network adapter 520 communicates with the other components of computer system/server 512 via bus 518. It should be understood that although not shown, other hardware and/or software components could be used in conjunction with computer system/server 512. Examples include, but are not limited to: microcode, device drivers, redundant processing units, external disk drive arrays, RAID systems, tape drives, and data archival storage systems, etc.
Referring now to
Hardware and software layer 760 includes hardware and software components. Examples of hardware components include mainframes, in one example IBM® zSeries® systems; RISC (Reduced Instruction Set Computer) architecture based servers, in one example IBM pSeries® systems; IBM xSeries® systems; IBM BladeCenter® systems; storage devices; networks and networking components. Examples of software components include network application server software, in one example IBM WebSphere® application server software; and database software, in one example IBM DB2® database software. (IBM, zSeries, pSeries, xSeries, BladeCenter, WebSphere, and DB2 are trademarks of International Business Machines Corporation registered in many jurisdictions worldwide).
Virtualization layer 762 provides an abstraction layer from which the following examples of virtual entities may be provided: virtual servers; virtual storage; virtual networks, including virtual private networks; virtual applications and operating systems; and virtual clients.
In one example, management layer 764 may provide the functions described below. Resource provisioning provides dynamic procurement of computing resources and other resources that are utilized to perform tasks within the cloud computing environment. Metering and Pricing provide cost tracking as resources are utilized within the cloud computing environment, and billing or invoicing for consumption of these resources. In one example, these resources may comprise application software licenses. Security provides identity verification for cloud consumers and tasks, as well as protection for data and other resources. User portal provides access to the cloud computing environment for consumers and system administrators. Service level management provides cloud computing resource allocation and management such that required service levels are met. Service Level Agreement (SLA) planning and fulfillment provide pre-arrangement for, and procurement of, cloud computing resources for which a future requirement is anticipated in accordance with an SLA.
Workloads layer 766 provides examples of functionality for which the cloud computing environment may be utilized. Examples of workloads and functions which may be provided from this layer include: mapping and navigation; software development and lifecycle management; virtual classroom education delivery; data analytics processing; transaction processing; and condition check reordering.
The present invention may be a system, a method, and/or a computer program product. The computer program product may include a computer readable storage medium (or media) having computer readable program instructions thereon for causing a processor to carry out aspects of the present invention.
The computer readable storage medium can be a tangible device that can retain and store instructions for use by an instruction execution device. The computer readable storage medium may be, for example, but is not limited to, an electronic storage device, a magnetic storage device, an optical storage device, an electromagnetic storage device, a semiconductor storage device, or any suitable combination of the foregoing. A non-exhaustive list of more specific examples of the computer readable storage medium includes the following: a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), a static random access memory (SRAM), a portable compact disc read-only memory (CD-ROM), a digital versatile disk (DVD), a memory stick, a floppy disk, a mechanically encoded device such as punch-cards or raised structures in a groove having instructions recorded thereon, and any suitable combination of the foregoing. A computer readable storage medium, as used herein, is not to be construed as being transitory signals per se, such as radio waves or other freely propagating electromagnetic waves, electromagnetic waves propagating through a waveguide or other transmission media (e.g., light pulses passing through a fiber-optic cable), or electrical signals transmitted through a wire.
Computer readable program instructions described herein can be downloaded to respective computing/processing devices from a computer readable storage medium or to an external computer or external storage device via a network, for example, the Internet, a local area network, a wide area network and/or a wireless network. The network may comprise copper transmission cables, optical transmission fibers, wireless transmission, routers, firewalls, switches, gateway computers and/or edge servers. A network adapter card or network interface in each computing/processing device receives computer readable program instructions from the network and forwards the computer readable program instructions for storage in a computer readable storage medium within the respective computing/processing device.
Computer readable program instructions for carrying out operations of the present invention may be assembler instructions, instruction-set-architecture (ISA) instructions, machine instructions, machine dependent instructions, microcode, firmware instructions, state-setting data, or either source code or object code written in any combination of one or more programming languages, including an object oriented programming language such as Java™, Smalltalk, C++ or the like, and conventional procedural programming languages, such as the “C” programming language or similar programming languages. The computer readable program instructions may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider). In some embodiments, electronic circuitry including, for example, programmable logic circuitry, field-programmable gate arrays (FPGA), or programmable logic arrays (PLA) may execute the computer readable program instructions by utilizing state information of the computer readable program instructions to personalize the electronic circuitry, in order to perform aspects of the present invention.
Aspects of the present invention are described herein with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems), and computer program products according to embodiments of the invention. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer readable program instructions.
These computer readable program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. These computer readable program instructions may also be stored in a computer readable storage medium that can direct a computer, a programmable data processing apparatus, and/or other devices to function in a particular manner, such that the computer readable storage medium having instructions stored therein comprises an article of manufacture including instructions which implement aspects of the function/act specified in the flowchart and/or block diagram block or blocks.
The computer readable program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other device to cause a series of operational steps to be performed on the computer, other programmable apparatus or other device to produce a computer implemented process, such that the instructions which execute on the computer, other programmable apparatus, or other device implement the functions/acts specified in the flowchart and/or block diagram block or blocks.
The flowchart and block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods, and computer program products according to various embodiments of the present invention. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of instructions, which comprises one or more executable instructions for implementing the specified logical function(s). In some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts or carry out combinations of special purpose hardware and computer instructions.
Reference in the specification to “one embodiment” or “an embodiment” of the present principles, as well as other variations thereof, means that a particular feature, structure, characteristic, and so forth described in connection with the embodiment is included in at least one embodiment of the present principles. Thus, the appearances of the phrase “in one embodiment” or “in an embodiment”, as well any other variations, appearing in various places throughout the specification are not necessarily all referring to the same embodiment.
It is to be appreciated that the use of any of the following “/”, “and/or”, and “at least one of”, for example, in the cases of “A/B”, “A and/or B” and “at least one of A and B”, is intended to encompass the selection of the first listed option (A) only, or the selection of the second listed option (B) only, or the selection of both options (A and B). As a further example, in the cases of “A, B, and/or C” and “at least one of A, B, and C”, such phrasing is intended to encompass the selection of the first listed option (A) only, or the selection of the second listed option (B) only, or the selection of the third listed option (C) only, or the selection of the first and the second listed options (A and B) only, or the selection of the first and third listed options (A and C) only, or the selection of the second and third listed options (B and C) only, or the selection of all three options (A and B and C). This may be extended, as readily apparent by one of ordinary skill in this and related arts, for as many items listed.
Having described preferred embodiments of reordering condition checks, which are intended to be illustrative and not limiting, it is noted that modifications and variations can be made by persons skilled in the art in light of the above teachings. It is therefore to be understood that changes may be made in the particular embodiments disclosed which are within the scope of the invention as outlined by the appended claims. Having thus described aspects of the invention, with the details and particularity required by the patent laws, what is claimed and desired protected by Letters Patent is set forth in the appended claims.
Number | Name | Date | Kind |
---|---|---|---|
5212794 | Pettis | May 1993 | A |
7574695 | Chander et al. | Aug 2009 | B2 |
7784039 | Tanaka | Aug 2010 | B2 |
8645924 | Li et al. | Feb 2014 | B2 |
8726252 | Eichenberger et al. | May 2014 | B2 |
8943487 | Li et al. | Jan 2015 | B2 |
10310826 | Rong et al. | Jun 2019 | B2 |
20040019770 | Kawahito | Jan 2004 | A1 |
20050097397 | Wu | May 2005 | A1 |
20050155018 | Dewitt, Jr. | Jul 2005 | A1 |
20090199168 | Hamada et al. | Aug 2009 | A1 |
20110113224 | Isshiki | May 2011 | A1 |
20120054470 | Ishizaki | Mar 2012 | A1 |
20140115305 | Johnson | Apr 2014 | A1 |
20140164747 | Gschwind et al. | Jun 2014 | A1 |
20160110806 | Bent | Apr 2016 | A1 |
20170060575 | Agrawal | Mar 2017 | A1 |
Number | Date | Country |
---|---|---|
2063355 | May 2009 | EP |
Entry |
---|
List of IBM Patents or Patent Applications Treated as Related dated Feb. 26, 2019, 2 pages. |
Minghui Yang et al., Improving Performance by Branch Reordering, Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI), Jun. 1998. |
Minghui Yang et al., Efficient and Effective Branch Reordering Using Profile Data, ACM Transactions on Programming Languages and Systems, vol. 24, No. 6, Nov. 2002, pp. 667-697. |
Number | Date | Country | |
---|---|---|---|
20190188113 A1 | Jun 2019 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 15705911 | Sep 2017 | US |
Child | 16285781 | US | |
Parent | 15050912 | Feb 2016 | US |
Child | 15705911 | US |