여러개의 컴퓨터들이 네트워크로 연결되었을때 어떻게 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은 프로세서 수와 비례해서 문제 크기도 키우는것