Design Automation Algorithm
44분

CLUSTERING — 게이트를 묶어 문제를 줄이는 일

design-automationalgorithmclusteringvlsiphysical-design
CLUSTERING · CH.1
LECTURE NOTE — VLSI 물리 설계 자동화, 클러스터링

클러스터링, 게이트를 묶어
문제를 작게 만드는 일

수천 개의 게이트를 한꺼번에 다루는 대신 먼저 반을 편성합니다. 원래 회로에서는 게이트가 정점이었지만, 변환된 회로에서는 클러스터가 정점이 됩니다. 다만 묶는 방식에 따라 묶음 사이의 연결 수와 경로 지연이 달라집니다.

게이트가 정점 목적 + 제약 분할 · 배치의 입력
01

큰 그림: 회로를 묶는다는 것은 무엇을 최적화하는 일일까OBJECTIVE vs CONSTRAINT

게이트가 아주 많은 회로를 하나 받았습니다. 어디에 배치할지, 어떻게 여러 영역으로 나눌지 결정해야 합니다. 그런데 처음부터 모든 게이트를 개별적으로 다루면 문제의 규모가 너무 큽니다. 서로 관련 있는 게이트들을 먼저 작은 묶음으로 만들면 어떨까요?

클러스터링은 게이트들을 묶고, 그 묶음 사이의 연결로 새로운 회로 네트워크를 만드는 일입니다. 회로 분할과 배치의 전처리로 사용되어 이후에 풀 문제를 작게 만들어 줍니다. 다만 단순히 정점 수만 줄이면 끝나는 것은 아닙니다. 어떤 게이트를 함께 묶느냐에 따라 묶음 사이의 연결 수와 경로 지연이 달라집니다.

개별 학생 수천 명을 한꺼번에 관리하는 대신 먼저 반을 편성하는 것과 비슷합니다. 그런데 “가능한 한 많이 묶으면 언제나 좋은가요?” 제한이 없다면 회로 전체를 한 덩어리로 만들고 싶겠지요. 하지만 하나의 묶음에 넣을 수 있는 게이트 수가 제한될 수도 있고, 바깥에서 받아들이는 입력 수가 제한될 수도 있습니다.

오늘 공부하는 것은 좋은 묶음을 만들고 싶다는 목적과 마음대로 묶을 수 없다는 제약 사이의 문제입니다.

또 하나 구분합시다. 클러스터링 자체에서는 만들 클러스터의 개수가 미리 정해져 있지 않고, 클러스터끼리 면적이 비슷해야 한다는 조건도 보통 요구하지 않습니다. 뒤에서 등장할 균형 이분할은 두 영역의 크기를 비슷하게 만드는 문제입니다. 따라서 “클러스터링을 전처리로 사용한다”와 “클러스터링 단계부터 모든 묶음의 크기를 균등하게 맞춘다”는 같은 말이 아닙니다.

오늘의 세 갈래 길
DELAY Rajaraman–Wong

게이트 자체에도 시간이 걸리고 클러스터 경계를 넘을 때도 시간이 걸리는 모델. 클러스터 크기를 제한하면서 가장 느린 경로를 줄입니다.

DEPTH FlowMap

클러스터의 외부 입력 수를 제한하고, LUT로 구성한 회로의 깊이를 최소화합니다.

CUT SIZE 다단계 코어스닝 (hMetis)

연결이 강한 것들을 묶어 회로를 여러 수준으로 축약하고, 최종적인 분할을 잘할 수 있도록 준비합니다.

앞의 둘은 지연 중심, 마지막은 컷 크기 중심이라는 차이를 기억하세요. 이번 강의에서 실제로 배우는 것은 세 알고리즘의 이름이 아닙니다. 회로를 그래프나 하이퍼그래프로 바꾸는 방법, 최적화 목적을 수식으로 표현하는 방법, 라벨이라는 요약 정보를 계산하는 방법, 정점 분리를 이용해 입력 수 제한을 네트워크 컷으로 바꾸는 방법, 그리고 작은 문제의 해를 다시 원래 회로의 해로 복원하는 방법입니다.

어떤 클러스터링 문제를 보든 먼저 던질 네 질문
무엇을 줄이는가
최장 경로 지연인가, LUT 깊이인가, 클러스터 간 넷 수인가.
무엇이 제한되는가
클러스터 크기인가, 외부 입력 핀 수인가, 면적 균형인가.
복제가 가능한가
같은 원래 노드를 여러 클러스터 안에 중복 구현해도 되는가.
이 숫자는 무엇인가
지금 계산하는 값이 시간인가, 깊이인가, 개수인가.

핵심 O/X 퀴즈

1. 이 장의 모든 클러스터링 알고리즘은 클러스터의 개수를 최소화한다.
X지연이나 클러스터 간 연결 수처럼 서로 다른 목적을 다룹니다.
2. 클러스터링은 회로 분할이나 배치 문제의 규모를 줄이는 전처리가 될 수 있다.
O묶음을 새 정점으로 취급해 문제를 축약합니다.
3. 클러스터링에서는 클러스터 사이의 면적 균형이 항상 필수 조건이다.
X원문은 면적 균형이 보통 요구되지 않는다고 설명합니다.
02

Rajaraman–Wong의 출발점: 무엇에 지연을 부과할 것인가GENERAL DELAY MODEL · Figure 1.1–1.2

먼저 회로를 DAG, 즉 방향성 비순환 그래프로 보겠습니다. 화살표는 신호가 흘러가는 방향입니다. PI는 외부에서 신호가 들어오는 주입력, PO는 결과를 내보내는 주출력입니다. 우리의 관심은 어느 PI에서 출발하든 어느 PO에 도달하든, 그중 가장 늦게 도착하는 경로입니다. 평균적으로 빠른 회로가 아니라 가장 느린 경로가 가능한 한 빠른 회로를 찾습니다.

일반 지연 모델에서 시간이 붙는 곳
노드
각 노드에 고유한 지연값이 있습니다. 같은 클러스터로 묶어도 이 시간은 사라지지 않습니다.
클러스터 간 간선
서로 다른 클러스터를 잇는 간선에 일정한 지연 D가 붙습니다.
클러스터 내 간선
지연을 부과하지 않습니다. 사라지는 것은 내부화된 연결의 경계 통과 비용뿐입니다.
복제
이 알고리즘의 해에서는 원래 DAG의 일부 노드를 복제할 수 있습니다.

이제 알고리즘이 사용할 재료를 준비합시다. 원문의 라벨 l(v)는 여기서 읽기 쉽게 ℓ(v)라고 쓰겠습니다. 이것은 PI에서 v까지 도달하는 최대 지연을 요약한 값입니다. 또 하나 중요한 값이 Δ(x,v)입니다.

Δ(x,v)는 x의 출력에서 v의 출력까지 가는 경로 중, 노드 지연만 더했을 때 가장 큰 값입니다. 연결 지연은 넣지 않습니다. 출발점이 x의 ‘입력’이 아니라 ‘출력’이므로 x 자신의 지연도 다시 넣지 않습니다.

PDF 3쪽 그림 1.1을 보세요. PI는 a, b, c이고 PO는 k, l입니다. 모든 노드 지연은 1, 클러스터 사이의 지연 D는 3, 클러스터 크기 한도는 4입니다. 예를 들어 a→d에서는 a의 출력부터 재므로 Δ(a,d)=1입니다. b→e→g→i에서는 e, g, i의 지연만 더하여 Δ(b,i)=3입니다. b→e→g→i→k에서는 Δ(b,k)=4입니다.

Figure 1.2 — 최대 지연 행렬 Δ (행=출발, 열=도착)
    a b c d e f g h i j k l
a   0 0 0 1 0 1 0 0 2 0 3 0
b   0 0 0 1 1 0 2 0 3 3 4 4
c   0 0 0 0 1 0 2 1 3 3 4 4
d   0 0 0 0 0 0 0 0 1 0 2 0
e   0 0 0 0 0 0 1 0 2 2 3 3
f   0 0 0 0 0 0 0 0 1 0 2 0
g   0 0 0 0 0 0 0 0 1 1 2 2
h   0 0 0 0 0 0 0 0 0 1 2 2
i   0 0 0 0 0 0 0 0 0 0 1 0
j   0 0 0 0 0 0 0 0 0 0 1 1
k   0 0 0 0 0 0 0 0 0 0 0 0
l   0 0 0 0 0 0 0 0 0 0 0 0

