CN104657257B - Pointer analysis method and device - Google Patents

Pointer analysis method and device Download PDF

Info

Publication number
CN104657257B
CN104657257B CN201310589292.2A CN201310589292A CN104657257B CN 104657257 B CN104657257 B CN 104657257B CN 201310589292 A CN201310589292 A CN 201310589292A CN 104657257 B CN104657257 B CN 104657257B
Authority
CN
China
Prior art keywords
program
shared
sharing
thread
pointer
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.)
Expired - Fee Related
Application number
CN201310589292.2A
Other languages
Chinese (zh)
Other versions
CN104657257A (en
Inventor
陈聪明
霍玮
李丰
冯晓兵
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Institute of Computing Technology of CAS
Original Assignee
Huawei Technologies Co Ltd
Institute of Computing Technology of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd, Institute of Computing Technology of CAS filed Critical Huawei Technologies Co Ltd
Priority to CN201310589292.2A priority Critical patent/CN104657257B/en
Publication of CN104657257A publication Critical patent/CN104657257A/en
Application granted granted Critical
Publication of CN104657257B publication Critical patent/CN104657257B/en
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

The embodiment of the present invention provides a kind of pointer analysis method and device.Pointer analysis method provided by the invention, including:Read the sentence information in multithread programs to be analyzed;Pointer analysis is carried out to described program according to the sentence information of described program, obtains the shared information of described program, the shared information includes shared amount, pointer points to collection and memory access behavior, wherein, shared amount includes globally shared amount and local shared amount;Analysis is compensated to the shared amount according to the shared information of described program.The embodiment of the present invention solves the globally shared amount being limited only in the prior art to the pointer analysis of multithread programs in program, and the incomplete problem of analysis result improves the precision of pointer analysis, and correspondingly improves the practical range and effect of program optimization.

Description

Pointer analysis method and device
Technical Field
The embodiment of the invention relates to computer technology, in particular to a pointer analysis method and device.
Background
Along with the popularization of computers, computer software is more and more complex, the types of program statements used in the computer software are more flexible and richer, and the commonly used C and C + + program statements are taken as examples for illustration, and the use of pointers in the program statements is more and more extensive. The use of pointer statements is an important factor for determining that the program has excellent running performance after being compiled and optimized, and therefore, the compiling and optimizing of the program are based on the analysis of the pointers in the program statements.
Analysis of a pointer generally refers to analysis of the pointer variable properties and set of pointers. At present, when pointer analysis is carried out, a Flow-Sensitive and Context-Sensitive (FSCS) analysis method with higher precision is generally used, but the method is not suitable for a multi-thread program when being directly used. A visual pointer analysis aiming at a multithread program can obtain the interaction influence of a global shared quantity on different threads in a parallel region of the program by performing pointer analysis on a global variable; specifically, a pointer pointing set of the global sharing quantity at each program point, an interaction pointing set among threads and a newly added pointing edge in a pointing graph after the execution of the current program statement are analyzed.
In the prior art, the pointer analysis method for the statements of the multi-thread program only considers the interaction influence of the global sharing quantity on the threads in the parallel area of the program, so that the sharing quantity for pointer analysis is only limited to the global sharing quantity in the program, the range of the sharing quantity in the program which is the object of the pointer analysis is reduced, and the precision of the pointer analysis is reduced.
Disclosure of Invention
The embodiment of the invention provides a pointer analysis method and device, and aims to solve the problems that in the prior art, pointer analysis of a multi-thread program is only limited to global sharing quantity in the program, and an analysis result is incomplete.
In a first aspect, an embodiment of the present invention provides a pointer analysis method, including:
reading statement information in a multithreading program to be analyzed;
performing pointer analysis on the program according to statement information of the program to obtain shared information of the program, wherein the shared information comprises a shared quantity, a pointer pointing set and an access behavior, and the shared quantity comprises a global shared quantity and a local shared quantity;
and performing compensation analysis on the sharing amount according to the sharing information of the program.
In a first possible implementation manner of the first aspect, the performing, according to statement information of the program, pointer analysis on the program to obtain shared information of the program includes:
analyzing the program according to a global sharing judgment rule to obtain a global sharing amount in the program;
and performing pointer analysis on each thread in the program to obtain a pointer pointing set, a local sharing quantity and a memory access behavior corresponding to the sharing quantity in each thread.
According to a first possible implementation manner of the first aspect, in a second possible implementation manner, the global sharing judgment rule includes:
if a variable can be accessed by at least two threads in a program at the same time, the variable is a global shared quantity.
According to the first or second possible implementation manner of the first aspect, in a third possible implementation manner, the performing a pointer analysis on each thread in the program to obtain a pointer pointing set, a local share volume, and an access behavior corresponding to the share volume in each thread includes:
performing pointer analysis on each thread in the program to obtain a pointer pointing set in each thread;
analyzing each thread according to the global sharing quantity, the pointer direction set and the local sharing judgment rule to obtain the local sharing quantity in each thread;
and analyzing each thread according to the global sharing quantity, the local sharing quantity and the pointer pointing set to obtain a memory access behavior corresponding to the sharing quantity.
According to a third possible implementation manner of the first aspect, in a fourth possible implementation manner, the local sharing determination rule includes:
if a variable in a given thread can be accessed by other threads as an entry parameter of a certain thread in the program, the variable is a local shared quantity; or,
if the variable in a given thread can be accessed by other threads in a mode of indirect reference by the global shared quantity, the variable is the local shared quantity; or,
if the variable in a given thread can be assigned through the global shared quantity, so that the pointing set of the variable comprises the global shared quantity, the variable is the local shared quantity.
According to a third possible implementation manner or a fourth possible implementation manner of the first aspect, in a fifth possible implementation manner, the analyzing each thread according to the global share amount, the pointer direction set, and the local share determination rule to obtain the local share amount in each thread includes:
acquiring local variables which are possibly escaped in each thread according to the global sharing quantity, the pointer direction set and the local sharing identification rule;
and determining the local variables which are acquired from the possible escape local variables and are possibly used by other threads as local shared quantities according to the possible escape local variables and the shared propagation rules.
According to the first aspect and any one of the first to fifth possible implementation manners of the first aspect, in a sixth possible implementation manner, before performing compensation analysis on each shared quantity according to the shared information of the program, the method further includes:
generating a parallel control flow graph according to statement information of the program;
generating a sharing amount memory access graph SAG aiming at the program according to the parallel control flow graph and the sharing information;
the compensation analysis of the sharing amount according to the sharing information of the program comprises:
and performing compensation analysis on the sharing amount according to the SAG.
In a seventh possible implementation form of the method according to the first aspect as such or any one of the first to sixth possible implementation forms of the first aspect, the shared quantity has corresponding pairs of fixed-value points and reference points; the compensation analysis of the sharing amount according to the sharing information of the program comprises:
obtaining the sharing quantity which can be mutually influenced between the fixed point and the reference point pair according to a propagation judgment rule;
propagating pointers to sets of said definite points for shared quantities that may affect each other between said definite points and pairs of reference points to corresponding reference points.
According to the first aspect and any one of the first to seventh possible implementation manners of the first aspect, in an eighth possible implementation manner, before the reading statement information in the multi-thread program to be analyzed, the method further includes:
receiving a pointer analysis instruction sent by a user;
the reading of statement information in a multithread program to be analyzed includes:
and reading statement information in the multithreading program to be analyzed according to the pointer analysis instruction.
According to the first aspect and any one of the first to eighth possible implementation manners of the first aspect, in a ninth possible implementation manner, after performing compensation analysis on the shared amount according to the shared information of the program, the method further includes:
and optimizing the program by adopting the result of the compensation analysis.
In a second aspect, an embodiment of the present invention provides a pointer analysis apparatus, including:
the reading module is used for reading statement information in the multithreading program to be analyzed;
the pointer analysis module is used for carrying out pointer analysis on the program according to the statement information of the program read by the reading module to obtain shared information of the program, wherein the shared information comprises a shared quantity, a pointer pointing set and an access and storage behavior, and the shared quantity comprises a global shared quantity and a local shared quantity;
and the compensation analysis module is used for performing compensation analysis on the sharing amount according to the sharing information of the program obtained by the pointer analysis module.
In a first possible implementation manner of the second aspect, the pointer analysis module includes:
the program analysis unit is used for analyzing the program according to a global sharing judgment rule to obtain a global sharing amount in the program;
and the thread analysis unit is used for carrying out pointer analysis on each thread in the program to obtain a pointer pointing set, a local sharing quantity and a memory access behavior corresponding to the sharing quantity in each thread.
According to a first possible implementation manner of the second aspect, in a second possible implementation manner, the global sharing judgment rule includes:
if a variable can be accessed by at least two threads in a program at the same time, the variable is a global shared quantity.
According to the first or second possible implementation manner of the second aspect, in a third possible implementation manner, the thread analysis unit is specifically configured to perform pointer analysis on each thread in the program to obtain a pointer pointing set in each thread; analyzing each thread according to the global sharing quantity, the pointer direction set and the local sharing judgment rule to obtain the local sharing quantity in each thread; and analyzing each thread according to the global sharing quantity, the local sharing quantity and the pointer pointing set to obtain the access and storage behaviors corresponding to the sharing quantity.
According to a third possible implementation manner of the second aspect, in a fourth possible implementation manner, the local sharing judgment rule includes:
if a variable in a given thread can be accessed by other threads as an entry parameter of a certain thread in the program, the variable is a local shared quantity; or,
if the variable in a given thread can be accessed by other threads in a mode of indirect reference by the global shared quantity, the variable is the local shared quantity; or,
if the variable in a given thread can be assigned through the global shared quantity, so that the pointing set of the variable comprises the global shared quantity, the variable is the local shared quantity.
According to a third possible implementation manner or a fourth possible implementation manner of the second aspect, in a fifth possible implementation manner, the thread analysis unit is configured to analyze each thread according to the global sharing amount, the pointer direction set, and the local sharing judgment rule to obtain the local sharing amount in each thread, and specifically includes:
the local variables which are possibly escaped in each thread are obtained according to the global sharing quantity, the pointer direction set and the local sharing identification rule;
and determining the local variables which are acquired from the possible escape local variables and are possibly used by other threads as local shared quantities according to the possible escape local variables and the shared propagation rules.
According to the second aspect and any one of the first to fifth possible implementation manners of the second aspect, in a sixth possible implementation manner, the apparatus further includes: the image generation module is used for generating a parallel control flow graph according to statement information of the program before the compensation analysis module carries out compensation analysis on each sharing quantity according to the sharing information of the program obtained by the pointer analysis module; and generating a shared amount access map SAG aiming at the program according to the parallel control flow graph and the shared information;
the compensation analysis module is specifically configured to perform compensation analysis on the share amount according to the SAG generated by the image generation module.
In a seventh possible implementation form of the method according to the second aspect as well as any of the first to sixth possible implementation forms of the second aspect, the shared quantity has corresponding fixed-value points and reference point pairs; the compensation analysis module comprises: the judging unit is used for obtaining the sharing quantity which can be mutually influenced between the fixed value point and the reference point pair according to the propagation judging rule;
and the propagation unit is used for propagating the pointer pointing sets of the fixed value points of the sharing quantity which can mutually influence the fixed value points and the reference point pairs acquired by the judgment unit to the corresponding reference points.
According to the second aspect and any one of the first to seventh possible implementation manners of the second aspect, in an eighth possible implementation manner, the apparatus further includes: the receiving module is used for receiving a pointer analysis instruction sent by a user before the reading module reads statement information in the multithreading program to be analyzed;
the reading module is specifically configured to read statement information in the to-be-analyzed multithreading program according to the pointer analysis instruction received by the receiving module.
In a ninth possible implementation manner, according to the second aspect and any one of the first to eighth possible implementation manners of the second aspect, the apparatus further includes: and the optimization module is used for performing compensation analysis on the sharing quantity by the compensation analysis module according to the sharing information of the program obtained by the pointer analysis module, and then performing optimization processing on the program by adopting the result of the compensation analysis.
The pointer analysis method and apparatus provided in this embodiment perform pointer analysis on a multithread program by reading statement information of the program, obtain a global share amount and a local share amount in the program, a pointer direction set, and a memory access behavior for the share amount, implement compensation analysis on the share amount in the program based on a result of the pointer analysis, obtain all results that may be valued or/and refer to the share amount at a fixed point and a reference point of the share amount, the method and the device have the advantages that after any possible execution sequence of the program is obtained, the sharing quantity of the program is fixed or/and all possible results are quoted, the problems that pointer analysis of the multi-thread program in the prior art is only limited to the global sharing quantity in the program and the analysis results are incomplete are solved, the precision of the pointer analysis is improved, and the optimization implementation range and the optimization implementation effect of the program are correspondingly improved.
Drawings
In order to more clearly illustrate the embodiments of the present invention or the technical solutions in the prior art, the drawings needed to be used in the description of the embodiments or the prior art will be briefly introduced below, and it is obvious that the drawings in the following description are some embodiments of the present invention, and for those skilled in the art, other drawings can be obtained according to these drawings without creative efforts.
Fig. 1 is a flowchart of a pointer analysis method according to an embodiment of the present invention;
FIG. 2 is a block diagram of an unstructured multi-thread program according to an embodiment of the present invention;
fig. 3 is a flowchart of a pointer analysis method according to a second embodiment of the present invention;
FIG. 4 is a SAG diagram of a multithreading program according to an embodiment of the present invention;
fig. 5 is a schematic structural diagram of a pointer analysis apparatus according to a third embodiment of the present invention;
fig. 6 is a schematic structural diagram of a pointer analysis apparatus according to an embodiment of the present invention;
fig. 7 is a schematic structural diagram of a pointer analysis apparatus according to a fourth embodiment of the present invention;
fig. 8 is a schematic structural diagram of a terminal device according to a fifth embodiment of the present invention.
Detailed Description
In order to make the objects, technical solutions and advantages of the embodiments of the present invention clearer, the technical solutions in the embodiments of the present invention will be clearly and completely described below with reference to the drawings in the embodiments of the present invention, and it is obvious that the described embodiments are some, but not all, embodiments of the present invention. All other embodiments, which can be derived by a person skilled in the art from the embodiments given herein without making any creative effort, shall fall within the protection scope of the present invention.
Fig. 1 is a flowchart of a pointer analysis method according to an embodiment of the present invention, where the method provided in this embodiment is suitable for analyzing an existing program, and the method may be executed by a terminal device or a pointer analysis apparatus, where the pointer analysis apparatus is usually implemented by a hardware and/or software method, and may be integrated in a memory of the terminal device for being invoked and executed by a processor. As shown in fig. 1, the method of this embodiment may include:
s110, reading statement information in a multithread program to be analyzed;
for the analysis of the current multi-thread program, usually, the pointer variables and pointer direction sets of each thread in the program can be analyzed, so that the terminal device performing pointer analysis can perform pointer analysis on the program after reading statement information in the multi-thread program to be analyzed.
It should be noted that, the pointer analysis performed on the program may be initiated by the user for the specified program, and therefore, in the specific implementation of this embodiment, before S110, the method further includes: receiving a pointer analysis instruction sent by a user; correspondingly, S110 specifically includes: and reading statement information in the multithread program to be analyzed according to the pointer analysis instruction.
S120, performing pointer analysis on the program according to statement information of the program to obtain shared information of the program, wherein the shared information comprises a shared quantity, a pointer pointing set and an access and storage behavior, and the shared quantity comprises a global shared quantity and a local shared quantity;
the terminal equipment performs pointer analysis on the program based on statement information of the program, usually uses an FSCS (finite state machine System) analysis mode with higher analysis precision, and when the program is analyzed by adopting the FSCS analysis mode, the analysis is usually performed according to the logic sequence of statements in the program, and if the execution sequence of the program statements is exchanged for analysis, the analysis results are different; in contrast, when the program is analyzed by adopting a Flow-Insensitive Context-Insensitive (Flow-Insensitive and Context-Insensitive, FICI for short), the analysis result is the same when the execution sequence of program statements is exchanged, and obviously, the FSCS analysis mode has higher analysis precision; at present, when an FSCS analysis mode is generally used in a parallel region of a program, only a global sharing quantity in the program is analyzed, and the global sharing quantity influences interaction among threads of the program, and although the FSCS analysis mode has certain analysis precision, all the sharing quantities in the program are still not analyzed by the method; in the pointer analysis method provided in this embodiment, a program is subjected to pointer analysis according to a read program statement, specifically, obtained shared information includes a shared quantity, a pointer direction set, and an access behavior, and the shared quantity includes a global shared quantity and a local shared quantity, where the local shared quantity is a local variable of a thread in the program and is accessed by other threads to become a shared variable; accordingly, the obtained access behaviors are also directed at all global shared quantities and local shared quantities, so that the pointer analysis method provided by the embodiment analyzes the shared quantities in the program more comprehensively, and not only relates to the global shared quantities, but also relates to the access behaviors of the local shared quantities and all the shared quantities.
And S130, performing compensation analysis on the sharing amount according to the sharing information of the program.
Fig. 2 is a schematic structural diagram of an unstructured multi-thread program according to an embodiment of the present invention. Based on the result of analyzing the pointer in the program, the sharing quantity obtained by analysis is compensated and analyzed, and the result generated after the interactive influence can be obtained according to the interactive influence among threads; specifically, in a parallel area of a program, especially in an unstructured multi-thread program, there are many possibilities for the execution order of statements in the program, and usually the statements are executed in each thread in the program statement order, but there are many possibilities for the execution order of the statements between the threads in the parallel area of the program; taking fig. 2 as an example to illustrate an unstructured multi-thread program, there are creation and termination edges between threads, parallel regions between program points a to C of thread 1 and program points F to H of thread 2, thread 3 is parallel to threads 1 and 2 after program point G of thread 2 is executed, the parallelism of thread 1 and thread 3 is terminated after the execution of program point E of thread 1, whereby program point a may be executed at program point B, H or I and program point H may be executed at program point E or I, and therefore, there is a possibility that the programs may be executed in a variety of execution orders during the execution of the statements, therefore, each possible execution sequence needs to be analyzed, and then the access and storage behaviors of the shared quantity of the program in any possible execution sequence can be analyzed, i.e. all results that each share may be valued or/and referenced at its rating point and reference point.
Further, the pointer analysis method provided in this embodiment further includes: optimizing the program by adopting the result of the compensation analysis; based on comprehensive and detailed analysis of the sharing amount and the execution process in the program, optimization efficiency and quality, in particular optimization or improvement of the program, can be improved, wherein the optimization refers to the program being executed with higher efficiency, and the improvement refers to the discovery or modification of bugs or errors in the program.
The pointer analysis method provided in this embodiment performs pointer analysis on a multithread program by reading statement information of the program, obtains a global shared quantity and a local shared quantity in the program, a pointer direction set, and an access behavior for the shared quantity, and based on a result of the pointer analysis, implements compensation analysis on the shared quantity in the program, and obtains all results that may be valued or/and quoted for the shared quantity at a fixed point and a quoted point of the shared quantity, that is, all possible results that are valued or/and quoted for the shared quantity after obtaining any possible execution sequence of the program.
Example two
Fig. 3 is a flowchart of a pointer analysis method according to a second embodiment of the present invention. As shown in fig. 3, the method of this embodiment may include:
s200, receiving a pointer analysis instruction sent by a user;
s210, reading statement information in the multithread program to be analyzed according to the pointer analysis instruction;
s220, analyzing the program according to a global sharing judgment rule to obtain a global sharing amount in the program;
when a pointer is analyzed for a program, a global sharing amount in the program may be determined according to a global sharing determination rule, and the determination of the global sharing amount is analyzed based on an overall structure of the program, specifically, the global sharing determination rule includes: if a variable can be accessed by at least two threads in a program at the same time, the variable is a global shared quantity.
S230, performing pointer analysis on each thread in the program to obtain a pointer direction set, a local sharing quantity and a memory access behavior corresponding to the sharing quantity in each thread;
and performing pointer analysis on each thread in the program to obtain a pointer pointing set in each thread, and based on the obtained global shared quantity and the pointer pointing set, according to corresponding rules of a pointer algorithm, further obtaining a local shared quantity in the thread and access behaviors aiming at all the shared quantities.
In a specific implementation, S230 includes: s231, performing pointer analysis on each thread in the program to obtain a pointer direction set in each thread; s232, analyzing each thread according to the global sharing quantity, the pointer direction set and the local sharing judgment rule to obtain the local sharing quantity in each thread; and S233, analyzing each thread according to the global share, the local share and the pointer direction set, and obtaining the access and storage behaviors corresponding to the shares.
It should be noted that the local sharing determination rule may include: if the variable in a given thread can be accessed by other threads as an entry parameter of a certain thread in the program, the variable is a local shared quantity; or, if the variable in a given thread can be accessed by other threads by being indirectly referenced by the global share, the variable is the local share; or, if the variable in a given thread can be assigned by a global shared quantity, so that the pointing set of the variable contains the global shared quantity, the variable is a local shared quantity.
And S240, performing compensation analysis on the sharing amount according to the sharing information of the program.
And S250, optimizing the program by adopting the result of the compensation analysis.
The pointer analysis method provided in this embodiment performs pointer analysis on a multithread program by reading statement information of the program, obtains a global shared quantity and a local shared quantity in the program, a pointer direction set, and an access behavior for the shared quantity, and based on a result of the pointer analysis, implements compensation analysis on the shared quantity in the program, and obtains all results that may be valued or/and quoted for the shared quantity at a fixed point and a quoted point of the shared quantity, that is, all possible results that are valued or/and quoted for the shared quantity after obtaining any possible execution sequence of the program. In addition, the global sharing quantity in the program is analyzed firstly, so that the access and storage behaviors of the local sharing quantity and all the sharing quantities in the thread can be comprehensively obtained, the program statements can be processed in a better sequence through pointer analysis, a comprehensive analysis result is obtained, and the efficiency and the quality of program optimization are further improved.
Further, in the pointer analysis method provided in this embodiment, S232 specifically includes: acquiring local variables which are possibly escaped in each thread according to the global shared quantity, the pointer direction set and the local shared identification rule; and determining local variables which are acquired from the possible escape local variables and are possibly used by other threads as local shared quantities according to the possible escape local variables and the shared propagation rule.
In a specific implementation, the local sharing identification rule may include four basic types, please refer to table 1, which is a local sharing identification rule of the pointer analysis method provided in the embodiment of the present invention, and specifically includes an assignment expression and a local sharing identification rule corresponding to the four types Addr, Copy, Load, and Store.
TABLE 1
Taking the unstructured multi-thread program shown in fig. 2 as an example for explanation, it is obvious that the variable gp in the program can be accessed by the threads 1, 2 and 3 at the same time, that is, the global shared quantity; as for the judgment of the local shared quantity, for example, according to the expression L = & R corresponding to Addr, if the variable L at the left part of the expression is the shared quantity, the variable R at the right part is the shared quantity, and all variables in the nested point set belonging to the variable R are the shared quantity, so lx of the program point a, ly of the program point F and lz of the program point G are local variables that may escape; based on the obtained local variables that may escape, the local variables that may be used by other threads are analyzed according to the sharing propagation rule, and the local variables that may be used by other threads are obtained from the local variables that may escape, that is, the local shared quantity, please refer to table 2, which is a local sharing propagation rule of the pointer analysis method provided in the embodiment of the present invention, specifically including assignment expressions and local sharing propagation rules corresponding to four types, i.e., Copy, Load, Store, and PHI.
TABLE 2
Similarly, similar to the above-mentioned judgment manner of the local sharing identification rule, for example, as can be seen from the expression L = R corresponding to Copy, if the variable R at the right part of the expression is a shared quantity, the variable L at the left part has a shared attribute, that is, an attribute that "Copy point set comes from the shared quantity R", and is denoted that L has a shared attribute "cpy _ shared (R)"; according to the local sharing propagation rule, local variables which are possibly used by other threads can be determined from known local variables which are possibly escaped, namely the local variables are local sharing quantity; the method for sharing propagation rules provided in this embodiment may preferably be based on a representation of a Static Single Assignment (SSA) of the program, that is, names of all variables in the program are distinguished, so that all variables have only one Assignment in the program, so that description of the variables and the program is clear and easy to analyze, in an actual program, representation by SSA is not usually required, usually a plurality of variables may use one name, and representation manners of the two variables may be mutually converted.
The rules in tables 1 and 2 are determined in the following manner: if the numerator is established, the operation of the denominator is executed; in addition, in a specific implementation, all the assignment expressions for the local sharing identification rule and the sharing propagation rule can be converted into four types of expressions shown in table 1 and table 2, respectively.
Optionally, the pointer analysis method provided in this embodiment, before S240, includes: generating a parallel control flow graph according to statement information of the program; generating a Shared Access Graph (SAG) aiming at the program according to the parallel control flow Graph and the Shared information; correspondingly, S240 specifically includes: and performing compensation analysis on the sharing amount according to the SAG.
Also, the unstructured multithreading program shown in fig. 2 is taken as an example for description, and fig. 4 is an SAG diagram of a multithreading program according to an embodiment of the present invention. Generally, a parallel control flow graph can be generated according to statement information of the multithread program, an SAG graph of the program is generated according to the sharing quantity obtained through pointer analysis and the access behavior corresponding to the sharing quantity, the SAG graph can intuitively display the structure of the multithread program and the access behavior of the sharing quantity in a program point, and on the basis, compensation analysis can be more accurately carried out on each sharing quantity in the multithread program.
It should be noted that, for a program performing pointer analysis, compensation analysis can be directly performed on the result of pointer analysis, and compensation analysis is performed in a manner of generating an SAG map, so that a programmer viewing the analysis result can more intuitively obtain information of pointer analysis and compensation analysis, and the programmer can more favorably optimize the program.
The share amount generally has corresponding fixed-value point and reference-point pairs, and in a specific implementation of this embodiment, S240 includes: obtaining the sharing quantity which can be mutually influenced between the fixed point and the reference point pair according to the propagation judgment rule; pointers to fixed points of a shared quantity between pairs of fixed and reference points that can interact with each other are propagated to the corresponding reference points. Taking the program shown in fig. 2 as an example, in the program, a fixed value point a exists in the program 1, after the program point a is executed, the orientation set of gp is updated to pts (lx), and reference points H and I exist in the programs 2 and 3, respectively, after the compensation analysis, the orientation set pts (lx) of the fixed value lx of the program point gp at the program point a propagates to the reference points of gp, i.e., the program points H and I. Table 3 shows the results of the pointer analysis and compensation analysis for the procedure shown in fig. 2:
shared volume Fixed value point Reference point Compensating the analysis results
gp A H gp may point to lx at point H, so lx may be valued at point H
gp A I gp may point to lx at point I, so lx may be referenced at point I
gp F C lp may point to ly at point C, so ly may be valued at point C
gp G C lp may point to lz at C, so lz may be valued at C
gp G I gp may point to lz at point I, so lz may be referenced at point I
lx H E lx may point to lb at point E
lx C I lx may point to pts (la) at point I
lz C I lz may point to pts (la) at point I
lz H I lz may point to lb at point I
lx H I lx may point to lb at I point
TABLE 3
In a specific implementation, the propagation determination rule includes: program points X and Y are possibly parallel to each other, namely, only fixed value points and reference points which are possibly parallel can compensate each other; alternatively, program point Y is reachable via program point X, and program point X may back-control other fixed values for the share amount that are reachable to program point Y.
In the pointer analysis method provided in this embodiment, for a result of pointer analysis, compensation analysis on a shared quantity pointer set in a program is implemented from a propagation judgment rule of a fixed value point and a reference point pair of a shared quantity, and a more accurate analysis result for the shared quantity in the program is obtained after the compensation analysis; further, in the method provided by the embodiment of the present invention, all the sharing quantities in the multi-thread program are obtained in advance, specifically including the global and local sharing quantities, and the compensation analysis is performed based on the obtained sharing quantities, so that all possible results of the fixed value or/and the reference of all the sharing quantities in the program can be obtained only by performing the compensation analysis once, and the efficiency of the pointer analysis is further improved.
EXAMPLE III
Fig. 5 is a schematic structural diagram of a pointer analysis apparatus according to a third embodiment of the present invention. As shown in fig. 5, the pointer analysis apparatus provided in this embodiment specifically includes: a reading module 11, a pointer analysis module 12 and a compensation analysis module 13.
The reading module 11 is configured to read statement information in a multi-thread program to be analyzed;
the pointer analysis module 12 is configured to perform pointer analysis on the program according to the statement information of the program read by the reading module 11, so as to obtain shared information of the program, where the shared information includes a shared quantity, a pointer pointing set, and an access behavior, and the shared quantity includes a global shared quantity and a local shared quantity;
and the compensation analysis module 13 is configured to perform compensation analysis on the shared quantity according to the shared information of the program obtained by the pointer analysis module 12.
The pointer analysis device provided by the embodiment of the present invention is used for executing the pointer analysis method provided by the first embodiment of the present invention, and has corresponding functional modules, which have similar implementation principles and technical effects, and are not described herein again.
Optionally, fig. 6 is a schematic structural diagram of a pointer analysis apparatus according to an embodiment of the present invention, and based on the apparatus shown in fig. 5, the pointer analysis apparatus according to the embodiment further includes: a receiving module 14, configured to receive a pointer analysis instruction sent by a user before the reading module 11 reads statement information in a multi-thread program to be analyzed; correspondingly, the reading module 11 is specifically configured to read statement information in the to-be-analyzed multithreading program according to the pointer analysis instruction received by the receiving module 14.
Further, the pointer analysis apparatus provided in this embodiment further includes: and the optimization module 15 is configured to perform compensation analysis on the shared quantity by the compensation analysis module 13 according to the shared information of the program obtained by the pointer analysis module 12, and then perform optimization processing on the program by using a result of the compensation analysis.
Example four
Fig. 7 is a schematic structural diagram of a pointer analysis apparatus according to a fourth embodiment of the present invention. As shown in fig. 7, in the pointer analyzing apparatus provided in this embodiment, based on the apparatus structure shown in fig. 6, the pointer analyzing module 12 includes: the program analysis unit 16 is configured to analyze the program according to a global sharing judgment rule to obtain a global sharing amount in the program; and the thread analysis unit 17 is configured to perform pointer analysis on each thread in the program, and obtain a pointer pointing set, a local share amount, and a memory access behavior corresponding to the share amount in each thread.
In a specific implementation of this embodiment, the global sharing determination rule includes: if a variable can be accessed by at least two threads in a program at the same time, the variable is a global shared quantity.
Further, in the pointer analysis apparatus provided in this embodiment, the thread analysis unit 17 is specifically configured to perform pointer analysis on each thread in a program, and obtain a pointer direction set in each thread; analyzing each thread according to the global sharing quantity, the pointer direction set and the local sharing judgment rule to obtain the local sharing quantity in each thread; and analyzing each thread according to the global sharing quantity, the local sharing quantity and the pointer pointing set to obtain the access and storage behaviors corresponding to the sharing quantity.
It should be noted that the local sharing determination rule may include: if a variable in a given thread can be accessed by other threads as an entry parameter of a certain thread in the program, the variable is a local shared quantity; or, if the variable in a given thread can be accessed by other threads by being indirectly referenced by the global share, the variable is the local share; or, if the variable in a given thread can be assigned by a global shared quantity, so that the pointing set of the variable contains the global shared quantity, the variable is a local shared quantity.
Further, in the pointer analysis apparatus provided in this embodiment, the thread analysis unit 17 is configured to analyze each thread according to the global share amount, the pointer direction set, and the local share determination rule, and obtain the local share amount in each thread, and specifically includes: the method comprises the steps of acquiring local variables which are possibly escaped in each thread according to global shared quantity, a pointer direction set and a local shared identification rule; and determining the local variables which are acquired from the possible escape local variables and are possibly used by other threads as local shared quantities according to the possible escape local variables and the shared propagation rule.
Optionally, the pointer analysis device provided in this embodiment further includes: an image generating module 18, configured to generate a parallel control flow graph according to statement information of the program before the compensation analyzing module 13 performs compensation analysis on each shared quantity according to the shared information of the program obtained by the pointer analyzing module 12; generating a sharing amount memory access graph SAG aiming at the program according to the parallel control flow graph and the sharing information; accordingly, the compensation analysis module 13 is specifically configured to perform compensation analysis on the sharing amount according to the SAG generated by the image generation module 18. In a specific implementation of this embodiment, the shares have corresponding fixed-value points and reference point pairs; accordingly, the compensation analysis module 13 includes: a judging unit 19, configured to obtain, according to a propagation judgment rule, a sharing amount that may affect each other between the fixed point and the reference point pair; and a propagation unit 20 configured to propagate the pointer pointing sets of the fixed-value points and the fixed-value points of the sharing amount that can affect each other between the pair of reference points, which are acquired by the determination unit 19, to the corresponding reference points.
The pointer analysis device provided by the embodiment of the present invention is used for executing the pointer analysis method provided by the second embodiment of the present invention, and has corresponding functional modules, which have similar implementation principles and technical effects, and are not described herein again.
EXAMPLE five
Fig. 8 is a schematic structural diagram of a terminal device according to a fifth embodiment of the present invention. As shown in fig. 8, the terminal device provided in this embodiment specifically includes: a processor 21 and a receiver 22.
The processor 21 is configured to read statement information in a multi-thread program to be analyzed;
the processor 21 is further configured to perform pointer analysis on the program according to statement information of the program to obtain shared information of the program, where the shared information includes a shared quantity, a pointer pointing set, and an access behavior, and the shared quantity includes a global shared quantity and a local shared quantity;
the processor 21 is further configured to perform compensation analysis on the sharing amount according to the sharing information of the program.
A receiver 22, configured to receive a pointer analysis instruction sent by a user before the processor 21 reads statement information in a multi-threaded program to be analyzed; accordingly, the processor 21 is specifically configured to read statement information in the multi-thread program to be analyzed according to the pointer analysis instruction received by the receiver 22.
The terminal device provided in the embodiment of the present invention is configured to execute the pointer analysis method provided in the first embodiment of the present invention, and has a corresponding entity apparatus, which has similar implementation principles and technical effects, and is not described herein again.
Further, in the terminal device provided in this embodiment, the processor 21 is further configured to perform compensation analysis on the shared quantity according to the shared information of the program, and then perform optimization processing on the program by using a result of the compensation analysis.
EXAMPLE six
Fig. 8 is a schematic structural diagram of a terminal device according to a sixth embodiment of the present invention. The terminal device structure of this embodiment is the same as the terminal device structure provided in the fifth embodiment, but the module functions are different, and in this embodiment: the processor 21 is specifically configured to analyze the program according to a global sharing judgment rule to obtain a global sharing amount in the program; and performing pointer analysis on each thread in the program to obtain a pointer pointing set, a local sharing amount and a memory access behavior corresponding to the sharing amount in each thread.
In a specific implementation of this embodiment, the global sharing determination rule includes: if a variable can be accessed by at least two threads in a program at the same time, the variable is a global shared quantity.
Further, in the terminal device provided in this embodiment, the processor 21 is configured to perform pointer analysis on each thread in the program, and obtain a pointer pointing set, a local share amount, and a memory access behavior corresponding to the share amount in each thread, and specifically includes: the method comprises the steps of analyzing a pointer of each thread in a program to obtain a pointer pointing set of each thread; analyzing each thread according to the global sharing quantity, the pointer direction set and the local sharing judgment rule to obtain the local sharing quantity in each thread; and analyzing each thread according to the global sharing quantity, the local sharing quantity and the pointer pointing set to obtain the access and storage behaviors corresponding to the sharing quantity.
It should be noted that the local sharing determination rule may include: if a variable in a given thread can be accessed by other threads as an entry parameter of a certain thread in the program, the variable is a local shared quantity; or, if the variable in a given thread can be accessed by other threads by being indirectly referenced by the global share, the variable is the local share; or, if the variable in a given thread can be assigned by a global shared quantity, so that the pointing set of the variable contains the global shared quantity, the variable is a local shared quantity.
Further, in the terminal device provided in this embodiment, the processor 21 is configured to analyze each thread according to the global share amount, the pointer direction set, and the local share determination rule, and obtain the local share amount in each thread, and specifically includes: the method comprises the steps of acquiring local variables which are possibly escaped in each thread according to global shared quantity, a pointer direction set and a local shared identification rule; and determining the local variables which are acquired from the possible escape local variables and are possibly used by other threads as local shared quantities according to the possible escape local variables and the shared propagation rule.
Optionally, in the terminal device provided in this embodiment, the processor 21 is further configured to generate a parallel control flow graph according to statement information of a program before performing compensation analysis on each shared quantity according to shared information of the program; generating a sharing amount memory access graph SAG aiming at the program according to the parallel control flow graph and the sharing information; correspondingly, the processor 21 is configured to perform compensation analysis on the shared quantity according to the shared information of the program, and specifically includes: for compensation analysis of share amount according to SAG. In a specific implementation of this embodiment, the shares have corresponding fixed-value points and reference point pairs; correspondingly, the processor 21 is configured to perform compensation analysis on the shared quantity according to the shared information of the program, and specifically includes: the sharing quantity which can mutually influence the fixed point and the reference point pair is obtained according to the propagation judgment rule; and propagating pointers to the sets of fixed-valued points and the shared quantities between pairs of reference points that can interact with each other to the corresponding reference points.
The terminal device provided in the embodiment of the present invention is configured to execute the pointer analysis method provided in the second embodiment of the present invention, and has a corresponding entity apparatus, which has similar implementation principles and technical effects, and is not described herein again.
Those of ordinary skill in the art will understand that: all or a portion of the steps of implementing the above-described method embodiments may be performed by hardware associated with program instructions. The program may be stored in a computer-readable storage medium. When executed, the program performs steps comprising the method embodiments described above; and the aforementioned storage medium includes: various media that can store program codes, such as ROM, RAM, magnetic or optical disks.
Finally, it should be noted that: the above embodiments are only used to illustrate the technical solution of the present invention, and not to limit the same; while the invention has been described in detail and with reference to the foregoing embodiments, it will be understood by those skilled in the art that: the technical solutions described in the foregoing embodiments may still be modified, or some or all of the technical features may be equivalently replaced; and the modifications or the substitutions do not make the essence of the corresponding technical solutions depart from the scope of the technical solutions of the embodiments of the present invention.

Claims (18)

1. A pointer analysis method, comprising:
reading statement information in a multithreading program to be analyzed;
performing pointer analysis on the program according to statement information of the program to obtain shared information of the program, wherein the shared information comprises a shared quantity, a pointer pointing set and an access behavior, and the shared quantity comprises a global shared quantity and a local shared quantity;
generating a parallel control flow graph according to statement information of the program;
generating a sharing amount memory access graph SAG aiming at the program according to the parallel control flow graph and the sharing information;
and performing compensation analysis on the sharing amount according to the SAG.
2. The method according to claim 1, wherein the performing pointer analysis on the program according to statement information of the program to obtain shared information of the program comprises:
analyzing the program according to a global sharing judgment rule to obtain a global sharing amount in the program;
and performing pointer analysis on each thread in the program to obtain a pointer pointing set, a local sharing quantity and a memory access behavior corresponding to the sharing quantity in each thread.
3. The method of claim 2, wherein the global sharing judgment rule comprises:
if a variable can be accessed by at least two threads in a program at the same time, the variable is a global shared quantity.
4. The method according to claim 2, wherein the performing a pointer analysis on each thread in the program to obtain a pointer pointing set, a local share volume, and a memory access behavior corresponding to the share volume in each thread comprises:
performing pointer analysis on each thread in the program to obtain a pointer pointing set in each thread;
analyzing each thread according to the global sharing quantity, the pointer direction set and the local sharing judgment rule to obtain the local sharing quantity in each thread;
and analyzing each thread according to the global sharing quantity, the local sharing quantity and the pointer pointing set to obtain a memory access behavior corresponding to the sharing quantity.
5. The method of claim 4, wherein the local sharing judgment rule comprises:
if a variable in a given thread can be accessed by other threads as an entry parameter of a certain thread in the program, the variable is a local shared quantity; or,
if the variable in a given thread can be accessed by other threads in a mode of indirect reference by the global shared quantity, the variable is the local shared quantity; or,
if the variable in a given thread can be assigned through the global shared quantity, so that the pointing set of the variable comprises the global shared quantity, the variable is the local shared quantity.
6. The method according to claim 4 or 5, wherein the analyzing each thread according to the global share amount, the pointer direction set, and the local share determination rule to obtain the local share amount in each thread comprises:
acquiring local variables which are possibly escaped in each thread according to the global sharing quantity, the pointer direction set and the local sharing identification rule;
and determining the local variables which are acquired from the possible escape local variables and are possibly used by other threads as local shared quantities according to the possible escape local variables and the shared propagation rules.
7. The method of claim 1, wherein the share quantities have respective pairs of fixed-value points and reference points; the compensation analysis of the share amount according to the SAG includes:
obtaining the sharing quantity which can be mutually influenced between the fixed point and the reference point pair according to a propagation judgment rule;
propagating pointers to sets of said definite points for shared quantities that may affect each other between said definite points and pairs of reference points to corresponding reference points.
8. The method of claim 1, wherein prior to reading statement information in the multithreaded program to be analyzed, further comprising:
receiving a pointer analysis instruction sent by a user;
the reading of statement information in a multithread program to be analyzed includes:
and reading statement information in the multithreading program to be analyzed according to the pointer analysis instruction.
9. The method of claim 1, after said compensation analysis of said share according to said SAG, further comprising:
and optimizing the program by adopting the result of the compensation analysis.
10. A pointer analysis apparatus, comprising:
the reading module is used for reading statement information in the multithreading program to be analyzed;
the pointer analysis module is used for carrying out pointer analysis on the program according to the statement information of the program read by the reading module to obtain shared information of the program, wherein the shared information comprises a shared quantity, a pointer pointing set and an access and storage behavior, and the shared quantity comprises a global shared quantity and a local shared quantity;
the image generation module is used for generating a parallel control flow graph according to statement information of the program; and generating a shared amount access map SAG aiming at the program according to the parallel control flow graph and the shared information;
and the compensation analysis module is used for performing compensation analysis on the sharing amount according to the SAG generated by the image generation module.
11. The apparatus of claim 10, wherein the pointer analysis module comprises:
the program analysis unit is used for analyzing the program according to a global sharing judgment rule to obtain a global sharing amount in the program;
and the thread analysis unit is used for carrying out pointer analysis on each thread in the program to obtain a pointer pointing set, a local sharing quantity and a memory access behavior corresponding to the sharing quantity in each thread.
12. The apparatus of claim 11, wherein the global sharing determination rule comprises:
if a variable can be accessed by at least two threads in a program at the same time, the variable is a global shared quantity.
13. The apparatus according to claim 11, wherein the thread analysis unit is specifically configured to perform pointer analysis on each thread in the program to obtain a pointer direction set in each thread; analyzing each thread according to the global sharing quantity, the pointer direction set and the local sharing judgment rule to obtain the local sharing quantity in each thread; and analyzing each thread according to the global sharing quantity, the local sharing quantity and the pointer pointing set to obtain the access and storage behaviors corresponding to the sharing quantity.
14. The apparatus of claim 13, wherein the local sharing judgment rule comprises:
if a variable in a given thread can be accessed by other threads as an entry parameter of a certain thread in the program, the variable is a local shared quantity; or,
if the variable in a given thread can be accessed by other threads in a mode of indirect reference by the global shared quantity, the variable is the local shared quantity; or,
if the variable in a given thread can be assigned through the global shared quantity, so that the pointing set of the variable comprises the global shared quantity, the variable is the local shared quantity.
15. The apparatus according to claim 13 or 14, wherein the thread analysis unit is configured to analyze each thread according to the global share amount, the pointer direction set, and the local share determination rule to obtain the local share amount in each thread, and specifically includes:
the local variables which are possibly escaped in each thread are obtained according to the global sharing quantity, the pointer direction set and the local sharing identification rule;
and determining the local variables which are acquired from the possible escape local variables and are possibly used by other threads as local shared quantities according to the possible escape local variables and the shared propagation rules.
16. The apparatus of claim 10, wherein the share quantities have respective pairs of fixed-value points and reference points; the compensation analysis module comprises: the judging unit is used for obtaining the sharing quantity which can be mutually influenced between the fixed value point and the reference point pair according to the propagation judging rule;
and the propagation unit is used for propagating the pointer pointing sets of the fixed value points of the sharing quantity which can mutually influence the fixed value points and the reference point pairs acquired by the judgment unit to the corresponding reference points.
17. The apparatus of claim 10, further comprising: the receiving module is used for receiving a pointer analysis instruction sent by a user before the reading module reads statement information in the multithreading program to be analyzed;
the reading module is specifically configured to read statement information in the to-be-analyzed multithreading program according to the pointer analysis instruction received by the receiving module.
18. The apparatus of claim 10, further comprising: and the optimization module is used for performing compensation analysis on the shared quantity according to the SAG generated by the image generation module by the compensation analysis module and then performing optimization processing on the program by adopting the result of the compensation analysis.
CN201310589292.2A 2013-11-20 2013-11-20 Pointer analysis method and device Expired - Fee Related CN104657257B (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310589292.2A CN104657257B (en) 2013-11-20 2013-11-20 Pointer analysis method and device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310589292.2A CN104657257B (en) 2013-11-20 2013-11-20 Pointer analysis method and device

Publications (2)

Publication Number Publication Date
CN104657257A CN104657257A (en) 2015-05-27
CN104657257B true CN104657257B (en) 2017-11-17

Family

ID=53248426

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310589292.2A Expired - Fee Related CN104657257B (en) 2013-11-20 2013-11-20 Pointer analysis method and device

Country Status (1)

Country Link
CN (1) CN104657257B (en)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101833631A (en) * 2010-02-09 2010-09-15 北京理工大学 Pointer analysis-combined software security hole dynamic detection method
CN102760095A (en) * 2011-04-25 2012-10-31 清华大学 Dynamic data race detection method based on static shared variable recognition

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8141049B2 (en) * 2007-03-14 2012-03-20 Nec Laboratories America, Inc. System and method for scalable flow and context-sensitive pointer alias analysis

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101833631A (en) * 2010-02-09 2010-09-15 北京理工大学 Pointer analysis-combined software security hole dynamic detection method
CN102760095A (en) * 2011-04-25 2012-10-31 清华大学 Dynamic data race detection method based on static shared variable recognition

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"一种面向动态链状数据结构的指针定值引用链算法";付小朋 等;《小型微型计算机系统》;20110731;第1412页第1节 *

Also Published As

Publication number Publication date
CN104657257A (en) 2015-05-27

Similar Documents

Publication Publication Date Title
US11201806B2 (en) Automated analysis and recommendations for highly performant single page web applications
CN108170425B (en) Program code modification method and device and terminal equipment
CN110580189A (en) method and device for generating front-end page, computer equipment and storage medium
CN109460237A (en) The Compilation Method and device of code
US10176086B2 (en) Event-driven software test sequence determination
CN108959056B (en) Test case generation method and test case generation device
CN104657257B (en) Pointer analysis method and device
CN114547086B (en) Data processing method, device, equipment and computer readable storage medium
JP2014186477A (en) Information processing device, information processing method, and program
US20100306751A1 (en) Execution result caching and searching
US10157049B2 (en) Static analysis with input reduction
CN116244386A (en) Identification method of entity association relation applied to multi-source heterogeneous data storage system
CN113642295B (en) Page typesetting method, device and computer program product
CN115859897A (en) Model generation method, layout area prediction method, device and related equipment
CN114047919A (en) Compiling method based on file difference, storage medium and electronic equipment
CN110852077B (en) Method, device, medium and electronic equipment for dynamically adjusting Word2Vec model dictionary
CN110895529B (en) Processing method of structured query language and related device
CN113380352A (en) Medical micro-service arrangement-based intermediate language description method and system
US10324510B2 (en) Information processing apparatus and method for measuring energy consumption
CN110782942B (en) Quality control method, device and storage medium in metabonomics
CN115079882B (en) Human-computer interaction processing method and system based on virtual reality
CN110806877B (en) Method, device, medium and electronic equipment for structuring programming file
CN113590952B (en) Data center construction method and system
CN113656395B (en) Data quality control method, device, equipment and storage medium
CN113609362A (en) Data management method and system based on 5G

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20171117

Termination date: 20201120