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