프로그램을 분석하여 독립된 태스크로 나눌 수 있는 영역을 찾아야 한다. 각 태스크는 각자 다른 코어에서 병렬적으로 실행 가능하여야 한다.
테스크가 접근하고 연산하는 데이터는 개별 프로세서에서 사용할 수 있도록 나눌 수 있어야한다.
병렬로 실행될 수 있는 태스크를 찾아내는것도 중요하지만 찾아낸 태스크를 균등하게 분배하는것도 중요하다. 하나의 프로세서에 80%의 처리
를 하고 다른 프로세서에 20%처리
를 한다고 가정하자. 만약 두 프로세서가 처리한 데이터를 동기화해야한다면 80% 처리하는 프로세서
(당연히 더 많은 일을 하니까)에 맞춰질 것이다. 이것은 context switching 비용과 동기화 코드 수행을 생각하면 두 프로세서에 병렬적으로 실행할 가치는 없을 것이다.
병렬적으로 실행되는 태스크가 같은 데이터에 접근하게 되면 레이스 컨디션이나 데드락이 발생할 수 있다. (레이스 컨디션과 데드락은 따로 찾아보도록)
멀티 프로세서에서 병렬적으로 실행되는 프로그램은 테스트와 디버깅하는데 어려움이 존재한다.