원문 표에는 경로가 없는 칸도 0으로 표시되어 있습니다. 이 예제에서 0이라는 표시만 보고 두 노드가 연결되어 있다고 해석하면 안 됩니다. 실제 라벨 계산에서는 v의 선행 노드들을 대상으로 Δ(x,v)를 사용합니다. 또한 이 행렬은 클러스터링 결과가 아니라, 원래 DAG에서 미리 구해 두는 재료입니다.

핵심 O/X 퀴즈

1. 같은 클러스터에 속하면 노드 자체의 지연도 0이 된다.
X0이 되는 것은 클러스터 내부 간선의 지연입니다.
2. Δ(x,v)는 출발 노드 x의 지연을 중복해서 포함하지 않는다.
Ox의 출력부터 측정합니다.
3. 모든 노드 지연이 1인 예제에서 Δ(b,k)=4이다.
O예시 경로에서 x 이후의 네 노드 지연을 더합니다.
03

라벨링의 핵심: 가장 부담스러운 선행 노드를 안으로 데려오자LABELING PHASE

전체 알고리즘은 두 단계입니다. 위상 순서로 라벨과 후보 클러스터를 계산한 뒤, 출력에서 입력 방향으로 필요한 클러스터를 만듭니다. 설계도를 모두 준비하되, 필요한 설계도만 골라 조립하는 셈입니다.

1
PI 초기화. 각 PI의 라벨을 그 PI의 노드 지연으로 둡니다.
2
위상 순서 방문. v를 계산할 때 그 앞에 있는 x의 라벨을 써야 하므로, x에 대한 계산이 이미 끝나 있어야 합니다.
3
Gv 구성. v와 그 모든 선행 노드로 이루어진 부분 그래프를 잡습니다. ‘모든 선행 노드’는 바로 앞의 입력 노드만이 아니라, 여러 단계를 거슬러 올라가 도달할 수 있는 조상도 포함합니다.
4
후보 값 계산 후 큰 것부터 담기. v 자신을 제외한 각 x에 대해 ℓv(x)를 구하고, v를 포함한 전체 크기가 한도를 넘지 않도록 cluster(v)에 추가합니다.
ℓv(x) = ℓ(x) + Δ(x,v) ℓ(x)는 PI에서 x까지의 지연 정보, Δ(x,v)는 x 이후 v까지의 노드 지연. 구간이 이어지므로 x를 두 번 세지 않습니다.

한도가 4라면 v도 한 자리를 쓰므로 다른 노드는 최대 세 개입니다. 왜 큰 값부터 넣을까요? 밖에 남겨 놓으면 큰 지연을 유발할 후보부터 안으로 들여오겠다는 생각입니다.

좌석이 제한된 방에 사람을 데려오되, 밖에 남았을 때 가장 큰 부담을 주는 사람을 먼저 들이는 셈입니다. 다만 이것은 선택 원리를 이해하기 위한 직관이지, 이 설명만으로 일반적인 지연 최적성 증명이 완성되는 것은 아닙니다.

이제 선택을 끝낸 뒤의 라벨을 계산해야 합니다. 두 종류의 경로를 따로 봅니다.

라벨을 만드는 두 경로
l₁ — 안에서 출발
클러스터 안에 PI가 들어 있다면, 그 PI에서 시작하는 경로는 외부 클러스터에서 넘어오는 비용 없이 시작합니다. 내부 PI들의 ℓv 값 중 최댓값. 해당 PI가 없으면 원문 예제처럼 l₁=0.
l₂ — 밖에서 진입
바깥에 남은 후보 집합 S에서 가장 큰 ℓv 값에 클러스터 간 지연 D를 더한 값. S가 비었으면 l₂=0.
ℓ(v) = max{ l₁ , l₂ } 안에서 출발하는 경로와 밖에서 들어오는 경로 중 더 느린 것이 v의 라벨을 결정합니다.

S에는 아직 선택되지 않은 모든 조상 후보가 들어 있습니다. 이것을 나중에 실제 클러스터의 바로 바깥 입력을 뜻하는 input(v)와 혼동하면 안 됩니다. 라벨 계산에서 사용하는 후보 집합과, 복원 단계에서 찾아내는 경계 입력 집합은 역할이 다릅니다.

핵심 O/X 퀴즈

1. Gv에는 v의 직접 입력 노드만 포함된다.
X모든 선행 노드를 포함합니다.
2. 크기 한도가 4라면 cluster(v)에 v 외의 노드 네 개를 넣을 수 있다.
Xv도 크기에 포함되므로 추가 가능한 노드는 최대 세 개입니다.
3. 라벨은 내부 PI에서 시작하는 경우와 외부 후보를 거치는 경우의 최대를 비교한다.
O두 경우를 l₁과 l₂로 계산합니다.
04

작은 노드에서 병목까지: d에서 j까지 직접 계산하기WORKED EXAMPLE · Figure 1.3

이제 실제 숫자로 감각을 만들겠습니다. PDF의 비-PI 위상 순서는 d, e, f, g, h, i, j, k, l입니다. 처음에는 ℓ(a)=ℓ(b)=ℓ(c)=1입니다.

d부터 봅시다. Gd={a,b,d}입니다. ℓd(a)=1+1=2이고, ℓd(b)도 2입니다. d와 함께 a, b를 넣어도 크기가 3이므로 cluster(d)={a,b,d}가 됩니다. 안에 있는 두 PI가 만드는 값은 2이고, 밖에 남은 후보는 없습니다. 따라서 ℓ(d)=2입니다. 첫 계산에서는 아직 경계 통과 비용 D=3이 등장하지 않았습니다. 필요한 선행 노드를 전부 같은 클러스터에 넣었기 때문입니다.

e도 같은 구조입니다. b와 c를 함께 넣어 cluster(e)={b,c,e}, ℓ(e)=2입니다. f는 a만 필요하므로 cluster(f)={a,f}, ℓ(f)=2입니다. g에서는 b, c, e가 선행 노드입니다. b와 c에서는 1+2=3, e에서는 2+1=3이 나옵니다. g를 포함해 정확히 네 노드이므로 cluster(g)={b,c,e,g}, ℓ(g)=3입니다. h는 c와 함께 묶여 cluster(h)={c,h}, ℓ(h)=2입니다.

여기까지는 편안했습니다. 필요한 것을 모두 넣을 수 있었으니까요. 이제 i를 만나면 상황이 달라집니다. Gi={a,b,c,d,e,f,g,i}이므로, i 외에도 후보가 일곱 개나 됩니다. 그러나 빈자리는 세 개뿐입니다.

ℓi(a)=ℓi(d)=ℓi(f)=3   |   ℓi(b)=ℓi(c)=ℓi(e)=ℓi(g)=4 b는 1+3=4, e는 2+2=4, g는 3+1=4. 값 4인 후보가 넷인데 자리는 셋 — 어떻게 골라도 값 4인 후보가 적어도 하나는 밖에 남습니다.

원문에서는 cluster(i)={i,g,e,c}를 선택합니다. 안의 PI c가 만드는 값은 l₁=4입니다. 밖에 남은 S={b,a,d,f}에서는 b의 값이 가장 크므로 l₂=4+3=7입니다. 따라서 ℓ(i)=7입니다. 6쪽 그림 1.3의 점선 경로는 네 노드의 지연 4와 한 번의 클러스터 경계 지연 3을 보여 줍니다. 숫자 7은 단순히 노드가 일곱 개라는 뜻이 아닙니다.

동률을 눈여겨보세요. 원문은 c 대신 b를 넣은 {i,g,e,b}도 가능한 해라고 명시합니다. 클러스터 구성원이 달라도 같은 지연을 얻을 수 있으므로, 표를 대조할 때 정점 이름 하나가 다르다고 곧바로 오답으로 판단하면 안 됩니다. 동률 처리와 계산된 경계 지연을 함께 확인해야 합니다.

