250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- n과 m
- streamlit
- 4948
- 15649
- end to end
- 파이썬
- Mac
- 가상환경
- Python
- 설정
- BOJ
- 1002
- 1101
- 백준
- pyenv
- 개발환경
- 재귀
- 그리디 알고리즘
- 9020
- 백트래킹
- 경사하강법
- N-Queen
- 밑바닥부터 시작하는 딥러닝
- 기계학습
- 파이싼
- 실버
- 신경망 학습
- 손실함수
Archives
- Today
- Total
파이톨치
[시스템 프로그래밍] Superscalar Processor 본문
728x90
Superscalar Processor
위키백과에 따르면
슈퍼스칼라(superscalar)는 CPU 내에 파이프라인을 여러 개 두어 명령어를 동시에 실행하는 기술이다.
라고 한다.
동적으로 스케줄링하면서 사용함으로써 병렬적으로 쓰면서 효율 높이는 것이다.
하지만
명령어 사이에 데이터 의존성, 자원 의존성, 프로시저 의존성이 존재하는 경우에는 동시실행에 제한이 있다.
다음과 같은 코드가 있을 때
다음과 같이 실행이 되는데 p1 * p2를 하기 위해서는 앞에서 한 연산의 결과가 필요하기 때문에 의존성이 있다.
스테이지에서 스테이지로 넘어가는 형태로 연산이 된다.
Haswell CPU
하스웰은 단일 곱셈-누산기(영어: Fused multiply-add, FMA) 명령어를 적용할 첫 인텔 x86/x64 CPU이다
- Multiple instructions can execute in parallel
- Some instructions take > 1 cycle, but can be pipelined
Loop Unrolling
빨간 색으로 칠한 부분을 왜 저렇게 했냐면, 저렇게 i를 1씩 더하지 말고 2씩 더하면서 한줄에 연산을 2번하면
빨리지지 않을까하는 생각으로 저렇게 썼다고 한다.
하지만 괄호에 따라서 성능이 달라진다.
저렇게 쓰면 순차적으로 더하게 되기 때문에 앞에 결과에 의존하게 되면서 병렬 연산의 한계를 보인다. 하지만 이를 해결하는 방법이 있다.
정말 간단하게도 괄호의 위치를 바꾸어 주면 된다.
이렇게 하면 결과에 의존하지 않아도 되고 그냥 같이 더해서 x 에 집어 넣어주면 된다.
그러면 처음 의도한대로 2배 빨라지는 모습을 볼 수 있다.
Cycles Per Element (CPE)
- Convenient way to express performance of program that operates on
vectors or lists
- In our case: CPE = cycles per OP
- T = CPE*n + Overhead
728x90
'대학수업' 카테고리의 다른 글
[웹 프로그래밍] Bootstrap 2 (0) | 2022.10.03 |
---|---|
[웹 프로그래밍] Bootstrap (0) | 2022.10.03 |
[시스템 프로그래밍] 최적화 (0) | 2022.10.03 |
[컴퓨터 구조] 컴퓨터의 성능은 어떻게 체크할까? (0) | 2022.09.23 |
[컴퓨터 구조] 컴퓨터는 어떻게 동작할까? (1) | 2022.09.23 |