λ¨μν μΆμ μλ£ν κΈ°λ° κ΅¬νμμλ,
μμ μ€κ³ μ νλ€μ΄ ν¨μ νΈμΆ μ€λ²ν€λμ λΆνμν λ©λͺ¨λ¦¬ μ κ·Όμ λ§λ€ μ μκΈ° λλ¬Έμ
μ΅μ νκ° νμνλ€λ μ¬μ€μ μκ²λμκ³ ,
μ΄λ²μλ κ·Έλ¬ν μ΅μ ν νλ λ°©λ²μ λν΄ μμλ³΄λ €κ³ νλ€.
루ν μμμ λΆνμνκ² λ°λ³΅λλ μ°μ°, λ©λͺ¨λ¦¬ μ κ·Ό, ν¨μ νΈμΆλ‘ μΈνμ¬
νλ‘κ·Έλ¨μ μ±λ₯μ΄ λ¨μ΄μ§λ νμμ λ§νλ€.
λ¨κ³λ³λ‘ μ΅μ νλ₯Ό μ§νν΄λ³΄μ.
for (i = 0; i < vec_length(v); i++) {
data_t val;
get_vec_element(v, i, &val);
*dest = *dest OP val;
}
for (i = 0; i < **vec_length(v)**; i++)
ν μ€νΈ μ‘°κ±΄μ΄ λ£¨νμ λ§€ μ€νλ§λ€ νκ°λμ΄μΌ νκΈ° λλ¬Έμ
ν¨μ νΈμΆ μ€λ²ν€λκ° λ°μν κ°λ₯μ±μ΄ μλ€.
long length = vec_length(v)
for (i = 0; i < length; i++) {
data_t val;
get_vec_element(v, i, &val);
*dest = *dest OP val;
}
long length = vec_length(v)
벑ν°μ κΈΈμ΄λ λ³νμ§ μμΌλ―λ‘ λ£¨ν λ°μμ νλ²λ§ κ³μ°νκ³ μ΄λ₯Ό μ΄μ©νλ€.
μ¬λ¬ λ² μννμ§λ§ κ³μ° κ²°κ³Όκ° λ³νμ§ μλ μ½λλ₯Ό μ°Ύμλ΄μ
루ν λ°μΌλ‘ λΉΌλ μ΅μ ν λ°©λ²μ 'μ½λ μ΄λ(Code Motion)' μ΄λΌκ³ νλ€.

