여러개의 컴퓨터들이 네트워크로 연결되었을때 어떻게 parallel processing을 할것인가 = 클러스터
퍼포먼스를 향상시키기 위해서
프로세서가 적어도 두개이상 있는 컴퓨터 = multiprocessor. 코어가 아님 프로세서가 여러개
scalability 프로세서 추가 가능한가 availability 하나 고장나도 나머지 것들로 돌아가는가
프로그램 하나에 여러개의 프로세서로 돌리는것 = parallel processing
딥러닝 같은것들. 프로그램은 하나인데 여러개의 프로세서로 실행
하드웨어가 parallel 지원하는데 소프트웨어가 sequential이면 효율적으로 돌릴수없다
반대의 경우도 의미가 없다 parallel과 concurrent여야한다
병렬 소프트웨어는 프로그래밍 어렵다
유의미한 성능 향상이 있어야 의미가 있다
partitioning subtask를 같은 사이즈로 나눠야 한다 = load balancing 문제
크기가 다르면 어떤 프로세서는 기다려야한다
coordination: synchronization 등이 overhead가 있다
암달의 법칙 100개의 프로세서 써서 90배 빠르게 하고 싶다 몇퍼센트의 계산만 sequential이 허용되는가?
martix연산은 병렬처리가 가능하고 scalar연산은 안된다
ideal case에 비해서 프로세서가 많아지만 효율이 떨어진다
strong scaling weak scaling이 있다
strong scaling은 프로세서 수만 늘리는거고 weak scaling은 프로세서 수와 비례해서 문제 크기도 키우는것
load balance problem
로드가 완벽하게 모든 프로세서에 나눠졌다고 이전에는 가정했는데 한개의 프로세서가 2배의 일을 한다면?
나머지는 대기해야하고 비효율을 만들어낸다
sisd simd mimd
spmd single program multiple data
simd가 제일 중요하다 = vector architecture
데이터가 메모리에서 레지스터로 올라온다 register에서 alu로 계산함
lw sw를 lv sv로 바꾼다
instruction fetch bandwidth를 줄일수있다 하나만 명령어 수행해도 여러개 수행한것과 동일한 효과이기 때문에 데이터가 여러개라서
값을 동시에 여러개 가져올 수 있어서 parallel인 vector에서는 명령어도 짧아진다
하드웨어적으로는 lane마다 고려하는 연산이 다르다
루프가 없다 한번에 동시에 가져오기 때문에. 그래서 명령어 짧아진다. bandwidth도 줄어들고 에너지도 줄일수있다
simd는 mimd보다 프로그래밍이 쉽다
control hazard = branch hazard branch는 루프가 있다는 뜻이고.. 그런데 루프가 없으니까 branch도 없어진다 그래서 control hazard가 발생하지 않음!
시험범위 이번주목요일까지 6-2까지
다음주 화요일에는 중요한 내용 짚어줌
Hardware multithreading
fine grained, coarse grained
스레드란 프로그램의 실행단위
프로그램 실행 → 프로세스
프로세스는 최소 한개이상의 스레드로 실행한다 코드를 실행하는 주체가 스레드
한 스레드가 동작할때는 다른 스레드가 동작하지 않는다
스레드는 메모리를 공유한다. 진행했던 내용을 각각 존재하는 스택과 레지스터를 가지고 있음
스레드간의 context switching하는 방법에 대해 배울거다
왜 근데 하나씩만 실행할 수있는데 여러개의 스레드가 필요할까?
1.
메모리를 절약할 수 있다. 싱글스레드이면 하나의 스택 공간인데 하나의 스레드가 가벼운 프로그램 수행하는거랑 같다
2.
프로그램 자체 스위칭보다 스레드 간 스위칭이 훨씬 가볍다. 오버헤드가 줄어든다
coarse = 한개의 스래드가 실행하다가 long stall이 발생하면 예를 들어 l2 캐시 miss같은게 나면
그럼 메인메모리로 가야하는데 프로세서 외부에 있으니까 오래걸린다 그때 switching
ILP instruction level parallelism 스테이지를 늘리거나 여러개의 명령을 한번에 수행하는것으로 ILP를 증가시킬수있다
스테이지를 잘게 쪼개면 clock cycle time을 줄일수 있다 가장 긴 stage를 기준으로 align되기 때문에
multiple issue에도 두가지가 있음 static과 dynamic
long stall발생하면 바로 스레드 b를 실행한다.
쉬는타임이 발생하는 이유는 한칸
pipeline startup overhead 깨끗하게 파이프라인 비우고 실행하기 위해서. 근데 coarse에서만 발생함
load use 데이터 해저드는 한턴 쉬어야하는데 그건 long stall이 아니라서 스위치 안하고 계속 감
fine grained multithreading 각 사이클마다 계속 스위칭함
coarse grained보다 short stall을 잘 커버할수있다
stall일어나면 바로 스위치
simultaneous multithreading ILP dynamic과 연관이 깊다
dynamic mutliple issue를 적극적으로 활용
function unit이 available할때마다 바로바로 수행
미리미리 땡겨서 수행함
smt가 스루풋이 제일 좋음
GPU 3d graphics processing에 많이 사용함
matrix연산에 매우 강력함
UMA shared memory uniform한것 메모리를 전체 하나만 가지고 있음
non uniform은 프로세스마다 메모리를 각각 가지고 있음
NUMA
SMP shared memory multiprocessor라고도 한다
synch = synchronize
half가 계속 나누다보면 언젠간 1이 될때까지 정복
SMP방식은 모든 프로세서가 한개의 physical memory공유
NUMA방식 구현은 각각 private space를 갖는다
cluster = independent comupter의 collection끼리 네트워킹하는것
independent한 작업을 하는 application을 돌리는데 좋다
recevie할때까지 기다린다. sum을 보내고 받을때까지
컴퓨터가 독립적으로 있는거니까 send receive가 있는거다
latency가 발생해서 속도가 더 느리다
interconnection network
network topology 네트워크 구현 구조 (위상)
일직선으로 연결되어있는게 버스
ring, 2d mesh, n-cube n은 한 프로세서가 연결되어있는 개수
fully connected 다 연결된것
line이 제일 중요하다 대역폭을 결정한다
네트워크 전체의 대역폭은 link bandwidth와 link의 총 개수
반으로 잘랐을때 걸리는 링크의 개수 *L은 bisection bandwidth 그게 최소대역폭
따라서 9l에서 15l사이가 됨
12/12
multistage networks
각 노드에 작은 스위치를 둔다. 원래 노드에 프로세서를 두는데
장점은 프로세서보다 부피가 훨씬 작으니까 거리가 짧게 구성할수있다 그럼 속도가 빠르다
본인에게 가게하고싶으면 맨앞에거 하나만 키고
7로 보내고 싶으면 마지막거 키고
여러개 키면 여러개 간다
오메가 네트워크는 스위치 박스를 쓴다
스위치 박스 내부에서 분기가 되고
p0이 자기자신에게 보내려면 계속 c가 나오면 된다
스위치에 따라서 자유자재로 갈 수 있다
Multiprocessor Benchmarks
Berkley Design Pattern만 기억하면 된다!!!!!!
splash: kernel = 문제
roofline diagrma 시험 나옴
arithemtic intensity 표현할때 필요한게 berkley
GFLOPS floating point operation수
kernel = problem
문제의 연산강도
sparse matrix는 연산강도가 작고 n-body는 연산강도가 높다
해당 컴퓨터가 얼마나 많은 초당 gflops연산 수행할수있는지 하드웨어때문에 제한되어있다 data sheet
초당 메모리에 엑세스하는 바이트수 ⇒ stream benchmark으로 measure
초당엑세스할수있는 메모리의 범위가 된다 bytes/sec
메모리대역폭때문에 엑세스 한정이 되어있다
연산강도가 작을때만 구애를많이 받고
kernel 1과 2중에서 2는 computation limited
kernel 1은 memory bandwidth가 제한이 되어있어서 못올라간다
roofline diagram 그림이 지붕처럼 생겨서
upper bound를 세팅 넘어갈수없는 최댓값
연산강도에 따른 upper bound
roofline을 항상 만족할수는 없다
1,2번 기능이 없으면 아무리 연산강도가 커도 얻을수있는 gflops가 한정된다
1.
floating point imbalance
floating point functional unit이 개수가 다르면 mul이 많으면 수행을 빨리할수있느데 balance가 맞아야성능향상
2.
ILP 2개 stage수늘리는거 한번에 여러개 issue
그게 없거나 simd도 없는거
simd = vector architecture
1번 있는데 2번이 없다면? 2까지밖에 안됨
2번은 되고 1은 되면 8
다있으면 16
peak memory bandwidth에 걸리면 1번이 안중요함 풀려는 문제에 따라서 전략이 다르다 안중요한게 있을수 있다
1,2번이 다 필요한 순간은 1/2 이상일때.
3번 sw prefetch없음 데이터가 필요할때까지 기다리지말고 미리 가져와서 올려놓는것.
4번 memory affinity 친화도
3,4번 다 없으면 1/2에서 2
2면 3번의 영향이 없다
kernel 2에서는 메모리 최적화 안필요하지만 1,2번은 중요
floating point관점 최적화가 중요하게 작용한다
kernel 1입장에서는 메모리 최적화만 필요하지 않고 둘다 필요함 1번은 중요하지 않음
optimization choice는 연산강도에 의해 결정된다
gtx가 matrix연산 4배정도 빠르더라
gpu는 cpu의 4.4배의 memory bandwidth를 갖는다
연산강도가 작은곳에서 좋다
연산강도가 크면 하드웨어 limit때문에 걸린다
gather-scatter = 벡터연산
메모리로부터 데이터 모은다 instruction 만들고 수행한다 결과가 저장이 되는데 메모리에다가 저장한다 scatter 분배
어떤건 cpu가 더 성능이 좋다 synchronization과 memory consistency가 제한한다
암달의 법칙은 parallel에 쓰일수 없다? x
weak scaling했을때 linear하게 speedup
peak performance는 observed performance를 따른다? x
마케터 = 홍보하는사람들이 좋아함 특정 cpu가 나왔는데 이전에 비해 2배빨라졌다
실제로는 여러프로그램 돌리기 때문에 모든 프로그램에서 두배 빨라지는건 아니고 특정 benchmark에서 두배 빠르다는것
multiprocessor architecture를 고려한 소프트웨어를 개발하지 않는것
하드웨어는 제공하는데 코드는 serial이면 제대로 못 이용하는것이다
소프트웨어 짤때도 고려해야한다
Fallacy 3
memory bandwidth를 제공하지 않고 좋은성능을 달성할 수 있다? x
특정 연산강도에서 최소 4이상이 gflops를 얻고싶다면
1/2일 경우 2,4가 해결되어야한다
여러개의 프로세서를 써서 성능을 높이는게 중요하다 하지만 소프트웨어 개발이 어렵다 아키텍쳐 만드는것도 어렵다
WSC warehouse scale computer
big picture
성능 measure cpu time CPI 등 cpu time이 크면 안좋은거다
2장에서는 interface 컴파일러, 어셈블러는 어떤역할을 하고
3장에서는 datapath 실제로 사칙연산이 일어나는곳 덧셈 곱셈 floating point연산
4장 control 프로세서 파이프라이닝, 방해하는 요소가 hazard
5장 메모리 hierarchy l1 l2캐시 메인메모리 hdd 플래시메모리가 모바일에서는 hdd. virtual memory
6장 여러대가 있을때 어떻게 성능을 올릴것인가 roofline diagram