This document provides an introduction and overview of compiler optimization techniques, including:
1) Flow graphs, constant folding, global common subexpressions, induction variables, and reduction in strength.
2) Data-flow analysis basics like reaching definitions, gen/kill frameworks, and solving data-flow equations iteratively.
3) Pointer analysis using Andersen's formulation to model references between local variables and heap objects. Rules are provided to represent points-to relationships.
Random numo Galois Field
Polynomial Arithmetic
Example of Polynomial Arithmetic
bers, its types and usage.
TRNG, PRNG, CHPRNG
Review of BBS
Stream Ciphering
RC4 algorithm
Basic Number Theory
Extended Euclidean Algorithm
Relevance of Extended Euclidean Algorithm
We start with motivation, few examples of uncertainties. Then we discretize elliptic PDE with uncertain coefficients, apply TT format for permeability, the stochastic operator and for the solution. We compare sparse multi-index set approach with full multi-index+TT.
Tensor Train format allows us to keep the whole multi-index set, without any multi-index set truncation.
A Primality test is an algorithm for determining whether an input number is Prime. Among other fields of mathematics, it is used for Cryptography. Factorization is thought to be a computationally difficult problem, whereas primality testing is comparatively easy (its running time is polynomial in the size of the input).
Computers and Programming , Programming Languages Types, Problem solving, Introduction to the MATLAB environment, Using MATLAB Documentation
Introduction to the course, Operating methodology-Installation Procedure
1. Compare a sample code in C with MATLAB
2. Trajectory of a particle in projectile motion ( solving quadratic equations)
3. Ideal gas law problem to find volume
Random numo Galois Field
Polynomial Arithmetic
Example of Polynomial Arithmetic
bers, its types and usage.
TRNG, PRNG, CHPRNG
Review of BBS
Stream Ciphering
RC4 algorithm
Basic Number Theory
Extended Euclidean Algorithm
Relevance of Extended Euclidean Algorithm
We start with motivation, few examples of uncertainties. Then we discretize elliptic PDE with uncertain coefficients, apply TT format for permeability, the stochastic operator and for the solution. We compare sparse multi-index set approach with full multi-index+TT.
Tensor Train format allows us to keep the whole multi-index set, without any multi-index set truncation.
A Primality test is an algorithm for determining whether an input number is Prime. Among other fields of mathematics, it is used for Cryptography. Factorization is thought to be a computationally difficult problem, whereas primality testing is comparatively easy (its running time is polynomial in the size of the input).
Computers and Programming , Programming Languages Types, Problem solving, Introduction to the MATLAB environment, Using MATLAB Documentation
Introduction to the course, Operating methodology-Installation Procedure
1. Compare a sample code in C with MATLAB
2. Trajectory of a particle in projectile motion ( solving quadratic equations)
3. Ideal gas law problem to find volume
Introduction
Plotting basic 2-D plots.
The plot command
The fplot command
Plotting multiple graphs in the same plot
Formatting plots
USING THE plot() COMMAND TO PLOT
MULTIPLE GRAPHS IN THE SAME PLOT
MATLAB PROGRAM TO PLOT VI CHARACTERISTICS OF A DIODE
SUMMARY
Dynamic Programming is one of the most interesting design techniques. The concise idea is to avoid recomputations. Matrix Chain Multiplication and All Pairs Shortest Paths are two interesting applications of this design technique
We allow Eve to modify DH parameters as well as public keys of Alice and Bob. This allows Eve to derive the secret key and break the DH crypto system. We demonstrate that the DH key exchange algorithm should not be used without digital signatures.
Introduction
Plotting basic 2-D plots.
The plot command
The fplot command
Plotting multiple graphs in the same plot
Formatting plots
USING THE plot() COMMAND TO PLOT
MULTIPLE GRAPHS IN THE SAME PLOT
MATLAB PROGRAM TO PLOT VI CHARACTERISTICS OF A DIODE
SUMMARY
Dynamic Programming is one of the most interesting design techniques. The concise idea is to avoid recomputations. Matrix Chain Multiplication and All Pairs Shortest Paths are two interesting applications of this design technique
We allow Eve to modify DH parameters as well as public keys of Alice and Bob. This allows Eve to derive the secret key and break the DH crypto system. We demonstrate that the DH key exchange algorithm should not be used without digital signatures.
Divide-and-Conquer & Dynamic Programming
Divide-and-Conquer: Divide a problem to independent subproblems, find the solutions of the subproblems, and then merge the solutions of the subproblems to the solution of the original problem.
Dynamic Programming: Solve the subproblems (they may overlap with each other) and save their solutions in a table, and then use the table to solve the original problem.
Example 1: Compute Fibonacci number f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2) Using Divide-and-Conquer:
F(n) = F(n-1) + F(n-2)
F(n-2) + F(n-3) + F(n-3) + F(n-4)
F(n-3)+F(n-4) + F(n-4)+F(n-5) + F(n-4)+F(n-5) + F(n-5) + F(n-6)
…………………….
Computing time: T(n) = T(n-1) + T(n-2), T(1) = 0 T(n)=O(2 ) Using Dynamic Programmin: Computing time=O(n)
n
Chapter 8 Dynamic Programming (Planning)
F(0)
F(1)
F(2)
F(3)
F(4)
……
F(n)
Example 2
The matrix-train mutiplication problem
*
Structure of an optimal parenthesization
Matrix Size
A1 30×35
A2 35×15
A3 15×5
A4 5×10
A5 10×20
A6 20×25
Input
6
5
3
2
4
1
3
3
3
3
3
3
3
3
5
1
2
3
4
5
i
j
1 2 3 4 5
s[i,j]
6
5
3
2
4
i
j
m[i,j]
15125
10500
5375
3500
5000
0
11875
7125
2500
1000
0
9375
4375
750
0
7875
2625
0
15750
0
0
1 2 3 4 5 6
1
i-1
k
j
Matrix-Chain-Order(p)
1 n := length[p] -1;
2 for i = 1 to n
3 do m[i,i] := 0;
4 for l =2 to n
5 do {for i=1 to n-l +1
6 do { j := i+ l-1;
7 m[i,j] := ;
8 for k = i to j-1
9 do {q := m[i,k]+m[k+1,j] +p p p ;
10 if q < m[i,j]
11 then {m[i,j] :=q; s[i,j] := k}; }; };
13 return m, s;
Input of algorithm: p , p , … , p (The size of A = p *p )
Computing time O(n )
8
0
1
n
i
i+1
i
3
Example 3
Longest common subsequence (LCS)
A problem from Bioinformatics: the DNA of one organism may be
S1 = ACCGGTCGAGTGCGCGGAAGCCGGCCGAAA, while the DNA of another organism may be S2 = GTCGTTCTTAATGCCGTTGCTCTGTAAA. One goal of comparing two strands of DNA is to determine how “similar” the two strands are, as some measure of how closely related the two organisms are.
Problem Formulization
Given a sequence X = ( ), another sequence Z = ( ) is a subsequence of X if there exists a strictly increasing sequence ( ) of indices of X such that for all j = 1, 2, …k, we have .
Theorem
Let X = ( ) and Y = ( ...
This is the entrance exam paper for ISI MSQE Entrance Exam for the year 2004. Much more information on the ISI MSQE Entrance Exam and ISI MSQE Entrance preparation help available on http://crackdse.com
The main challenge of concurrent software verification has always been in achieving modularity, i.e., the ability to divide and conquer the correctness proofs with the goal of scaling the verification effort. Types are a formal method well-known for its ability to modularize programs, and in the case of dependent types, the ability to modularize and scale complex mathematical proofs.
In this talk I will present our recent work towards reconciling dependent types with shared memory concurrency, with the goal of achieving modular proofs for the latter. Applying the type-theoretic paradigm to concurrency has lead us to view separation logic as a type theory of state, and has motivated novel abstractions for expressing concurrency proofs based on the algebraic structure of a resource and on structure-preserving functions (i.e., morphisms) between resources.
Efficient end-to-end learning for quantizable representationsNAVER Engineering
발표자: 정연우(서울대 박사과정)
발표일: 2018.7.
유사한 이미지 검색을 위해 neural network를 이용해 이미지의 embedding을 학습시킨다. 기존 연구에서는 검색 속도 증가를 위해 binary code의 hamming distance를 활용하지만 여전히 전체 데이터 셋을 검색해야 하며 정확도가 떨어지는 다는 단점이 있다. 이 논문에서는 sparse한 binary code를 학습하여 검색 정확도가 떨어지지 않으면서 검색 속도도 향상시키는 해쉬 테이블을 생성한다. 또한 mini-batch 상에서 optimal한 sparse binary code를 minimum cost flow problem을 통해 찾을 수 있음을 보였다. 우리의 방법은 Cifar-100과 ImageNet에서 precision@k, NMI에서 최고의 검색 정확도를 보였으며 각각 98× 와 478×의 검색 속도 증가가 있었다.
This is the entrance exam paper for ISI MSQE Entrance Exam for the year 2008. Much more information on the ISI MSQE Entrance Exam and ISI MSQE Entrance preparation help available on http://crackdse.com
10. 8 Intermediate Code for (i=0; i<n; i++) A[i] = 1; Intermediate code exposes optimizable constructs we cannot see at source-code level. Make flow explicit by breaking into basic blocks = sequences of steps with entry at beginning, exit at end.
11. 9 i = 0 if i>=n goto … t1 = 8*i A[t1] = 1 i = i+1 Basic Blocks for (i=0; i<n; i++) A[i] = 1;
12. 10 Induction Variables x is an induction variable in a loop if it takes on a linear sequence of values each time through the loop. Common case: loop index like i and computed array index like t1. Eliminate “superfluous” induction variables. Replace multiplication by addition (reduction in strength ).
13. 11 Example i = 0 if i>=n goto … t1 = 8*i A[t1] = 1 i = i+1 t1 = 0 n1 = 8*n if t1>=n1 goto … A[t1] = 1 t1 = t1+8
14. 12 Loop-Invariant Code Motion Sometimes, a computation is done each time around a loop. Move it before the loop to save n-1 computations. Be careful: could n=0? I.e., the loop is typically executed 0 times.
15. 13 Example i = 0 i = 0 t1 = y+z if i>=n goto … if i>=n goto … t1 = y+z x = x+t1 i = i+1 x = x+t1 i = i+1
16. 14 Constant Folding Sometimes a variable has a known constant value at a point. If so, replacing the variable by the constant simplifies and speeds-up the code. Easy within a basic block; harder across blocks.
17. 15 Example i = 0 n = 100 if i>=n goto … t1 = 8*i A[t1] = 1 i = i+1 t1 = 0 if t1>=800 goto … A[t1] = 1 t1 = t1+8
18. 16 Global Common Subexpressions Suppose block B has a computation of x+y. Suppose we are sure that when we reach this computation, we are sure to have: Computed x+y, and Not subsequently reassigned x or y. Then we can hold the value of x+y and use it in B.
19. 17 Example a = x+y t = x+y a = t b = x+y t = x+y b = t c = x+y c = t
20. 18 Example --- Even Better t = x+y a = t t = x+y b = t c = t t = x+y a = t b = t t = x+y b = t c = t
24. 21 As a Flow Graph x = true if x == true “body”
25. 22 Formulation: Reaching Definitions Each place some variable x is assigned is a definition. Ask: for this use of x, where could x last have been defined. In our example: only at x=true.
26. 23 d1 d2 Example: Reaching Definitions d1: x = true d1 if x == true d2 d1 d2: a = 10
27. 24 Clincher Since at x == true, d1 is the only definition of x that reaches, it must be that x is true at that point. The conditional is not really a conditional and can be replaced by a branch.
28. 25 Not Always That Easy int i = 2; int j = 3; while (i != j) { if (i < j) i += 2; else j += 2; } We’ll develop techniques for this problem, but later …
29. 26 d1 d2 d3 d4 d2, d3, d4 d1, d3, d4 d1, d2, d3, d4 d1, d2, d3, d4 The Flow Graph d1: i = 2 d2: j = 3 if i != j d1, d2, d3, d4 if i < j d4: j = j+2 d3: i = i+2
30. 27 DFA Is Sometimes Insufficient In this example, i can be defined in two places, and j in two places. No obvious way to discover that i!=j is always true. But OK, because reaching definitions is sufficient to catch most opportunities for constant folding (replacement of a variable by its only possible value).
31. 28 Be Conservative! (Code optimization only) It’s OK to discover a subset of the opportunities to make some code-improving transformation. It’s notOK to think you have an opportunity that you don’t really have.
32. 29 Example: Be Conservative boolean x = true; while (x) { . . . *p = false; . . . } Is it possible that p points to x?
33. 30 Another def of x d2 As a Flow Graph d1: x = true d1 if x == true d2: *p = false
34. 31 Possible Resolution Just as data-flow analysis of “reaching definitions” can tell what definitions of x might reach a point, another DFA can eliminate cases where p definitely does not point to x. Example: the only definition of p is p = &y and there is no possibility that y is an alias of x.
35. 32 Reaching Definitions Formalized A definition d of a variable x is said to reach a point p in a flow graph if: Every path from the entry of the flow graph to p has d on the path, and After the last occurrence of d there is no possibility that x is redefined.
36. 33 Data-Flow Equations --- (1) A basic block can generate a definition. A basic block can either Kill a definition of x if it surely redefines x. Transmit a definition if it may not redefine the same variable(s) as that definition.
37. 34 Data-Flow Equations --- (2) Variables: IN(B) = set of definitions reaching the beginning of block B. OUT(B) = set of definitions reaching the end of B.
38. 35 Data-Flow Equations --- (3) Two kinds of equations: Confluence equations : IN(B) in terms of outs of predecessors of B. Transfer equations : OUT(B) in terms of of IN(B) and what goes on in block B.
39. 36 Confluence Equations IN(B) = ∪predecessors P of B OUT(P) {d2, d3} {d1, d2} P2 P1 {d1, d2, d3} B
40. 37 Transfer Equations Generate a definition in the block if its variable is not definitely rewritten later in the basic block. Kill a definition if its variable is definitely rewritten in the block. An internal definition may be both killed and generated.
41. 38 Example: Gen and Kill IN = {d2(x), d3(y), d3(z), d5(y), d6(y), d7(z)} d1: y = 3 d2: x = y+z d3: *p = 10 d4: y = 5 Kill includes {d1(x), d2(x), d3(y), d5(y), d6(y),…} Gen = {d2(x), d3(x), d3(z),…, d4(y)} OUT = {d2(x), d3(x), d3(z),…, d4(y), d7(z)}
42. 39 Transfer Function for a Block For any block B: OUT(B) = (IN(B) – Kill(B)) ∪Gen(B)
43. 40 Iterative Solution to Equations For an n-block flow graph, there are 2n equations in 2n unknowns. Alas, the solution is not unique. Use iterative solution to get the least fixed-point. Identifies any def that might reach a point.
44. 41 Iterative Solution --- (2) IN(entry) = ∅; for each block B do OUT(B)= ∅; while (changes occur) do for each block B do { IN(B) = ∪predecessors P of B OUT(P); OUT(B) = (IN(B) – Kill(B)) ∪Gen(B); }
46. 43 Aside: Notice the Conservatism Not only the most conservative assumption about when a def is killed or gen’d. Also the conservative assumption that any path in the flow graph can actually be taken.
50. 46 Flow/Context Insensitivity Not so bad when program units are small (few assignments to any variable). Example: Java code often consists of many small methods. Remember: you can distinguish variables by their full name, e.g., class.method.block.identifier.
51. 47 Context Sensitivity Can distinguish paths to a given point. Example: If we remembered paths, we would not have the problem in the constant-propagation framework where x+y = 5 but neither x nor y is constant over all paths.
53. 49 An Interprocedural Example int id(int x) {return x;} void p() {a=2; b=id(a);…} void q() {c=3; d=id(c);…} If we distinguish p calling id from q calling id, then we can discover b=2 and d=3. Otherwise, we think b, d = {2, 3}.
54. 50 Context-Sensitivity --- (2) Loops and recursive calls lead to an infinite number of contexts. Generally used only for interprocedural analysis, so forget about loops. Need to collapse strong components of the calling graph to a single group. “Context” becomes the sequence of groups on the calling stack.
55. 51 Example: Calling Graph t Contexts: Green Green, pink Green, yellow Green, pink, yellow s r p q main
56. 52 Comparative Complexity Insensitive: proportional to size of program (number of variables). Flow-Sensitive: size of program, squared (points times variables). Context-Sensitive: worst-case exponential in program size (acyclic paths through the code).
57. 53 Logical Representation We have used a set-theoretic formulation of DFA. IN = set of definitions, e.g. There has been recent success with a logical formulation, involving predicates. Example: Reach(d,x,i) = “definition d of variable x can reach point i.”
58. 54 Comparison: Sets Vs. Logic Both have an efficiency enhancement. Sets: bit vectors and boolean ops. Logic: BDD’s, incremental evaluation. Logic allows integration of different aspects of a flow problem. Think of PRE as an example. We needed 6 stages to compute what we wanted.
59. 55 Datalog --- (1) Predicate Arguments: variables or constants The body : For each assignment of values to variables that makes all these true … Make this atom true (the head ). Atom = Reach(d,x,i) Literal = Atom or NOT Atom Rule = Atom :- Literal & … & Literal
61. 57 Datalog --- (2) Intuition: subgoals in the body are combined by “and” (strictly speaking: “join”). Intuition: Multiple rules for a predicate (head) are combined by “or.”
62. 58 Datalog --- (3) Predicates can be implemented by relations (as in a database). Each tuple, or assignment of values to the arguments, also represents a propositional (boolean) variable.
63. 59 Iterative Algorithm for Datalog Start with the EDB predicates = “whatever the code dictates,” and with all IDB predicates empty. Repeatedly examine the bodies of the rules, and see what new IDB facts can be discovered from the EDB and existing IDB facts.
66. 62 New Topic: Pointer Analysis We shall consider Andersen’s formulation of Java object references. Flow/context insensitive analysis. Cast of characters: Local variables, which point to: Heap objects, which may have fields that are references to other heap objects.
67. 63 Representing Heap Objects A heap object is named by the statement in which it is created. Note many run-time objects may have the same name. Example: h: T v = new T;says variable v can point to (one of) the heap object(s) created by statement h. v h
68. 64 Other Relevant Statements v.f = w makes the f field of the heap object h pointed to by v point to what variable w points to. f v w f h g i
69. 65 Other Statements --- (2) v = w.f makes v point to what the f field of the heap object h pointed to by w points to. v w i f h g
70. 66 Other Statements --- (3) v = w makes v point to whatever w points to. Interprocedural Analysis : Also models copying an actual parameter to the corresponding formal or return value to a variable. v w h
72. 68 Example T p(T x) { h: T a = new T; a.f = x; return a; } void main() { g: T b = new T; b = p(b); b = b.f; }
73. 69 Apply Rules Recursively --- Round 1 Pts(a,h) Pts(b,g) T p(T x) {h: T a = new T; a.f = x; return a;} void main() {g: T b = new T; b = p(b); b = b.f;}
74. 70 Apply Rules Recursively --- Round 2 Pts(x,g) Pts(b,h) T p(T x) {h: T a = new T; a.f = x; return a;} void main() {g: T b = new T; b = p(b); b = b.f;} Pts(a,h) Pts(b,g)
75. 71 Apply Rules Recursively --- Round 3 Hpts(h,f,g) Pts(x,h) T p(T x) {h: T a = new T; a.f = x; return a;} void main() {g: T b = new T; b = p(b); b = b.f;} Pts(a,h) Pts(b,g) Pts(x,g) Pts(b,h)
76. 72 Apply Rules Recursively --- Round 4 Hpts(h,f,h) T p(T x) {h: T a = new T; a.f = x; return a;} void main() {g: T b = new T; b = p(b); b = b.f;} Pts(a,h) Pts(b,g) Pts(x,g) Pts(b,h) Pts(x,h) Hpts(h,f,g)
77. 73 Adding Context Sensitivity Include a component C = context. C doesn’t change within a function. Call and return can extend the context if the called function is not mutually recursive with the caller.
78. 74 Example of Rules: Context Sensitive Pts(V,H,B,I+1,C) :- “B,I: V=W” & Pts(W,H,B,I,C) Pts(X,H,B0,0,D) :- Pts(V,H,B,I,C) & “B,I: call P(…,V,…)” & “X is the corresponding actual to V in P” & “B0 is the entry of P” & “context D is C extended by P”