3.4 BIP-Bypass 교체 정책을 포함하는 캐시 분할
3.4.2 캐시 분할 알고리즘
위의 하드웨어를 사용하여 각 코어의
LRU
와BIP-Bypass
의 캐시 요구 량을 알 수 있다.
캐시 분할 알고리즘의 목적은 이 정보를 이용하여 시스 템 성능이 최대가 되도록 각각의 코어에 캐시 웨이를 할당하는 것이다.
본 논문에서는 캐시의 적중의 수가 최대가 될 때 최대의 성능이 나온다고 가정하고 캐시 웨이를 할당한다.
웨이를 할당하는 방식은 다음과 같이
3
가지 방식이 있다.
1.
모든 조합(all combination)
알고리즘LookAhead function::
for every i s.t. ∈
for every way s.t ∈
LRU_utility = get_utility_value(p, LRU, 0, way):
BIP_utility = get_utility_value(p, BIP-Bypass, 0, way):
2.
탐욕(greedy)
알고리즘3.
예견(lookahead)
알고리즘캐시 분할 알고리즘은 최적의 결과를 빠른 시간 내에 찾는 것이 관건이 다
.
모든 조합 알고리즘은 모든 조합을 일일이 시행해 보고 최대의 적중 수가 나오는 조합을 사용한다.
하지만 코어와 웨이의 수가 커질수록 시행 의 수가 기하급수적으로 증가한다.
탐욕 알고리즘은 각각의 웨이를 가장 많이 캐시 적중이 생기는 코어에게 배분하는 방식이다.
탐욕 알고리즘은 웨이 할당 알고리즘 중에 가장 단순하고 빠르지만,
최적의 할당을 못하는 경우가 생긴다.
예견 알고리즘은 탐욕 알고리즘보다 더 복잡하지만 최적 에 가까운 할당을 찾으며 탐욕 알고리즘과 비슷한 속도를 낸다.
웨이 할당 알고리즘 자체만 가지고도 연구 분야가 될 수 있으며
,
이 부 분은 본 논문의 중심이 아니기 때문에 본 논문의 모든 캐시 분할 알고리 즘에서는 비교적 빠른 속도와 좋은 웨이 할당 결과를 보여주는 예견 알고 리즘을 사용한다.
BIP-Bypass
교체 정책을 포함하는 예견 웨이 할당 알고리즘은 그림3.11
과 같다.
if(LRU_utility > BIP_utility) utility[i][way] = LRU_utility ; owner[i][way] = LRU;
else
utility[i][way] = BIP_utility ;6 owner[i][way] = BIP;
end if end for end for
balance = N /* Num blocks to be allocated */
allocations[i] = 0 for each competing application i while balance>0
for application i /* get max marginal utility */
alloc ⇐ allocations[i]
max_utility[i], max_policy[i] ⇐ get_max_utility(i, alloc, balance) blocks_req[i] ⇐ min blocks to get_max_utility for i
end for
winner ⇐ application with maximum value of max utility allocations[winner] += blocks_req[winner]
balance -= blocks_req[winner]
end while
end::
get_max_utility(p, alloc, balance)
max mu = 0
for (ii=1; ii<=balance; ii++)
utility, policy = get_utility_policy(p, alloc, alloc+ii) if utility > max_utility
max_utility = utility max_policy = policy
end if end for
return max_utility, max_policy
end::
get_utility_value(p, policy, a, b)::
U = change in misses for application p when the number
of blocks assigned to it increases from a to b under policy replacement.
return U
end::
get_utility_policy(p, a, b)::
U = utility[p][b] - utility[p][a]
policy = owner[p][b]
return U/(b-a), policy
end::
그림 3.11 BIP-Bypass 교체 정책을 포함하는 예견 웨이 할당 알고리즘
위 알고리즘을 크게 보면