일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- linux makefile 작성
- Pyvrilog tutorial
- 남산업힐
- systolic array
- DNN 가속기
- gcc 컴파일
- pygraphviz 설치 오류
- 클럭 게이팅
- linux c 컴파일
- Pyverilog 설치
- CUDA
- 딥러닝 가속기
- gpgpu-sim
- CLOCK GATING
- makefile
- 데이터 해저드
- 대구 반도체 설계기업 특화
- Makefile compile
- pytest-pythonpath 설치 오류
- DNN Accelerator
- Pyverilog 튜토리얼
- CDC
- Data HAzard
- pyverilog 설치 오류
- Pyverilog 실행
- AMBA
- 이진수 곱셈 알고리즘
- Design DNN Accelerator
- linux c++ 컴파일
- 컨벌루션 연산
- Today
- Total
오늘은 맑음
LOA(Lower-part Or Approximation adders) 본문
Mahdiani, Hamid Reza, et al. "Bio-inspired imprecise computational blocks for efficient VLSI implementation of soft-computing applications." IEEE Transactions on Circuits and Systems I: Regular Papers 57.4 (2009): 850-862.
2010년에 나온 논문이며 딥 러닝 가속기 관련 논문입니다.
내용이 재밌어서 소개해드립니다.
일반적으로 딥 러닝 가속기는 곱셈과 덧셈 연산을 반복합니다.
Convolution layer나 FC layer 과정에서 많은 연산 결과를 더해서 다음 층의 입력값으로 사용합니다.
하지만 딥 러닝 가속기에서 그 많은 데이터를 한번에 연산해서 더하는건 쉽지 않습니다.
그래서 부분 합(partial sum)을 여러번 구해서 이들을 다시 더하는 연산방식을 반복합니다.
이러한 부분 합들을 더하려면 여러가지 방법이 있지만 그 중 adder tree를 사용하는 방법과 관련된 논문입니다.
딥 러닝 알고리즘은 fault tolerance라고 해서 약간의 오차는 허용하는 성격이 있습니다.
쉽게 예를 들어 전체 확률이 100인 네트워크에서 숫자를 판별한다고 하겠습니다.
여기서 판별된 결과가 100%로 1이라고 하거나 80%, 60%, 51%로 1이라고 하더라도 전체가 100이므로 결과값은 1이 됩니다. 그러면 맞췄다고 볼 수 있겠죠?
물론 51%는 예시이므로 중요한 어플리케이션에서 그러면 안되겠지만 가능하다는 것입니다.
그래서 위의 논문에서 설명하는 LOA를 보게 되면 덧셈기를 만들 때 m-bit 덧셈기가 있을 때 일부 n-bit는 전가산기가 아닌 or-gate로 대체합니다.
만약 adder tree가 많이 사용되거나 사용하는 데이터의 정밀도가 높은경우에는 많은 이득을 볼 수 있을 거라고 생각합니다.
위의 그래프는 LeNet5에서 mnist 데이터셋을 가지고 테스트 한 결과입니다.
8-bit의 입력 데이터와 5-bit의 가중치를 사용했으며 python tensorflow환경에서 테스트해봤습니다.
n=3까지는 전혀 차이가 없지만 실제로 n=4부터 차이가 나기 시작합니다.
n=6부터는 90%미만으로 떨어집니다.
지금은 사용 데이터의 정밀도가 낮아서 저렇게 됬지만 정밀도가 높은 경우 더욱 많은 full adder를 or-gate로 대체할 수 있을거라고 생각합니다
'Processor' 카테고리의 다른 글
AXI BUS 신호 (0) | 2021.04.03 |
---|---|
프로세서 설계 시 고려해야 할 점 (0) | 2020.11.05 |
CISC와 RISC의 차이점 (0) | 2020.07.14 |
Vivado power analysis (0) | 2020.07.10 |
분주기/prescaler verilog (0) | 2019.06.11 |