j도 유사합니다. b, c, e, g의 ℓj 값은 4이고, h의 값은 3입니다. 원문의 선택은 cluster(j)={b,e,g,j}입니다. 내부 PI b 때문에 l₁=4이고, 밖에 남은 c 때문에 l₂=4+3=7입니다. 따라서 ℓ(j)=7입니다. 여기서도 b 대신 c를 넣은 대안이 제시됩니다. 표에 적힌 동률 원소의 나열 순서보다, 실제로 선택한 집합과 그 집합이 만드는 값에 집중합시다.

i와 j에서 라벨이 7로 뛴 이유는, 크기 제한 때문에 중요한 선행 경로를 모두 담을 수 없어 경계 비용을 피하지 못했기 때문입니다.

핵심 O/X 퀴즈

1. i에서는 ℓi 값이 4인 후보 네 개를 모두 클러스터 안에 넣을 수 있다.
Xi를 제외하면 자리가 세 개뿐입니다.
2. 원문에서 ℓ(i)=7은 노드 지연 4와 클러스터 간 지연 3으로 해석할 수 있다.
O그림 1.3이 해당 경로를 보여 줍니다.
3. 동률 선택이 달라지면 반드시 최종 지연도 달라진다.
X원문에도 동일한 라벨을 갖는 대안 클러스터가 있습니다.
05

출력 노드와 실제 복원: 후보 클러스터를 모두 만들지는 않는다CLUSTERING PHASE · Table 1.1–1.2

이제 PO인 k를 봅시다. i와 j의 라벨이 7이므로 ℓk(i)=ℓk(j)=8입니다. b, c, e, g의 값은 5이고, a, d, f, h의 값은 4입니다. 따라서 원문은 가장 큰 두 후보 i, j와 값 5인 g를 넣어 cluster(k)={g,i,j,k}를 만듭니다.

이번에는 내부 PI가 없습니다. 그러므로 l₁=0입니다. 바깥에 남은 후보 중 최대 ℓk 값은 5이므로 l₂=5+3=8, 결국 ℓ(k)=8입니다. 여기서 내부 PI가 없다는 말은 입력이 없다는 뜻이 아닙니다. 이 클러스터는 다른 클러스터가 만들어 준 신호를 받아 동작합니다.

PO l에서는 j의 값이 8, b·c·e·g의 값이 5, h의 값이 4입니다. 원문은 cluster(l)={e,g,j,l}을 택합니다. 내부 PI는 없고, 바깥 최대값은 5이므로 ℓ(l)=8입니다.

Table 1.1 — 라벨과 저장한 후보 클러스터
노드라벨저장한 후보 클러스터
a, b, c1각각 자기 자신
d2{a,b,d}
e2{b,c,e}
f2{a,f}
g3{b,c,e,g}
h2{c,h}
i7{c,e,g,i}
j7{b,e,g,j}
k8{g,i,j,k}
l8{e,g,j,l}

7쪽 표 1.1의 후보 목록을 이제 실제 회로로 바꿉니다. 출력 집합 L={k,l}에서 시작합니다. k를 꺼내 cl(k)를 만들면, 바깥에서 이 클러스터로 신호를 넣는 노드는 f, d, e, h입니다. 8쪽 그림 1.4에서 회색으로 표시된 노드들입니다. 이들을 새 작업 대상으로 등록합니다. l의 클러스터를 만들 때에는 입력 노드 b, c, h가 추가됩니다.

“k의 클러스터 안에 i와 j가 있으니, i와 j의 후보 클러스터도 별도로 만들어야 하나요?” 아닙니다. i와 j는 k의 클러스터 안에서 구현됩니다. 별도의 뿌리 클러스터가 필요한지는 실제 바깥 입력을 추적해서 결정합니다. 후보를 저장한 모든 노드가 독립된 최종 클러스터가 되는 것은 아닙니다.

원문 순서대로 f, d, e, h, b, c를 처리하면 작업 집합이 빕니다. 만들어지는 클러스터의 뿌리는 k, l, f, d, e, h, b, c, 총 여덟 개입니다. 각 구성은 앞의 표에서 해당 행을 가져오면 됩니다. 특히 PI b와 c도 이 일반 지연 모델의 복원 예제에서는 단독 클러스터로 등장합니다. 뒤의 FlowMap에서는 PI를 LUT로 만들지 않으므로 이 차이를 기억해 두세요.

복제도 확인합시다. g와 j는 k의 클러스터와 l의 클러스터에 함께 나타납니다. 최종 표 1.2의 원소 수를 직접 합하면 20이고 원래 노드는 12개이므로, 추가된 노드 사본은 8개입니다. 이름별로 세면 복제가 발생한 원래 노드는 a, b, c, e, g, j의 여섯 종류이고, b와 c는 각각 추가 사본이 두 개입니다. 원문의 복제 수 8을 읽을 때에는 ‘추가 사본 수’와 ‘복제된 원래 노드의 종류 수’를 구별해야 합니다.

최대 지연은 8입니다. 9쪽 그림 1.5의 c→e→g→i→k나 c→e→g→j→l이 그 예입니다. 노드 지연 합 5에 한 번의 클러스터 경계 비용 3을 더하면 8입니다. 라벨과 실제 경로의 시간이 일치합니다.

핵심 O/X 퀴즈

1. 라벨링 단계에서 후보를 계산한 모든 노드의 클러스터를 반드시 생성한다.
X출력에서 시작해 실제 필요한 경계 입력만 추적합니다.
2. 최종 예제는 클러스터 8개와 최대 지연 8을 갖는다.
O각각 표 1.2와 출력 라벨에서 확인됩니다.
3. 추가 사본 수와 복제가 발생한 원래 노드의 종류 수는 항상 같은 값이다.
X한 원래 노드가 여러 번 추가 복제될 수 있습니다.
06

FlowMap으로 전환: 게이트 개수가 아니라 입력 핀 개수가 제한된다PIN CONSTRAINT · K-LUT

이제 제약을 바꿉시다. 앞에서는 내부 노드 수가 중요했다면, FlowMap에서는 클러스터 바깥에서 들어오는 서로 다른 입력을 몇 개까지 받아들일 수 있는가가 중요합니다. 이것이 핀 제약이고, K입력 LUT로 FPGA 회로를 매핑하는 문제에 해당합니다.

가장 먼저 버려야 할 오해. “3-LUT니까 게이트 세 개까지 넣는 상자겠네요?” 아닙니다. 3이라는 숫자는 내부 게이트 개수가 아니라 입력 수의 상한입니다. 내부에 여러 게이트가 포함되어도 외부 입력을 세 개 이하로 정리할 수 있다면 그 기준을 만족합니다. 반대로 내부 게이트가 적어도 서로 다른 외부 입력이 너무 많으면 들어갈 수 없습니다.

두 모델의 초기 조건 비교
항목Rajaraman–WongFlowMap (PDF 10쪽 본문)
제약클러스터 크기(노드 수)외부 입력 수 K
노드 지연노드마다 고유 값0
내부 간선00
클러스터 간 간선D단위 지연 1
PI 라벨 초기값각 PI의 노드 지연0

따라서 앞에서 구한 숫자 8과 앞으로 구할 숫자 2는 같은 단위의 물리적 시간을 그대로 비교한 값이 아닙니다. 서로 다른 모델 아래에서 계산된 값입니다.

“새로운 노드 t를 처리할 때, 앞선 노드보다 한 단계 더 깊어져야 할까?”

FlowMap은 이 질문을 반복합니다. t의 직접 fan-in 라벨 중 최댓값을 p라고 합시다. 목표는 t를 깊이 p 안에 수용할 수 있는지 확인하는 것입니다. 가능하면 ℓ(t)=p, 불가능하면 ℓ(t)=p+1로 정합니다. 이미 p에 있는 중요한 앞부분을 t와 함께 묶을 수 있다면, 경계를 하나 더 만들지 않고 기존 깊이를 유지할 수 있다는 생각입니다. 저장할 클러스터는 원문의 표기대로 X̄_t라고 부르겠습니다.