λ€μμ λ λ€λ₯Έ 루ν λΉν¨μ¨μ± λ¬Έμ μ μμμ΄λ€.
void lower1(char *s){
long i;
for (i = 0; i < strlen(s); i++)
if (s[i] >= βAβ && s[i] <= βZβ)
s[i] -= (βAβ - βaβ);}
}
for (i = 0; i < **strlen(s)**; i++)
strlen(s)λ λ λ¬Έμ('\0')λ₯Ό λ§λ λκΉμ§ μ λΆ μ€μΊ β O(n)
루νλ nλ² λ°λ³΅λλ―λ‘, μ 체 μκ°μ O(nΒ²) λ‘ μ¦κ°
μ¦, λ¬Έμμ΄μ κΈΈμ΄κ° 2λ°°κ° λλ©΄ μ 체 μκ°μ 4λ°°λ‘ μ¦κ°
long i;
long len = vec_length(v);
*dest = IDENT;
for (i = 0; i < length; i++) ...
vec_length(v) κ²°κ³Όλ₯Ό ν λ²λ§ κ³μ°ν΄ lenμ μ μ₯
μ΄ μμλ νλ‘κ·Έλ¨ μμ±μμ νν λ°μνλ λ¬Έμ λ₯Ό 보μ¬μ£Όλλ° κ²λ³΄κΈ°μ μ¬μν μ½λ ν μ€μ΄
μ¨κ²¨μ§ μ κ·Όμ λΉν¨μ¨μ±(asymptotic inefficiency) μ κ°μ§ μ μλ€λ κ²μ΄λ€.
μλ₯Ό λ€μ΄, μλ¬Έμ λ³ν(lowercase) ν¨μκ° νλ‘κ·Έλ¨ μ±λ₯μ λ³λͺ©μ΄ λ κ±°λΌκ³ λ λ³΄ν΅ μκ°νμ§ μλλ€.
νμ§λ§ μ€μ λ°°ν¬ νμλ μ΄ ν¨μκ° λ°±λ§ κΈμ μ΄μμ λ¬Έμμ΄μλ μ μ©λ μ μλ€.
κ·Έλ¬λ©΄ μ΄ β무ν΄ν΄ 보μ΄λβ μ½λκ° μμκ°μ μ¬κ°ν μ±λ₯ λ³λͺ©μ΄ λλ€.
μλ ¨λ νλ‘κ·Έλλ¨Έμ μν μ€ νλλ μ΄λ° μ κ·Όμ λΉν¨μ¨μ±μ μμ μ½λμ λ£μ§ μλ κ²μ΄λ€.
루ν μμμ λ§€λ² ν¨μ νΈμΆμ΄ μΌμ΄λλ©΄,
ν¨μ νΈμΆ μ€λΉ(μΈμ μ λ¬, λ μ§μ€ν° μ μ₯), νΈμΆ ν λ³΅κ· μ λ μ§μ€ν° 볡μ λ° μ 리 μ κ°μ μ€λ²ν€λκ° λμ λλ€.
νΉν μ§§μ μ°μ°μ΄μ§λ§ νΈμΆμ΄ λΉλ²νλ©΄ μ 체 μ±λ₯μ ν¬κ² μ νμν¬ μ μλ€.
void combine2(vec_ptr v, data_t *dest)
{
long i;
long length = vec_length(v);
*dest = IDENT;
for (i = 0; i < length; i++) {
data_t val;
get_vec_element(v, i, &val);
*dest = *dest OP val;
}
}
get_vec_element(v, i, &val)
get_vec_elementλ λ§€λ² λ€μ λ²‘ν° μμλ₯Ό κ°μ Έμ€κΈ° μν΄ λ§€ 루ν μ€νλ§λ€ ν¨μ νΈμΆ
λν, λ§€λ² λ²‘ν°λ₯Ό μ°Έμ‘°ν λλ§λ€ κ²½κ³κ°μ 체ν¬νλ λΉν¨μ¨μ μΈ λμ
*dataμ μ μ₯
λλκ²λ μ±λ₯ κ°μ μ κ±°μ μ΄λ£¨μ΄μ§μ§ μμλ€.
μ€μ λ‘λ μ μ μ°μ°μ λν ν΄λ μ¬μ΄ν΄μ λ κΈΈμ΄μ‘λ€.
μ΄λ μ°λ¦¬κ° μ΅μ νν λΆλΆ μ΄μΈμμ μ±λ₯μ μ μ½νλ λ³λͺ©μ νμ±νκ³ μλ€λ λ§μ΄λ€.
μ΄μΈμλ μμΈμ λ°λ κ΅¬μ‘°λ‘ μΈν νμ΄νλΌμΈ λ³κ²½, λλ μ»΄νμΌλ¬μ 보μμ μΈ ν΄κ²° λ°©μ λ±λ μμ μ μλ€.
λ©λͺ¨λ¦¬ μ κ·Όμ CPU λ μ§μ€ν° μ°μ°μ λΉν΄ λ°°μ° λλ¦¬κ³ , κ°μ κ°μ μ¬λ¬ λ² μ°Έμ‘°νλ κ²½μ°,
λ©λͺ¨λ¦¬μμ μ½μμλ μ μ₯ν΄ λμ§ μλλ€λ©΄ κ³μν΄μ μ½μ΄μΌ νλ€.
νΉν μ΄λ¬ν μ°μ°μ΄ μ무리 μ§§μ μ°μ°μΌμ§λΌλ νΈμΆμ΄ λΉλ²νλ©΄ μ 체 μ±λ₯μ ν¬κ² μ νμν¬ μ μλ€.

