KR20130039678A - 시뮬레이션 장치, 방법, 및 기록 매체 - Google Patents

시뮬레이션 장치, 방법, 및 기록 매체 Download PDF

Info

Publication number
KR20130039678A
KR20130039678A KR1020120110856A KR20120110856A KR20130039678A KR 20130039678 A KR20130039678 A KR 20130039678A KR 1020120110856 A KR1020120110856 A KR 1020120110856A KR 20120110856 A KR20120110856 A KR 20120110856A KR 20130039678 A KR20130039678 A KR 20130039678A
Authority
KR
South Korea
Prior art keywords
instruction
simulation
execution
code
result
Prior art date
Application number
KR1020120110856A
Other languages
English (en)
Other versions
KR101332499B1 (ko
Inventor
신야 구와무라
아쯔시 이께
Original Assignee
후지쯔 가부시끼가이샤
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 후지쯔 가부시끼가이샤 filed Critical 후지쯔 가부시끼가이샤
Publication of KR20130039678A publication Critical patent/KR20130039678A/ko
Application granted granted Critical
Publication of KR101332499B1 publication Critical patent/KR101332499B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead

Abstract

파이프라인 처리를 제어하는 CPU의 성능 시뮬레이션을, 고속으로 또한 고정밀도로 실행할 수 있도록 한다. 시뮬레이션 장치(1)의 코드 변환부(11)는, 타깃 CPU의 프로그램의 실행 시에, 분할한 각 블록에서, 외부 환경에 영향을 받는 외부 의존 명령을 검출하고, 외부 의존 명령의 실행 결과를 예측하고, 예측 결과에서의 명령 실행을 시뮬레이션하고, 그 시뮬레이션 결과에 기초하여 성능 시뮬레이션용 코드를 내장한 호스트 코드를 생성한다. 시뮬레이션 실행부(12)는, 호스트 코드를 이용하여 프로그램의 예측 결과에서의 명령 실행에 대하여 성능 시뮬레이션을 행하고, 실행 중에 외부 의존 명령의 실행 결과가 예측 결과의 설정과 다른 경우에, 예상 결과에서의 명령의 실행 시간을, 그 명령 전후에 실행되는 명령의 실행 시간 등을 이용하여 보정한다. 시뮬레이션 정보 수집부(13)는, 성능 시뮬레이션 정보를 수집, 출력한다.

Description

시뮬레이션 장치, 방법, 및 기록 매체{SIMULATION APPARATUS, SIMULATION METHOD, AND RECORDING MEDIUM}
본 발명은, 가상적으로 모델화된 시스템 중에서의 프로세서의 명령 실행에 대하여, 성능 또는 전력의 시뮬레이션 정보를 취득하는 처리 기술에 관한 것이다.
시스템이 복잡화되어, 복수 프로세서(예를 들면 CPU)를 탑재하는 멀티 코어 구성이 일반적으로 되어 있는 현황에서는, 각 코어(CPU)의 기능, 성능, 전력 등의 시뮬레이션 처리에 대하여, 보다 높은 처리 속도나 처리 정밀도를 실현하는 것이 요구되고 있다.
기능, 성능, 소비 전력의 시뮬레이션에서, 평가 대상으로 되는 타깃 CPU를, 호스트 CPU로 동작시키는 경우의 타깃 CPU의 명령 코드(타깃 코드)로부터 호스트 CPU의 명령 코드(호스트 코드)로의 변환 방법으로서, 인터프리터 방식 또는 JIT(Just-in-Time) 컴파일러 방식을 채용하는 것이 알려져 있다.
JIT 컴파일러 방식에 의한 시뮬레이션에서는, 시뮬레이션 대상인 타깃 CPU에 대하여, 실행 중인 프로그램에 출현하는 타깃 CPU의 명령을, 시뮬레이션을 실행하는 호스트 CPU의 명령으로 치환하고, 이후에는, 그 치환된 명령을 실행하고 있다. 그 때문에, JIT 컴파일러 방식의 처리는, 인터프리터 방식의 처리에 비해 고속이며, CPU의 기능 시뮬레이션에서는, 특히 고속성이 요구되는 경우에 JIT 컴파일 방식이 채용되었다.
JIT 컴파일러 방식을 채용하는 CPU의 성능 시뮬레이션도 제안되어 있다.
그러나, 클럭마다 각 유닛이 독립하여 동작할 수 있두록 한 후에, 차례차례로 명령을 투입ㆍ병렬로 실행하는 파이프라인 처리의 제어에서는, 처리를 실행할 때마다 CPU의 내부 상태가 변화되기 때문에, 일단 생성한 호스트 명령을 반복하여 이용한다고 하는 JIT 컴파일러 방식의 이점이 살릴 수 없다.
그 때문에, 일반적으로, 파이프라인 처리나 아웃 오브 오더 처리를 제어하는 CPU에 대한 성능 시뮬레이션이나 전력 시뮬레이션에는, JIT 컴파일러 방식은 적합하지 않게 되어 있다.
미국 특허 6,751,583 B1
상기한 바와 같이, 파이프라인 처리나 아웃 오브 오더 처리를 제어하는 CPU에 대한 기능, 성능, 전력의 시뮬레이션에 인터프리터 방식을 채용하는 경우, 일반적으로, 처리 속도가 매우 느려져, 현실적인 방법으로서 활용할 수 없다고 하는 문제가 있었다.
또한, 최근의 고속의 CPU의 경우, 기능 시뮬레이션에 JIT 컴파일러 방식을 채용한 경우에, 어떻게든 실용적인 속도로 처리를 행할 수 있다.
그러나, 성능이나 전력의 시뮬레이션에 JIT 컴파일러 방식을 채용한 경우에, 타깃 CPU에서는 파이프라인의 제어에 의해 처리의 전후의 상황은 다양하여, 내부 상태에 대응한 방대한 시뮬레이션용 코드의 추가와 그 명령 실행이 필요하기 때문에, 처리 부담이 매우 큰 것으로 된다.
또한, 성능 시뮬레이션에서, 타깃 CPU에서 예상되는 실행 지연에 대한 타이밍의 적응을 행하기 위해서도, 호스트 코드에 방대한 시뮬레이션용 코드를 추가할 필요가 있다. 예를 들면, 로드 명령(LD : load)의 사이클 시뮬레이션을 실행할 때에, 이 명령에 의한 캐쉬 액세스에서, 캐쉬 미스 또는 캐쉬 히트 중 어느 것이 발생하는지, 캐쉬 미스의 경우에 전체 타이밍을 계상하고, 고려해야 할 페널티 사이클이 있는지 등을 조사하기 위해서, 이들의 조건 기술을 호스트 코드에 추가할 필요가 있다.
그러나, 한편, 높은 동작성을 유지하기 위해서, 기능 코드에 추가되는 성능 시뮬레이션(사이클 시뮬레이션)용의 코드량을 가능한 한 억제할 필요가 있다.
본 발명은, 고속의 시뮬레이션을 행할 수 있는 기술을 제공하는 것을 목적으로 한다.
본 발명의 일 양태로서 개시하는 시뮬레이션 장치는, 파이프라인 처리를 제어하는 타깃 프로세서에 대한 프로그램의 명령 실행의 시뮬레이션을 실행하는 시뮬레이션 장치로서, 1) 상기 프로그램의 코드를 소정의 블록으로 분할하고, 상기 블록에 포함되는 명령 중, 그 명령의 실행 결과가 외부 환경에 의존하는 외부 의존 명령의 처리의 실행 결과를 예측 결과로서 설정하는 처리와, 상기 예측 결과를 전제로 하는 명령 실행의 기능 시뮬레이션을 행하고, 상기 블록에 포함되는 명령의 실행 타이밍을 나타내는 타이밍 정보를 얻어, 상기 기능 시뮬레이션의 결과와 상기 타이밍 정보에 기초하여, 상기 예측 결과에서의 외부 의존 명령의 실행 시간을 산출하는 처리와, 상기 기능 시뮬레이션의 결과에 기초하여, 상기 예측 결과를 전제로 하는 명령 실행의 성능 시뮬레이션을, 상기 타깃 프로세서를 동작시키는 호스트 프로세서에 실행시키는 호스트 코드를 생성하는 처리를 행하는 코드 변환부와, 2) 상기 호스트 프로세서가 상기 생성된 호스트 코드를 실행한 실행 결과에서, 그 호스트 코드에 포함되는 외부 의존 명령의 실행 결과가 상기 예측 결과와 상이한 경우에, 그 외부 의존 명령의 소정의 지연 시간과 상기 외부 의존 명령의 전후에 실행되는 명령의 실행 시간을 이용하여 구한 보정값으로, 상기 예측 결과에서의 외부 의존 명령의 실행 시간을 보정하여, 상기 기능 시뮬레이션에서의 그 외부 의존 명령의 실행 시간으로 하는 시뮬레이션 실행부를 구비한다.
또한, 본 발명의 다른 일 양태로서 개시하는 시뮬레이션 방법은, 상기 시뮬레이션 장치가 실행하는 각 처리 스텝을 구비하는 것이다.
또한, 본 발명의 다른 일 양태로서 개시하는 시뮬레이션 프로그램은, 컴퓨터에, 상기 시뮬레이션 방법을 실행시키기 위한 것이다.
개시된 시뮬레이션 장치에 의하면, 고속으로 시뮬레이션을 행하는 것이 가능하게 된다.
도 1은 본 발명의 일 실시 양태로서 개시하는 시뮬레이션 장치의 구성예를 도시하는 도면.
도 2는 블록에 포함되는 명령의 예를 도시하는 도면.
도 3은 타이밍 정보의 예를 도시하는 도면.
도 4는 도 2에 도시하는 명령 실행의 타이밍예를 도시하는 도면.
도 5는 사이클 시뮬레이션용 코드가 내장되는 예를 도시하는 도면.
도 6은 시뮬레이션 장치의 보정부의 처리 동작을 도시하는 도면.
도 7은 시뮬레이션 장치의 보정부의 LD 명령의 실행 결과에 대한 보정예를 도시하는 도면.
도 8은 시뮬레이션 장치의 보정부의 LD 명령의 실행 결과에 대한 보정예를 도시하는 도면.
도 9는 보정부(123)의 LD 명령의 실행 결과에 대한 보정예를 도시하는 도면.
도 10은 제1 실시예에서의 시뮬레이션 장치의 코드 변환부의 개요 처리 플로우도.
도 11은 제1 실시예에서의 시뮬레이션 장치의 시뮬레이션 실행부의 개요 처리 플로우도.
도 12는 외부 의존 명령의 일례로서, 로드(ld) 명령의 처리에 대한 예측 결과의 판정 및 보정의 처리 플로우예를 도시하는 도면.
도 13은 타깃 프로그램의 명령과 변환 후의 호스트 프로그램의 호스트 명령수의 관계를 도시하는 도면.
도 14는 제2 실시예에서의 시뮬레이션 장치(1)의 코드 변환부(11)의 개요 처리 플로우도.
도 15는 제2 실시예에서의 시뮬레이션 장치(1)의 코드 변환부(11)의 개요 처리 플로우도.
도 16은 다른 실시 형태에서의 시뮬레이션 장치의 구성예를 도시하는 도면.
도 17은 시뮬레이션 장치의 전력 시뮬레이션 정보 생성부의 실시예를 도시하는 도면.
도 1은 본 발명의 일 실시 양태로서 개시하는 시뮬레이션 장치의 일 실시 형태에서의 구성예를 도시하는 도면이다.
시뮬레이션 장치(1)는, 파이프라인 처리를 제어하는 타깃 CPU에서의 명령 실행의 성능 시뮬레이션을 실행하는 장치이다.
타깃 CPU는, 시뮬레이션의 대상으로 되는 CPU의 제어 모델이다. 시뮬레이션 장치(1)는, 타깃 CPU의 명령 실행의 성능 시뮬레이션으로서 각 명령의 사이클 시뮬레이션 정보를 출력한다.
여기서, 타깃 CPU는, 예를 들면 ARM 아키텍처의 CPU이다. 호스트 CPU에 상당하는 시뮬레이션 장치(1)는, 예를 들면 X86 아키텍처의 CPU를 탑재하는 컴퓨터이다.
시뮬레이션 장치(1)는, 코드 변환부(11)와 시뮬레이션 실행부(12)와 시뮬레이션 정보 수집부(13)를 갖는다.
코드 변환부(11)는, 타깃 CPU의 프로그램의 실행 시에, 타깃 CPU가 실행하는 프로그램의 코드(타깃 코드)로부터, 시뮬레이션을 실행하는 호스트 CPU의 코드(호스트 코드)를 생성하는 처리부이다.
코드 변환부(11)는, 블록 분할부(111), 예측 시뮬레이션 실행부(113), 코드 생성부(115)를 갖는다.
블록 분할부(111)는, 시뮬레이션 장치(1)에 입력된 프로그램의 타깃 코드를, 소정의 블록으로 분할한다. 분할되는 블록 단위는, 예를 들면, 일반적인 베이식 블록(분기부터 다음 분기 전까지의 코드) 단위이어도 되고, 또는, 미리 정해진 임의의 코드 단위이어도 된다.
도 2는 블록에 포함되는 명령의 예를 도시하는 도면이다.
도 2에 도시한 바와 같이, 어떤 블록에는, 타깃 코드의 3개의 명령; (1) "LD r1, r2"(로드); (2) "MULT r3, r4, r5(승산)"; (3) "ADD r2, r5, r6(가산)"의 명령이 포함되고, (1)~(3)의 순으로 타깃 CPU의 파이프라인에 투입되어 실행되는 것으로 한다. 각 명령의 r1~r6은 레지스터(어드레스)를 나타낸다.
예측 시뮬레이션 실행부(113)는, 타이밍 정보(3)와 예측 정보(4)를 얻어, 입력된 블록을 어떤 실행 결과를 전제로 한 조건 하에서 실행하는 성능 시뮬레이션을 행하는 처리부이다.
타이밍 정보(3)는, 타깃 코드의 각 명령에 대하여, 명령 실행 시의 각 처리 요소(단계)와 사용 가능한 레지스터의 대응을 나타내는 정보와, 명령 중 외부 의존 명령마다, 실행 결과에 따른 지연 시간을 정하는 페널티 시간(페널티 사이클수)을 나타내는 정보이다.
외부 의존 명령은, 외부 환경이 관계되는 처리를 행하는 명령, 예를 들면, 로드 명령 또는 스토어 명령 등과 같이, 명령의 실행 결과가 타깃 CPU 밖의 외부 환경에 의존하는 처리, 예를 들면, 명령 캐쉬, 데이터 캐쉬, TLB 검색 등이거나, 또한, 분기 예측, 콜/리턴의 스택 등의 처리를 행하는 명령이다.
도 3은 타이밍 정보(3)의 예를 도시하는 도면이다.
도 3에 도시한 타이밍 정보(3)에서는, LD 명령에 대하여, 소스 레지스터 rs1(r1)은 1번째의 처리 요소(e1)에서, 수신처 레지스터 rd(r2)는 2번째의 처리 요소(e2)에서 사용 가능한 것을 나타낸다.
또한, MULT 명령에서는, 제1 소스 레지스터 rs1(r3)은 1번째의 처리 요소(e1), 제2 소스 레지스터 rs2(r4)는 2번째의 처리 요소(e2), 수신처 레지스터 rd(r5)는 3번째의 처리 요소(e3)에서, 각각 사용 가능한 것을 나타낸다. 또한, ADD 명령에서는, 제1 소스 레지스터 rs1(r2), 제2 소스 레지스터 rs2(r5)는 1번째의 처리 요소(e1), 수신처 레지스터 rd(r6)는 2번째의 처리 요소(e2)에서 사용 가능한 것을 나타낸다.
도 4는 도 2에 도시한 블록의 각 명령의 실행 타이밍예를 도시하는 도면이다.
도 3에 도시한 타이밍 정보(3)로부터, 파이프라인에 각 명령이 투입되는 타이밍은, LD 명령의 실행 개시를 타이밍 t로 하면, MULT 명령은 타이밍 t+1, ADD 명령은 타이밍 t+2로 된다.
ADD 명령의 제1 소스 레지스터(r2)와 제2 소스 레지스터(r5)는, LD 명령과 MULT 명령에서 사용되고 있기 때문에, ADD 명령의 개시는, LD 명령과 MULT 명령의 실행 완료의 타이밍 t+4 이후로 되어, 2사이클분의 대기 시간(2사이클분의 스톨)이 생긴다.
따라서, 도 4의 (A)에 도시한 바와 같이, 도 2에 도시한 블록을 시뮬레이션한 경우에, LD 명령의 실행 결과가 캐쉬 히트인 케이스에서는, 블록의 실행 시간이 6사이클인 것을 알 수 있다.
도 4의 (B)는 도 2에 도시한 블록의 LD 명령의 실행 결과가 캐쉬 미스인 경우의 타이밍예를 도시한다.
LD 명령의 결과가 캐쉬 미스이면, 타이밍 정보(3)에, 페널티로서, 재실행에 충분하다고 생각되는 임의의 시간(여기서는 6사이클분)이 설정되어 있기 때문에, 이 페널티 사이클이 지연 시간으로서 추가된다. 따라서, 2번째의 처리 요소(e2)의 실행은, 타이밍 t+7로 지연된다. LD 명령의 다음에 실행되는 MULT 명령은, 지연의 영향을 받지 않고 그대로 실행되지만, ADD 명령은, LD 명령의 실행 완료의 타이밍 t+8 이후로 되어, 4사이클분의 대기 시간(4사이클분의 스톨)이 생긴다.
따라서, 도 4의 (B)에 도시한 바와 같이, 도 2에 도시한 블록의 명령 실행을 시뮬레이션한 경우에, LD 명령의 실행 결과가 캐쉬 미스인 케이스에서는, 실행 시간이 10사이클로 되는 것을 알 수 있다.
예측 정보(4)는, 타깃 코드의 외부 의존 명령의 처리에서, 생길 확률이 높은 실행 결과(예측 결과)를 정한 정보이다. 예측 정보에는, 예를 들면, 「명령 캐쉬 : 예측=히트,
데이터 캐쉬 : 예측=히트,
TLB 검색 : 예측=히트,
분기 예측 : 예측=히트,
콜/리턴 : 예측=히트 …」가 정해진다.
예측 시뮬레이션 실행부(113)는, 상기의 예측 정보(4)에 기초하여, 입력된 블록에 포함되는 외부 의존 명령의 예측 결과를 설정하고, 타이밍 정보(3)를 참조하여, 설정한 예측 결과를 전제로 하는 경우(예측 케이스)의 명령을 실행하여, 명령 실행의 진행 상태를 시뮬레이션한다. 예측 시뮬레이션 실행부(113)는, 시뮬레이션 결과로서, 블록에 포함되는 각 명령의 실행 시간(소요 사이클수)을 구한다.
코드 생성부(115)는, 예측 시뮬레이션 실행부(113)의 시뮬레이션 결과에 기초하여, 처리한 블록에 대응하는 호스트 코드로서, 설정된 예측 케이스에서의 명령 실행 시의 성능 시뮬레이션을 행하기 위한 호스트 코드(성능 시뮬레이션용 호스트 코드)를 생성하는 처리부이다.
코드 생성부(115)는, 블록의 타깃 코드에 기초하여, 외부 의존 명령이 예측 결과인 예측 케이스의 경우의 명령 실행을 행하는 호스트 코드를 생성하고, 또한, 각 명령의 실행 시간을 가산하여, 블록의 처리 시간을 계산하는 처리를 행하는 시뮬레이션용 코드를 내장한다.
예를 들면, 코드 생성부(115)는, 데이터의 LD 명령의 예측 결과로서 "캐쉬 히트"가 설정되어 있는 처리에 대해서는, 그 블록 내의 LD 명령에 의한 캐쉬 액세스가 "히트"인 경우의 처리 실행을 시뮬레이션하여, 이 예측 케이스에서의 실행 시간을 구하고, LD 명령에 의한 캐쉬 액세스가 "미스"인 경우의 실행 시간은, 예측 케이스인 "히트" 시의 실행 시간의 가산/감산을 이용한 보정 계산에 의해 구하는 처리를 행하는 호스트 코드를 생성한다.
시뮬레이션 실행부(12)는, 코드 생성부(115)가 생성한 호스트 코드를 실행하여, 프로그램(타깃 코드)을 실행하는 타깃 CPU의 명령 실행의 기능 및 성능 시뮬레이션을 행하는 처리부이다.
시뮬레이션 실행부(12)는, 코드 실행부(121), 보정부(123)를 갖는다.
코드 실행부(121)는, 호스트 코드를 이용하여, 프로그램(타깃 코드)을 실행하는 처리부이다.
보정부(123)는, 프로그램의 실행 중에, 외부 의존 명령의 실행 결과가, 설정되어 있던 예측 결과와 상이한 경우(예측외 케이스)에, 그 명령의 실행 시간을, 이미 구한 예상 케이스에서의 실행 시간을 보정하여 구하는 처리부이다.
보정부(123)는, 외부 의존 명령에 제공되는 페널티 시간, 외부 의존 명령의 전후에서 실행되는 명령의 실행 시간, 1개 전의 명령의 지연 시간 등을 이용하여 보정을 행한다. 또한, 보정 처리의 상세는 후술한다.
시뮬레이션 정보 수집부(13)는, 성능 시뮬레이션의 실행 결과로서, 각 명령의 실행 시간을 포함하는 로그 정보(시뮬레이션 정보)(5)를 수집하는 처리부이다.
이하에, 제1 실시예에서의 시뮬레이션 장치(1)의 처리의 흐름을 설명한다.
〔코드 변환 처리〕
(1) 시뮬레이션 장치(1)의 코드 변환부(11)의 블록 분할부(111)는, 타깃 프로그램(2)의 타깃 코드를 얻어 기억부(도 1에 도시하지 않음)에 유지하고, 유지한 타깃 코드를 임의의 블록으로 분할한다(도 2 참조).
(2) 예측 시뮬레이션 실행부(113)는, 입력되는 타깃 프로그램(2)에 관한 타이밍 정보(3), 예측 정보(4)를 얻어 기억부에 보존한다.
그리고, 예측 시뮬레이션 실행부(113)는, 예측 정보(4)에 기초하여, 분할된 블록의 외부 의존 명령의 각각에 대하여 예측 결과를 설정한다. 예를 들면, 예측 시뮬레이션 실행부(113)는, 도 2에 도시한 블록의 명령 중, LD 명령의 데이터 캐쉬의 예측 결과로서 「히트」를 설정한다.
(3) 예측 시뮬레이션 실행부(113)는, 블록의 코드를 해석하여, 설정된 예측 결과를 전제로 하는 경우의 명령 실행을 시뮬레이션한다. 즉, 예측 시뮬레이션 실행부(113)는, 도 4의 (A)에 도시한 타이밍예의 명령 실행을 시뮬레이션하게 된다.
(4) 다음으로, 코드 생성부(115)는, 예측 케이스의 시뮬레이션 결과에 기초하여, 타깃 코드로부터 호스트 코드를 생성한다. 또한, 코드 생성부(115)는, 타깃 코드로부터 변환된 호스트 코드(기능 코드만)에, 성능 시뮬레이션(사이클 시뮬레이션)을 실행하기 위한 사이클 시뮬레이션용 코드를 내장한다.
도 5의 (A)는 타깃 코드로부터 기능 시뮬레이션의 호스트 코드가 생성되는 예를 도시하는 도면, 도 5의 (B)는 기능 시뮬레이션의 호스트 코드에, 사이클 시뮬레이션용 코드가 내장되는 예를 도시하는 도면이다.
도 5의 (A)에 도시한 바와 같이, 타깃 코드 Inst_A는, 호스트 코드 Host_Inst_A0_func, Host_Inst_A1_func로 변환되고, 타깃 코드 Inst_B는, 호스트 코드 Host_Inst_B0_func, Host_Inst_B1_func, Host_Inst_B2_func …로 변환되어, 기능 코드만의 호스트 코드가 생성된다.
또한, 기능 코드만의 호스트 코드에, 타깃 코드 Inst_A의 사이클 시뮬레이션용 코드 Host_Inst_A2_cycle, Host_Inst_A3_cycle이, 타깃 코드 Inst_B의 사이클 시뮬레이션용 코드 Host_Inst_B4_cycle, Host_Inst_B5_cycle이, 각각 내장된다.
사이클 시뮬레이션용 코드는, 각 명령의 실행 시간(소요 사이클수)을 상수화하고, 각 명령의 실행 시간을 합계하여 블록의 처리 시간을 구하는 코드이다. 이에 의해, 블록 실행 중의 진행 상태를 나타내는 정보를 얻을 수 있다.
여기서, 호스트 코드 중, 기능 코드, 외부 의존 명령 이외의 명령에 대한 사이클 시뮬레이션용 코드는 기지의 코드를 사용하여 실시할 수 있으므로, 구체예의 설명을 생략한다. 외부 의존 명령에 대한 사이클 시뮬레이션용 코드는, 보정 처리를 호출하는 헬퍼 함수로서 준비된다. 헬퍼 함수에 대해서는 후술한다.
〔시뮬레이션 처리〕
(1) 시뮬레이션 실행부(12)의 코드 실행부(121)는, 코드 변환부(11)가 생성한 호스트 코드를 이용하여, 타깃 프로그램(2)의 성능 시뮬레이션을 행한다.
코드 실행부(121)는, 타깃 프로그램(2)의 명령 실행을 시뮬레이션하고, 각 명령의 실행 시간을 얻어 간다.
(2) 코드 실행부(121)는, 시뮬레이션의 실행 중에, 외부 의존 명령(예를 들면 LD 명령)을 검출한 경우에, 그 실행 결과가, 설정된 예측 결과와 상이한지를 판정하고, 실행 결과가 예측 결과와 상이한 경우에, 보정부(123)의 기동을 요구한다. 예를 들면, 명령 「LD, r1, r2」를 검출하고, 데이터 캐쉬의 예측 결과(캐쉬 히트)와, 실제의 실행 결과(캐쉬 미스)가 상이한 경우에, 보정부(123)가 호출된다.
(3) 보정부(123)는, 호출을 받아서 기동하고, 검출된 명령 「LD, r1, r2」의 실행 시간(사이클수)을 보정한다. 또한, 보정부(123)는, 이 보정에 의해, 다음 명령의 실행 타이밍 t+n도 변경한다.
보정부(123)는, 외부 의존 명령의 실행 결과가 예측 결과와 상이할 때마다, 명령의 실행 시간을 보정한다. 여기서, 예측 케이스에서의 외부 의존 명령의 실행 시간은 이미 상수화되어 있기 때문에, 보정부(123)는, 예측외 케이스에서의 외부 의존 명령의 실행 시간을, 그 명령에 대한 페널티 시간, 전후에 실행되는 명령의 실행 시간, 전에 처리된 명령의 지연 시간 등의 값을 간단히 가산 또는 감산하여 계산할 수 있다.
도 6은 보정부(123)의 처리 동작을 도시하는 도면이다.
보정부(123)는 헬퍼 함수 모듈로서 실시된다.
본 실시 형태에서는, 예를 들면, LD 명령의 캐쉬의 실행 결과마다 시뮬레이션을 행하는 종래의 함수 「cache_ld(address)」 대신에, 헬퍼 함수 「cache_ld(address, rep_delay, pre_delay)」가 호스트 코드에 내장됨으로써, 실현하고 있다.
헬퍼 함수의 "rep_delay"는, 이 로드(ld) 명령의 반환값을 사용하는 다음 명령의 실행까지, 페널티 시간 중 지연 시간으로서 처리되지 않았던 시간(유예 시간)이다. "pre_delay"는, 1개 전의 명령으로부터 받는 지연 시간이다. "-1"은, 전의 명령에 지연이 없는 것을 나타낸다. "rep_delay"와 "pre_delay"는, 성능 시뮬레이션 결과와 타이밍 정보(3)의 정적 분석 처리의 결과로부터 얻어지는 시간 정보이다.
도 6에 도시한 동작예에서는, 보정부(123)는, 현 타이밍 current_time과 1개 전의 ld 명령의 실행 타이밍 preld_time의 차가, 1개 전의 ld 명령의 지연 시간분 pre_delay를 초과하고 있을 때는, 1개 전의 ld 명령의 실행 타이밍 preld_time과 현 타이밍 current_time까지의 시간에 의해 지연 시간 pre_delay를 조정하여 유효 지연 시간 avail_delay를 구한다.
다음으로, 보정부(123)는, 실행 결과가 캐쉬 미스이면, 예측 결과의 오류이고, 유효 지연 시간 avail_delay에 캐쉬 미스 시의 페널티 시간 cache_miss_latency를 가산하여, 유예 시간 rep_delay에 기초하여, LD 명령의 실행 시간을 보정한다.
도 7~ 도 9는 보정부(123)의 LD 명령의 실행 결과에 대한 보정예를 도시하는 도면이다.
도 7은 1개의 캐쉬 처리가 실행되는 케이스에서 1개의 캐쉬 미스가 생긴 경우의 보정예를 설명하기 위한 도면이다.
도 7의 예에서는, 이하의 3명령의 시뮬레이션이 실행된다. 「ld [r1], r2 : [r1]→r2;
mult r3, r4, r5 : r3*r4→r5;
add r2, r5, r6 : r2+r5→r6」
도 7의 (A)는 예측 결과가 「캐쉬 히트」의 경우의 명령 실행 타이밍의 차트예를 도시하는 도면이다. 이 예측 케이스에서, 3번째로 실행되는 add 명령에, 2사이클 스톨이 생겨 있다.
도 7의 (B)는, 예측 결과와 상이한 「캐쉬 미스」의 경우의 명령 실행 타이밍의 차트예를 도시하는 도면이다. 이 예측 미스의 케이스에서는, ld 명령의 실행 결과가 캐쉬 미스이면, 페널티 사이클(6사이클)분의 지연이 생긴다. 그 때문에, mult 명령은, 지연의 영향을 받지 않고 실행되지만, add 명령의 실행은, ld 명령의 완료를 대기하기 때문에, 4사이클분 지연되게 된다.
도 7의 (C)는 보정부(123)에 의한 보정 후의 명령 실행 타이밍차트의 예를 도시하는 도면이다.
보정부(123)는, ld 명령의 실행 결과가 캐쉬 미스이므로(예측 결과의 미스), 남은 실행 시간(2-1=1사이클)에 소정의 캐쉬 미스 시의 페널티 시간(6사이클)을 가산하여 유효 지연 시간(7사이클)으로 한다. 유효 지연 시간은, 최대의 지연 시간으로 된다.
또한, 보정부(123)는, 다음의 mult 명령의 실행 시간(3사이클)을 얻어, 다음 명령의 실행 시간이 지연 시간을 초과하지 않는다고 판정하고, 유효 지연 시간으로부터 다음 명령의 실행 시간을 뺀 시간(7-3=4사이클)을, ld 명령의 지연이 생긴 실행 시간(지연 시간)으로 한다.
또한, 보정부(123)는, 유효 지연 시간으로부터 상기의 지연 시간을 뺀 시간(3사이클)을 유예 시간으로 한다. 유예 시간은, 페널티로서의 지연이 유예된 시간이다.
보정부(123)는, 헬퍼 함수 cache_ld(addr, rep_delay, pre_delay)에 의해, 유예 시간 rep_delay=3, 전명령의 지연 시간 pre_delay=-1(지연 없음)을 반환한다.
이 보정에 의해, ld 명령의 실행 시간은, 실행된 시간과 지연 시간을 가산한 실행 시간(1+4=5사이클)으로 되고, 실행 완료의 타이밍 t1부터, 후속의 mult 명령, add 명령의 실행 시간이 계산된다.
즉, 보정한 ld 명령의 실행 시간(5사이클)에, 예측 시뮬레이션 실행부(113)의 처리 결과(예측 결과에 의한 예측 시뮬레이션의 결과)에서 구해진 mult 명령과 add 명령의 각각의 실행 시간(3사이클, 3사이클)을 단순히 가산하는 것만으로, 이 블록의 실행 시간(사이클수)을 얻을 수 있다.
따라서, 실행 결과가 예측과 상이한 명령의 실행 시간만을 가산 또는 감산에 의한 보정 처리를 행하고, 그 밖의 명령에 대해서는, 예측 결과에 기초하는 시뮬레이션 시에 구해진 실행 시간을 가산하는 것만으로, 고정밀도로, 캐쉬 미스 시의 시뮬레이션의 실행 사이클수도 구할 수 있다.
도 7의 (D)는 시뮬레이션 장치(1)의 처리와 비교하기 위해서, 종래 기술에 의한 캐쉬 미스 시의 사이클수를 단순한 가산에 의해 구한 경우의 오차의 크기를 도시하는 도면이다. 도 7의 (D)의 경우에는, ld 명령의 지연 시간을 그대로 가산하고 있기 때문에, 실제로는, ld 명령의 실행 중에 실행이 완료되는 mult 명령의 실행 타이밍의 어긋남에 의한 오차가 생겨 있는 것을 알 수 있다.
도 8은 2개의 캐쉬 처리가 실행되는 케이스에서 2개의 캐쉬 미스가 생긴 경우의 보정예를 설명하기 위한 도면이다.
도 8의 예에서는, 이하의 5명령의 시뮬레이션이 실행된다. 「ld [r1], r2 : [r1]→r2;
ld [r3], r4 : [r3]→r4;
mult r5, r6, r7 : r5*r6→r7;
add r2, r4, r2 : r2+r4→r2;
add r2, r7, r2 : r2+r7→r2」
도 8의 (A)는 2개의 캐쉬 처리에서의 예측 결과가 「캐쉬 히트」의 경우의 명령 실행 타이밍의 차트예를 도시하는 도면이다. 이 예측 케이스에서는, 2개의 ld 명령이, 2사이클분(통상의 1사이클+부가한 1사이클)을 두고 실행되는 것으로 한다.
도 8의 (B)는 2개의 캐쉬 처리의 양방이 예측 결과와 상이한 「캐쉬 미스」의 경우의 명령 실행 타이밍의 차트예를 도시하는 도면이다. 이 예측 미스의 케이스에서는, 2개의 ld 명령의 각각에서 캐쉬 미스가 있어, 페널티 사이클(6사이클)분의 지연이 생긴다. 그러나, 2개의 ld 명령의 지연 시간은 겹치는 시간이 있고, mult 명령도, 지연의 영향을 받지 않고 실행되어, 2개의 add 명령의 실행이 2번째의 ld 명령의 완료까지 지연되게 된다.
도 8의 (C)는 보정부(123)에 의한 보정 후의 명령 실행 타이밍차트의 예를 도시하는 도면이다.
보정부(123)는, 도 7을 이용하여 설명한 바와 같이, 타이밍 t0에서, 1번째의 ld 명령의 지연 시간을 보정하고, 헬퍼 함수 cache_ld(addr, 3, -1)을 반환한다.
다음으로, 현 타이밍 t1에서, 보정부(123)는, 2번째의 ld 명령의 실행 결과가 캐쉬 미스이므로(예측 결과의 미스), 이 ld 명령의 남은 실행 시간에 페널티 사이클(6)을 추가하여 유효 지연 시간(1+6=7사이클)으로 한다.
보정부(123)는, 유효 지연 시간으로부터, 현 타이밍 t1까지 소비한 지연 시간(<현 타이밍 t1-전명령의 실행 타이밍 t0>-설정된 간격)을 빼어, 현 타이밍 t1로부터 초과된 유효 지연 시간을 구하고(7-(6-2)=3사이클), 이 초과된 유효 지연 시간을, 2번째의 ld 명령의 실행 시간으로 한다.
또한, 보정부(123)는, 초과된 유효 지연 시간으로부터 본래의 실행 시간을 빼어(3-1=2사이클), 전명령의 지연 시간으로 한다.
또한, 보정부(123)는, 유효 지연 시간으로부터, 현 타이밍 t1까지 소비한 지연 시간과 현 타이밍 t1에서 초과된 유효 지연 시간의 합계를 빼어(7-(3+3)=1사이클), 유예 시간으로 한다.
보정부(123)는, 타이밍 t1에서, 2번째의 ld 명령의 지연 시간을 보정한 후, 헬퍼 함수 cache_ld(addr, 2, 1)을 반환한다.
이 보정에 의해, 현 타이밍 t1에 보정값(3사이클)을 부가한 타이밍이 ld 명령의 실행 완료의 타이밍으로 되고, 그 타이밍으로부터, 이후의 mult 명령, add 명령의 실행 시간이 가산되어 가게 된다.
도 8의 (D)는, 시뮬레이션 장치(1)의 처리와 비교하기 위해서, 종래 기술에 의한 캐쉬 미스 시의 사이클수를 단순한 가산에 의해 구한 경우의 오차의 크기를 도시하는 도면이다. 도 8의 (D)의 경우에는, 2개의 ld 명령 각각에 제공된 페널티에 기초하는 지연 시간을 그대로 가산하고 있기 때문에, 큰 오차(9사이클)가 생겨 있는 것을 알 수 있다. 도 8의 (C)에 도시한 보정부(123)의 처리에서도, 도 8의 (B)에 도시한 바와 같이 올바르게 시뮬레이션되는 경우에 비해 오차(1사이클)가 있지만, 종래 방법에 비해, 매우 고정밀도로 구해지는 것을 알 수 있다.
도 9는 2개의 캐쉬 처리가 실행되는 케이스에서 1개의 캐쉬 미스가 생긴 경우의 보정예를 설명하기 위한 도면이다. 도 9의 예에서는, 도 8에서 도시한 설명예와 마찬가지의 5개의 명령의 시뮬레이션이 실행된다.
도 9의 (A)는 2개의 캐쉬 처리에서의 예측 결과가 「캐쉬 히트」의 경우의 명령 실행 타이밍의 차트예를 도시하는 도면이다. 이 예측 케이스에서는, 도 8의 (A)의 경우와 마찬가지로, 2개의 ld 명령이, 2사이클분(통상의 1사이클+부가한 1사이클)을 두고 실행되는 것으로 한다.
도 9의 (B)는 1번째의 ld 명령이 예측 결과와 상이한 「캐쉬 미스」로 되고, 2번째의 ld 명령의 결과가 예측 결과(캐쉬 히트)인 경우의 명령 실행 타이밍의 차트예를 도시하는 도면이다. 이 예측 미스의 케이스에서는, 2개의 ld 명령의 각각에 페널티 사이클(6사이클)분의 지연이 생긴다. 그러나, 2개의 ld 명령의 지연 시간은 겹치는 시간이 있고, mult 명령도, 지연의 영향을 받지 않고 실행되어, 2개의add 명령의 실행이 2번째의 ld 명령의 완료까지 지연되게 된다.
도 9의 (C)는 보정부(123)에 의한 보정 후의 명령 실행 타이밍차트의 예를 도시하는 도면이다.
보정부(123)는, 도 7을 이용하여 설명한 바와 같이, 타이밍 t0에서, 1번째의 ld 명령의 지연 시간을 보정하고, 헬퍼 함수 cache_ld(addr, 3, -1)을 반환한다.
다음으로, 현 타이밍 t1에서, 보정부(123)는, 2번째의 ld 명령의 실행 결과가 캐쉬 히트이므로(예측 결과), 이 ld 명령의 실행 개시부터 현 타이밍 t1까지의 시간 <t1-t0-설정된 간격(6-0-2=4사이클)>이, 이 ld 명령의 실행 시간(2사이클)보다 큰지를 판단한다.
보정부(123)는, 2번째의 ld 명령의 실행 개시부터 현 타이밍 t1까지의 시간이, 이 ld 명령의 실행 시간(2사이클)보다 크기 때문에, 현 타이밍 t1을, 다음의 mult 명령의 실행 타이밍으로 한다.
그리고, 보정부(123)는, 2번째의 ld 명령의 실행 완료부터 현 타이밍 t1까지의 시간을(2사이클), 다음의 명령에 대한 지연 시간으로서 취급하고, 전명령의 지연 시간 pre_delay=2로 한다. 또한, 보정부(123)는, 1번째의 ld 명령의 유효 지연 시간으로부터, 현 타이밍 t1까지 소비한 지연 시간과 현 타이밍 t1에서 초과된 유효 지연 시간의 합계를 빼어(7-(6+0)=1사이클), 유예 시간 rep_delay=1로 하고, 헬퍼 함수 cache_ld(addr, 1, 2)를 반환한다.
도 9의 (D)는, 시뮬레이션 장치(1)의 처리와 비교하기 위해서, 종래 기술에 의한 캐쉬 미스 시의 사이클수를 단순한 가산에 의해 구한 경우의 오차의 크기를 도시하는 도면이다. 도 9의 (D)의 경우에는, 1번째의 ld 명령의 페널티에 의한 지연 시간을 그대로 가산하고 있기 때문에 오차가 생겨 있는 것을 알 수 있다.
도 10은 제1 실시예에서의 시뮬레이션 장치(1)의 코드 변환부(11)의 개요 처리 플로우도이다.
시뮬레이션 장치(1)에서, 코드 변환부(11)의 블록 분할부(111)는, 타깃 프로그램의 코드(타깃 코드)를 소정 단위의 블록으로 분할하여 입력한다(스텝 S1).
예측 시뮬레이션 실행부(113)는, 블록의 명령을 분석하여, 외부 의존 명령을 검출하고(스텝 S2), 검출한 모든 명령에 대하여, 예측 정보(4)에 기초하여, 확률이 높은 실행 결과를 예측 케이스로서 결정한다(스텝 S3).
또한, 예측 시뮬레이션 실행부(113)는, 타이밍 정보(3)를 참조하여, 블록의 각 명령에 대하여 예측 결과로서 설정된 실행 결과를 전제로 하는 성능 시뮬레이션을 실행한다(스텝 S4).
코드 생성부(115)는, 시뮬레이션 결과에 기초하여, 시뮬레이션 실행부(12)가 실행하는 성능 시뮬레이션용 호스트 코드를 생성한다(스텝 S5).
이상의 스텝 S1~S5의 처리에 의해, 설정된 실행 결과의 경우(예측 케이스)에서의 기능 코드에, 타깃 CPU의 성능을 시뮬레이션하는 코드가 내장된 호스트 코드가 출력된다.
도 11은 제1 실시예에서의 시뮬레이션 장치(1)의 시뮬레이션 실행부(12)의 개요 처리 플로우도이다.
시뮬레이션 장치(1)에서, 시뮬레이션 실행부(12)의 코드 실행부(121)는, 코드 생성부(115)가 생성한 호스트 코드를 실행하여, 성능 시뮬레이션을 행한다(스텝 S10). 코드 실행부(121)는, 실행 중에 외부 의존 명령을 검출하면(스텝 S11), 그 명령의 실행 결과가 예측 결과로서 설정된 것과 동일한지를 판정한다(스텝 S12). 외부 의존 명령의 실행 결과가 설정된 예측 결과와 동일하지 않은 경우에만(스텝 S12의 "아니오"), 보정부(123)가 호출되고, 보정부(123)는, 그 외부 의존 명령의 실행 시간을 보정한다(스텝 S13).
그리고, 시뮬레이션 정보 수집부(13)는, 타깃 프로그램에 상당하는 모든 호스트 코드의 시뮬레이션 처리에 대한 시뮬레이션 정보(5)를 출력한다(스텝 S14).
이상의 스텝 S10~S14의 처리 스텝에 의해, 타깃 프로그램(2)을 실행하는 타깃 CPU의 시뮬레이션 정보(사이클 시뮬레이션 정보)(5)가 출력된다.
도 12는, 외부 의존 명령의 일례로서, 로드(ld) 명령의 처리에 대한 예측 결과의 판정 및 보정의 처리 플로우예를 도시하는 도면이다.
코드 실행부(121)는, 처리 중인 블록의 명령으로부터, 외부 의존 명령을 검출하면, 보정부(123)에 상당하는 헬퍼 함수를 호출한다(스텝 S20).
코드 실행부(121)는, ld 명령에서, 캐쉬 액세스가 요구되고 있는지를 판정하고(스텝 S21), 캐쉬 액세스가 요구되고 있으면(스텝 S21의 "예"), 캐쉬 액세스를 시뮬레이션한다(스텝 S22). 캐쉬 액세스의 결과가 "캐쉬 미스"이면(스텝 S23의 " 미스"), 보정부(123)는, ld 명령의 실행 시간(사이클수)의 보정을 행하고(스텝 S24), 보정된 실행 시간(사이클수)을 출력한다(스텝 S25).
스텝 S21에서, 캐쉬 액세스가 요구되고 있지 않은 경우(스텝 S21의 "아니오"), 또는, 요구된 캐쉬 액세스가 "캐쉬 히트"이면(스텝 S23의 "히트"), 보정부(123)는, 미보정의 예측된 실행 시간(사이클수)을 출력한다(스텝 S26).
다음으로, 제2 실시예에서의 시뮬레이션 장치(1)의 처리의 흐름을 설명한다.
제1 실시예에서, 시뮬레이션 장치(1)의 코드 변환부(11)는, 타깃 코드로부터 외부 의존 명령을 검출하여, 헬퍼 함수를 호출하는 호스트 명령을 포함하는 성능 시뮬레이션용 코드를 생성하고 있다. 즉, 코드 변환부(11)에서는, 타깃 코드의 외부 의존 명령 이외의 명령에 대해서는, 기지의 성능 계산용 호스트 코드를 작성한다. 기지의 성능 계산용 호스트 코드는, 이하의 3개의 호스트 명령을 포함하는 것이다.
「성능 계산 명령1 : 현재의 성능값(실행 시간)을 메모리로부터 읽어들인다,
성능 계산 명령2 : 대상의 명령의 성능값을 가산한다,
성능 계산 명령3 : 결과를 메모리에 기입한다」
도 13은 타깃 프로그램의 명령과 변환 후의 호스트 프로그램의 호스트 명령수의 관계를 도시하는 도면이다.
도 13의 (A)에 도시한 타깃 프로그램에서, 명령i0, i1, i2의 3명령이 있고, 명령 i2가 외부 의존 명령인 것으로 한다. 이 경우에, 제1 실시예에서는, 도 13의 (B)에 도시한 변환 후의 호스트 프로그램에서, 타깃의 명령i0, i1에 대해서는, 타깃의 명령을 변환한 호스트 명령(기능 코드)과 성능 계산 명령1~3의 합계 4명령을 포함하는 호스트 코드가 생성된다. 또한, 명령i2에 대해서는, 기능 코드(호스트 명령1, 2)와, 제1 실시예에서 설명한 처리에 의한 성능 계산 명령(헬퍼 함수)을 포함하는 성능 시뮬레이션용 코드가 생성된다.
따라서, 외부 의존 명령 이외의 명령에 대응하는 호스트 코드 내에서는, 성능 시뮬레이션용의 성능 계산 명령수가, 타깃의 명령의 기능에 대응하는 호스트 명령수보다 많아져, 성능 시뮬레이션의 실행 시간에서 성능 계산에 요하는 시간쪽이 지배적으로 되어 있는 것을 알 수 있다.
제2 실시예에서는, 시뮬레이션 장치(1)의 코드 변환부(11)에서, 타깃 코드로부터, 성능 계산에서 직전의 명령의 성능값이 필요로 되는 종류의 명령(이하, 코드 생성 대상 명령)을 검출하고, 검출한 코드 생성 대상 명령에 대해서만, 성능 계산 명령을 포함하는 호스트 코드(시뮬레이션용 코드)를 생성한다. 그리고, 코드 생성 대상 명령 이외의 명령에 대해서는, 그 명령의 성능값을 기록한다.
코드 생성 대상 명령은, 예를 들면, 외부 의존 명령(LD 명령, ST(스토어) 명령 등), CPU 아키텍처에 기초하여 제공되는 성능 정보 취득 명령(x86의 tsc 레지스터 읽어들이기 명령, ARM의 사이클 카운트 레지스터 읽어들이기 명령) 등이다.
또한, 제2 실시예에서는, 시뮬레이션 장치(1)의 코드 변환부(11)에서, 유저에 의해 지정된, 타깃 프로그램의 성능값을 측정하고자 하는 범위(이하, 트레이스 범위로 함)를 접수하고, 트레이스 범위에 포함되는 명령에 대해서만 성능 시뮬레이션용 코드를 생성한다. 코드 변환부(11)에서는, 트레이스 범위 내의 명령에 대하여 코드 생성 대상 명령을 검출하고, 코드 생성 대상 명령에 대해서는 성능 계산 명령을 내장한 호스트 코드를 생성한다.
이 경우에는, 시뮬레이션 장치(1)의 코드 변환부(11)는, 유저에 의해 지정된 트레이스 범위를 나타내는 정보를 유지한다. 트레이스 범위를 나타내는 정보에는, 함수, 타깃의 프로그램, 시스템 콜 등을 범위 단위로 하여, 유저에 의해 지정된 범위의 [개시 어드레스, 종료 어드레스]가 포함된다.
또한, 코드 변환부(11)는, 시뮬레이션의 개시 전 또는 실행 중에, 트레이스 범위의 지정을 접수하고, 접수한 트레이스 범위를 유지하고, 또는 유지하는 트레이스 범위의 [개시 어드레스, 종료 어드레스]를 갱신할 수 있다.
또한, 코드 변환부(11)는, 미리 트레이스 범위를 유지해 두고, 시뮬레이션 중의 유저 조작에 의해, 트레이스 범위를 유효로 하는 지정을 접수할 수 있다. 코드 생성부(115)는, 시뮬레이션의 개시 시에 유지하고 있는 트레이스 범위의 지정을 무효로 설정하고, 트레이스 범위의 유효의 지시를 접수한 시점에서, 트레이스 범위의 지정을 유효로 변경하여, 트레이스 범위에 포함되는 명령으로부터 코드 생성 대상 명령을 검출하도록 한다.
제2 실시예에서, 시뮬레이션 장치(1)의 코드 변환부(11)에 의한 코드 변환 처리의 일부만이 제1 실시예의 처리와 상위하다. 따라서, 이하의 설명에서는, 시뮬레이션 장치(1)의 처리 중, 제1 실시예와 상위하는 처리에 대해서만 설명하고, 마찬가지의 다른 처리 및 시뮬레이션 처리에 대해서는 설명을 생략한다.
제2 실시예에서, 시뮬레이션 장치(1)의 코드 변환부(11)는, 코드 생성 대상 명령을 특정하는 검출용 정보를 미리 유지하고 있는 것으로 한다. 검출용 정보에는, 코드 생성 대상 명령으로 되는 명령종이 기술되어 있다.
검출용 정보에 외부 의존 명령 또는 성능 정보 취득 명령이 나타내어져 있는 경우에는, 코드 변환부(11)의 예측 시뮬레이션 실행부(113)는, 블록 분할부(111)에 의해 분할된 타깃 프로그램의 블록으로부터, 검출용 정보에 기초하여, 코드 생성 대상 명령을 검출한다.
그리고, 코드 생성부(115)는, 코드 생성 대상 명령 이외의 명령에 대하여, 그 명령의 기능을 변환한 호스트 명령(기능 코드)을 포함하는 호스트 코드를 생성하고, 그 명령의 실행 시간(소요 사이클수)을 기록한다.
코드 생성부(115)는, 코드 생성 대상 명령에 대하여, 그 명령의 기능을 변환한 호스트 명령(기능 코드)과, 성능 계산 명령을 포함하는 호스트 코드를 생성한다. 생성되는 호스트 코드에는, 예를 들면 이하와 같은 호스트 명령이 포함된다.
「성능 계산 명령1 : 현재의 성능값(실행 시간)을 읽어들인다,
성능 계산 명령2 : 명령i2 전의 명령i0, i1의 기록된 성능값(실행 시간)을 가산한다,
성능 계산 명령3 : 성능값을 갱신한다,
성능 계산 명령4 : 명령i2에 대한 헬퍼 함수를 호출하고, 명령i2의 실행 시간을 성능값에 가산한다.」
도 14는 제2 실시예에서의 시뮬레이션 장치(1)의 코드 변환부(11)의 개요 처리 플로우도이다.
시뮬레이션 장치(1)에서, 코드 변환부(11)의 블록 분할부(111)는, 타깃 프로그램의 코드를 소정 단위의 블록으로 분할하여 입력한다(스텝 S31). 예측 시뮬레이션 실행부(113)는, 블록의 명령을 분석하여, 코드 생성 대상 명령을 검출한다(스텝 S32). 코드 생성부(115)는, 검출한 코드 생성 대상 명령에 대하여, 성능 계산 명령을 내장한 호스트 코드를 생성한다(스텝 S33).
시뮬레이션 장치(1)의 코드 변환부(11)에, 트레이스 범위의 지정을 나타내는 개시 어드레스와 종료 어드레스가 유지되어 있는 경우에는, 코드 변환부(11)의 예측 시뮬레이션 실행부(113)는, 블록 분할부(111)에 의해 분할된 타깃 프로그램의 블록으로부터, 트레이스 범위의 지정에 기초하여, 개시 어드레스를 검출한다.
예측 시뮬레이션 실행부(113)는, 개시 어드레스가 검출된 이후, 타깃 프로그램의 블록으로부터 검출용 정보에 기초하여 코드 생성 대상 명령을 검출하고, 트레이스 범위의 종료 어드레스를 검출할 때까지, 코드 생성 대상 명령의 검출을 계속한다.
코드 생성부(115)는, 코드 생성 대상 명령 이외의 명령에 대하여, 그 명령의 기능을 변환한 호스트 명령(기능 코드)을 생성하여, 그 명령의 실행 시간을 기록하고, 코드 생성 대상 명령에 대하여, 그 명령의 기능을 변환한 호스트 명령(기능 코드)과, 성능 계산 명령을 포함하는 호스트 코드를 생성한다.
도 15는 제2 실시예에서의 시뮬레이션 장치(1)의 코드 변환부(11)의 개요 처리 플로우도이다.
시뮬레이션 장치(1)에서, 코드 변환부(11)의 블록 분할부(111)는, 타깃 프로그램의 코드를 소정 단위의 블록으로 분할하여 입력한다(스텝 S41).
예측 시뮬레이션 실행부(113)는, 블록을 분석하여, 트레이스 범위의 개시 어드레스 또는 종료 어드레스를 검출한다(스텝 S42).
개시 어드레스의 검출부터 종료 어드레스의 검출까지의 범위에서, 이하의 스텝 S43, S44의 처리를 반복한다.
예측 시뮬레이션 실행부(113)는, 블록의 명령을 분석하여, 코드 생성 대상 명령을 검출한다(스텝 S43). 코드 생성부(115)는, 검출한 코드 생성 대상 명령에 대하여, 성능 계산 명령을 내장한 호스트 코드를 생성한다(스텝 S44).
시뮬레이션 장치(1)의 제2 실시예에 따르면, 타깃 프로그램의 일부의 명령에 대하여, 성능값 계산의 호스트 명령의 생성을 생략할 수 있기 때문에, 시뮬레이션에서 실행하는 호스트 명령수를 감소시켜, 시뮬레이션의 실행 시간을 감소시킬 수 있다.
또한, 코드 변환 처리에서, 성능값 계산의 호스트 명령의 생성을 생략하는 것뿐이기 때문에, 취득되는 성능값의 정밀도를 유지하면서, 시뮬레이션 속도를 향상시킬 수 있다.
또한, 시뮬레이션 중에, 유저가 지정한 트레이스 범위에 대해서만 타깃 프로그램의 성능을 측정하기 때문에, 효율적인 시뮬레이션을 실현하여, 시뮬레이션의 실행 시간을 보다 감소시킬 수 있다.
또한, 유저에 의해 지정되는 트레이스 범위의 설정은, 제1 실시예에서의 코드 변환 처리에도 적용할 수 있다. 이 경우에, 도 10에 도시한 처리 플로우의 스텝 S1 및 스텝 S2의 처리 동안에, 예측 시뮬레이션 실행부(113)는, 블록을 분석하여, 트레이스 범위의 개시 어드레스 또는 종료 어드레스를 검출한다. 그리고, 트레이스 범위에 대하여, 스텝 S2~S5의 처리가 행해진다.
도 16은 다른 실시 형태에서의 시뮬레이션 장치(1)의 구성예를 도시하는 도면이다.
시뮬레이션 장치(1)는, 도 1에 도시한 구성예에, 전력 시뮬레이션 정보 생성부(15)를 더 구비한다.
전력 시뮬레이션 정보 생성부(15)는, 전력 정보(6)를 얻어, 시뮬레이션 정보 수집부(13)가 출력한 시뮬레이션 정보(5)에 기초하여, 블록의 실행 시의 소비 전력을 계산하고, 전력 시뮬레이션 정보(7)로서 출력하는 처리부이다.
도 17은 전력 시뮬레이션 정보 생성부(15)를, 성능 시뮬레이션용의 호스트 코드에 내장하는 함수(전력 시뮬레이션 함수)로서 실시한 경우의 예를 도시하는 도면이다.
전력 정보(6)로서, LD 명령, MULT 명령, ADD 명령의 1실행당의 소비 전력이, 각각 4u[W], 0.5u[W], 0.3u[W]로 설정되어 있다.
전력 시뮬레이션 함수 Host_Inst_A-C_power는, 시뮬레이션에서 실행된 각 명령의 실행 횟수에 기초하여, 전력을 계산한다.
다음으로, 시뮬레이션 장치(1)의 하드웨어 구성예를 설명한다.
시뮬레이션 장치(1)는, 연산 장치(CPU), 일시 기억 장치(DRAM, 플래시 메모리 등), 영속성 기억 장치(HDD, 플래시 메모리 등), 및 네트워크 N과의 네트워크 인터페이스를 갖는 컴퓨터 PC와, 입력 장치(키보드, 마우스 등)와 출력 장치(디스플레이, 프린터 등)에 의해 실시할 수 있다.
또한, 시뮬레이션 장치(1)는, 컴퓨터 PC가 실행 가능한 프로그램에 의해 실시할 수 있다. 이 경우에, 시뮬레이션 장치(1)가 가져할 기능의 처리 내용을 기술한 프로그램이 제공된다. 제공된 프로그램을 컴퓨터 PC가 실행함으로써, 상기에서 설명한 시뮬레이션 장치(1)의 처리 기능이 컴퓨터 PC 상에서 실현된다.
또한, 컴퓨터 PC는, 가반형 기록 매체로부터 직접 프로그램을 판독하고, 그 프로그램에 따른 처리를 실행할 수도 있다. 또한, 컴퓨터 PC는, 서버 컴퓨터로부터 프로그램이 전송될 때마다, 축차적으로, 수취한 프로그램에 따른 처리를 실행할 수도 있다.
또한, 이 프로그램은, 컴퓨터 PC에서 판독 가능한 기록 매체에 기록해 둘 수 있다.
이상 설명한 바와 같이, 시뮬레이션 장치(1)에 의하면, 파이프라인 처리를 제어하는 CPU의 명령 실행의 성능 시뮬레이션을 고속으로 행하는 것이 가능하게 된다.
시뮬레이션 장치(1)는, JIT 컴파일러 방식과 같이, 타깃 CPU의 프로그램의 코드 변환 처리에서, 코드 변환부(11)가, 분할한 블록마다, 외부 의존 명령의 실행 결과를 예측한 경우(예측 케이스)에서의 실행에 대하여 기능 시뮬레이션을 행하고, 타이밍 정보(3)에 기초하여 각 명령의 실행 시간을 상수화해 둔다.
시뮬레이션 장치(1)의 코드 변환부(11)에서는, 예측 케이스 이외의 실행에 대한 성능 시뮬레이션 정보(사이클 시뮬레이션 정보)를 얻기 위한 시뮬레이션 실행 코드를 호스트 코드에 내장하는 대신에, 예측 케이스에서의 명령의 실행 시간의 보정 처리를 행하는 코드를 내장한다.
또한, 시뮬레이션 장치(1)의 시뮬레이션 실행부(12)에서는, 예측 케이스의 경우의 명령 실행에 대하여 성능 시뮬레이션을 행하고, 예측외 케이스에서의 시뮬레이션 대신에, 그 명령에 대한 지연 시간, 전후에 실행되는 명령의 실행 시간 등을 이용하여, 예측 케이스에서의 실행 시간을 보정하여, 외부 의존 명령의 실행 시간을 얻는다.
그 때문에, 종래에 비해, 기능 코드에 추가하는 시뮬레이션용 코드량을 적게 할 수 있어, 성능 시뮬레이션 처리의 부하 증대를 억제하면서, 고속으로 행하는 것이 가능하게 된다.
또한, 시뮬레이션 장치(1)에서는, 예측 케이스를 전제로 하여 기능 시뮬레이션을 행함으로써, 1개의 케이스(예측 케이스)에서의 각 명령의 실행 시간을, 정적 분석 처리에 의해 얻어 두고, 예측 케이스 이외의 케이스에서의 명령의 실행 시간은, 예측 케이스에서의 실행 시간을, 페널티 시간, 전후에 실행되는 명령의 실행 시간, 전의 명령의 지연 시간 등의 가산 또는 감산에 의해 보정한다.
시뮬레이션 장치(1)에 의하면, CPU를 포함하는 시스템의 성능, 전력의 시뮬레이션을 고속으로 실시하는 것이 가능하게 되어, 종래에서는 현실 레벨에서의 실행이 곤란하였던, 대규모의 시스템 전체의 성능, 전력의 평가나 해석, 예측 등을 용이하게 행할 수 있게 된다.
또한, 시뮬레이션 장치(1)에 의하면, 전력 정보와 성능 시뮬레이션 정보에 기초하여, 프로그램의 소비 전력 시뮬레이션을, 고속으로 또한 고정밀도로 행하는 것이 가능하게 된다.
따라서, 각 케이스에서의 성능 시뮬레이션을 행할 필요가 없어, 성능 시뮬레이션 처리의 부하 증대를 억제하면서, 고정밀도로 행한다고 하는 효과를 발휘한다.
1 : 시뮬레이션 장치
11 : 코드 변환부
111 : 블록 분할부
113 : 예측 시뮬레이션 실행부
115 : 코드 생성부
12 : 시뮬레이션 실행부
121 : 코드 실행부
123 : 보정부
13 : 시뮬레이션 정보 수집부
15 : 전력 시뮬레이션 정보 생성부
2 : 타깃 프로그램
3 : 타이밍 정보
4 : 예측 정보
5 : 시뮬레이션 정보
6 : 전력 정보
7 : 전력 시뮬레이션 정보