실습 회로는 각 게이트의 입력이 최대 두 개인 2-bounded 네트워크이고, K=3입니다. 따라서 깊이 p를 유지하는 데 실패해도 t만 새 LUT로 만들면 직접 입력 수가 핀 제약을 넘지 않습니다. 이것이 이 예제에서 p+1이라는 다음 선택지를 사용할 수 있는 이유입니다. 처음부터 아무 입력 제한도 없는 게이트에 같은 주장을 적용하는 것은 아닙니다.

그러면 남은 문제는 하나입니다. “깊이를 유지하면서 외부 입력을 K개 이하로 제한할 수 있는가?” FlowMap은 이 질문을 네트워크 컷 문제로 바꿉니다.

핵심 O/X 퀴즈

1. K-LUT의 K는 내부에 들어갈 원래 게이트 수의 상한이다.
X외부 입력 수의 상한입니다.
2. FlowMap 예제에서는 PI의 라벨을 0으로 초기화한다.
O앞의 일반 지연 모델과 초기값이 다릅니다.
3. 깊이 p를 유지할 수 있는 K-feasible cut이 없으면 라벨을 p+1로 정한다.
O이 예제에서는 t만 새 LUT로 두는 대안을 사용합니다.
07

회로를 유량으로 바꾸기: 왜 정점을 둘로 쪼개는가NODE SPLITTING · MAX-FLOW MIN-CUT

1
Nt 구성. t와 모든 선행 노드를 모읍니다. 가상의 소스 s를 추가하고 부분 그래프에 있는 모든 PI와 연결해, 여러 PI에서 시작하는 문제를 하나의 s에서 시작하는 문제로 바꿉니다.
2
N′t 축약. t의 fan-in 라벨 최댓값 p를 구하고, Nt 안에서 라벨이 p인 노드들을 t로 축약합니다. 현재 가장 높은 단계에 있는 앞부분을 t와 함께 처리할 수 있는지 시험하는 것입니다. 이 노드들을 경계 밖에 남기면 유지하려던 깊이 p를 넘어섭니다.
3
N″t 정점 분리. s와 t를 제외한 각 노드 x를 x와 x′로 나누고 그 사이에 bridging edge를 둡니다. 이 간선의 용량은 1, 원래 연결 관계를 전달하는 나머지 간선의 용량은 무한대입니다.
4
컷 판정. s와 t를 분리하는 컷의 용량이 K 이하인지 확인합니다. 무한 용량 간선을 자르는 선택은 유한한 핀 예산 안에 들어오지 못하므로, 허용되는 컷은 용량 1인 bridging edge들을 선택하게 됩니다.

왜 보통 간선을 모두 용량 1로 두면 안 될까요?

우리가 세려는 것은 원래 회로의 선 개수가 아니라, 클러스터가 외부로부터 받아야 하는 입력 노드의 수이기 때문입니다. 하나의 신호가 안쪽 여러 곳으로 퍼진다고 해서 서로 다른 외부 입력이 여러 개 생기는 것은 아닙니다. 정점 하나를 통과하는 비용을 1로 표현하려고 그 정점을 둘로 나눈 것입니다.

정점에 비용을 매기고 싶은데 도구가 간선 컷이라면, 정점을 쪼개 비용을 간선으로 옮긴다 — 이것이 이 변환의 전부입니다.

원문은 증가 경로를 찾는 방식으로 이를 판정합니다. 단위 유량을 기준으로 K를 초과하는 흐름을 확보하면, 컷 용량이 K 이하일 수 없으므로 해당 판정을 끝낼 수 있습니다. 가능한 컷이 여러 개라면 ‘높이’도 봅니다. 컷 C(X, X̄)에서 X는 소스 쪽이고, 컷의 높이는 그쪽 회로 노드들의 라벨 중 최댓값입니다. 원문은 K-feasible cut 중 최소 높이를 선택한다고 설명합니다. 따라서 컷 크기와 컷 높이는 서로 다른 숫자입니다.

컷을 찾은 뒤에는 싱크 쪽에 포함된 원래 노드들을 t의 클러스터로 복원합니다. 다만 x와 x′ 사이의 bridging edge가 잘렸다면, 그 노드는 클러스터 내부에서 구현하는 노드가 아니라 외부 입력이 됩니다. 쪼개진 그래프의 싱크 쪽 조각만 보고 원래 x 전체를 내부 노드로 포함시키면 안 됩니다.

이런 입력 경계를 정리하여 X̄_t를 얻고 ℓ(t)=p로 정합니다. 컷이 없으면 X̄_t={t}, ℓ(t)=p+1입니다. 결국 유량 계산은 깊이를 유지하면서 외부 입력 신호를 K개 이하로 제한할 수 있는지 판정하는 장치입니다.

핵심 O/X 퀴즈

1. 정점 분리는 입력 노드 하나의 선택 비용을 용량 1인 간선으로 표현한다.
O정점 경계 문제를 간선 컷으로 바꿉니다.
2. 컷의 높이는 잘린 bridging edge의 개수와 같은 뜻이다.
X높이는 소스 쪽 노드의 최대 라벨입니다.
3. bridging edge가 잘린 원래 노드는 복원된 클러스터의 외부 입력이 된다.
O내부 구현 노드와 경계 입력을 구분해야 합니다.
08

FlowMap 라벨 계산: 첫 게이트는 왜 0이 아니고, i는 왜 2인가Figure 1.6–1.11 · K=3

PDF 12쪽 그림 1.6의 회로에는 이름 없는 PI들과 내부 노드 a부터 k까지가 있고, h·j·k를 PO로 취급합니다. 앞의 Rajaraman–Wong 예제와 같은 알파벳이 나와도 다른 회로이므로, 앞에서 구한 라벨을 가져오면 안 됩니다. 위상 순서는 a, b, c, d, e, f, g, h, i, j, k입니다.

a에서 시작합시다. 직접 입력인 PI들의 라벨은 0이므로 p=0입니다. 이들을 a로 축약하면 그림 1.7처럼 s에서 a로 가는 무한 용량 연결이 남습니다. 용량 3 이하로 자르는 컷은 없습니다. 따라서 X̄_a={a}, ℓ(a)=1입니다. b, c도 같은 이유로 자기 자신만 저장하고 라벨은 1입니다.

여기서 “입력이 두 개인데 3-LUT에 못 들어간다는 뜻인가요?”라고 생각하면 핵심을 놓친 것입니다. 지금 실패한 것은 a의 구현 자체가 아니라 깊이 0으로 a를 구현하겠다는 시도입니다. a를 첫 번째 LUT로 만들면 정상적으로 구현되고, 그 라벨이 1입니다.

d에서는 p=1입니다. 13쪽 그림 1.8에서 a와 d를 함께 처리하고 바깥 PI 세 개를 입력으로 삼는 컷을 얻습니다. 컷 크기는 3이고, 소스 쪽 라벨의 최댓값은 0입니다. 따라서 X̄_d={a,d}, ℓ(d)=1입니다. a 다음에 d가 있다고 해서 반드시 라벨이 2가 되는 것은 아닙니다. 같은 LUT 안에 흡수할 수 있기 때문입니다.

e는 단독으로 라벨 1을 얻습니다. f는 c와 함께 묶여 X̄_f={c,f}, 라벨 1입니다. g도 X̄_g={c,g}, 라벨 1이고, 그림 1.9에서 외부 입력이 두 개로 정리됩니다. h에서는 a, d, h를 함께 묶을 수 있어 X̄_h={a,d,h}, 라벨은 여전히 1입니다. 세 게이트를 지나가는 원래 경로라도 하나의 LUT로 구현되면 이 모델의 깊이는 한 단계입니다.

