Efficient Parallel Simulation Techniques for Multi-processor Embedded Systems
윤덕용 · Seoul National University Open Repository (Seoul National University) · 2012
계속되는 반도체 공정기술의 발전으로 인해 수십에서 수백 개의 프로세서를 하나의 칩에 넣어 MPSoC (Multi-Processor System-on-Chip) 를 만드는 것이 가능해졌다. 가상 프로토타이핑 시스템은 저렴하고 하드웨어가 없어도 시뮬레이션이 가능하다는 이점 때문에 MPSoC의 설계 검증을 위해서 많이 사용되고 있다. MPSoC의 가상 프로토타이핑 시스템에서는 일반적으로 여러 컴포넌트 시뮬레이터가 하나의 호스트에서 수행된다. 하지만 하나의 칩에 집적되는 컴포넌트 수가 증가됨에 따라 시뮬레이션 속도는 감소하게 된다. 병렬 시뮬레이션은 증가되는 여러 컴포넌트 시뮬레이터를 병렬적으로 수행하여 시뮬레이션 성능을 높이는 기법이다. 하지만 컴포넌트 시뮬레이터 사이에서 잦은 통신이 발생하는 경우 통신과 동기화로 인한 손실은 오히려 시뮬레이션 성능을 기존보다 더 느리게 만들 때도 있다. 따라서 이 논문에서는 효율적인 기법들을 이용하여 MPSoC의 병렬 시뮬레이션 성능을 높일 수 있는 시뮬레이션 프레임워크를 제안한다. 제안하는 시뮬레이션 프레임워크의 특징은 다음과 같다. 첫째로 제안한 시뮬레이션 프레임워크는 확장 가능하고 유연한 특징을 가지고 있다. 제안한 프레임워크에서는 각각의 컴포넌트 시뮬레이터의 전역 시간을 시뮬레이터 래퍼가 관리하도록 하고 컴포넌트 시뮬레이터에서는 지역 시간을 이용하여 시뮬레이션을 진행하도록 하여 잦은 동기화 없이 빠르게 시뮬레이션을 진행할 수 있도록 하였다. 또한 주기적 널 메시지의 전송을 통해 컴포넌트 시뮬레이터가 주기적으로 진행상태를 업데이트하도록 하여 병렬성을 높였다. 실험 결과는 제안한 병렬 시뮬레이션 프레임워크가 좋은 확장성을 가짐을 보여주었다. 둘째로 제안한 병렬 시뮬레이션 프레임워크에서는 주어진 어플리케이션의 특성을 고려하여 최적의 시뮬레이션 성능을 낼 수 있는 설정을 찾아준다. 이러한 설정은 시뮬레이션 플랫폼, 컴포넌트 시뮬레이터의 매핑, 그리고 시간 동기화를 위한 주기적 널 메시지의 간격을 포함한다. 최적의 설정 값을 찾기 위해 설정의 요소들을 고려한 성능 예측 수식을 세웠고 유전 알고리즘을 통해 좋은 결과를 찾도록 하였다. 그 결과 제안한 기법은 적절한 매핑 결과를 통해 시뮬레이션의 작업량을 잘 분산시키고 병렬성을 높이면서도 통신 손실이 크지 않은 널 메시지의 주기를 찾아주는 것을 확인할 수 있었다. 실험 결과를 통해 가정한 성능 예측식이 약 90%의 정확도로 성능을 예측함을 확인할 수 있었고 제안한 유전 알고리즘이 어플리케이션의 특성을 고려한 높은 시뮬레이션 성능을 가지는 설정을 찾음을 확인할 수 있었다. 셋째, 시뮬레이션 성능을 더욱 향상시키기 위해 각 컴포넌트 시뮬레이터에서 시뮬레이션 목적으로 시뮬레이션 캐시를 사용하는 완화된 동기화 기법을 제안하였다. 제안한 프레임워크에서 응답을 기다리는 동기적인 통신은 공유 메모리에 대한 접근마다 발생한다. 과도한 공유 메모리 접근은 시뮬레이션의 진행을 느리게 만들고 시뮬레이션의 성능을 저하시킨다. 이를 위해 시뮬레이션 캐시와 메시지 그룹화를 통한 느슨한 동기화 기법을 제안하여 동기적인 통신 횟수를 줄여 시뮬레이션 성능을 높이도록 하였다. 시뮬레이션 캐시는 하위 메모리 시스템으로의 잦은 메모리 접근을 줄여주는 아키텍처 캐시처럼 컴포넌트 시뮬레이터와 백플레인 사이에 발생하는 잦은 동기적인 통신을 효과적으로 줄여준다. 공유 메모리에 읽거나 쓰는 요청이 발생할 때 각각을 전달하는 것이 아니라 큰 단위의 캐시 라인 사이즈만큼 전달하고 컴포넌트 시뮬레이터 상에 위치한 시뮬레이션 캐시에서 이를 보관하도록 하여 추후 캐시라인에 해당하는 메모리 접근이 발생할 경우 동기적인 통신을 발생시키는 것이 아니라 캐시의 값을 돌려주고 비동기적인 통신을 발생시켜서 성능을 높인다. 실제적인 멀티미디어 예제의 실험을 통해 제안한 기법이 시뮬레이션 성능을 평균 330% 향상시키는 것을 확인할 수 있었다. 마지막으로 시뮬레이션 성능을 더욱 높이기 위해 시간과 공간을 동시에 병렬화하는 기법을 제안하였다. 위에서 제안한 기법들은 공간 병렬화에 기반을 두고 있고 이 경우 최대 컴포넌트 시뮬레이터의 개수만큼의 병렬성을 가질 수 있다. 따라서 사용 가능한 호스트 프로세서의 개수가 더 많더라도 제한된 범위의 병렬 수행만이 가능하다. 제안된 시뮬레이션 프레임워크에서는 호스트 코드 수행을 통해 태스크 사이의 데이터 종속성을 제거하여 각 태스크를 모두 병렬적으로 수행할 수 있었다. 제안된 기법을 통해 타겟 아키텍처의 프로세서 개수 이상의 병렬성을 얻을 수 있었다.