문제

  • READ A VALUE FROM IN.A
  • DOUBLE THE VALUE
  • WRITE THE VALUE TO OUT.A
  • IN.A로 들어오는 값을 읽는다.
  • 값을 두 배로 만든다.
  • OUT.A로 값을 출력한다.

image

풀이 1

노드를 4개만 사용하는 방법이다.

  • 노드 중 하나를 선택한다. 나는 @2를 선택했다.
  • @2에서 값을 받아서 ACC에 할당하고, ADD ACCACC의 값을 두 배로 만들면 된다.
  • 나머지 노드는 두배가 된 값을 파이프처럼 이동시키기만 하면 된다.

쉽게 표현하자면 다음과 같다.

ACC = LEFT
ACC += ACC
DOWN = ACC
  • 160 CYCLES, 4 NODES, 6 INSTR

image

save/10981.0.txt

@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.

image

save/10981.1.txt

@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