이제 i가 전환점입니다. p=1인 상태에서 b, c, f를 i 쪽으로 축약합니다. 14쪽 그림 1.11의 유량 그래프를 보면 다섯 PI를 통하는 다섯 개의 단위 용량 통로가 남습니다. K=3으로는 이들을 모두 분리할 수 없습니다. 따라서 깊이 1을 유지하지 못하고 X̄_i={i}, ℓ(i)=2가 됩니다.

원래 게이트의 직접 입력 수가 작다는 사실과, 앞부분 전체를 한 LUT에 흡수했을 때 필요한 외부 입력 수가 작다는 사실은 다릅니다. 문 하나의 폭이 좁다고 해서, 그 문 뒤의 방 전체를 옮길 때 필요한 통로도 좁은 것은 아닙니다.

j는 어떨까요? 이제 p=2입니다. i를 j와 함께 넣고, 바깥의 e, b, f를 입력으로 받는 컷을 찾을 수 있습니다. 그러므로 X̄_j={i,j}, ℓ(j)=2입니다. k도 i와 함께 묶고 b, f, g를 입력으로 받으면 되어 X̄_k={i,k}, ℓ(k)=2입니다. 두 컷의 높이는 모두 1입니다.

섞으면 안 되는 세 숫자
컷 높이 1
컷의 소스 쪽 회로 노드들의 최대 라벨.
결과 라벨 2
이 단위 지연 모델에서 t까지의 깊이.
핀 제약 3
LUT 하나가 받을 수 있는 외부 입력 수의 상한.

짧게 정리하면 a부터 h까지 라벨은 1, i·j·k는 2입니다. 그러나 같은 라벨을 가졌다고 저장된 클러스터도 같은 것은 아닙니다. 라벨은 도착 깊이라는 요약값이고, 클러스터는 그 값을 달성하는 구체적인 구현 정보입니다.

핵심 O/X 퀴즈

1. a에서 컷을 찾지 못했다는 것은 a를 3-LUT로 구현할 수 없다는 뜻이다.
X깊이 0을 유지할 수 없다는 뜻입니다.
2. 원래 회로에서 여러 게이트를 지나는 경로도 하나의 LUT에 포함될 수 있다.
Oh의 {a,d,h}가 예입니다.
3. i의 라벨이 2이므로 그 후속 노드 j와 k는 반드시 라벨 3이어야 한다.
Xi를 각각의 LUT 내부로 흡수하여 라벨 2를 유지합니다.
09

LUT 네트워크 복원: 복제는 어디에서 나타나는가Table 1.4 · Figure 1.15

출력 L={h,j,k}에서 필요한 입력을 거슬러 올라가며 실제 LUT 네트워크를 만들겠습니다. 다만 FlowMap은 저장된 클러스터의 비-PI 노드들을 LUT로 만들고, PI 자체는 LUT로 만들지 않습니다.

먼저 h를 꺼냅니다. h′={a,d,h}이고, 입력은 세 PI입니다. PI를 작업 집합에 넣지 않으므로 다음 작업은 j와 k뿐입니다. j를 꺼내면 j′={i,j}, 입력은 {e,b,f}입니다. k를 꺼내면 k′={i,k}, 입력은 {b,f,g}입니다. 두 LUT가 같은 입력을 요구할 수 있으므로 작업 집합에서는 중복을 관리해야 합니다. 남은 e, b, f, g를 처리하면 각각 e′={e}, b′={b}, f′={c,f}, g′={c,g}입니다. 모든 입력이 PI까지 연결되었으므로 복원이 끝납니다.

Table 1.4 — 최종 LUT 네트워크
LUT의 뿌리포함하는 원래 노드외부 입력
h{a,d,h}PI 3개
j{i,j}{e,b,f}
k{i,k}{b,f,g}
e{e}PI 2개
b{b}PI 2개
f{c,f}PI 3개
g{c,g}PI 2개

총 일곱 개의 LUT입니다. 표에서 같은 원래 노드가 어디에 두 번 나타나는지 찾아보세요. c는 f와 g의 LUT 안에, i는 j와 k의 LUT 안에 나타납니다. 이 둘이 복제됩니다.

반대로 b의 출력이 두 LUT에 사용된다는 사실 자체는 b의 복제를 뜻하지 않습니다. 하나의 구현 결과를 여러 곳에서 사용하는 것과 원래 논리를 여러 LUT 안에 중복 구현하는 것은 다릅니다.

최대 지연은 2입니다. h는 한 단계에서 끝나지만, j와 k 쪽은 앞단 LUT의 결과를 받아 두 단계에서 끝납니다. 여기서 지연 최적이라는 말이 LUT 개수까지 최소라는 뜻은 아닙니다. 이 알고리즘의 중심 목적은 깊이이고, 면적을 나타내는 LUT 개수는 별개의 관심사입니다. 뒤에서 소개할 후속 연구들이 바로 이 차이를 파고듭니다.

핵심 O/X 퀴즈

1. 이 예제의 최종 LUT는 일곱 개이고 최대 지연은 2이다.
O최종 표와 출력 라벨이 각각 이를 보여 줍니다.
2. FlowMap 복원에서는 PI도 반드시 단독 LUT로 생성한다.
XPI는 LUT 생성 대상으로 넣지 않습니다.
3. 하나의 노드 출력을 여러 LUT가 사용한다는 사실만으로 노드 복제가 발생했다고 볼 수 있다.
X공유된 신호의 사용과 논리의 중복 구현을 구분해야 합니다.
10

다단계 코어스닝: 작게 풀고, 다시 펼치며 고친다hMetis · BALANCED BIPARTITIONING

세 번째 주제로 넘어갑시다. 이제는 최장 지연 대신, 크기가 대략 같은 두 영역 사이를 가로지르는 연결 수를 줄이려 합니다. 여기서는 클러스터링이 최종 목적이라기보다 좋은 분할을 만들기 위한 계층적 준비 작업입니다.

1
코어스닝. 원래 게이트들을 묶어 레벨 1의 클러스터를 만듭니다. 클러스터가 정점인 더 작은 네트워크가 생깁니다.
2
반복. 레벨 1의 클러스터들을 다시 묶어 레벨 2를 만듭니다. 매번 원래 게이트만 직접 묶는 것이 아니라, 이전 단계에서 만든 묶음을 다음 단계의 정점으로 취급합니다.
3
초기 분할. 가장 작은 네트워크에 도달하면 기존 분할 알고리즘, 예를 들어 FM으로 이분할합니다.
4
언코어스닝. 국소적으로 더 나아가기 어려워지면 클러스터를 한 단계 펼치고, 그 안의 하위 클러스터들을 다시 움직일 수 있게 된 상태에서 분할을 개선합니다. 원래 게이트 수준까지 반복합니다.

처음에는 도시 지도를 멀리서 보며 큰 구역의 경계를 잡고, 그다음 지도를 확대하면서 동네와 골목 수준에서 경계를 다듬는 것입니다. 축약 단계에서 내린 결정을 끝까지 고정하는 것이 아니라, 펼쳐진 수준에서 더 세밀하게 수정할 기회를 줍니다.

여기서는 그래프 대신 하이퍼그래프가 등장합니다. 한 넷이 여러 게이트를 함께 연결하므로, 넷 하나를 여러 정점을 포함하는 hyperedge 하나로 표현합니다. 20쪽 그림 1.16의 예제는 다음 여섯 넷으로 이루어집니다.

Figure 1.16 — 예제 네트리스트 (모든 넷 가중치 1)
n1 = {a, c, e}    n2 = {b, c, d}    n3 = {c, e, f}
n4 = {d, f}       n5 = {e, g}       n6 = {f, g, h}

이제 EC, HEC, MHEC라는 세 방법으로 같은 네트워크를 묶어볼 것입니다. EC는 정점의 짝을 찾고, HEC는 하이퍼에지 전체를 묶으며, MHEC는 HEC가 놓친 남은 정점들을 한 번 더 처리합니다. 세 결과를 비교할 때는 클러스터 수와 남은 하이퍼에지 수를 따로 보세요. 더 적은 클러스터가 반드시 더 적은 연결을 뜻하지는 않습니다.

핵심 O/X 퀴즈