λΆνμν λ©λͺ¨λ¦¬ μ κ·Ό


μ§κΈκΉμ§λ μ½λ ꡬ쑰 κ°μ κ³Ό λΆνμν μ°μ° μ κ±°λ₯Ό ν΅ν΄ 루ν ν¨μ¨μ±μ λμ΄λ λ°©λ²μ μ΄ν΄λ³΄μλ€.
νμ§λ§ μ΄λ¬ν μ΅μ νλ μ£Όλ‘ μΈμ΄μ μ»΄νμΌλ¬ μμ€μμ κ°λ₯ν λ²μμ κ΅νλλ€.
λ λμ μ±λ₯ ν₯μμ μν΄μλ νλ‘μΈμ λ΄λΆ ꡬ쑰(microarchitecture)λ₯Ό κ³ λ €ν μ΅μ νκ° νμνλ€.
μ΄μ μ°λ¦¬λ μ½λ μ체μ λ¨μν κ°μ μ λμ΄, νλ νλ‘μΈμμ λμ λ°©μμ μ΄ν΄νκ³
νλ‘μΈμμ λ§μ΄ν¬λ‘ꡬ쑰 μ¦, νλΆ μμ€ν
μ€κ³λ₯Ό νμ©νλ μ΅μ ν μ λ΅μ μ΄ν΄λ³΄λ €κ³ νλ€.
νμ§λ§ λ λμ μ±λ₯μ μν΄μλ λ§μ΄ν¬λ‘μν€ν
μ²(microarchitecture),
μ¦ νλ‘μΈμκ° λͺ
λ Ήμ μ€ννλ νλΆ μμ€ν
μ€κ³λ₯Ό νμ©ν μ΅μ νκ° νμνλ€.
λͺ¨λ μ±λ₯μ λμ΄λ΄κΈ° μν΄μλ νλ‘κ·Έλ¨ λΆμ + ν΄λΉ νλ‘μΈμμ λ§μΆ μ½λ μμ±μ΄ νμνλ€.
λ€λ§, λ²μ©μ μΈ μ΅μ ν μμΉμ λλΆλΆμ λ¨Έμ μ μ μ© κ°λ₯νλ€.
π‘ μΌλΆ μ€κ³μμλ ν λ²μ 100κ° μ΄μμ λͺ λ Ήμ΄ "λΉν μ€(in flight)" μνμΌ μ μμ.
1. μΈμ€νΈλμ μμ€ λ³λ ¬μ±
2. λ³λ ¬ μ€νμ μ±λ₯ μ ν μμΈ(νκ³)
- Latency Bound (μ§μ° νκ³)
: λͺ
λ Ήμ΄λ€μ΄ μμ°¨μ μΌλ‘λ§ μ€νλμ΄μΌ ν λ λ°μ.
- Throughput Bound (μ²λ¦¬λ νκ³)
νλ νλ‘μΈμλ μ΄μ€μΉΌλΌ(Superscalar) + Out-of-Order μ€ν λ°©μ μ¬μ©

addq %rax, %rdx β λ¨μΌ μ°μ°μΌλ‘ λμ½λ©.addq %rax, 8(%rdx) β 3κ°μ λ§μ΄ν¬λ‘-μ°μ°μΌλ‘ λΆν λ¨:load : λ©λͺ¨λ¦¬μμ κ°μ μ½μ΄μ΄.add : μ½μ κ°μ %raxμ λν¨.store : κ²°κ³Όλ₯Ό λ©λͺ¨λ¦¬μ μ μ₯.rλ₯Ό κ°±μ νλ λͺ
λ Ή λμ½λ© μ, κ³ μ νκ·Έ t μμ±.(r, t) μ μ₯.r μ¬μ© μ β νκ·Έ t κΈ°λ°μΌλ‘ μ€μ κ° μΆμ .(v, t)κ° μμ±λλ©΄, μ΄λ₯Ό κΈ°λ€λ¦¬λ λͺ
λ Ήλ€μ΄ μ¦μ μ¬μ©.