동시에 진행할 수 있는 부분
여러 데이터 조각에 같은 연산을 적용하거나 서로 다른 일을 독립적으로 처리할 수 있다면 병렬 실행의 여지가 생긴다. 앞 단계의 결과가 반드시 필요한 연산은 그 의존 관계를 유지해야 한다.
여러 일을 번갈아 처리하는 동시성은 한 코어에서도 가능하다. 실제로 연산이 같은 시간에 실행되는 병렬성과는 구분해서 사용한다.
작업을 나누는 크기
작업 조각이 너무 작으면 배정과 통신에 드는 시간이 계산보다 커질 수 있다. 너무 크게 나누면 일부 장치는 바쁜 동안 다른 장치가 일찍 끝나고 기다릴 수 있다.
부하 분산은 조각의 개수를 같게 만드는 것만으로 해결되지 않는다. 데이터마다 처리 비용이 다르거나 실행 중 작업량이 변하면 동적인 배정이 필요할 수 있다.
같은 상태를 함께 사용할 때
공유 메모리 환경에서는 데이터 접근 순서와 동기화가 중요하다. 분산된 메모리를 사용하는 장치들은 메시지 교환과 데이터 이동이 중요한 비용이 된다.
여러 연산이 같은 값을 갱신하면 경합이 발생할 수 있다. 계산 순서가 바뀌며 부동소수점 결과에 작은 차이가 생기는 등 순차 실행과 결과를 비교할 때의 조건도 살펴야 한다.
성능을 측정하는 기준
속도 향상은 같은 문제를 처리하는 순차 실행 시간과 병렬 실행 시간을 비교해 평가할 수 있다. 늘어난 연산 장치 수만큼 항상 빨라지는 것은 아니다.
문제 크기를 고정하는지 자원과 함께 늘리는지에 따라서도 확장성의 의미가 달라진다. 대기 시간과 처리량, 사용한 자원량 중 무엇을 개선하려는지 먼저 정해야 한다.