1. 다단계 코어스닝은 이미 만들어진 클러스터를 다시 묶을 수 있다.
O이전 레벨의 클러스터가 다음 레벨의 정점입니다.
2. 언코어스닝은 클러스터를 펼치기만 하고 분할을 더 개선하지 않는다.
X각 수준에서 분할을 다시 개선합니다.
3. 하이퍼에지는 하나의 넷에 연결된 여러 정점을 함께 표현할 수 있다.
O두 정점만 잇는 보통 간선과 다른 점입니다.
11

Edge Coarsening: 누구와 짝지어야 연결이 안으로 들어올까EC · Table 1.6 · Figure 1.17

EC에서는 먼저 모든 정점을 미표시 상태로 둡니다. 방문한 미표시 정점 v에 대해 같은 하이퍼에지를 공유하는 미표시 이웃들을 찾고, 가장 큰 연결 가중치를 가진 이웃과 짝지어 합칩니다. 합친 두 정점은 표시하여 같은 단계에서 다시 묶이지 않게 합니다.

일반 개요는 무작위 방문 순서이지만, 실습 문제는 방문과 동률 처리를 알파벳 순서로 지정합니다. 문제에서 정한 순서를 덮어쓰면 다른 답이 나올 수 있습니다.

w(u,v) = Σh ∋ u,v 1 / (|h| − 1) 크기 2인 넷은 1, 크기 3인 넷은 1/2. 같은 넷에 속하더라도 참여자가 적을수록 더 강한 짝으로 취급합니다.
a
C1 = {a,c}. a는 n1={a,c,e}에만 있으므로 후보는 c와 e이고 둘 다 0.5. 알파벳 순서로 c를 고릅니다.
b
C2 = {b,d}. b의 이웃은 c와 d이지만 c는 이미 표시되어 있으므로 d와 합칩니다. c와 d는 방문해도 넘어갑니다.
e
C3 = {e,g}. e–f를 잇는 n3의 크기는 3이므로 0.5, e–g를 잇는 n5의 크기는 2이므로 1. 더 큰 쪽을 고릅니다.
f
C4 = {f,h}. f에 도달했을 때 남은 미표시 이웃은 h뿐입니다.

그런데 여기서 끝내면 절반만 푼 것입니다. 새 클러스터가 어떤 넷으로 연결되는지 다시 써야 합니다. 각 게이트를 자신이 속한 클러스터 이름으로 바꾸고, 한 넷 안에 중복된 클러스터 이름은 하나로 정리합니다. 정리한 결과가 단일 클러스터라면 그 넷은 내부 연결이 되었으므로 클러스터 간 네트워크에서 삭제합니다.

EC 이후의 축약된 넷
n1 → {C1, C3}          n2 → {C1, C2}
n3 → {C1, C3, C4}      n4 → {C2, C4}
n5 → 삭제 (내부 넷)       n6 → {C3, C4}

결과: 클러스터 4개 · 하이퍼에지 5개

예를 들어 n1={a,c,e}는 처음에는 {C1,C1,C3}으로 바뀌고, 중복을 제거하여 {C1,C3}이 됩니다. n5={e,g}는 {C3,C3}이므로 내부 넷이 됩니다. 여기서 삭제는 원래 회로의 논리적 연결을 없앤다는 뜻이 아니라, 축약된 외부 연결 목록에서 내부 넷을 제외한다는 뜻입니다.

핵심 O/X 퀴즈

1. EC 실습에서는 a의 동률 후보 중 c를 선택한다.
O알파벳 순서의 동률 처리입니다.
2. 이미 표시된 정점도 더 좋은 짝이 나타나면 같은 단계에서 다시 합친다.
X표시된 정점은 다시 묶지 않습니다.
3. 한 넷의 모든 게이트가 같은 클러스터에 들어가면 그 넷은 외부 네트워크에서 삭제한다.
O클러스터 내부 연결이 되었기 때문입니다.
12

Hyperedge Coarsening: 일부가 이미 사용되었다면 통째로 건너뛴다HEC · Table 1.7–1.8

HEC는 출발점이 다릅니다. 정점마다 짝을 찾는 대신 하이퍼에지를 방문합니다.

방문 순서와 묶기 규칙
가중치 없음
크기가 작은 하이퍼에지부터 방문합니다.
가중치 있음
가중치 내림차순으로 정렬하고, 가중치가 같으면 더 작은 하이퍼에지를 먼저 봅니다.
전부 미표시
방문한 하이퍼에지의 모든 정점이 미표시이면 전부 묶습니다.
하나라도 표시
그 하이퍼에지를 통째로 건너뜁니다. 아직 안 묶인 정점만 추려서 묶는 것은 지금 단계의 HEC가 아닙니다.
남은 정점
모든 하이퍼에지를 본 뒤에도 남은 정점은 각각 단독 클러스터가 됩니다.

예제의 순서는 n4, n5, n1, n2, n3, n6입니다. 먼저 n4={d,f}로 C1을 만들고, n5={e,g}로 C2를 만듭니다. 그다음 n1에는 e, n2에는 d가 이미 표시되어 있으므로 넘어갑니다. n3에는 e와 f, n6에는 f와 g가 이미 표시되어 있습니다. 결국 a, b, c, h가 남아 각각 C3={a}, C4={b}, C5={c}, C6={h}가 됩니다.

HEC 이후의 축약된 넷
n1 → {C3, C5, C2}      n2 → {C4, C5, C1}
n3 → {C5, C2, C1}      n4 → 삭제 (내부 넷)
n5 → 삭제 (내부 넷)       n6 → {C1, C2, C6}

결과: 클러스터 6개 · 하이퍼에지 4개

EC의 클러스터 4개·넷 5개와 비교해보세요. 정점 수를 더 줄이는 선택과 외부 연결을 더 줄이는 선택은 다를 수 있습니다.

핵심 O/X 퀴즈

1. HEC는 하이퍼에지에 표시된 정점이 하나라도 있으면 그 하이퍼에지를 건너뛴다.
O부분적으로만 묶는 규칙은 MHEC에서 등장합니다.
2. HEC 예제의 최종 결과는 클러스터 6개와 하이퍼에지 4개이다.
O표 1.7과 1.8의 결과입니다.
3. 클러스터 수가 적은 방법은 반드시 남은 하이퍼에지 수도 적다.
XEC와 HEC의 비교가 반례입니다.
13

Modified HEC: 건너뛴 넷에 남아 있는 정점을 다시 본다MHEC · Table 1.10 · Figure 1.19

“n1의 e가 이미 사용되었다고 해서, 아직 남은 a와 c까지 따로 놓아둘 필요가 있을까요?” MHEC는 바로 이 지점을 바꿉니다.

먼저 HEC 방식으로 통째로 묶을 수 있는 하이퍼에지를 선택합니다. 그다음 같은 정렬 순서로 하이퍼에지를 다시 방문하고, 앞에서 처리하지 못한 하이퍼에지에 남은 미표시 정점들을 함께 묶습니다.

따라서 두 번째 순회를 시작하기 전에 남은 모든 정점을 이미 표시된 단독 클러스터로 확정해 버리면 안 됩니다. 원문의 절차와 예제는 HEC에서 선택되지 않은 정점들을 이 추가 단계의 대상으로 남겨 둡니다.

예제에서는 C1={d,f}, C2={e,g}가 먼저 정해집니다. 이제 건너뛴 n1={a,c,e}를 다시 보세요. e는 표시되었지만 a와 c는 남아 있으므로 C3={a,c}로 묶습니다. n2={b,c,d}에서는 이제 b만 남았으므로 C4={b}입니다. n3은 모두 표시되어 넘어갑니다. n6={f,g,h}에서는 h만 남아 C5={h}가 됩니다.

MHEC 이후의 축약된 넷
n1 → {C3, C2}          n2 → {C4, C3, C1}
n3 → {C3, C2, C1}      n4 → 삭제 (내부 넷)
n5 → 삭제 (내부 넷)       n6 → {C1, C2, C5}

