Skip to content
Snippets Groups Projects
Commit 5b206787 authored by 최형택's avatar 최형택 :dart:
Browse files

Update TOC to resolve broken links.

parent ce3ed85e
No related branches found
No related tags found
No related merge requests found
...@@ -25,25 +25,27 @@ Sign bit를 포함한 fixed point number의 arithmetic 구현 ...@@ -25,25 +25,27 @@ Sign bit를 포함한 fixed point number의 arithmetic 구현
+ [Functions](#functions) + [Functions](#functions)
* [Makefile](#makefile) * [Makefile](#makefile)
* [gcc -O flag](#gcc--o-flag) * [gcc -O flag](#gcc--o-flag)
+ [-O 옵션별 세부 사항](#-o----------) + [-O flag options](#-o-flag-options)
+ [최적화 성능 비교](#---------) + [Optimization Results](#optimization-results)
- [결과](#--) - [Theoretical Background](#theoretical-background)
- [원인 분석](#-----) - [gprof](#gprof)
- [gprof 사용법](#gprof----)
* [Project2](#project2) * [Project2](#project2)
+ [Macros](#macros-1) + [Macros](#macros-1)
+ [Functions](#functions-1) + [Functions](#functions-1)
* [정확도 테스트](#-------) * [Precision Tests](#precision-tests)
* [속도 테스트](#------) * [Performance Speed Tests](#performance-speed-tests)
* [Sine](#sine) * [Sine](#sine)
+ [sine table](#sine-table) + [Sine Table](#sine-table)
+ [fx_s1615 sine_fx_s1615_longlong(fx_s1615 angle) function에 대하여...](#fx-s1615-sine-fx-s1615-longlong-fx-s1615-angle--function-----) + [fx_s1615 sine_fx_s1615_longlong(fx_s1615 angle) function에 대하여...](#fx-s1615-sine-fx-s1615-longlong-fx-s1615-angle--function-----)
* [double vs long long](#double-vs-long-long) * [double vs long long](#double-vs-long-long)
- [0819 과제](#0819---) - [0819 Assignment](#0819-assignment)
* [요구사항 명세](#-------) * [Requirements Specification](#requirements-specification)
* [코딩 규칙 검사(MISRA-C 2012)](#---------misra-2012-) * [MISRA-C 2012 Conformity Test](#misra-c-2012-conformity-test)
* [검사 결과 리포트](#---------) * [Test Results](#test-results)
- [0820 과제](#0820---) - [0820 Assignment](#0820-assignment)
<small><i><a href='http://ecotrust-canada.github.io/markdown-toc/'>Table of contents generated with markdown-toc</a></i></small>
## What is Fixed Point sXXYY? ## What is Fixed Point sXXYY?
...@@ -208,7 +210,7 @@ dep : ...@@ -208,7 +210,7 @@ dep :
``` ```
### gcc -O flag ### gcc -O flag
#### -O 옵션별 세부 사항 #### -O flag options
`[-Olevel]` `[-Olevel]`
- O0 : 최적화를 수행하지 않음 (Default) - O0 : 최적화를 수행하지 않음 (Default)
- O, -O1 : 코드 크기와 실행 시간을 줄이는 최적화만 수행 - O, -O1 : 코드 크기와 실행 시간을 줄이는 최적화만 수행
...@@ -216,17 +218,14 @@ dep : ...@@ -216,17 +218,14 @@ dep :
- O3 : -O2 최적화에 인라인 함수와 레지스터에 대한 최적화를 추가로 수행 - O3 : -O2 최적화에 인라인 함수와 레지스터에 대한 최적화를 추가로 수행
- Os : -O2 최적화 기능을 사용하지만, 코드 크기를 증가하는 최적화는 제외 - Os : -O2 최적화 기능을 사용하지만, 코드 크기를 증가하는 최적화는 제외
#### 최적화 성능 비교 #### Optimization Results
for문을 통하여 2,147,483,648(INT_MAX)번의 연산을 반복하는 코드를 작성하고 -O0과 -O2 옵션을 주어 컴파일 한 뒤 실행시간을 측정하였다. for문을 통하여 2,147,483,648(INT_MAX)번의 연산을 반복하는 코드를 작성하고 -O0과 -O2 옵션을 주어 컴파일 한 뒤 실행시간을 측정하였다.
##### 결과
![O2-optimization-result](images/optimization-result.png) ![O2-optimization-result](images/optimization-result.png)
최적화를 하지 않았을 때 for문을 수행하는데 약 5분의 시간이 걸렸으나 -O2 옵션으로 최적화하였을 때 for문을 수행했는가 싶을 정도로 실행시간이 줄어들었음을 확인할 수 있었다. 최적화를 하지 않았을 때 for문을 수행하는데 약 5분의 시간이 걸렸으나 -O2 옵션으로 최적화하였을 때 for문을 수행했는가 싶을 정도로 실행시간이 줄어들었음을 확인할 수 있었다.
##### 원인 분석 ##### Theoretical Background
실제로 코드가 어떻게 최적화 되었는지 확인하기 위해 gcc -S 옵션을 통해 컴파일된 어셈블리 코드를 분석해 보았다. 실제로 코드가 어떻게 최적화 되었는지 확인하기 위해 gcc -S 옵션을 통해 컴파일된 어셈블리 코드를 분석해 보았다.
``` ```
pi@raspberrypi:~/battle_c_1 $ gcc -S -DTEST -lm test.c pi@raspberrypi:~/battle_c_1 $ gcc -S -DTEST -lm test.c
...@@ -244,7 +243,7 @@ test.s는 main 라벨에서 처음 clock 함수를 호출한다. 이후 L2 라 ...@@ -244,7 +243,7 @@ test.s는 main 라벨에서 처음 clock 함수를 호출한다. 이후 L2 라
실제로 for문 내부에서 실행되는 코드들은 그 안에서만 연산될 뿐 for문 밖의 코드에 영향을 주지 못한다. 외부 변수에 연산의 결과를 저장하거나 출력하는 코드가 없기 때문이다. 실제로 for문 내부에서 실행되는 코드들은 그 안에서만 연산될 뿐 for문 밖의 코드에 영향을 주지 못한다. 외부 변수에 연산의 결과를 저장하거나 출력하는 코드가 없기 때문이다.
-O2 옵션을 주어 컴파일 하였을 때 컴파일러가 이를 확인하고 어셈블리 코드에 포함시키지 않아 극단적인 성능 차이를 보여준 것으로 보인다. -O2 옵션을 주어 컴파일 하였을 때 컴파일러가 이를 확인하고 어셈블리 코드에 포함시키지 않아 극단적인 성능 차이를 보여준 것으로 보인다.
##### gprof 사용법 ##### gprof
``` ```
gcc -pg main.c gcc -pg main.c
./a.out #gmon.out is made after running a.out ./a.out #gmon.out is made after running a.out
...@@ -301,7 +300,7 @@ gprof ...@@ -301,7 +300,7 @@ gprof
### 정확도 테스트 ### Precision Tests
* Multiply * Multiply
1. MUL_01 1. MUL_01
![image](images/MUL_01.png) ![image](images/MUL_01.png)
...@@ -340,7 +339,7 @@ DIV_03의 경우 오차율이 조금 증가하지만 범용적으로 사용할 ...@@ -340,7 +339,7 @@ DIV_03의 경우 오차율이 조금 증가하지만 범용적으로 사용할
<br> <br>
<br> <br>
### 속도 테스트 ### Performance Speed Tests
![image](images/speed-experiment.png) ![image](images/speed-experiment.png)
...@@ -476,9 +475,9 @@ Index by function name ...@@ -476,9 +475,9 @@ Index by function name
<br> <br>
## 0819 과제 ## 0819 Assignment
### 요구사항 명세 ### Requirements Specification
* 목적 * 목적
double로 input을 받아서 fx_s1615로 변환하여 사칙연산을 수행한다. double로 input을 받아서 fx_s1615로 변환하여 사칙연산을 수행한다.
...@@ -539,7 +538,7 @@ double로 input을 받아서 fx_s1615로 변환하여 사칙연산을 수행한 ...@@ -539,7 +538,7 @@ double로 input을 받아서 fx_s1615로 변환하여 사칙연산을 수행한
<br> <br>
### 코딩 규칙 검사(MISRA-C 2012) ### MISRA-C 2012 Conformity Test
총 39였던 오류를 아래의 20개의 오류로 수정하였다. 총 39였던 오류를 아래의 20개의 오류로 수정하였다.
``` ```
...@@ -550,11 +549,11 @@ double로 input을 받아서 fx_s1615로 변환하여 사칙연산을 수행한 ...@@ -550,11 +549,11 @@ double로 input을 받아서 fx_s1615로 변환하여 사칙연산을 수행한
``` ```
![0819_capture](/uploads/82b0d00d85a19bd008dacec005b46586/0819_capture.PNG) ![0819_capture](/uploads/82b0d00d85a19bd008dacec005b46586/0819_capture.PNG)
### 검사 결과 리포트 ### Test Results
violations 첨부함 violations 첨부함
## 0820 과제 ## 0820 Assignment
* 유닛테스트를 통해 커버리지 확인하기 * 유닛테스트를 통해 커버리지 확인하기
![0820_TeamProject](/uploads/d2896b245ff5835e5138c144fc64831a/0820_TeamProject.PNG) ![0820_TeamProject](/uploads/d2896b245ff5835e5138c144fc64831a/0820_TeamProject.PNG)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment