SEGMENT 10981
SIGNAL AMPLIFIER
문제
- READ A VALUE FROM IN.A
- DOUBLE THE VALUE
- WRITE THE VALUE TO OUT.A
IN.A
로 들어오는 값을 읽는다.- 값을 두 배로 만든다.
OUT.A
로 값을 출력한다.
풀이 1
노드를 4개만 사용하는 방법이다.
- 노드 중 하나를 선택한다. 나는
@2
를 선택했다. @2
에서 값을 받아서ACC
에 할당하고,ADD ACC
로ACC
의 값을 두 배로 만들면 된다.- 나머지 노드는 두배가 된 값을 파이프처럼 이동시키기만 하면 된다.
쉽게 표현하자면 다음과 같다.
ACC = LEFT
ACC += ACC
DOWN = ACC
- 160 CYCLES, 4 NODES, 6 INSTR
@0
@1
MOV UP, RIGHT
@2
MOV LEFT, ACC
ADD ACC
MOV ACC, DOWN
@3
@4
@5
MOV UP, DOWN
@6
@7
@8
MOV UP, DOWN
@9
풀이 2
덧셈 연산을 두 개의 노드로 병렬화해서 푸는 방법이다.
@1
로 들어온 값들 중 홀수번째로 입력은@2
로 보내고, 짝수번째로 입력되는 숫자는 아래쪽의@4
로 보낸다.@2
와@4
노드는 각각 입력받은 값을 "풀이 1"과 같이 2배 하여@5
로 전달한다.- 두 노드를 취합하는
@5
는 위의@2
에서 전달받은 값을 아래로 보낸다. 그리고 왼쪽의@4
에서 전달받은 값을 아래로 보낸다.
이렇게 하면 84 CYCLES로 해결이 된다.
- 84 CYCLES, 5 NODES, 11 INSTR
84 CYCLES 이므로 PARALLELIZE 도전과제를 획득할 수 있었다.
PARALLELIZE
Solve SIGNAL AMPLIFIER in fewer than 100 cycles.
@0
# 84 CYCLES
# 5 NODES
# 11 INSTR
# GET PARALLELIZE
@1
MOV UP, RIGHT
MOV UP, DOWN
@2
MOV LEFT, ACC
ADD ACC
MOV ACC, DOWN
@3
@4
MOV UP, ACC
ADD ACC
MOV ACC, RIGHT
@5
MOV UP, DOWN
MOV LEFT, DOWN
@6
@7
@8
MOV UP, DOWN
@9