Claims (8)

  1. 파이프라인 처리를 제어하는 타깃 프로세서에 대한 프로그램의 명령 실행의 시뮬레이션을 실행하는 시뮬레이션 장치로서,
    상기 프로그램의 코드를 소정의 블록으로 분할하고, 상기 블록에 포함되는 명령 중, 그 명령의 실행 결과가 외부 환경에 의존하는 외부 의존 명령의 처리의 실행 결과를 예측 결과로서 설정하는 처리와, 상기 예측 결과를 전제로 하는 명령 실행의 기능 시뮬레이션을 행하고, 상기 블록에 포함되는 명령의 실행 타이밍을 나타내는 타이밍 정보를 얻어, 상기 기능 시뮬레이션의 결과와 상기 타이밍 정보에 기초하여, 상기 예측 결과에서의 외부 의존 명령의 실행 시간을 산출하는 처리와, 상기 기능 시뮬레이션의 결과에 기초하여, 상기 예측 결과를 전제로 하는 명령 실행의 성능 시뮬레이션을, 상기 타깃 프로세서를 동작시키는 호스트 프로세서에 실행시키는 호스트 코드를 생성하는 처리를 행하는 코드 변환부와,
    상기 호스트 프로세서가 상기 생성된 호스트 코드를 실행한 실행 결과에서, 그 호스트 코드에 포함되는 외부 의존 명령의 실행 결과가 상기 예측 결과와 상이한 경우에, 그 외부 의존 명령의 소정의 지연 시간과 상기 외부 의존 명령의 전후에 실행되는 명령의 실행 시간을 이용하여 구한 보정값으로, 상기 예측 결과에서의 외부 의존 명령의 실행 시간을 보정하여, 상기 기능 시뮬레이션에서의 그 외부 의존 명령의 실행 시간으로 하는 시뮬레이션 실행부
    를 구비하는 것을 특징으로 하는 시뮬레이션 장치.
  2. 제1항에 있어서,
    상기 시뮬레이션 실행부는, 상기 외부 의존 명령의 다음에 실행되는 다음 명령의 실행 시간이, 상기 외부 의존 명령에 부가되는 지연 시간을 초과하지 않는 경우에, 상기 다음 명령의 실행 시간을 상기 보정값으로 하여 상기 외부 의존 명령의 지연 시간으로부터 감산하는 처리를 행하는 것을 특징으로 하는 시뮬레이션 장치.
  3. 제1항 또는 제2항에 있어서,
    상기 코드 변환부는, 상기 타깃 프로세서를 동작시키는 호스트 프로세서에 실행시키는 호스트 코드를 생성하는 처리에서, 상기 블록에 포함되는 명령 중, 그 명령의 실행 시간의 계산에 직전의 명령의 실행 시간이 필요한 명령을 검출하고, 그 검출한 명령에 대해서만 실행 시간을 계산하는 호스트 명령을 포함하는 호스트 코드를 생성하는 것을 특징으로 하는 시뮬레이션 장치.
  4. 제1항 또는 제2항에 있어서,
    상기 호스트 코드의 명령 세트의 각 명령의 1실행당의 소비 전력량을 정한 전력 정보를 얻어, 상기 전력 정보와 상기 기능 시뮬레이션의 결과에 기초하여, 상기 블록의 실행 시의 전력 시뮬레이션 정보를 구하는 전력 시뮬레이션 정보 생성부를 구비하는 것을 특징으로 하는 시뮬레이션 장치.
  5. 파이프라인 처리를 제어하는 타깃 프로세서에 대한 프로그램의 명령 실행의 시뮬레이션을 실행하는 시뮬레이션 방법으로서,
    호스트 CPU가,
    상기 프로그램의 코드를 소정의 블록으로 분할하고, 상기 블록에 포함되는 명령 중, 그 명령의 실행 결과가 외부 환경에 의존하는 외부 의존 명령의 처리의 실행 결과를 예측 결과로서 설정하는 처리 과정과,
    상기 예측 결과를 전제로 하는 명령 실행의 기능 시뮬레이션을 행하고, 상기 블록에 포함되는 명령의 실행 타이밍을 나타내는 타이밍 정보를 얻어, 상기 기능 시뮬레이션 결과와 상기 타이밍 정보에 기초하여, 상기 예측 결과에서의 외부 의존 명령의 실행 시간을 산출하는 처리 과정과,
    상기 기능 시뮬레이션 결과에 기초하여, 상기 예측 결과를 전제로 하는 명령 실행의 성능 시뮬레이션을, 상기 타깃 프로세서를 동작시키는 호스트 프로세서에 실행시키는 호스트 코드를 생성하는 처리 과정과,
    상기 호스트 프로세서가 상기 생성된 호스트 코드를 실행한 실행 결과에서, 그 호스트 코드에 포함되는 외부 의존 명령의 실행 결과가 상기 예측 결과와 상이한 경우에, 그 외부 의존 명령의 소정의 지연 시간과 상기 외부 의존 명령의 전후에 실행되는 명령의 실행 시간을 이용하여 구한 보정값으로, 상기 예측 결과에서의 외부 의존 명령의 실행 시간을 보정하여, 상기 기능 시뮬레이션에서의 그 외부 의존 명령의 실행 시간으로 하는 처리 과정
    을 실행하는 것을 특징으로 하는 시뮬레이션 방법.
  6. 제5항에 있어서,
    상기 호스트 코드를 생성하는 처리 과정에서, 상기 블록에 포함되는 명령 중, 그 명령의 실행 시간의 계산에 직전의 명령의 실행 시간이 필요한 명령을 검출하고, 그 검출한 명령에 대해서만 실행 시간을 계산하는 호스트 명령을 포함하는 호스트 코드를 생성하는 것을 특징으로 하는 시뮬레이션 방법.
  7. 파이프라인 처리를 제어하는 타깃 프로세서에 대한 프로그램의 명령 실행의 시뮬레이션을 실행시키기 위한 시뮬레이션 프로그램을 저장하는 기록 매체로서,
    상기 시뮬레이션 프로그램은,
    호스트 CPU에,
    상기 프로그램의 코드를 소정의 블록으로 분할하고, 상기 블록에 포함되는 명령 중, 실행 결과가 외부 환경에 의존하는 외부 의존 명령의 처리의 실행 결과를 예측 결과로서 설정하는 처리와,
    상기 예측 결과를 전제로 하는 명령 실행의 기능 시뮬레이션을 행하고, 상기 블록에 포함되는 명령의 실행 타이밍을 나타내는 타이밍 정보를 얻어, 상기 기능 시뮬레이션 결과와 상기 타이밍 정보에 기초하여, 상기 예측 결과에서의 외부 의존 명령의 실행 시간을 산출하는 처리와,
    상기 기능 시뮬레이션 결과에 기초하여, 상기 예측 결과를 전제로 하는 명령 실행의 성능 시뮬레이션을, 상기 타깃 프로세서를 동작시키는 호스트 프로세서에 실행시키는 호스트 코드를 생성하는 처리와,
    상기 호스트 프로세서가 상기 생성된 호스트 코드를 실행한 실행 결과에서, 그 호스트 코드에 포함되는 외부 의존 명령의 실행 결과가 상기 예측 결과와 상이한 경우에, 그 외부 의존 명령의 소정의 지연 시간과 상기 외부 의존 명령의 전후에 실행되는 명령의 실행 시간을 이용하여 구한 보정값으로, 상기 예측 결과에서의 외부 의존 명령의 실행 시간을 보정하여, 상기 기능 시뮬레이션에서의 그 외부 의존 명령의 실행 시간으로 하는 처리
    를 실행시키는 것을 특징으로 하는 기록 매체.
  8. 제7항에 있어서,
    상기 호스트 코드를 생성하는 처리에서, 상기 블록에 포함되는 명령 중, 그 명령의 실행 시간의 계산에 직전의 명령의 실행 시간이 필요한 명령을 검출하고, 그 검출한 명령에 대해서만 실행 시간을 계산하는 호스트 명령을 포함하는 호스트 코드를 생성하는 것을 특징으로 하는 기록 매체.