결과: 클러스터 5개 · 하이퍼에지 4개
세 방법 비교
방법묶는 기본 방식클러스터 수하이퍼에지 수
EC정점 두 개를 짝지음45
HEC미사용 하이퍼에지 전체64
MHECHEC 후 남은 정점 추가 처리54

원문은 MHEC가 넷 수를 더 줄이고 클러스터 크기를 균형화하는 경향을 설명합니다. 다만 이 예제에서는 HEC보다 정점 수만 줄고 넷 수는 같습니다. 이러한 경향을 모든 입력에서 엄격하게 넷 수가 감소한다는 보장으로 바꾸어 읽으면 안 됩니다.

또한 여기서는 표시를 통해 정점의 중복 소속을 막습니다. 앞의 두 지연 중심 알고리즘처럼 복제를 이용하여 겹치는 논리를 각각 구현하는 방식과 구별하세요.

핵심 O/X 퀴즈

1. MHEC는 HEC가 건너뛴 하이퍼에지의 미표시 정점만 묶을 수 있다.
O두 번째 순회의 핵심입니다.
2. 이 예제에서 MHEC는 HEC보다 남은 하이퍼에지 수를 반드시 한 개 줄인다.
X두 방법 모두 네 개입니다.
3. MHEC 결과에서 a와 c는 같은 클러스터에 들어간다.
On1을 다시 방문할 때 함께 묶입니다.
14

추가 연습문제: 숫자가 바뀌면 무엇부터 다시 계산할까EXERCISES · pp.25–26

25~26쪽의 일곱 문제는 앞의 답을 외웠는지 확인하는 문제가 아닙니다. 어떤 조건이 바뀌었고 그 조건이 계산의 어느 부분에 영향을 주는지 묻습니다.

문제 1 — 그림 1.1에 Rajaraman–Wong 다시 수행
조건
D=5, 크기 한도 4. 노드 지연은 {a,b,c,k,l}이 1, {d,f,h}가 3, {e,g}가 2, {i,j}가 4.
주의
이전 라벨에 경계 비용 차이만 더하면 안 됩니다. Δ부터 다시 계산해야 합니다.
직접 유도
b→e→g→i에서 Δ(b,i)=2+2+4=8, 따라서 ℓi(b)=1+8=9. 출발점 b의 지연을 Δ에 넣지 않는 원칙은 그대로입니다.

두 번째 문제는 제시된 회로에 D=3, 크기 한도 3, 단위 노드 지연을 적용합니다. 세 번째는 그림 1.6을 K=4인 LUT로 매핑하고, 네 번째는 그림 1.20의 새 회로를 3-LUT로 매핑합니다.

세 번째에서는 유량 그래프를 무조건 이전 답대로 읽지 말고 컷 허용량을 4로 바꾸어 판정해야 합니다. 제약을 완화하면 이전 해가 금지되지는 않지만, 최적 깊이가 반드시 엄격히 감소하는 것은 아닙니다. 네 번째에서는 회로 자체가 다르므로 위상 순서와 부분 그래프부터 다시 만듭니다. 두 문제 모두 LUT 수, 복제 수, 최대 지연을 따로 확인해야 합니다.

다섯 번째는 가중 HEC입니다. 넷 가중치는 n1부터 순서대로 5, 2, 3, 3, 1, 5입니다. 정렬 규칙을 직접 적용하면 n1·n6가 먼저이고, 가중치 3끼리는 크기 2인 n4가 크기 3인 n3보다 먼저입니다. 같은 가중치와 크기에서는 넷 번호 순서를 택하면 전체 순서는 n1, n6, n4, n3, n2, n5입니다. 이 순서에서 직접 묶어보면 {a,c,e}, {f,g,h}가 먼저 선택되고, b와 d는 단독으로 남습니다.

여섯 번째는 그림 1.17(b)에 EC를 다시 적용합니다. 이제 C1부터 C4까지가 새 정점입니다. ‘클러스터를 다시 클러스터링한다’는 다단계 개념을 직접 실행하는 문제입니다. 일곱 번째의 새 네트리스트는 다음과 같습니다.

문제 7 — 새 네트리스트 (모든 넷 가중치 1)
n1 = {a, b, d, e}   n2 = {b, d, f}     n3 = {a, e, g}
n4 = {c, e, f, h}   n5 = {c, g}        n6 = {a, d, f, h}

EC는 알파벳 순서로 방문하고 동률을 처리합니다. 반면 HEC와 MHEC의 동률은 무작위로 처리하라고 되어 있습니다. 따라서 마지막 두 방법의 결과를 비교할 때에는 동률 선택도 함께 기록해야 합니다. 원문이 무작위를 허용한 자리에 임의의 유일 정답을 만들어 놓으면 안 됩니다.

핵심 O/X 퀴즈

1. 노드 지연이 바뀌어도 Δ 행렬은 항상 그대로 사용한다.
XΔ가 노드 지연으로 계산되기 때문입니다.
2. K를 늘리면 최적 깊이는 반드시 더 작아진다.
X기존 깊이가 그대로 최적일 수 있습니다.
3. 무작위 동률 처리를 허용한 문제에서는 서로 다른 적법한 결과가 나올 수 있다.
O선택 순서와 표시 상태가 이후 묶음에 영향을 줍니다.
15

Rajaraman–Wong 이후: ‘최적’이라는 말에 조건을 붙이자PROBING FURTHER 1

이제 ‘Probing Further’에 실린 연구 흐름을 보겠습니다. 이름을 외우기보다 기존 문제에 무엇이 추가되는지 따라가세요.

무엇이 추가되는가
Yang–Wong
(1995)
복제를 컷 최소화에 사용합니다. 주어진 다분할에서 복제로 컷을 줄이되 필요한 복제 집합의 크기도 최소화합니다. 방향 그래프의 최소 면적·최소 컷 복제 문제를 최적으로 해결하고, 하이퍼그래프 문제에도 더 작은 유량 네트워크 모델을 사용한 최적해를 제시했습니다.
Vaishnav–
Pedram
같은 최적 지연을 달성하는 여러 클러스터링 중 전력 소모가 더 작은 해를 고릅니다. 트리에서는 지연과 전력 모두 최적이지만, 일반적인 비트리 회로에서는 지연 최적성을 유지하면서 전력을 개선합니다.
Yang–Wong
(1997)
면적 제약과 핀 제약을 함께 고려하며 반복적인 네트워크 컷을 사용합니다. 둘 중 한 제약만 있을 때에는 지연 최적성을 얻고, 둘을 동시에 적용할 때에는 대부분의 경우 최적 지연을 얻습니다.
Pan 등
조합 회로에서 순차 회로로 확장하고, 플립플롭 위치를 바꾸는 리타이밍을 클러스터링과 함께 수행합니다. 게이트에만 지연이 있는 모델에서는 최적 지연을, 게이트와 연결 모두에 지연이 있는 일반 모델에서는 최적에 가깝다는 보장이 있는 클록 주기를 얻습니다.
Cong–
Romesis
클러스터링을 두 수준으로 적용하는 계층 문제를 다룹니다. 이 두 수준의 지연 최소화 문제는 단일 수준과 달리 NP-hard이며, 복제량을 조절하는 면적·지연 절충을 소개합니다.

복제는 단순한 낭비가 아니라 연결 구조를 개선하는 선택지가 될 수 있습니다. 그리고 “최적”을 읽을 때에는 목적, 제약, 회로 구조의 조건을 반드시 함께 읽으세요. ‘개선’과 ‘최적 보장’은 같은 말이 아니고, ‘대부분’을 ‘항상’으로 바꾸면 문제의 난도를 놓치게 됩니다.

핵심 O/X 퀴즈

1. 지연 최적 클러스터링은 자동으로 전력 최적 클러스터링이기도 하다.
X전력은 별도의 선택 기준입니다.
2. 면적과 핀 제약을 함께 적용한 연구의 ‘대부분의 경우’를 ‘항상’으로 읽어도 된다.
X보장의 범위가 달라집니다.
3. 단일 수준의 최적 알고리즘이 있다고 해서 두 수준의 전체 문제도 바로 해결되는 것은 아니다.
O원문은 두 수준 문제의 NP-hardness를 설명합니다.
16

