EP3278218A1 - Field specialization systems and methods for improving program performance - Google Patents
Field specialization systems and methods for improving program performanceInfo
- Publication number
- EP3278218A1 EP3278218A1 EP16774209.7A EP16774209A EP3278218A1 EP 3278218 A1 EP3278218 A1 EP 3278218A1 EP 16774209 A EP16774209 A EP 16774209A EP 3278218 A1 EP3278218 A1 EP 3278218A1
- Authority
- EP
- European Patent Office
- Prior art keywords
- computer program
- invariant
- program code
- spiff
- specialized
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
- G06F16/24544—Join order optimisation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24549—Run-time optimisation
Definitions
- the present disclosure is generally related to field specialization for improving performance of a computer program, and more particularly is related to systems and methods for improving the performance of database management systems by identifying invariant intervals for variables and modifying the DBMS code utilizing specialized code generated, at least in part, based on the identified invariant intervals.
- DBMS database management system
- a database management system is a collection of software programs that manage the storage and access of data.
- DBMSes As larger volumes of data are being generated nowadays and thus must be stored and efficiently accessed, DBMSes have been adopted across a wide range of application domains. Driven by such ubiquitous deployments over the last four decades, DBMSes have been designed and engineered based on a few data models that are generally applicable to those domains.
- the relational data model is the one most prevalently adopted by commercial and open-source DBMSes. A significant amount of effort has been devoted to efficiently support this data model.
- relational database management systems are themselves general, in that they can handle whatever schema the user specifies and whatever query or modification is presented to them. Relational operators work on essentially any relation and must contend with predicates specified on any attribute of the underlying relations. Through such innovations as effective indexing structures, innovative concurrency control mechanisms, and sophisticated query optimization strategies, the relational DBMSes available today are very efficient. Such generality and efficiency has enabled their prohferation and use in many domains.
- Embodiments of the present disclosure provide systems and methods for improving the performance of a database management system (DBMS). Briefly described, one embodiment of the method, among others, can be implemented as follows.
- a computer- implemented method for improving the performance of a DBMS includes the steps of: (i) identifying, based on a compile-time analysis of the DBMS source code, invariant intervals for variables in the DBMS code; (ii) deducing, based on the source code and an Ecosystem Specification for the DBMS, program interactions within the DBMS; deducing, based on the source code, the identified invariant intervals for variables in the DBMS code and the deduced program interactions, termed domain assertions; (iii) identifying, based on the invariant intervals for variables in the DBMS code, the source code, and one or more execution summaries associated with the DBMS executed using various workloads, the deduced program interactions, and the deduced domain assertions, one or more candidate snippets;
- FIG. 1 is a block diagram illustrating the spiff tool architecture, in accordance with an exemplary embodiment provided by this disclosure.
- FIG. 2 is a block illustration of a field specialization process in accordance with an exemplary embodiment provided by this disclosure.
- FIG. 3 is an illustration of field specialization for elaboration a paradigm of computer science with an exemplary embodiment provided by this disclosure.
- Many embodiments of the disclosure may take the form of computer-executable instructions, including algorithms executed by a programmable computer. However, the disclosure can be practiced with other computer system configurations as well. Certain aspects of the disclosure can be embodied in a special-purpose computer or data processor that is specifically programmed, configured or constructed to perform one or more of the computer-executable algorithms described below.
- the disclosure also can be practiced in distributed computing environments, where tasks or modules are performed by remote processing devices that are linked through a communications network. Moreover, the disclosure can be practiced in Internet-based or cloud computing environments, where shared resources, software and information may be provided to computers and other devices on demand. In a distributed computing environment, program modules or subroutines may be located in both local and remote memory storage devices. Aspects of the disclosure described below may be stored or distributed on computer-readable media, including magnetic and optically readable and removable computer disks, fixed magnetic disks, floppy disk drive, optical disk drive, magneto-optical disk drive, magnetic tape, hard-disk drive (HDD), solid state drive (SSD), compact flash or non- volatile memory, as well as distributed electronically over networks including the cloud. Data structures and transmissions of data particular to aspects of the disclosure are also encompassed within the scope of the disclosure.
- the present invention may be described herein primarily with respect to a relational DBMS, the present invention is not limited to such a DBMS type. It will be readily understood that the present invention may be applied to any DBMS type, including, but not limited to, hierarchical, network and object-oriented DBMS types. Moreover, while field specialization is disclosed herein primarily with respect to a DBMS, it should be understood that the concepts provided herein may be applied to any program that manipulates data and in particular, performs complex analysis on that data. Specifically, it is understood that the system and method disclosed may also be applicable to computer programs that require high run-time performance and execute the application multiple times over the same data, but with different parameters or queries.
- a “spiff,” which stands for specializer in the yield, is code that dynamically creates specialized code at DBMS runtime.
- Field specialization is the process of inserting spiffs into DBMS code so that the DBMS can specialize itself by exploiting runtime invariants.
- the specialized code (which may be referred to herein as "speccode”) is faster and generally smaller than the original unspecialized code.
- Field specialization gets its name from the fact that the speccode is generated and invoked "in the field,” i.e., after the DBMS has been deployed and is running at the end user's site.
- a spiff uses the actual value of a runtime invariant— which is obtained at runtime— to dynamically produce code that is specialized to that particular value of the runtime invariant.
- micro-specialization is equivalent to the term "field specialization” as used herein;
- bee is equivalent to the term “spiff' as used herein;
- an instantiated bee is equivalent to "specialized code” as used herein, which is the result of a spiff; and
- HRE hive runtime environment
- FIG. 1 is a block diagram illustrating the spiff tool architecture, in accordance with an exemplary embodiment provided by mis disclosure.
- the present disclosure provides a spiff tools architecture that automatically field specializes an arbitrary program, given three inputs, as shown in FIG. 1 :
- the goals of this architecture include the following.
- each tool can initially do just a partial, best- effort analysis (e.g., finding just some of the invariants, or rninimal candidate snippets) and then be refined to produce a more comprehensive output over time.
- a partial, best- effort analysis e.g., finding just some of the invariants, or rninimal candidate snippets
- Enable performance benefit estimation as the benefit of each individual code transformation introduced by a spiff can be evaluated dynamically and/or independently; the overall benefit of that spiff can be computed by taking into account the effected code transformations and the characteristics of a particular workload, without exhaustively evaluating all combinations of code transformations and measuring their execution time.
- the spiff tool architecture includes a number of tools. These tools include: Invariant Finder, Tracer, Invariant Checker, Program Interaction Deducer, Domain Assertion Deducer, Snippet Finder, and Spiff Maker, each of which will be described in further detail below.
- Invariant Finder Invariant Finder
- Tracer Invariant Checker
- Program Interaction Deducer Program Interaction Deducer
- Domain Assertion Deducer Domain Assertion Deducer
- Snippet Finder Snippet Finder
- Spiff Maker Spiff Maker
- PR Program Representation
- AST Abstract Syntax Tree
- IR intermediate representation
- PE Program Expression
- Invariant Finder takes as input a PR of the DBMS to be specialized and Trace Events (optional), performs static analysis on the PR and outputs zero or more Invariant Intervals.
- Invariant Interval A set of paths defined by a single starting PE (or equivalently, a single position within the source code), and a single ending PR node that is reachable during one or more possible executions from the starting node, over which a particular property of a variable holds. An example of such a property is not written. (An interval can consist of a set of paths, rather than a single path.
- the variable remains invariant on all the code paths associated with these branches.
- the Invariant Interval starts within the starting PE (that is, as soon as the variable has that assigned value: the starting PE is always a statement that sets the value of the variable) and ends within the ending PE, right before the value is set again.
- the value of that variable will be the same as it is at other points along that path, hence: the term invariant.
- Invariant Interval Set A set of invariant intervals for a particular variable, where all invariant intervals in the set share the same starting node.
- An Interval perhaps may not be maximal, in that it is terminated earlier than needed, if the analysis cannot ascertain that the indicated property still holds after the execution of that PE
- VFT Value Flow Tree
- an invariant interval may exist over an interval where a value (i.e., the property is a value) of the variable holds, e.g., 'Variable equals N" (for some constant N).
- a value i.e., the property is a value
- N for some constant N
- optimizations based on derived values, e.g., string length, mat may not be explicitly materialized in the code.
- Invariant Finder won't know statically whether the "if statement will be true or false. Thus, Invariant Finder should output the following Invariant Interval Sets for the variable x:
- Invariant Interval Set #1 Starts on line 1 , with 1 invariant interval: o Invariant Interval #1.1 : Ends at line 3 • Invariant Interval Set #2: Starts on line 10, with 1 invariant interval:
- Invariant Finder may output the above in some structured format, such as XML; however, in the present disclosure, lists and sublists will be utilized for simplicity.
- Invariant Finder may vary in its precision but must be accurate. Specifically, the invariants that it produces should be correct, but do not necessarily need to be exhaustive. For instance, x is actually invariant from line 1 to line 5, and from line 1 to line 9. However, it's also accurate (but less precise) to, for example, just stop the interval at the beginning of the "if statement. Of course, with less precise intervals, Snippet Finder and Spiff Maker (tools which will be described below) will not have as many opportunities to field specialize the application.
- Invariant Finder could output such an Invariant Interval Set for every variable in the program. Let's look at those for the variable h:
- Variable y should be:
- variable a's should be:
- variable h gets its value from variable x: its value “flows” from x.
- z's value which in turn, "flows” from h. So, tying it all together, the VFT for x would be as shown in Example 2, below, given in an exemplar canonical representation.
- the numbers in the "from” and “to” attributes refer to one of the Invariant Interval Sets (IIS) above. So the first line indicated is from Invariant Interval Set #1 to Invariant Interval Set #4.
- Invariant Finder should not actually unroll loops. Rather, it should check to see if there is an assignment to the variable within the loop. If not, as in this example, then an invariant interval that reached that loop would extend across the loop:
- Invariant Finder would create the following intervals:
- Invariant Finder would create:
- Invariant Finder can alternate forward-analysis steps, which propagates values for function pointers to figure out the set of possible targets for each indirect call, with backward analysis steps, which propagate value flows through the call graph bottom-up as described above. This alternation can be iterated until the set of function-pointer targets stabilizes.
- the Invariant Interval may further identify the possible values that the variable may take on.
- a variable join_type there may be only a few different values ever assigned to that variable, and they may all be known statically. Sometimes this is specified in the variable type (an enumeration) and sometimes this can be discovered by static analysis, e.g., by examining all the values assigned to mat variable.
- Invariant Finder may record the invariant interval for each value.
- Each invariant interval returned by the tool should be correct-that is, the associated variable should be guaranteed to be unchanged over all paths between the start and the end of the interval, not including the end. If there are any indirect assignments within any of the paths, the Invariant Finder tool must ensure that all such assignments cannot change the value of the indicated variable.
- intervals that are correct but are not returned by the tool either (a) as an interval set or (b) as an individual interval within an interval set. It is acceptable if the tool indicates where variables are assigned (that is, starting an invariant interval) but not analyzed by the tool (missing interval set) as well as the interval sets that are incomplete (missing individual intervals).
- intervals that do not end in a statement that definitely changes the value. This could be caused by (a) an assignment that does not actually change the value or (b) a non-assignment for which the analysis is not sufficiently precise to determine that the value is not changed, for example, a "for" statement that might change the value within that statement.
- Tracer takes as input an Executable under a Workload and outputs a sequence of Trace Events.
- a Trace Events output typically records an execution of an instruction that may affect data flow within the program, such as "loop entered”, “variable read”, or "function call”.
- the Trace Events are processed by a further tool, "summarizer,” to produce
- Correctness dictates that if certain activities of interest occur during the execution, that the relevant Trace Event is output and/or recorded, and that every output and/or recorded Trace Event corresponds to an occurrence of an activity of interest, in the order indicated.
- Invariant Checker determines whether any violations of identified Invariants (e.g., as identified by Invariant Finder) occur in a given execution, using the Trace Events from that execution. (Alternatively, the developer can provide guidance to Invariant Checker by indicating important variables to watch.) Ideally, Invariant checker would find no violations for the many executions of the DBMS Executable over many Workloads (thereby confirming as correct the invariants found by Invariant Finder).
- Invariant Checker may be run to periodically to further validate the analysis done by the other tools (such as Invariant Finder and Tracer). Users of the application may run Invariant Checker, for example, and be provided with an indication that no violations were found. On the other hand, if violations are found, the user may be provided with an indication that violations were found, and may further be provided with a message to contact technical support for assistance.
- tools such as Invariant Finder and Tracer.
- Invariant Checker is as a debugging tool, for example, employed by the developers of the tools described herein to ensure the correctness of the static analysis (e.g., the invariants identified by Invariant Finder).
- the tool "Program Interaction Deducer” uses the PR (or an equivalent
- the Program Interaction Deducer ascertains where in the program(s) values are stored in a file, where values are subsequently read from a file, and where those values are removed from the file (or the file itself is removed). Those values will then be determined to be long-term invariants within the Domain Assertion Inducer.
- the Ecosystem Specification states (a) what data is involved, (b) which data files are fixed and which can vary, (c) which program(s) can create, access, and discard this data, and (d) any concurrency requirements.
- the focus is on files; however, in general, this specification is concerned more generally with reading and writing data from the outside world, which includes files, but may also include user I/O, streams to/from other processes, and possible other ways for a program to get data as well as other interactions with the O/S, such as allocating memory and dealing with character encodings.
- Files may be the most common way, and the focus of the discussion here, but it should be understood that the present invention may utilize any other such form of data.
- minidb DBMS
- An Ecosystem Specification which can be provided by the developer as a configuration file describing non-obvious traits of particular functions regarding data flow manipulation in the application (an example Ecosystem Specification is shown in Example 7 below), would state that (a) the data starts out empty and the workload is read from stdin or a file, (b) (workload) data can vary, (c) only minidb will access the data, and (d) at most one instance of minidb will be running on any specific directory.
- the Ecosystem Specification is essential to understand that the schema is invariant across executions of minidb.
- minidb uses two types of data: table, a file holding the rows of a table; and workload, a file containing SQL statements.
- table a file holding the rows of a table
- workload a file containing SQL statements.
- the type names are only to differentiate these files in the rest of the description.
- Each table is in a directory (the database).
- minidb There is one program in this ecosystem: minidb. It creates table data files.
- line 3 in the CreateTable function
- the Domain Assertion Deducer which file is being manipulated (here, the specific file mentioned on that line of code).
- the Consolas font also used in the Examples are the names of functions in the minidb source code.
- the verb "reads” indicates that the directory is not created nor removed by the application.
- the file is indicated by file passed to CreateTable ( ) .
- the verb "creates” also implies "opens,” "reads,”
- This program opens workload data files, which implies "reads.”
- the file is that passed to Get Next Command ( ) .
- this file might be read from stdin in line 7 of
- minidb creates table files in this directory, reads and writes them, and then removes them, indicating exactly where in the source each of these file actions occur. Furthermore, the table header within a file is never changed within a file and that file is uniquely identified by the variable "data_file_name.”
- the table data file is first created in the database directory. (Since a sole application is used in this example, minidb, we can specify it in the datafile rather that at the add, remove, ext. operations on that data.)
- This file contains three data structures: the
- TableHeader multiple "RowHeaders", each with the row (a .string).
- the analysis in subsequent tools doesn't need to know the inclusion structure; all that is needed is the data structures written and subsequently read. Of course, once data is written to a file, it can be read, possibly many times, before that data is deleted.
- the lifetime of a file extends beyond an individual execution of an application.
- One execution might create the file, another might subsequently write data to that file, another might subsequently read that data, and another might subsequently remove the file.
- the critical semantics is that data written to a file will be the same data subsequently read from that file, until that data is deleted from the file or the file itself is removed.
- the other critical semantics is that we know from the PR the actual C structs written out to the file and subsequently read in.
- ExecuteDelete( ) is particularly complex: a temporary file is created, tile rows before the row to be deleted are copied over to the temporary file, the rows after the row to be deleted are copied over, and then the temporary file is renamed.
- Interaction Deducer may include such logic to handle these particulars.
- Table Spiff Instance Use Case Table spiff instances are associated with particular rows in the database, the handling of which is discussed above.
- row spiffs requires (i) determining which invariant values to utilize in partitioning the data, (ii) placing a spiff id in the data, and (iii) possibly removing data values that can be determined from the spiff id.
- the first step uses the cost model, which relies on the workload.
- the second actually changes the structure of the input data and so must change each relevant program in the ecosystem, those that read or write that portion of the data.
- the third challenge would be handled similarly.
- the unique aspects of the notion of a row spiff is (a) identifying portion(s) of the data that are processed in a unit and (b) changing the data so that it can be more efficiently manipulated in the program(s) that access this data.
- Query spiffs are a combination of query, table, and row invariants. The last two are dealt with above, while query invariants are found by Invariant Finder, as in this case they do not persist across rninidb executions, because the workload where queries come from is only read and could be used by several minidb incarnations (e.g., as parallelAccess is allowed).
- Program Interaction Deducer has two inputs: the Ecosystem Specification and the PR. While the Ecosystem Specification focuses on the programs mat read and manipulate the data, the Program Interactions produced focuses on what is done to files, in particular, where data structures within the programs are written to and read from files. To do so, the Program Interaction Deducer, or PID, analyzes file manipulation system calls, in particular, f open ( ) , f writ e ( ) , and remove ( ) . It uses as its starting point the ⁇ datafile> and ⁇ workload> specified by the Ecosystem Specification, in this case, table and workload (e.g., as shown in Example 6). (Note that PID also analyzes database, but figures out pretty quickly that this is a directory mat is only read by OpenTable().)
- the workload file is particularly easy to analyze.
- the Ecosystem Specification specifies that mis file is opened atGetNextCommand():13. (The file can also be read from stdin.)
- PID determines by analyzing the source code referenced by the specification:
- the Program Interactions Deducer thus outputs this determined information into the Program Interactions file, as shown in Example 7.
- the table file has more complex behavior.
- PID can also determine that the RowHeader data structure is
- PID can determine that character strings are
- PID The analysis performed by PID is thus to analyze how each program manipulates each file identified in the Ecosystem Specification, by following the values of variables of type FILE and observing:
- the Domain Assertion Deducer takes the per-execution behavior extracted by PID and stitches them together into a holistic understanding of how data flows from programs into files and then back into (perhaps subsequent executions of) programs, thereby computing invariant flows across program executions, something traditional compiler analysis cannot do.
- the Domain Assertion Deducer tool uses the PR, identified Invariants, and the Program Interactions to deduce the Domain Assertions.
- the Program Interactions imply which schema information is invariant.
- the Program Interactions is essential to understand where in the program(s) rows are created, accessed, updated, and deleted.
- Query spiffs can exploit schema, row, and workload- generated invariants, in conjunction with invariants of smaller scope that are within the purview of conventional compiler optimization techniques. Specifying Domain Specific Knowledge describes some of these computations in some detail. Then the Domain
- Assertion Deducer stitches together the Invariant Interval, following the values as they are read from and written to files, perhaps across multiple invocations of the program(s), to derive the complete lifetime of a value, which is then encoded in the Domain Assertions. If the Workloads are complete, that is, if they completely characterize the possible operations on the data, which can be the case in some batch applications, the Domain Assertion Deducer (DAD) can also deduce a restricted set of possible values for the invariant variable. It is precisely this information—Domain Assertions and perhaps a set of possible invariant values—that a conventional compiler does not have.
- field specialization makes use of information not generally available to a compiler. This information is of two forms: (i) domain-specific knowledge and (ii) extra-source knowledge. Both kinds of knowledge go beyond what a compiler can discover or conclude by just looking at the source code of a single program. Field specialization takes into account the much broader ecosystem of the program being specialized: what data will it read or manipulate, what programs will it invoke, what other programs will also read or manipulate this data, what operating system(s), network routers, and storage systems will be involved? This ecosystem provides a great deal of information that field specialization can exploit to increase the efficiency of the program (and its data) being specialized.
- domain-specific knowledge applies only to programs in a particular domain.
- An example of domain-specific knowledge is "all changes to a table's schema will be serializable.”
- the notion of serializability is a complex one that arose out of the database domain, though it is finding its way into other parallel and distributed information processing applications.
- Such knowledge allows creating table spiffs that speed up the DBMS, including indicating exactly where a table spiff should be created and where it should be destroyed.
- a second form of domain-specific knowledge is that of the workload of a program.
- An example is "OLAP (on-line analytical processing) applications exhibit little data volatility: (often complex) queries dominate during the day, with updates occurring infrequently, typically overnight.”
- Such information is of the form “this activity is more frequent than that other activity,” thus providing guidance to field specialization, allowing it to make better-informed decisions trading off work now that will speed up something else later on.
- extra-source knowledge is a particular portion of a file that is written to and read by only the one program will remain until either the code that modifies that portion or the code that deletes the file is executed. Such knowledge allows creating spiffs that speed up any program that processes an input file repeatedly.
- the domain-specific and extra-source knowledge is formalized, so that the Spiff Finder can read files containing domain assertions and extra-source assertions that state in a formal manner such knowledge.
- the Spiff Finder would then read the files comprising the DBMS source code (or more generally, the source code of any program in the domain described by the domain spec) and output the spiff invariants, for use by the SpiffMaker.
- Database table rows differ from schemas in that there are multiple rows per table but only one schema.
- num_columns stored in a file associated with a table; this value is initially written out to a file and subsequently read back in.
- the Program Interactions tells us that, as well as that various different values ofrow_data are written to the same file.
- the domain assertions generated by DAD differentiate rows with a keyword OFFSET on the left-hand-side of the function dependency, which indicates that the functional dependency holds only when the current position in the execution of the program witriin the indicated file to be read or written is a particular value.
- the DAD may even be able to tell mat case 'D' (a minidb command, which is interpreted in minidb 's implementation using a switch/case statement) moves data packets from one OFFSET to another within the file. It will be readily understood by those skilled in the relevant field that one need only to extend the domain assertion formalism to accommodate such moves.
- a row invariant has the same structure as a table schema invariant.
- each file written to or read from an application is considered to be composed of data packets, each of which is an external form of values in local variables of the program that are written and read as a unit.
- So minidb.c places in files first a schema data packet (including the value of table_header . num_columns) and then a sequence of row data packets (including the value of row_val lies).
- the workload that is, the queries
- the queries come from stdin, in which case no domain assertion can be deduced, because the user could type anything in.
- VFT the VFT to determine the (many) invariants active during a query, but that was already done by Invariant Finder, in a previous step.
- the second is when workload comes from a file, say as a file named in the invocation argument, in which case the domain assertion is essentially the same as that for a row invariant, in that it deals with the OF FSET.
- we use the name of the file to denote the actual file as the source of the workload.
- the second case may be used to specialize on a workload. Query spiff ids may then be put into the workload or as an association stored somewhere else, and used when that workload was executed.
- a query spiff that only includes invariants in effect during a query should be discoverable by an aggressive optimizing compiler. But more importantly, a query spiff combines such query invariants with schema and row invariants, which cannot be discovered by a compiler, because such schema and row invariants require knowledge about the semantics of file reads and writes. It's that aspect that makes a query spiff a true spiff.
- Trace partition elements come from program interactions: where data files or components of data files (here: table header and rows) are created, inserted, or deleted.
- the dependencies within domain assertions come from the directory and file name and optionally an OFFSET within the file.
- the Invariants tie these together, so that values of variables within the application can be seen to flow through the application code, out into a file, and later back into the application, thereby ascertaining long-lived invariants, for which candidate snippets and ultimately spiffs can be determined.
- DAD can determine that:
- DAD can generate the appropriate trace partition elements, that of the table ⁇ datafile> being created and deleted. DAD can also create the dependency concerning the table_header. num_columns.
- the relevant data packets are the row_data and row_values being added to the table ⁇ datafile>, perhaps deleted from that file, and mtimately removed when the file itself is deleted.
- DAD determines that once the file is created, the program may store multiple values ofrow_data into the file, thus each such packet can be identified by the OFFSET it resides at.
- DAD For each FILE that is created or opened by a program, DAD figures out where that file was initially created and where the name for that file comes from, via the VFT. Then, for each data structure that is stored in that file (these are the ⁇ data > elements in the Program Interactions), DAD ascertains the file operations performed on that data structure (adding that data structure to the file, possibly changing or removing that data structure, and finally deleting that file). These operations then imply the appropriate trace partition elements. Finally, from the program data structures used in these operations (the C or C++ program data structure written to the file), DAD can inspect the VFT to determine where the values in such program data structures originate, to imply the dependencies.
- DAD also determines whether a file contains only one data packet (as in the case ofnum_columns) or multiple packets (as in the case of row_data) by tracking what is done on each FILE variable as it flows through the program, also determinable via the VFT. Multiple packets require an OFFSET in domain trace partitions and dependencies.
- Snippet Finder takes as input:
- Snippet Finder outputs one or more ⁇ spiff > elements, each containing one or more Candidate Snippets, each of which contains:
- Each Domain Assertion implies an interval that is probably broader man just one program execution, in contrast to the interval recorded in Invariants, which has a scope within a single program execution.
- Snippet Finder uses Domain Assertions to expand the scope of the Invariants and to refine the set of possible values for each Invariant. The interval of each Invariant overlaps (either partially or entirely) the interval of the Candidate Snippet.
- the interval of each Candidate Snippet is tailored by the Cost Model, to minimize the size of the interval while maximizing the savings, calculated as the cost of executing an optimized version of the snippet times the number of times that snippet was evaluated, drawn from the Execution Summaries, plus the cost of invoking a spiff.
- the Snippet Finder must have an idea of the possible optimizations that the Spiff Maker performs and the benefit of each such optimization, the latter from the Cost Model.
- Snippet Finder uses the Invariants, not from the Domain Assertions, as queries usually do not persist (though see the discussion above about Workloads being given to stdin).
- Spiff Maker needs explicit guidance from the Ecosystem Specification as to where the boundary is between compiling spiff code and just instantiating a spiff instance at run time.
- query.executor_routine query.executor_command
- query. num_predicates query.predicate_list
- predicates[] read from stdin and query. schema from the table spiff use case
- query.executor_routine is always SequentialScan()
- query.executor_command is always SCAN_FWD.
- column_id is an arbitrary int read from stdin (deduced from the assignment to that field in BuildPredicates())
- constant_operand is an unsigned long read from stdin
- operator_function is either &EqualInt4or&LessThanInt8, ⁇ the source location(s) where the value of each invariant was first determined: the value of query is determined by main ( ) : 32, that is, right after the call to BuildAndPlanQueryO.
- Snippet Finder first expands invariants to across program executions by tracking which variables are read from files and where those values are put into files. This results in invariant intervals that span multiple executions. The tool also needs to track when the value was first written to the file and when it is deleted.
- the other challenge to Snippet Finder is in bounding the snippets, using the Cost Model. In doing so, the tool needs to know what optimizations Spiff Maker can effect, and under what conditions each optimization is feasible.
- ⁇ the snippets that are returned are the most desirable, given the cost model, ⁇ the snippets be maximal, in that making them larger would result in a larger cost, from the cost model,
- Spiff Maker takes as input one or more Candidate Snippets and a PR, and produces as output Specialized Source Code.
- Spiff Maker For each input Candidate Snippet, Spiff Maker should perform the following tasks:
- Each use case is associated with a specified branch of minidb, for concreteness.
- Each branch includes the Candidate Snippet that causes the generation of that configuration.
- TXL it may be convenient to use TXL for the actual transformation, as a PR-to-PR transformation, with the transformed PEs, then converted back into textual source code to create the spiff.
- TXL includes a parser, but it may be possible to take PEs directly.
- TXL also includes a syntax tree unparser which may work with our PEs.
- Spiff Maker For Spiff Maker to function as described, it may require some guidance based on domain knowledge. Specifically, Spiff Maker may need to be given/told:
- Spiff Maker will be told all of the above in the input file. It's Snippet Finder's job to figure out how many static implementations to create, whether it should be static/dynamic, which variables are specialized and which are not, and so on. There will only be a single static implementation to create, and that single static implementation is always the one that should be called.
- Example 13 the input is as follows, indicating compile-time query spiff for executor_command as SCAN_FWD, for num_predicates from 1 to 6, and for each such predicate, operator_function is either &EqualInt4 or &LessThanInt8, as specified by Snippet Finder.
- Spiff Maker needs explicit guidance from the Ecosystem Specification as to where the boundary is between compiling spiff code and just instantiating a spiff instance at runtime.
- Ecosystem Specification specifies that that bound occurs at the 'S', ' ⁇ , and 'D' cases: that no spiffs can be compiled within anything called by these three cases. (That emphasizes knowledge about what delays users will find tolerable.
- Spiff Maker thus makes a spiff for a portion of SequentialScan ( ) , one for each value of num_columns at compile-time, for query .
- executor_command always being SCAN_FWD.
- column_id is an arbitrary int
- constant_operand is an unsigned long read from stdin
- operator_f unction is either &EqualInt4 or &LessThanInt8, with spiff 0 a non-specialized version that can handle any number of num_columns.
- the relevant transformations are loop unrolling and constant folding.
- query spiffs ID computation is normally associated with the particular values of the spiff pattern parameter.
- Spiff Maker should utilize an application-specific ID generation mechanism to produce the proper spifflD. In this example however, we are going to assume a computed spifflD of 23.
- Spiff Maker decides only one thing: whether to allow the compiler to perform the optimization, after Spiff Maker has indicated what the invariant value(s) are, or to perform the optimization manually, by generating different code.
- Spiff Maker then cobbles together the generated files by copying mostly verbatim from the original source to the specialized source, using the file names, line numbers, and column counts within the relevant PEs to determine the extent of what is copied and of what is replaced say with a spiff parameter (e.g., num_columns).
- a spiff parameter e.g., num_columns.
- Invariant Finder should identify the following Invariant Interval Sets for the SequentialScanQ : : schema->num_columns variable:
- main() : :table_header->num_columns was assigned to on line 634, and mat the value of mis variable was never changed through the particular end node(s) taken by that execution of the given Workload.
- the Invariant Checker could check to ensure that the actual value was included in the Possible Values. That might be able to reduce the scope of the Invariant Finder, by focusing that analysis on particular values or variables.
- Snippet Finder should deterrnine, through an analysis of the Execution Summaries in conjunction with the Cost Model, that the 'C, ⁇ ', and 'D' cases are too expensive to create spiffs, but that the computation time within the 'S' case is sufficient to suggest that that case be specialized.
- Snippet Finder should then infer from the domain assertion that schema->num_columns is invariant across the body ofSequentialScan() with a scope of when the data file was created to when that file was removed, thus indicating that the value of that variable was first written to the file when the number of columns is stored, in Writ eTableHeader ( ) : 3, which is executed shortly after minidb.c:553. The value was never removed from the file, but the file itself was removed at main ( ) : 57. This indicates that the spiff can be created at compile-time. The snippet should extend from
- the spiff will have but one spiff function, indicated by the ⁇ snippet>, as shown in Example 14.
- Snippet Finder could infer from the domain assertion that data packets are created in cases ' ⁇ and 'D' ofmain() and removed is cases 'P' and 'D'. More specifically, Snippet Finder infers:
- Example 15 note that the analysis combines the broader scope of the table invariant with the narrower scope of the row invariant, and employs different strategies for each: the former allows generating code when the table spiff is defined, whereas the latter involves instantiating the spiff at runtime by providing value(s) for the row_values array.
- the schema invariants will play a large roll in table spiff instances and query spiffs, which involve invariants of successively narrower scope
- Variant 1 A single static implementation:
- Variant 3 Employing fixed array of implementations:
- each column in a table can be of a particular datatype. Assuming there are eight datatypes (int2, int4, char, varchar, etc), a static table spiff for a three-column table requires possible implementations. Hence, a dynamic table spiff is more suitable in
- the candidate snippet given below states this with the c reat eAt attribute, which here specifies where in the application the spiff is created, that is, within the Creat eTable ( ) function (the c reat eAt attribute, which in the previous example was compileTime) as well as where the spiff is to be instantiated, that is, within the Creat eTable ( ) function (the c reat eAt attribute, which in the previous example was compileTime) as well as where the spiff is to be instantiated, that is, within the
- OpenTable ( ) function (the instantiateAt attribute). There are no f romValue or toValue attributes in the invariantlntervalSet element, as the num_columns value is supplied when the snippet is instantiated.
- the one other important difference from the previous example is the additional optimization suggestion to constant fold on
- a dynamic spiff is created at runtime by inserting a call to compile the spiff into CreateTable ( ) , for a table spiff.
- predicates are normally represented in a linked list. ExecQual ( ) iterates through this list and invoke particular evaluation function corresponding to each individual predicate.
- the code excerpt presented in Example 20 (from PG 9.3 stock,
- the per-predicate evaluation function is stored within the clause variable. For each predicate, in the form of a > b, there are three components, operand #1 , an operator, and operand #2.
- the operator is evaluated by function ExecEvalOper. This function (see Example 21) essentially performs a look up according to the type of operator and fetches the address of the actual type-specific comparison function.
- ExecEvalOper( ) also requires that the operands to be stored in another linked list. In many cases, the length of this list is two. Below is an example to specialize this function on those cases.
- ExecEvalOper ( ) is executed just once to perform the comparison function look up. It then stores into xprstate. evalfunc a different function. It also calls that function once to do the predicate. Subsequent evaluations of the operator is done by ExecMakeFunctionResultNoSets ( ) (for scalar predicates considered within our current specialization scope).
- ExecMakeFunctionResultNoSets ( ) then iterates through the list of operands by calling the argument-extraction function for each operand.
- ExecEvalExpr is a macro, defined in src/include/executor/executor.h:72 as:
- the bottlenecks observed in predicate evaluation are, first, the loop that iterates through just two elements in the operand list, and second, the extraction of individual operands.
- one operand is normally a table column and the other operand is a constant.
- the constant's value (or address) can be directly "stored" in the code rather than having to invoke multiple functions to fetch it.
- the original implementation requires multiple function calls to extract the column ID for the table-originated operand. Similarly, this column ID can be stored directly into the specialized code.
- both operands are non-constant.
- the origin of an operand can be of one of three types, that ofINNER_VAR (I), 0UTER_VAR (O), and scantuple (S).
- the origin of the operand is also an invariant given a query. By knowing this invariant, we can further simplify the routine that extracts the actual operand's value. Note that although theoretically, there are 9 possible combinations for the origins of the two operands, in reality, only the following combinations are allowed.
- ExecHashJoin() defined in file src/backend/executor/nodeHashjoin.c.
- the variable is invariant for a given query. Depending on the query, it will take on one value from the set
- variable List *joinqual is also invariant for a given query.
- Hashjoin Query Spiff eliminates entire branches in the code, thereby reducing the number of if statements and, more importantly, the size of the code.
- a page spiff utilizes invariant(s) within a disk/memory page with which the DBMS manages its storage of data. Often, such invariants could include the number of rows stored on the page, the free space remained, and whether the page is empty or full. In postgres' page-scan routines, there are additional invariants, such as the scan direction and scan mode (pageatatime).
- page spiffs can enable more aggressive optimizations. For instance, a page spiff can reorganize the data layout once the page is read into memory to optimize data locality. In addition, once data layout is changed, instead of following the existing function-call sequence in further process, the page spiff can invoke these calls in a block-at-a-time manner, thereby improving instruction locality as well.
- a page spiff is possible to specialize a long sequence of calls that eventually access data, passing up the data a ways, where it is possible to specialize out a lot of code in the called functions.
- Eager partial unpacking have the code that calls the specialized code compute the maximum column that will be needed, and only unpack the columns up to there.
- a variant of this uses the selectivity of the select to decide. If the selectivity is high, meaning that only a few rows will be referenced, use lazy unpacking before applying the predicate. In general, it is best to place the call to GetColumnsToLong() such that the execution can maximize instruction cache locality.
- Aggregate spiffs are designed to improve the efficiency of the SUM andAVG aggregate functions.
- Postgres incurs a significant overhead in performing memory allocation and deallocation.
- aggregate spiffs avoid such memory-management overheads.
- numeric type In Postgres, a numeric type is represented by a byte string, with each digits stored in an array ofNumericDigit . This representation allows very fine precision control but sacrifices performance by needing to perform essentially string-based arithmetic operations.
- the reason of having to perform per-row based memory allocation is that for each input row, the number of digits present in the value for each row can differ. Especially in evaluating a * b, the resulting value's range can go far beyond that of the input values. Nevertheless, there is a constant
- NUMERIC_MAX_PRECISION in Postgres that defines the max number of digits that can be supported for a numeric value.
- the aggregate spiffs utilize this value to slab-allocate a spiff data section, which is then reused by computing the corresponding aggregate function across all the input rows, thereby eliminating per-row memory allocation.
- an aggregate function consists of two steps. For instance, given an aggregate function SUM(a + b) , the first step is to evaluate the result of expression a + b. The second step is then to accumulate the values ofa + b for all the input rows. In PostgreSQL both a + b and the SUM() function are evaluated using the numeric_add() function. This function takes two inputs. In the case ofa + b, the two inputs are a and b, respectively. In the case of computing SUM(x), the second input is the x, which can essentially come from a scanned row. The first input is a transition value, which is the current sum of the rows that have been processed up to this point.
- numeric_add() the two inputs are added and the resulting value is copied into the returning res variable allocated by make_result(). res is then returned back to advance_transition_function() within nodeAgg.c, which copies this returned value into pergroupstate->transValue and then frees the returned value.
- advance_transition_function() is executed to process the next row, the transvalue is copied to the first input value ofnumeric_add( ) via the following snippet.
- fcinfo->argnull[0] pergroupstate->transValueIsNull; This logic indicates that transValue can in fact be shared without being freed across all the rows. Therefore, for the data section of the EvaluateNumericAdd spiff, at the beginning of the aggregate evaluation, the necessary variables are allocated, namely agg_temp_values->result_value and agg_temp_values-> result_arg, by using AllocateAggTempValues(). (Note that these two variables represent the same value but Postgres requires two such variables as the return value and as a temporary computation argument, respectively.)
- numeric_add() is in computing arithmetic expression, such as a + b.
- the variable that stores the evaluation result of the expression are reused, which is previously allocated by make_result() .
- This variable is added to the spiffs data section as agg_temp_values->expr_result_arg.
- both inputs in evaluating a + b are regular variables that are required to be obtained using existing Postgres' implementation.
- numeric_add() is invoked from ExecEvalOper() within execQualc. So similar to the predicate spiff, a spiff
- ExecMakeFunctionResultNoSets() function. This spiff then invokes the expression- evaluation version of the EvaluateNumericAdd spiff.
- an expression can include other operations such as -, *, and /.
- the functions that evaluate these operations are also specialized in the same fashion as numeric_add().
- the result value's memory location can be invariant.
- both the result value's memory location and the first input's memory location can be invariant. In addition, these two variables can even share the same memory location.
- Each of these speccodes would assume that there are more characters in the string left to match after it has completed. Once one of the speccodes has finished matching, it would pass the rest of the string on to the next speccode in the sequence to continue the matching process. Matching the constant portions of the string would be accomplished using a combination of longlong, long, short, and char combos.
- Example 23 shows an example of how this would be implemented for the string "%abc%def g%" (using pseudocode).
- Constant portions of length greater than 32 could be broken up into segments, so a string of length 65 would require three instantiated speccodes, of32, 32, and 1 character.
- Per-Query Spiff Sequencing uses a nieta-spiff to traverse an interpreted data structure and hot swapping to convert existing speccode into something similar that would be emitted by a compiler.
- the hot-swapping mechanism is used to turn switch/case blocks into specialized code that can be stitched together at runtime, according to the relationships among various cases. Specifically, when a case is followed by another particular case during execution. Hot-swapping will replace the calls to the branch-based dispatcher to direct jumps to the target branch. This applies to general dispatcher and the interpretive execution model. Instead of interpreting query plans and invoke corresponding plan-node specific functions, all dispatcher calls can be replaced by direct jumps to the child plan node, given a plan tree.
- speccode When the specialization is invoked, a specialized code (speccode) is generated and may be stored in various locations along the field specialization process. For example, speccodes may involve invariants both from the oil field data 220 and the oil field simulator 230. Speccodes may involve invariants both from the config params 210 and the oil field simulator 230. In some embodiments, speccode may be stored in the Linux operating system 230 may involve invariants from the simulator and oil field data. In some embodiments, speccode may be stored in an external router or an external cloud service.
- the speccode stored within the simulator may be originating from the oil field data and from the simulator, and may be identified through basic field specialization. Other spiffs are stored with the operating system, router, and cloud, specializing code found in the indicated applications. In some embodiments, speccodes may flow from where they are stored to where they may be invoked (the application that provided the specialization candidate from which they were subsequently specialized). For example, the oil field data may store speccodes to be invoked at the external the router. In some embodiments, speccode identifiers can reside with data or with applications and can also be included in communications with subsequent applications, indicating the relevant speccode to (later) invoke.
- FIG. 3 is an illustration of Field specialization for elaboration a paradigm of computer science with an exemplary embodiment provided by this disclosure.
- the diagram comprises four quadrants 310, 320, 330 and 340 for scenarios of data representing as data, code representing as data, data representing as code, and code representing as code, respectively.
- quadrant 310 in Figure 3 data represented in binary format in a computer memory or storage device, that is, data stored as data, and source code represented in some other way (e.g., patch cords), that is, code represented as code.
- John von Neumann proposed a revolutionary architecture that stored the program in machine code in the computer's memory as numbers, mixing code and data. (Indeed, the code can be manipulated as data, and even changed during the running of the program.) This architecture is represented in quadrant 320, with code (machine instructions) represented as data.
- Postscript is produced by a formatter, taking a document such as a Microsoft Word file, which is data, and converting to a program, again, code as data, as represented in quadrant 320.
- the Postscript file produced from the Microsoft Word file is not an image to be directly printed, but instructions for drawing each letter of the document, so that that program could be executed, for example, within a postscript printer or by a postscript conversion program, to produce a bit-mapped image of the document.
- Field specialization takes this idea further.
- Field specialization takes the values of invariants, that is, data, and uses these values to create a specialized code version of a portion of an application, such as a DBMS, which is code that can be executed.
- a relation speccode is the result of specializing DBMS code using the schema of a relation (data).
- a tuple speccode is the result of using the data values within a tuple (row of a table).
- An O/S speccode is a specialization of a snippet of an operating system based on particular data values of particular invariants within that snippet; ditto for router speccodes.
- This data-represented-as-code (as represented in quadrant 330) can be created in one application from a snippet in that application or another application, passed around between applications, and invoked by the target application when appropriate.
- the field specialization technology provides the means for identifying when such speccode are effective in increasing performance, when they should be created, with which invariants should they be specialized upon, how they can be communicated across applications, and when they should be invoked.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Operations Research (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
Description
Claims
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201562142325P | 2015-04-02 | 2015-04-02 | |
| US201514968827A | 2015-12-14 | 2015-12-14 | |
| PCT/US2016/025295 WO2016161130A1 (en) | 2015-04-02 | 2016-03-31 | Field specialization systems and methods for improving program performance |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| EP3278218A1 true EP3278218A1 (en) | 2018-02-07 |
| EP3278218A4 EP3278218A4 (en) | 2018-09-05 |
Family
ID=57005384
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| EP16774209.7A Withdrawn EP3278218A4 (en) | 2015-04-02 | 2016-03-31 | Field specialization systems and methods for improving program performance |
Country Status (5)
| Country | Link |
|---|---|
| EP (1) | EP3278218A4 (en) |
| JP (1) | JP2018510445A (en) |
| CN (1) | CN107851003A (en) |
| CA (1) | CA2980333A1 (en) |
| WO (1) | WO2016161130A1 (en) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US11138018B2 (en) | 2018-12-14 | 2021-10-05 | Nvidia Corporation | Optimizing execution of computer programs using piecemeal profiles |
Families Citing this family (11)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US10365900B2 (en) | 2011-12-23 | 2019-07-30 | Dataware Ventures, Llc | Broadening field specialization |
| US10733099B2 (en) | 2015-12-14 | 2020-08-04 | Arizona Board Of Regents On Behalf Of The University Of Arizona | Broadening field specialization |
| WO2018237342A1 (en) * | 2017-06-22 | 2018-12-27 | Dataware Ventures, Llc | FIELD SPECIALIZATION TO REDUCE MEMORY ACCESS BLOCKAGES AND ALLOCATION REQUESTS IN HIGH VOLUME DATA APPLICATIONS |
| CN109726213B (en) * | 2018-12-10 | 2021-11-19 | 阿里巴巴(中国)有限公司 | Program code conversion method, device, medium and computing equipment |
| US11714616B2 (en) * | 2019-06-28 | 2023-08-01 | Microsoft Technology Licensing, Llc | Compilation and execution of source code as services |
| CN110737409B (en) * | 2019-10-21 | 2023-09-26 | 网易(杭州)网络有限公司 | Data loading method and device and terminal equipment |
| CN113836164B (en) * | 2020-06-24 | 2025-10-31 | 中兴通讯股份有限公司 | Unified SQL method, system, equipment and medium |
| CN112083931A (en) * | 2020-09-15 | 2020-12-15 | 上海眼控科技股份有限公司 | Program processing method, device and equipment |
| CN112346730B (en) * | 2020-11-04 | 2021-08-27 | 星环信息科技(上海)股份有限公司 | Intermediate representation generation method, computer equipment and storage medium |
| TWI806192B (en) * | 2021-10-13 | 2023-06-21 | 緯創資通股份有限公司 | Artificial intelligence planning method and artificial intelligence planning device |
| CN114117190B (en) * | 2021-11-24 | 2026-02-06 | 京东方科技集团股份有限公司 | Data processing method and device, storage medium and electronic equipment |
Family Cites Families (14)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS62274433A (en) * | 1986-05-23 | 1987-11-28 | Fujitsu Ltd | Partial compiling system for relational data base control system |
| US5202995A (en) * | 1989-10-12 | 1993-04-13 | International Business Machines Corporation | Method for removing invariant branches from instruction loops of a computer program |
| JPH07234793A (en) * | 1994-02-24 | 1995-09-05 | Fujitsu Ltd | Conditional branch optimization device |
| US5768577A (en) * | 1994-09-29 | 1998-06-16 | International Business Machines Corporation | Performance optimization in a heterogeneous, distributed database environment |
| JPH09190349A (en) * | 1996-01-10 | 1997-07-22 | Sony Corp | Calculation method and calculation device |
| JPH10320211A (en) * | 1997-05-15 | 1998-12-04 | Fujitsu Ltd | Compiler and recording medium recording the program |
| JP3225940B2 (en) * | 1998-12-24 | 2001-11-05 | 日本電気株式会社 | Program optimization method and apparatus |
| US7039909B2 (en) * | 2001-09-29 | 2006-05-02 | Intel Corporation | Method and apparatus for performing compiler transformation of software code using fastforward regions and value specialization |
| US7254810B2 (en) * | 2002-04-18 | 2007-08-07 | International Business Machines Corporation | Apparatus and method for using database knowledge to optimize a computer program |
| JP2004145589A (en) * | 2002-10-24 | 2004-05-20 | Renesas Technology Corp | Compiler capable of suppressing optimization of global variable |
| US7805456B2 (en) * | 2007-02-05 | 2010-09-28 | Microsoft Corporation | Query pattern to enable type flow of element types |
| US8793240B2 (en) * | 2011-08-26 | 2014-07-29 | Oracle International Corporation | Generation of machine code for a database statement by specialization of interpreter code |
| EP2795484A4 (en) * | 2011-12-23 | 2015-11-11 | Univ Arizona State | METHODS OF MICRO-SPECIALIZATION IN DATABASE MANAGEMENT SYSTEMS |
| CN104252536B (en) * | 2014-09-16 | 2017-12-08 | 福建新大陆软件工程有限公司 | A kind of internet log data query method and device based on hbase |
-
2016
- 2016-03-31 JP JP2018502613A patent/JP2018510445A/en active Pending
- 2016-03-31 CN CN201680020066.4A patent/CN107851003A/en active Pending
- 2016-03-31 EP EP16774209.7A patent/EP3278218A4/en not_active Withdrawn
- 2016-03-31 CA CA2980333A patent/CA2980333A1/en not_active Abandoned
- 2016-03-31 WO PCT/US2016/025295 patent/WO2016161130A1/en not_active Ceased
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US11138018B2 (en) | 2018-12-14 | 2021-10-05 | Nvidia Corporation | Optimizing execution of computer programs using piecemeal profiles |
Also Published As
| Publication number | Publication date |
|---|---|
| JP2018510445A (en) | 2018-04-12 |
| CA2980333A1 (en) | 2016-10-06 |
| CN107851003A (en) | 2018-03-27 |
| EP3278218A4 (en) | 2018-09-05 |
| WO2016161130A1 (en) | 2016-10-06 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP7090778B2 (en) | Impact analysis | |
| WO2016161130A1 (en) | Field specialization systems and methods for improving program performance | |
| Jones et al. | Playing by the rules: rewriting as a practical optimisation technique in GHC | |
| Furr et al. | Static type inference for Ruby | |
| Inverso et al. | Lazy-cseq: A context-bounded model checking tool for multi-threaded c-programs | |
| Hall | Managing interprocedural optimization | |
| Lhoták | Program analysis using binary decision diagrams | |
| Cogumbreiro et al. | Checking data-race freedom of GPU kernels, compositionally | |
| Valente et al. | A semi-automatic approach for extracting software product lines | |
| Weijiang et al. | Tree dependence analysis | |
| Cogumbreiro et al. | Memory access protocols: certified data-race freedom for GPU kernels | |
| Cheney et al. | Database queries that explain their work | |
| US9766926B2 (en) | Method and system for optimizing parallel program execution based on speculation that an object written to is not shared | |
| Holík et al. | Effect Summaries for Thread-Modular Analysis: Sound Analysis Despite an Unsound Heuristic | |
| Herdt et al. | Combining sequentialization-based verification of multi-threaded C programs with symbolic Partial Order Reduction: V. Herdt et al. | |
| Jakobsson | Automatic cost analysis for imperative BSP programs | |
| Girka et al. | A mechanically checked generation of correlating programs directed by structured syntactic differences | |
| US20120330878A1 (en) | Conventions for inferring data models | |
| de Putter et al. | Lock and fence when needed: state space exploration+ static analysis= improved fence and lock insertion | |
| Park et al. | Procanalyzer: Effective code analyzer for tuning imperative programs in sap hana | |
| Grabmüller | Constraint-imperative Programmierung | |
| Volanschi et al. | The impact of generic data structures: decoding the role of lists in the linux kernel | |
| Kim | Analyzing and inferring the structure of code change | |
| van de Wall et al. | Fully compiled execution of conjunctive graph queries | |
| Adam et al. | Ohua-powered, Semi-transparent UDF’s in the Noria Database |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PUAI | Public reference made under article 153(3) epc to a published international application that has entered the european phase |
Free format text: ORIGINAL CODE: 0009012 |
|
| 17P | Request for examination filed |
Effective date: 20171012 |
|
| AK | Designated contracting states |
Kind code of ref document: A1 Designated state(s): AL AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HR HU IE IS IT LI LT LU LV MC MK MT NL NO PL PT RO RS SE SI SK SM TR |
|
| AX | Request for extension of the european patent |
Extension state: BA ME |
|
| DAV | Request for validation of the european patent (deleted) | ||
| DAX | Request for extension of the european patent (deleted) | ||
| A4 | Supplementary search report drawn up and despatched |
Effective date: 20180803 |
|
| RIC1 | Information provided on ipc code assigned before grant |
Ipc: G06F 8/41 20180101ALI20180730BHEP Ipc: G06F 17/30 20060101AFI20180730BHEP |
|
| RIC1 | Information provided on ipc code assigned before grant |
Ipc: G06F 17/30 20060101AFI20180730BHEP Ipc: G06F 8/41 20180101ALI20180730BHEP |
|
| 17Q | First examination report despatched |
Effective date: 20200114 |
|
| STAA | Information on the status of an ep patent application or granted ep patent |
Free format text: STATUS: THE APPLICATION IS DEEMED TO BE WITHDRAWN |
|
| 18D | Application deemed to be withdrawn |
Effective date: 20200603 |