Languages

CommunityCategory: XMODELIncremental profiling을 통해 XMODEL CLM 시뮬레이션의 속도 저하 요인 분석하는 방법

XMODEL

Incremental profiling을 통해 XMODEL CLM 시뮬레이션의 속도 저하 요인 분석하는 방법

SA Support Team Staff 2019-07-12

제 모델은 대부분 circuit primitive들로 구성된 circuit-level model(CLM)인데, XMODEL 시뮬레이션 수행 도중에 진행속도가 매우 느려지는 구간이 있습니다. 그 이유가 무엇인지 분석하는 방법이 있나요?

1 Answers
Best Answer
SA Support Team Staff 2019-07-12

예, 있습니다. $xmodel$cktsim_profile() 시스템 함수를 사용하면, XMODEL CLM 시뮬레이션에 대한 점진적인 수행시간 분석(incremental profiling)을 수행할 수 있습니다. 예를 들어, 아래의 코드를 최상위 테스트벤치 모듈에 삽입하면, XMODEL은 일정한 시간 간격으로 CLM 시뮬레이션에 소요된 실행시간의 통계분석결과를 출력합니다.

initial $xmodel$cktsim_profile("interval=", 600, "num_cluster=", 20);

여기서 $xmodel$cktsim_profile() 시스템 함수의 "interval=" 인자는 incremental profiling을 수행하는 시간간격을 초단위로 정의하고 (기본값은 -1로 incremental profiling을 수행하지 않음), "num_cluster=" 인자는 가장 실행시간을 많이 소요한 회로 클러스터를 몇개까지 출력할 것인지를 정의합니다 (기본값: 10). 위의 예를 사용하면, 600초마다 분석결과를 출력하고, 실행시간을 많이 소모하는 회로 클러스터를 20개까지 출력합니다.

이 incremental profiling의 실행예를 아래에 보입니다.

------------------------------------------------------------
INCREMENTAL PROFILE AT TIME=3187131 (2018-11-23 18:21:21)
------------------------------------------------------------
RUNTIME STATISTICS:
    PROCESS_EVENT: 2282 iterations (total: 2282), 4.389 seconds (total: 4.389)
    MNA2TF: 3292 iterations (total: 3293), 2.107 seconds (total: 2.108)
    DC SOLVER: 195 iterations (total: 196), 0.900 seconds (total: 0.901)
    PRE_SAMPLE: 15023 iterations (total: 15024), 0.088 seconds (total: 0.088)
    COMPUTE_OUTPUT: 15023 iterations (total: 15024), 1.159 seconds (total: 1.159)
    VERIFY_LEVEL: 15023 iterations (total: 15024), 0.200 seconds (total: 0.200)
    VERIFY_FIND_CROSS: 14698 iterations (total: 14698), 0.618 seconds (total: 0.618)
    PRE_VERIFY_LEVEL: 8951 iterations (total: 8951), 0.032 seconds (total: 0.032)
                                                                                                                                  
TOP-20 CLUSTER STATISTICS:
    #0: CLUSTER #70592 containing tb_test.VBLEQ (# poles: 5~35):
       205 iterations (total: 205), 1.084 seconds (total: 1.084)
    #1: CLUSTER #233162 containing tb_test.u_OSC1.n1d (# poles: 15~16):
       530 iterations (total: 530), 0.478 seconds (total: 0.478)
……

"INCREMENTAL PROFILE AT TIME…"으로 시작하는 첫줄에서는 현재 시뮬레이션되고 있는 시간 위치와 현재 시각을 표시하여, 시뮬레이션의 진행속도를 확인할 수 있습니다. "RUNTIME STATISTICS" 부분에서는 XMODEL이 수행하는 연산별로 수행횟수(iterations) 및 소요시간을 현 시간구간 동안의 증가량과 총량으로 나누어 표시합니다. 특정한 시간구간에서 시뮬레이션 속도가 현저히 느려진다면, 해당 시간구간에서 수행횟수 또는 소요시간이 급격히 증가하는 항목이 있는지 확인해보세요. "TOP-XX CLUSTER STATISTICS" 부분에서는 각 시간구간에서 가장 많은 실행시간을 쓴 회로 클러스터들을 나열합니다. 이를 통해, 회로의 어떤 부분을 연산하느라 속도가 느려지고 있는지를 확인할 수 있습니다.

XMODEL의 CLM 시뮬레이션을 느려지게 하는 요인으로는 크게 두가지가 있습니다.
1. 첫번째는, 회로 클러스터의 크기가 커서, 이로부터 전달함수를 추출하는데 (MNA2TF) 많은 시간이 소요될 수 있습니다. MNA2TF 항목의 실행시간이 높은 비중을 차지하면 이 점을 의심할 수 있습니다. 이 경우, 실행시간을 많이 소요한 회로 클러스터들 중에 pole의 수가 100개 이상 되는 것이 있나 살펴보세요. 문제의 회로 클러스터를 찾으면, buffer를 적절히 삽입하여 회로 클러스터를 작게 분할하거나, level_ac=0 옵션을 사용해 커패시턴스 성분을 줄이는 방법 등으로 pole의 수를 줄이는 것을 추천합니다.
2. 두번째는, 시뮬레이션 도중에 발생하는 event의 수가 많아져서 시뮬레이션의 진행속도가 느려질 수 있습니다. COMPUTE_OUTPUT 항목의 실행횟수(iterations)가 급격히 증가하기 시작하면 이 점을 의심할 수 있습니다. 이 경우, 실행시간을 많이 소요한 회로 클러스터들 중에 실행횟수가 현저히 증가한 것이 있는지 살펴보세요. 문제의 회로 클러스터를 찾으면, event가 많이 발생하는 이유를 분석해보세요. 회로 클러스터의 입력 신호에 event가 많은 경우가 있고, 회로 클러스터내의 트랜지스터 소자들이 자주 스위칭하여 event를 많이 발생시키는 경우가 있습니다. 경우에 맞게 적절한 조치를 취하면 됩니다.