KR1020120110856A 2011-10-12 2012-10-05 시뮬레이션 장치, 방법, 및 기록 매체 KR101332499B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2011224714A JP5961971B2 (ja) 2011-10-12 2011-10-12 シミュレーション装置,方法,およびプログラム
JPJP-P-2011-224714 2011-10-12

Publications (2)

Publication Number Publication Date
KR20130039678A true KR20130039678A (ko) 2013-04-22
KR101332499B1 KR101332499B1 (ko) 2013-11-26

Family

ID=48061957

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120110856A KR101332499B1 (ko) 2011-10-12 2012-10-05 시뮬레이션 장치, 방법, 및 기록 매체

Country Status (4)

Country Link
US (1) US9372703B2 (ko)
JP (1) JP5961971B2 (ko)
KR (1) KR101332499B1 (ko)
CN (1) CN103049307A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101997012B1 (ko) * 2018-12-18 2019-07-05 한국과학기술정보연구원 오토마타 상태 복잡도에 기초한 프로그램의 리소스 예측 방법 및 이를 적용한 장치

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5278624B2 (ja) * 2010-10-12 2013-09-04 富士通株式会社 シミュレーション装置,方法,およびプログラム
KR20130088285A (ko) * 2012-01-31 2013-08-08 삼성전자주식회사 데이터 처리 시스템 및 그 시스템에서 데이터 시뮬레이션 방법
JP6163898B2 (ja) * 2013-06-11 2017-07-19 富士通株式会社 計算装置、計算方法、および計算プログラム
JP6146197B2 (ja) * 2013-08-07 2017-06-14 株式会社ソシオネクスト 設計支援方法、設計支援プログラム、および設計支援装置
JP6015865B2 (ja) * 2013-09-24 2016-10-26 富士通株式会社 シミュレーション装置、シミュレーション方法およびシミュレーションプログラム
JP5920842B2 (ja) * 2013-11-28 2016-05-18 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation シミュレーション装置、シミュレーション方法、およびプログラム
JP6187264B2 (ja) 2014-01-07 2017-08-30 富士通株式会社 計算方法、計算プログラム、および計算装置
JP6287650B2 (ja) * 2014-07-10 2018-03-07 富士通株式会社 シミュレーション方法、シミュレーションプログラム
JP6394341B2 (ja) 2014-07-23 2018-09-26 富士通株式会社 計算装置、計算方法、および計算プログラム
JP6740607B2 (ja) 2015-12-18 2020-08-19 富士通株式会社 シミュレーションプログラム、情報処理装置、シミュレーション方法
CN107769987B (zh) * 2016-08-16 2021-05-11 深圳市中兴微电子技术有限公司 一种报文转发性能评估方法和装置
CN109557827B (zh) * 2017-09-25 2021-10-01 中国电力科学研究院 一种电网逻辑控制脚本的生成与结果仿真方法及系统
GB2570161B (en) * 2018-01-16 2020-03-25 Advanced Risc Mach Ltd Simulation of exclusive instructions
CN110765667B (zh) * 2019-11-28 2020-06-16 深圳市金城保密技术有限公司 激光打印机的仿真方法及系统
CN111324948B (zh) * 2020-02-10 2023-04-25 上海兆芯集成电路有限公司 模拟方法及模拟系统
CN113360259B (zh) * 2021-05-28 2022-10-11 清华大学 一种应用于面向云端深度学习推理的分布式fpga多任务调度算法

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2919302B2 (ja) * 1995-05-08 1999-07-12 株式会社エヌイーシー情報システムズ Cpuシミュレーション方法
JP3351725B2 (ja) * 1997-01-08 2002-12-03 株式会社東芝 パワーシミュレーション装置、パワーシミュレーション方法、及びパワーシミュレーションプログラムを記録した機械読み取り可能な記録媒体
JPH11161692A (ja) * 1997-11-28 1999-06-18 Matsushita Electric Ind Co Ltd 消費電力のシミュレーション方法
US6751583B1 (en) 1999-10-29 2004-06-15 Vast Systems Technology Corporation Hardware and software co-simulation including simulating a target processor using binary translation
JP2001167061A (ja) 1999-12-10 2001-06-22 Fujitsu Ltd マルチプロセッサ・システムの性能評価方法および装置
JP2005078243A (ja) 2003-08-29 2005-03-24 Denso Corp マイコンリソース消費見積もりプログラム、マイコンリソース消費見積もり装置、およびプログラム生成方法
US20070006178A1 (en) * 2005-05-12 2007-01-04 Microsoft Corporation Function-level just-in-time translation engine with multiple pass optimization
JP2008176453A (ja) * 2007-01-17 2008-07-31 Nec Electronics Corp シミュレーション装置
JP5116624B2 (ja) * 2008-09-29 2013-01-09 ルネサスエレクトロニクス株式会社 シミュレーション装置及びシミュレーション方法
JP5440083B2 (ja) * 2009-10-07 2014-03-12 富士通株式会社 シミュレーション装置、方法およびプログラム
JP5412305B2 (ja) 2010-01-27 2014-02-12 株式会社日立アドバンストデジタル モデルベースの性能予測システム
JP5278624B2 (ja) * 2010-10-12 2013-09-04 富士通株式会社 シミュレーション装置,方法,およびプログラム
JP5817324B2 (ja) * 2011-08-18 2015-11-18 富士通株式会社 補正装置、補正方法、および補正プログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101997012B1 (ko) * 2018-12-18 2019-07-05 한국과학기술정보연구원 오토마타 상태 복잡도에 기초한 프로그램의 리소스 예측 방법 및 이를 적용한 장치