FlowMap 이후: 깊이, 면적, 실행 시간을 함께 보기PROBING FURTHER 2

깊이를 잘 줄였는데 LUT가 너무 많다면 어떨까요? 깊이는 같지만 실행 시간이 너무 오래 걸린다면 어떨까요?

후속 연구의 세 축 — 면적, 지연 모델, 계산 효율
EdgeMap
게이트와 연결 지연을 모두 고려하는 일반 지연 모델로 확장합니다. 단순히 입력 수 K만 만족시키는 것이 아니라, 컷의 각 경계에서 회로 지연이 지정된 상한을 넘지 않도록 합니다.
FlowMap-r
깊이 최적해에서 시작해 깊이 제한을 완화하고 면적을 줄이는 과정을 반복하여 여러 절충안을 만듭니다. 핵심은 K-bounded 일반 불리언 네트워크에서 노드 복제 없는 최소 면적 매핑을 다항 시간에 구하는 최적 알고리즘입니다.
CutMap
임계 노드에는 최소 비용·최소 높이 K-feasible cut을, 비임계 노드에는 최소 비용 K-feasible cut을 사용합니다. 깊이 최적성은 유지하면서 LUT 수를 줄이려는 방향입니다.
Kukimoto 등
LUT가 아니라 표준 셀 라이브러리로 범위를 넓힙니다. FlowMap의 동적 계획법 관점이 FPGA에만 한정되지 않으며, 실제 라이브러리의 핀 간 지연을 사용한 선형 시간 지연 최적 매핑을 소개합니다.
Hermes
깊이 최적 LUT를 더 빠르게 찾는 전략, LUT 재구현, 입력 공유를 장려하는 비용 함수, 원래 회로 그래프에서 직접 수행하는 유량 계산을 사용합니다.
DAOmap
지연 제약 아래의 면적 최소화에 집중합니다. 컷을 생성할 때 예상되는 복제를 비용에 반영하고, 비임계 경로의 여유를 활용합니다.
priority cuts
모든 컷을 열거하지 않고 노드마다 소수의 우선순위 컷만 남깁니다. 지연 최소화에서는 지연, 입력 수, 면적 순으로 우선순위를 정합니다.

원문 표현에 주의할 부분이 있습니다. 10쪽 FlowMap 본문은 ‘클러스터 간 간선에만 단위 지연’을 정의하지만, 28쪽 후속 연구 설명은 FlowMap을 ‘게이트에만 지연’이 있는 모델로 표현합니다. 두 서술이 일치하지 않으므로, 앞의 예제 계산은 10쪽 본문의 정의를 기준으로 읽어야 합니다.

DAOmap은 CutMap 대비 면적과 실행 시간 개선을 보고하지만, 이것을 모든 회로와 구현에 대한 보편적인 우열로 확대하지는 맙시다. priority cuts는 노드마다 하나의 컷만 저장해도 평가한 벤치마크와 LUT 크기 조합의 95%에서 깊이 최적해를 얻었고, 메모리와 실행 시간은 회로 크기에 선형이라고 설명합니다. 95%는 실험 결과이지 모든 입력에 대한 최적성 증명이 아닙니다.

핵심 O/X 퀴즈

1. FlowMap-r은 면적과 깊이 사이의 절충안을 탐색한다.
O깊이 완화와 면적 최소화를 결합합니다.
2. CutMap은 임계 노드와 비임계 노드에 완전히 같은 컷 기준만 사용한다.
X임계 여부에 따라 높이와 비용의 취급이 다릅니다.
3. Priority cuts의 95% 결과는 모든 입력에서 깊이 최적을 보장한다는 뜻이다.
X제한된 평가에서 얻은 경험적 결과입니다.
17

다단계 기법의 확장과 마무리: 결국 무엇을 함께 묶어야 하는가PROBING FURTHER 3 · WRAP-UP

다단계 기법의 확장
ML
EC와 비슷한 정점 쌍의 결합을 사용하면서 클러스터 면적 균형을 고려합니다. 분할 개선에는 LIFO 버킷 구조와 가까운 셀들의 이동을 장려하는 CLIP을 통합합니다.
hMetis-Kway
이분할을 K분할로 확장합니다. 이동할 셀은 무작위로 고르고, 그 셀의 목적지 분할을 이득에 따라 정합니다. 처음부터 전체 셀 중 최대 이득 셀을 선택하는 절차로 바꾸어 이해하면 안 됩니다.
HPM
지연과 컷 크기를 함께 봅니다. 첫 수준은 PRIME으로 성능 중심 클러스터를 만들고, 나머지 수준은 전역 연결성 기반 ESC로 컷 크기를 줄입니다.
Ababei–
Bazargan
통계적 타이밍 임계도를 HEC에 반영하여 중요한 넷이 잘리지 않도록 유도합니다.
Hwang–
Pedram
분할 사이의 선호 방향을 정하고 반대 방향의 컷 간선을 줄입니다. 코어스닝에는 EC를 사용하고, 동률에서는 해당 간선을 포함하는 경로의 최대 깊이나 최대 홉 수를 기준으로 사용합니다.

HPM은 같은 계층 안에서도 모든 수준에 똑같은 목적을 적용할 필요가 없다는 사례입니다. Hwang–Pedram은 IO 경로의 지연을 악화시키는 역방향 연결을 구분해서 봅니다. 같은 컷 한 개라도 어느 방향인지, 어떤 경로에 놓였는지에 따라 중요도가 달라질 수 있습니다.

다시 첫 시간의 질문입니다. “회로를 묶는다는 것은 무엇을 최적화하는 일일까?”

답은 목적과 제약에 달려 있습니다. Rajaraman–Wong은 일반 지연 모델과 크기 제한 아래에서 ℓv(x)=ℓ(x)+Δ(x,v)를 계산하고 내부·외부 경로의 최대를 비교했습니다. FlowMap은 입력 수 K를 제한하면서 네트워크 컷으로 깊이 p를 유지할 수 있는지 판단했습니다. 둘 다 라벨과 후보를 먼저 계산한 뒤 출력에서 필요한 부분을 복원했고, 복제를 허용했습니다. 다단계 코어스닝은 연결을 내부화하며 문제를 작게 만든 뒤, 분할한 해를 펼치며 개선했습니다. EC는 짝을, HEC는 하이퍼에지 전체를, MHEC는 그 뒤의 남은 정점들을 묶었습니다.

세 숫자를 헷갈리지 말 것
숫자무엇을 세는가
8첫 예제의 최대 지연 — 노드 시간과 경계 비용의 합.
2FlowMap의 최대 지연 — 해당 단위 지연 모델에서의 깊이.
4 / 5코어스닝의 남은 넷 수 — 시간을 직접 나타내지 않습니다.

무엇을 세는 숫자인지 알 때에만, 그 숫자를 줄이는 알고리즘도 이해할 수 있습니다. 새 회로를 받으면 목적, 제약, 지연 모델, 복제 허용 여부부터 적어보세요. 계산을 마친 뒤에는 생성된 네트워크에서 제약과 목적값을 다시 확인하세요.

핵심 O/X 퀴즈

1. 다단계 계층의 모든 수준은 반드시 동일한 최적화 목적만 사용해야 한다.
XHPM은 수준에 따라 성능과 연결성 중심 방법을 조합합니다.
2. 지연 최적, LUT 수 최소, 컷 크기 최소는 구별해야 하는 목적이다.
O하나의 최적성이 나머지의 최적성까지 뜻하지는 않습니다.
3. 알고리즘의 라벨만 확인하면 되므로 최종 네트워크의 제약과 경로는 확인할 필요가 없다.
X복원된 해에서 입력 수·크기·복제·최대 지연 등을 다시 검증해야 합니다.

목적 · 제약 · 지연 모델 · 복제 허용 여부
이 네 줄을 먼저 적고 나서 계산을 시작하세요.

VLSI 물리 설계 자동화 — 클러스터링 강의 노트
쪽수와 그림·표 번호는 원본 PDF 본문 기준입니다.