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