Also Published As

Publication number Publication date
CN103049307A (zh) 2013-04-17
JP2013084178A (ja) 2013-05-09
US20130096903A1 (en) 2013-04-18
JP5961971B2 (ja) 2016-08-03
US9372703B2 (en) 2016-06-21
KR101332499B1 (ko) 2013-11-26

Similar Documents

Publication Publication Date Title
KR101332499B1 (ko) 시뮬레이션 장치, 방법, 및 기록 매체
JP5278624B2 (ja) シミュレーション装置,方法,およびプログラム
Carlson et al. An evaluation of high-level mechanistic core models
US10564992B2 (en) Simulation apparatus and storage medium
JPWO2012001779A1 (ja) 情報処理装置の使用量解析方法、情報処理システム及びそのプログラム
JP5840014B2 (ja) コンパイル方法、プログラムおよび情報処理装置
US9465595B2 (en) Computing apparatus, computing method, and computing program
Wang et al. Fast and accurate cache modeling in source-level simulation of embedded software
JP5817324B2 (ja) 補正装置、補正方法、および補正プログラム
CN105094949A (zh) 一种基于指令计算模型与反馈补偿的模拟方法与系统
Van Biesbrouck et al. Efficient sampling startup for sampled processor simulation
US10402510B2 (en) Calculating device, calculation method, and calculation program
US20160196156A1 (en) Simulation apparatus, simulation method, and computer product
Mutlu et al. Understanding the effects of wrong-path memory references on processor performance
US20160011889A1 (en) Simulation method and storage medium
Zhang et al. Prophet: A parallel instruction-oriented many-core simulator
US10671780B2 (en) Information processing device that executes simulation and a simulation method
Eyerman et al. Simulating Wrong-Path Instructions in Decoupled Functional-First Simulation
US20150127318A1 (en) Apparatus and method for simulating an operation of an out-of-order processor
Posadas et al. Static Write Buffer Cache Modeling to Increase Host-Compiled Simulation Accuracy
JP2016139332A (ja) 検証支援方法、検証支援プログラム、および検証支援装置
JP2013218394A (ja) 情報処理装置、時間補正方法

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee