KR20080023728A - 에뮬레이터 성능을 개선하기 위한 가상 코드의 선택적전처리 컴파일 - Google Patents
에뮬레이터 성능을 개선하기 위한 가상 코드의 선택적전처리 컴파일 Download PDFInfo
- Publication number
- KR20080023728A KR20080023728A KR1020087000504A KR20087000504A KR20080023728A KR 20080023728 A KR20080023728 A KR 20080023728A KR 1020087000504 A KR1020087000504 A KR 1020087000504A KR 20087000504 A KR20087000504 A KR 20087000504A KR 20080023728 A KR20080023728 A KR 20080023728A
- Authority
- KR
- South Korea
- Prior art keywords
- function
- code
- subroutine
- virtual code
- predetermined threshold
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
방법 및 컴퓨터 판독가능 매체가 에뮬레이팅된 바이너리의 사전 부팅 스캔을 수행하여 사전결정된 복잡도 임계치를 넘는 함수를 검출한다. 검출된 함수는 그러면 부팅 업 프로세스 동안에 전처리 컴파일링될 수 있다. 사전 부팅 스캔은 또한 제2 사전결정된 복잡도 임계치 아래로 떨어지는 함수를 검출할 수 있다. 검출된 함수는 코드 본문과 인라인으로 위치될 수 있다. JIT(just-in-time) 변환은 그러면 런타임시에 수행될 수 있다.
JIT 변환, 사전 부팅 스캔, 에뮬레이팅된 바이너리, 전처리 컴파일링, 함수 호출
Description
본 발명은 일반적으로 소프트웨어 에뮬레이션 분야에 관한 것이다. 더욱 상세하게는, 본 발명은 선택적인 전처리 컴파일(pre-compilation) 및 가상 코드의 인라이닝(inlining)에 관한 것이다.
비디오 게임 등과 같은 소프트웨어 애플리케이션이 컴파일링될 때에, 이는 통상적으로 그 애플리케이션을 어떻게 실행하는지에 관한 명령어뿐만 아니라 애플리케이션의 디스크립션도 제공하는 중간 에뮬레이팅된 바이너리와 같은, 가상 코드로 컨버팅된다. 소프트웨어 에뮬레이터는 애플리케이션이 실행되기 전에 소정의 포인트에서 소프트웨어 애플리케이션의 중간 바이너리의 바이너리 변환을 수행한다. 바이너리 변환이란, 중간 바이너리를, 코드를 실행할 프로세서의 타입에 특정한 기계-실행가능 바이너리로 컨버팅하는 프로세스를 일컫는다. 실행가능 바이너리는 그러면 포맷된 타입의 프로세서에 의해 실행될 준비가 된다.
이러한 바이너리 변환 방법의 하나는 "JIT"("just-in-time") 바이너리 변환이라 불리는데, 이는 그 이름이 암시하듯이, 코드가 실행되기 바로 전에 일어나는 소프트웨어 코드의 바이너리 변환이다. 결국, 코드가 성공적으로 실행되기 위해 발생될 필요가 있는 프로세서-특정 변경이 실행 바로 전까지는 일어나지 않기 때문에 특정 중간 바이너리가 각종 프로세서 및 컴퓨팅 플랫폼에서 사용될 수 있다. 부팅하는 동안에는 바이너리 변환이 일어나지 않기 때문에 JIT 변환은 또한 상대적으로 빠른 로드 및 부팅 시간을 제공한다.
불행히도, JIT 변환은 런타임시에 코드의 실행에 악영향을 끼칠 수 있다. 예를 들면, 통상의 게임 시스템이, 코드의 실행에 악영향을 끼치지 않고도(즉, 그래픽 렌더링에 영향을 미치지 않고도) 코드 내의 대다수의 평균적 복잡도를 갖는 그래픽 함수에 대해 런타임 동안에 JIT 변환을 수행할 수 있다. 그러나, 특별히 복잡한 그래픽 함수-인공지능("AI")의 큰 세그먼트를 포함하는 것 등-를 만나게 되면, 함수 변환 및 코드 실행 양쪽 모두를 수행할 수 있는 충분한 프로세서 리소스가 없을 수도 있다. 따라서 사용자는 재생 동안에 가시적 "깜박임(flicker)" 또는 "스터터(stutter)"와 같은, 코드 실행에서의 일시 정지를 알아차릴 수 있다. 그래픽 현실감의 증가를 위해 프로그래머가 지속적으로 노력하고 있기 때문에 이러한 지연은 더욱 더 바람직하지 못한 일이 되고 있다.
다른 변환 방법은 소프트웨어 전처리 컴파일러의 사용을 포함한다. 전처리 컴파일러는 실행 전에 소프트웨어 애플리케이션의 코드를 나타내는 전체 정적 중간 바이너리의 바이너리 변환을 수행한다. 이 변환은 일반적으로 소프트웨어가 부팅 업 프로세스 동안에 로드되고 있을 때("로드 시간") 일어난다. 전처리 컴파일러를 사용함으로써 런타임시에 보다 빠르고 인터럽션이 없는 실행이 제공되는 반면에, 전처리 컴파일러가 바이너리 변환을 수행하는 초기의 로드 시간은 길어진다. 따라 서, 사용자는 비합리적으로 긴 시스템 부팅 시간을 경험할 수 있고, 결국, 전처리 컴파일러는 일반적으로 큰 프로그램에 대해서는 사용되지 않는다.
기계 실행가능 바이너리 내의 비교적 간단한 함수를 수행하는 것과 관련하여 런타임시에 다른 문제가 발생한다. 예를 들면, 많은 함수들이 코드의 본문으로부터 서브루틴으로의 호출을 포함한다. 서브루틴으로의 호출 및 서브루틴으로부터 반환된 호출("컨텍스트 전환"으로 불림)은 처리 시간을 요구한다. 대부분의 함수에 대해, 컨텍스트 전환을 위해 요구되는 처리 시간은, 함수 자체를 실행하는 데에 요구되는 처리 시간에 비교하면 무시할만하다. 그러나, 함수가 매우 작은 경우에는 컨텍스트 전환을 위해 요구되는 처리 시간은, 함수를 위해 요구되는 전체적인 실행 시간 중에서 상당한 비율을 차지할 수 있다. 결국, 서브루틴으로서의 이러한 함수의 실행은 함수가 코드의 본문 내에서 단순히 실행되는 경우보다 덜 효율적이다. 컨텍스트 전환에 의해 발생하는 추가의 처리 시간 때문에, 이 비효율성은 코드 실행뿐만 아니라 JIT 변환의 수행에 악영향을 끼칠 수 있다. 이러한 함수를 서브루틴으로서 실행하는 것이 비효율적일 수 있는 반면에, 일반적으로 이러한 서브루틴은 소프트웨어 개발자에게 편리한 도구의 역할을 한다. 따라서, 코드의 본문에 위치한 이러한 함수를 모두 갖는 코드를 단순히 생성하는 것은 바람직하지 않다.
따라서, 상술한 단점 및 약점을 극복하는 메커니즘이 필요하다. 본 발명은 이 필요성을 만족시킨다.
상술한 단점 및 약점의 관점에서, 사전결정된 복잡도 임계치를 넘는 함수를 검출하기 위해 에뮬레이팅된 바이너리의 사전 부팅 스캔을 수행하는 방법 및 컴퓨터 판독가능 매체가 제공된다. 검출된 함수는 그러면 부팅업 프로세스 동안에 전처리 컴파일링될 수 있다. 사전 부팅 스캔은 또한 제2 사전결정된 복잡도 임계치 아래로 떨어지는 함수를 검출할 수 있다. 검출된 함수는 코드 본문과 인라인으로 위치될 수 있다. JIT 변환은 그러면 런타임시에 수행될 수 있는데, 여기서 전처리 컴파일링된 함수는 추후의 변환이 없이 직접 실행될 수 있고, 인라인으로 움직인 임의의 함수가 컨텍스트 전환 없이도 실행될 수 있다.
도 1은 본 발명의 양태가 구현될 수 있는 예시적인 컴퓨팅 환경의 도면;
도 2는 본 발명의 실시예에 따른 예시적인 방법을 도시하는 흐름도;
도 3은 본 발명의 실시예에 따른 예시적인 코드 흐름을 도시하는 블록도; 및
도 4a 내지 b는 본 발명의 실시예에 따른 코드 흐름의 예시적인 변형을 도시하는 블록도.
본 발명의 요지는 합법적인 요건에 부합하는 전문성을 이용하여 설명된다. 그러나, 설명 그 자체는 본 특허의 범위를 제한하기 위한 것은 아니다. 그보다는, 본 발명자는 청구된 주제가 다른 방식으로 실시될 수도 있게 고안하여 본원에서 설명되는 것과 유사한 구성요소 또는 서로 다른 단계를 다른 현재 또는 미래의 기술에 관련하여 포함할 수 있다. 또한, "단계"라는 용어가 사용된 방법의 서로 다른 양태를 내포하도록 본원에서 사용되고 있지만, 그 용어는, 각각의 단계의 순서가 명백하게 설명되지 않는 한, 본원에 개시된 각종 단계 중에서 또는 사이에서 어떤 특정한 순서를 의미하는 것으로 해석되어서는 안 된다.
예시적인 컴퓨팅 환경
도 1은 본 발명이 구현되기에 적합한 컴퓨팅 시스템 환경(100)의 예를 도시한다. 컴퓨팅 시스템 환경(100)은 적합한 컴퓨팅 환경의 일례에 불과하며, 본 발명의 용도 또는 기능성의 범위에 관해 어떤 제한을 암시하고자 하는 것이 아니다. 컴퓨팅 환경(100)이 예시적인 운영 환경(100)에 도시된 컴포넌트들 중 임의의 하나 또는 그 컴포넌트들의 임의의 조합과 관련하여 어떤 의존성 또는 요구사항을 갖는 것으로 해석되어서는 안 된다.
본 발명은 많은 기타 범용 또는 특수 목적의 컴퓨팅 시스템 환경 또는 구성에서 동작할 수 있다. 본 발명에서 사용하는 데 적합할 수 있는 잘 알려진 컴퓨팅 시스템, 환경 및/또는 구성의 예로는 퍼스널 컴퓨터, 서버 컴퓨터, 핸드-헬드 또는 랩톱 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋톱 박스, 프로그램가능한 가전제품, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 상기 시스템들이나 장치들 중 임의의 것을 포함하는 분산 컴퓨팅 환경, 기타 등등이 있지만 이에 제한되는 것은 아니다.
본 발명은 일반적으로 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어와 관련하여 기술될 것이다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하거나 특정 추상 데이터 유형을 구현하는 루틴, 프로그램, 개체, 컴 포넌트, 데이터 구조 등을 포함한다. 본 발명은 또한 통신 네트워크를 통해 연결되어 있는 원격 처리 장치들에 의해 태스크가 수행되는 분산 컴퓨팅 환경에서 실시될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 비롯한 로컬 및 원격 컴퓨터 저장 매체 둘 다에 위치할 수 있다.
도 1과 관련하여, 본 발명을 구현하는 예시적인 시스템은 컴퓨터(110) 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(110)의 컴포넌트들은 처리 장치(120), 시스템 메모리(130), 및 시스템 메모리를 비롯한 각종 시스템 컴포넌트들을 처리 장치(120)에 연결시키는 시스템 버스(121)를 포함하지만 이에 제한되는 것은 아니다. 시스템 버스(121)는 메모리 버스 또는 메모리 컨트롤러, 주변 장치 버스 및 각종 버스 아키텍처 중 임의의 것을 이용하는 로컬 버스를 비롯한 몇몇 유형의 버스 구조 중 어느 것이라도 될 수 있다. 예로서, 이러한 아키텍처는 ISA(industry standard architecture) 버스, MCA(micro channel architecture) 버스, EISA(Enhanced ISA) 버스, VESA(video electronics standard association) 로컬 버스, 그리고 메자닌 버스(mezzanine bus)로도 알려진 PCI(peripheral component interconnect) 버스 등을 포함하지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 통상적으로 각종 컴퓨터 판독가능 매체를 포함한다. 컴퓨터(110)에 의해 액세스 가능한 매체는 그 어떤 것이든지 컴퓨터 판독가능 매체가 될 수 있고, 이러한 컴퓨터 판독가능 매체는 휘발성 및 비휘발성 매체, 이동식 및 비이동식 매체를 포함한다. 예로서, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함하지만 이에 제한되는 것은 아니다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보를 저장하는 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 컴퓨터(110)에 의해 액세스되고 원하는 정보를 저장할 수 있는 임의의 기타 매체를 포함하지만 이에 제한되는 것은 아니다. 통신 매체는 통상적으로 반송파(carrier wave) 또는 기타 전송 메커니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등을 구현하고 모든 정보 전달 매체를 포함한다. "피변조 데이터 신호"라는 용어는, 신호 내에 정보를 인코딩하도록 그 신호의 특성들 중 하나 이상을 설정 또는 변경시킨 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 직접 배선 접속(direct-wired connection)과 같은 유선 매체, 그리고 음향, RF, 적외선, 기타 무선 매체와 같은 무선 매체를 포함한다. 상술된 매체들의 모든 조합이 또한 컴퓨터 판독가능 매체의 영역 안에 포함되는 것으로 한다.
시스템 메모리(130)는 판독 전용 메모리(ROM)(131) 및 랜덤 액세스 메모리(RAM)(132)와 같은 휘발성 및/또는 비휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 시동 중과 같은 때에, 컴퓨터(110) 내의 구성요소들 사이의 정보 전송을 돕는 기본 루틴을 포함하는 기본 입/출력 시스템(BIOS)(133)은 통상적으로 ROM(131)에 저장되어 있다. RAM(132)은 통상적으로 처리 장치(120)가 즉시 액세스 할 수 있고 및/또는 현재 동작시키고 있는 데이터 및/또는 프로그램 모듈을 포함한다. 예로서, 도 1은 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136) 및 프로그램 데이터(137)를 도시하고 있지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 또한 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장매체를 포함한다. 단지 예로서, 도 1은 비이동식·비휘발성 자기 매체에 기록을 하거나 그로부터 판독을 하는 하드 디스크 드라이브(140), 이동식·비휘발성 자기 디스크(152)에 기록을 하거나 그로부터 판독을 하는 자기 디스크 드라이브(151), CD-ROM 또는 기타 광 매체 등의 이동식·비휘발성 광 디스크(156)에 기록을 하거나 그로부터 판독을 하는 광 디스크 드라이브(155)를 포함한다. 예시적인 운영 환경에서 사용될 수 있는 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 기억 매체로는 자기 테이프 카세트, 플래시 메모리 카드, DVD, 디지털 비디오 테이프, 고상(solid state) RAM, 고상 ROM 등이 있지만 이에 제한되는 것은 아니다. 하드 디스크 드라이브(141)는 통상적으로 인터페이스(140)와 같은 비이동식 메모리 인터페이스를 통해 시스템 버스(121)에 접속되고, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 통상적으로 인터페이스(150)와 같은 이동식 메모리 인터페이스에 의해 시스템 버스(121)에 접속된다.
위에서 설명되고 도 1에 도시된 드라이브들 및 이들과 관련된 컴퓨터 저장 매체는, 컴퓨터(110)를 위해, 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모 듈 및 기타 데이터를 저장한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146), 및 프로그램 데이터(147)를 저장하는 것으로 도시되어 있다. 여기서 주의할 점은 이들 컴포넌트가 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136), 및 프로그램 데이터(137)와 동일하거나 그와 다를 수 있다는 것이다. 이에 관해, 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146) 및 프로그램 데이터(147)에 다른 번호가 부여되어 있다는 것은 적어도 이들이 다른 사본(copy)이라는 것을 나타내기 위한 것이다. 사용자는 키보드(162) 및 통상적으로 마우스, 트랙볼(trackball) 또는 터치 패드라고 불리는 포인팅 장치(161) 등의 입력 장치를 통해 명령 및 정보를 컴퓨터(110)에 입력할 수 있다. 다른 입력 장치(도시 생략)로는 마이크, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등을 포함할 수 있다. 이들 및 기타 입력 장치는 종종 시스템 버스에 결합된 사용자 입력 인터페이스(160)를 통해 처리 장치(120)에 접속되지만, 병렬 포트, 게임 포트 또는 USB(universal serial bus) 등의 다른 인터페이스 및 버스 구조에 의해 접속될 수도 있다. 모니터(191) 또는 다른 유형의 디스플레이 장치도 비디오 인터페이스(190) 등의 인터페이스를 통해 시스템 버스(121)에 접속될 수 있다. 모니터 외에, 컴퓨터는 스피커(197) 및 프린터(196) 등의 기타 주변 출력 장치를 포함할 수 있고, 이들은 출력 주변장치 인터페이스(195)를 통해 접속될 수 있다.
컴퓨터(110)는 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 사용하여 네트워크화된 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 또 하나의 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 기타 통상의 네트워크 노드일 수 있고, 비록 메모리 저장 장치(181)만이 도 1에 도시되었지만, 통상적으로 컴퓨터(110)와 관련하여 상술된 구성요소들의 대부분 또는 그 전부를 포함한다. 도 1에 도시된 논리적 접속으로는 LAN(171) 및 WAN(173)이 있지만, 기타 네트워크를 포함할 수도 있다. 이러한 네트워킹 환경은 사무실, 전사적 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷, 및 인터넷에서 일반적인 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 통상적으로 인터넷과 같은 WAN(173)을 통해 통신을 구축하기 위한 모뎀(172) 또는 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 기타 적절한 메커니즘을 통해 시스템 버스(121)에 접속된다. 네트워크화된 환경에서, 컴퓨터(110) 또는 그의 일부와 관련하여 기술된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 예로서, 도 1은 원격 애플리케이션 프로그램(185)이 메모리 장치(181)에 있는 것으로 도시하고 있지만 이에 제한되는 것은 아니다. 도시된 네트워크 접속은 예시적인 것이며 이 컴퓨터들 사이에 통신 링크를 구축하는 기타 수단이 사용될 수 있다는 것을 이해할 것이다.
실시예
다음의 논의에서는, 코드 에뮬레이션 및 바이너리 변환에 관한 세부사항은 당업자에게 공지되어 있는 것으로 가정한다. 따라서, 이러한 세부사항들은 명확함 및 설명의 이유로 본원에서 대부분 생략된다. 또한, 게임 소프트웨어에 관련하는 그래픽 렌더링을 포함하는 예시적인 실시예가 설명의 목적으로만 본원에서 사용되는데, 그러한 임의의 실시예에 본 발명을 제한하기 위한 것은 아니다.
본 발명의 실시예는 선택적으로 JIT 변환 및 전처리 컴파일 기술을 조합하여 소프트웨어 애플리케이션의 코드 실행 동안에 일시 정지를 회피한다. 이러한 코드의 에뮬레이팅된 바이너리의 사전 부팅 스캔은 바이너리 내의 복잡한 함수를 검출하기 위해 수행될 수 있다. 소프트웨어의 부팅 프로세스 동안에, 실시예는 검출된 복잡한 함수를 전처리 컴파일링한다. 런타임시에, JIT 변환 기술은 바이너리의 나머지를 위해 사용되며, 반면에 전처리 컴파일링된 함수는 직접 그리고 더 이상의 변환이 없이 실행될 수 있다. 또한, 이러한 사전 부팅 스캔 동안에는, 실시예가 매우 단순한 함수를 검출하고 그것들을 코드의 본문에 선택적으로 재배치할 수 있다(본원에서는 "인라이닝(inlining)"으로 불리는 프로세스). 런타임시에, 다른 경우라면 함수를 실행시키는 데에 필요했을 수도 있는 컨텍스트 전환이 회피될 수 있다.
실시예의 사전 부팅 스캔은 초기 부팅 프로세스를 수행하도록 요구되는 시간을 증가시킬 수도 있다. 그러나, 전처리 컴파일 및 인라이닝 동작이 선택적으로 적용되기 때문에, 부팅 시간의 증가는 허용가능한 한도 내에 있도록 관리될 수 있다. 따라서, 애플리케이션의 부팅 시간을 과도하게 넘지않은 채 상당한 일시 정지를 회피하도록 코드 실행은 개선될 수 있다.
이제 도 2를 참조하면, 실시예의 예시적인 방법(200)이 도시된다. 단계(201)에서 예를 들면, 비디오 게임의 중간 바이너리와 같은, 에뮬레이팅된 코드가, 스캔된다. 임의의 타입의 스캐닝 메커니즘이 사용될 수 있다. 예를 들면, 이러한 스캐닝 방법의 하나가 2005년 5월 12일에 출원된, 발명의 명칭이 "Function-Level Just-in-Time Translation Engine with Multiple Pass Optimization"인, 공동으로 양도된 미국 출원 번호 제11/128,699호에 설명되어 있는데, 이는 그 전체가 본원에 참조로써 포함되어 있다. 스캐닝은 예를 들면, 당업자에게 공지된 대로, 에뮬레이팅된 코드 흐름을 통해 명령어 포인터 등을 상대적 명령어 치환 기술 등에 따라 이동시키는 것을 포함한다. 스캔이 에뮬레이팅된 코드를 통해 행해지면서, 함수 바운더리들이 결정되어 에뮬레이팅된 코드 내에서 각각의 함수의 복잡도를 정한다. 본원에서 사용되는 "복잡도"라는 용어는 함수를 컴파일 및/또는 실행하는데 요구되는 처리 시간 또는 리소스의 임의의 측정치를 일컫는다. 예를 들면, 복잡도는 함수 크기(예를 들면, 코드의 행의 개수 등등), 처리 난이도 등에 관하여 측정될 수 있다. 예를 들면, 함수 포인터들, 또는 다른 유형의 절대 주소부여를 통해 참조되는 함수와 관련하여, 이러한 함수에 대한 바이너리 전용 참조는, 아래에서 일어나는 단계(211)의 전처리 컴파일이 가능하도록 사용될 수 있다.
단계(201)의 스캐닝이 완료된 후에, 단계(203)에서 하나 이상의 복잡한 함수가 검출되었는지의 여부에 대한 판정이 행해진다. 상술한 바와 같이, "복잡한" 함수를 구성하는 것은 임의의 척도에 기초할 수 있다. 또한, 사전결정된 임계치가 선택될 수 있어서 그 임계치를 넘는 함수만이 복잡한 것으로 판정된다. 상술한 바 와 같이, 사전결정된 임계치는 코드의 행에 관한 것일 수 있다. 따라서, 함수가 코드의 행의 임계치 개수보다 많은 행을 포함하는 경우에는, 함수는 복잡한 것으로 판정될 수 있다. 임계치는 인자들의 임의의 개수에 기초하여 사전결정될 수 있다. 예를 들면, 아래에서 논의되는, 단계(205)의 전처리 컴파일은, 애플리케이션의 전체적인 부팅업 시간을 증가시킬 수 있다. 개발자 등은 이러한 전처리 컴파일에 의해 일어난 부팅업 시간의 증가가 특정한 한도 내에서 유지되기를 원할 수 있다. 따라서, 임계치는, 예를 들면, 복잡할 것으로 판정된 함수들이 시간 제한 내에 전처리 컴파일링될 수 있는 만큼이 되도록 선택될 수 있다.
단계(203)에서 복잡한 함수가 없다고 판정되는 경우에는, 방법(200)은 선택적인 단계(207)로 진행할 수 있다. 단계(203)에서 하나 이상의 함수가 복잡하다고 판정되는 경우에는, 단계(205)에서 복잡한 함수가 컴파일링되며-이는 이러한 컴파일이 코드의 실행에 앞서(및 임의의 JIT 변환에 앞서) 행해지기 때문에 본원에서 "전처리 컴파일"이라고 불린다. 실시예에 따르면, 함수가 단계(205)에 따라 일단 전처리 컴파일링되면, 추후 처리 없이 실행할 준비가 된다.
선택적인 단계(207)에서, 하나 이상의 "단순한" 함수가 검출되는지의 여부에 따라 결정이 행해진다. 복잡한 함수의 경우처럼, 단순한 함수를 구성하는 것은 임의의 척도에 기초한 것일 수 있다. 예를 들면, 단순한 함수는 코드의 행의 임계치보다 낮은 값을 갖는 서브루틴으로서 정의될 수 있다. 임계치는 예를 들면, 서브루틴을 실행하는 데에 요구되는 처리 시간과 비교되는, 컨텍스트 전환에 의해 요구되는 처리 시간에 기초하여 선택될 수 있다. 애플리케이션 특정 인자를 비롯하여, 추가적인 인자들이 또한 고려될 수 있다.
예를 들면, 특정한 서브루틴이 임계치보다 작은 코드 행의 개수를 갖지만 이는 애플리케이션의 코드를 통틀어 여러 번 나타날 수 있다. 함수의 인라이닝은 대응하는 함수 호출 대신에 함수 내의 코드의 행을 코드의 본문에 복사하는 것을 필수적으로 포함한다. 따라서, 실행중에 함수의 코드는 코드가 생겨난 서브루틴에 및 서브루틴으로부터 컨텍스트 전환을 할 필요 없이도 컴파일링될 수 있고 인라인 실행될 수 있다. 이러한 복사는 중복된 데이터 때문에 애플리케이션의 전체적인 크기를 증가시킬 수 있다. 결국, 애플리케이션을 통틀어 여러 번 나타나는 서브루틴은 너무 많은 중복을 수반할 수 있어서 함수를 인라이닝하여 얻는 처리 이득이, 증가된 저장 요건, 수많은 함수를 인라이닝하는 데에 요구되는 과도한 처리 시간 등에 의해 상쇄될 수 있다. 결국, 이러한 함수들은, 비록 임계치에 부합하는 단순한 함수일지라도, 단순한 것으로 판정되지 않을 수 있다.
하나 이상의 함수가 선택적인 단계(207)에서 단순한 것으로 판정되는 경우에는, 선택적인 단계(209)에서 그 함수는 애플리케이션 코드의 본문과 인라인으로 위치된다. 상술한 바와 같이, 코드를 인라인으로 위치시키는 것은 서브루틴 등으로부터 코드를 복사하고 대응하는 함수 호출을 그 서브루틴 코드를 갖는 본문에 재배치시키는 것을 수반할 수 있다. 함수를 인라인으로 위치시키는 것의 효과의 그래픽적인 표현이 아래에서 논의되는 도 4a 및 도 4b에 도시되어 있다. 단계(207)에서 선택적인 단계(207)에는 단순한 것으로 판정된 함수가 없다고 판정한 경우에는, 방법(200)은 단계(211)로 바로 진행한다.
단계(211)에서는, 에뮬레이팅된 코드의 JIT 변환이 런타임 엔진 등에 의해 코드의 실행과 관련하여 일어날 수 있다. 상술한 대로, 복잡한 함수가 단계(205)에서 전처리 컴파일링됐기 때문에, 그러한 함수들은 단계(211)에서 변환될 필요가 없이 바로 실행될 수 있다. 또한, 단계(209)에서 인라인으로 위치된 임의의 함수에 대해 컨텍스트 전환이 수행될 필요도 없다.
상술한 바와 같이, 함수가 복잡한지 또는 단순한지(따라서 그 함수가 전처리 컴파일링되어야 할지 또는 인라인으로 위치되어야 할지)를 판정하기 위해 사용되는 임계치 및 인자들은 애플리케이션의 바람직한 부팅 시간을 비롯한 각종 인자들에 기초할 수 있지만 이에 제한되는 것은 아니다. 따라서, 실시예가 개발자 등에게 그러한 전처리 컴파일 및/또는 인라이닝에 의해 일어난 런타임 이득과 부팅 시간에서의 대응하는 증가 사이에 수락할 만한 트레이드오프를 결정하도록 허가한다.
도 3은 실시예에 따른 예시적인 코드 흐름을 나타낸다. 함수(310a-d)는 애플리케이션의 가상 코드의 본문(300) 내의 함수를 나타낸다. 런타임 동안에, 함수(310a)는 JIT 변환 프로세스(320a)를 사용하여 변환된다. 코드 흐름은 함수(310a)로부터 JIT 변환 프로세스(320a)까지 이끄는 화살표 A에 의해 나타나며, 그리고 나서 일단 JIT 변환 프로세스(320a)가 완료되면, 화살표 B는 함수(310a)가 그 후에 실행됨을 가리킨다. 에뮬레이팅된 바이너리는 그 후 화살표 C에 의해 함수(310b)로 진행한다. 함수(310b)는 또한 화살표 A가 나타내는 대로 프로세스(320b)에 의해 JIT 변환을 거치고, 화살표 B가 나타내는 대로 실행된다. 그러나 일단 바이너리가 전처리 컴파일링된 함수(310c)에 도달하면, 예를 들어, 도 2의 단 계(205)에 따라 이미 변환을 거친 전처리 컴파일링된 함수(310c)가 실행될 준비가 되어 있기 때문에, 어떤 JIT 변환도 요구되지 않는다. 이는 전처리 컴파일링된 함수(310d)에 대해서도 참이다. 따라서, 도 3이 실시예에 따라 일어날 수 있는 변조된 JIT 변환 프로세스의 도시를 제공하고 있다고 여길 수 있다.
도 4a 및 도 4b는 도 2의 선택적인 단계(209)에 따라 상술된 코드의 인라이닝에 따른 예시적인 코드 흐름을 도시한다. 도 4a를 참조하면, 함수(410a-410b)가 애플리케이션의 본문(400)에 위치된다. 화살표 A가 가리키는 것처럼, 서브루틴(420a-420b)이 함수(410a-410b)로부터 각각 호출되고, 화살표 B가 가리키는 것처럼, 서브루틴(420a-420b)의 결과가 함수(410a-410b)에 반환된다. 도 4a에서 알 수 있듯이, 서브루틴(420b)은 "단순한"것으로 설계되는데, 이는 도 2의 단계(207)에 따라 상술한 바와 같이, 예를 들면, 코드 행의 임계치 개수보다 적은 행을 갖음을 가리킨다. 본문(400) 내에서 함수(410a)로부터 함수(410b)까지의 코드 흐름은 화살표 C로 표현된다.
이제 도 4b를 참조하면, 함수(410a) 및 서브루틴(420a)은 도 4a에 따라 상술한 바와 같다. 그러나, 함수(410b)는 서브루틴(420b)으로의 호출을 포함하지 않는다. 대신에, 함수(410b)는 코드의 본문(400)에 위치된 서브루틴(420b)으로 진행한다. 따라서, 화살표 A 및 B로 표현되는 서브루틴(420b)으로의 호출 및 반환이 회피된다. 서브루틴(420b')은, 그 코드가 코드의 본문(400)에 복사되었기 때문에 사용되지 않은, 원본 서브루틴(420b)에 의해 점유된 메모리를 나타낸다.
본 발명이 각종 특징의 실시예에 따라 설명되었지만, 다른 유사한 실시예들 이 사용될 수 있거나 본 발명으로부터 일탈하지 않은 채 본 발명의 동일한 기능을 수행하기 위해 설명된 실시예에 변경 및 추가가 만들어질 수 있음이 이해될 것이다. 따라서, 본 발명은 임의의 하나의 실시예에 제한되어서는 안 되며, 그보다는 첨부된 청구항에 따른 범위 및 영역 내에서 해석되어야 하겠다.
Claims (20)
- 적어도 하나의 함수를 갖는 가상 코드를 스캔하는 단계;상기 적어도 하나의 함수가 상기 스캔 동안에 제1 사전결정된 임계치를 초과하는지의 여부를 판정하는 단계;상기 적어도 하나의 함수가 상기 제1 사전결정된 임계치를 초과하는 경우에는, 상기 함수를 전처리 컴파일링하는 단계; 및상기 가상 코드의 JIT(just-in-time) 변환을 수행하는 단계를 포함하는 방법.
- 제1항에 있어서, 상기 사전결정된 임계치는 사전결정된 복잡도 레벨에 대응하는 방법.
- 제2항에 있어서, 상기 복잡도 레벨은 사전결정된 코드 행 개수에 대응하는 방법.
- 제1항에 있어서, 부팅 업 프로세스 동안에 상기 가상 코드를 로딩하는 단계를 더 포함하며, 상기 스캔하는 단계는 상기 로딩하는 단계 전에 수행되는 방법.
- 제1항에 있어서, 상기 전처리 컴파일링하는 단계는 가상 코드 부팅 업 기간 을 소정의 시간만큼 늘리며, 상기 제1 사전결정된 임계치는 상기 소정의 시간에 기초하는 방법.
- 제1항에 있어서, 상기 가상 코드는 본문 및 적어도 하나의 서브루틴을 가지며,상기 적어도 하나의 서브루틴은 제2 사전 결정된 임계치보다 낮은 복잡도를 갖는다고 판정하는 단계; 및상기 가상 코드의 상기 본문 내에 상기 적어도 하나의 서브루틴을 위치시키는 단계를 더 포함하는 방법.
- 제6항에 있어서, 상기 적어도 하나의 서브루틴은 코드의 행을 가지며 상기 본문은 상기 서브루틴에 대응하는 함수 호출을 갖고, 상기 위치시키는 단계는 상기 적어도 하나의 서브루틴으로부터의 상기 코드의 행을 복사하여 상기 함수 호출을 상기 코드의 행을 갖는 상기 가상 코드의 상기 본문에 재배치시키는 단계를 포함하는 방법.
- 제7항에 있어서, 복수의 서브루틴을 더 포함하고, 상기 위치시키는 단계는, 서브루틴의 개수가 제3 사전결정된 임계치 미만인 경우에만 수행되는 방법.
- 제1항에 있어서, 상기 가상 코드는 그래픽 렌더링 소프트웨어를 구현하는 방법.
- 소프트웨어 애플리케이션의 에뮬레이팅된 바이너리의 사전 부팅 스캔을 수행하는 단계;상기 바이너리 내에서 제1 사전결정된 임계치를 초과하는 제1 함수를 식별하는 단계;상기 바이너리 내에서 실행을 위해 컨텍스트 전환을 요구하고 제2 사전결정된 임계치 미만인 제2 함수를 식별하는 단계;상기 제1 함수를 전처리 컴파일링하는 단계;상기 제2 함수를 상기 에뮬레이팅된 바이너리의 본문에 인라인으로 위치시키는 단계; 및상기 에뮬레이팅된 바이너리의 JIT(just-in-time) 변환을 수행하는 단계를 포함하는 방법.
- 제10항에 있어서, 상기 JIT 변환은 사전 결정된 프로세서에 의해 실행되도록 적응되는 제2 바이너리를 생성하는 방법.
- 제11항에 있어서, 상기 변환된 바이너리를 실행하는 단계를 더 포함하는 방법.
- 제10항에 있어서, 상기 JIT 변환은 상기 소프트웨어 애플리케이션의 런타임시에 수행되는 방법.
- 제10항에 있어서, 상기 소프트웨어 애플리케이션은 게임 소프트웨어인 방법.
- 제10항에 있어서, 상기 제1 및 제2 함수는 그래픽 렌더링에 관련되는 방법.
- 컴퓨터 실행가능 명령어를 갖는 컴퓨터 판독가능 매체로서, 상기 컴퓨터 실행가능 명령어는,적어도 하나의 함수를 갖는 가상 코드를 스캔하는 단계;상기 적어도 하나의 함수가 제1 사전결정된 임계치를 초과하는지의 여부를 판정하는 단계;상기 적어도 하나의 함수가 상기 제1 사전결정된 임계치를 초과하는 경우에는, 상기 함수를 전처리 컴파일링하는 단계; 및상기 가상 코드의 JIT(just-in-time) 변환을 수행하는 단계를 포함하는 방법을 수행하기 위한 것인, 컴퓨터 판독가능 매체.
- 제16항에 있어서, 상기 방법은 부팅 업 프로세스 동안에 상기 가상 코드를 로딩하는 단계를 더 포함하고, 상기 스캔하는 단계는 상기 로딩하는 단계 전에 수 행되는 컴퓨터 판독가능 매체.
- 제16항에 있어서, 상기 전처리 컴파일링하는 단계는 가상 코드 부팅 업 기간을 소정의 시간만큼 늘리며, 상기 제1 사전결정된 임계치는 상기 소정의 시간에 기초하는 컴퓨터 판독가능 매체.
- 제16항에 있어서, 상기 가상 코드는 본문 및 적어도 하나의 서브루틴을 가지며,상기 방법은,상기 적어도 하나의 서브루틴은 제2 사전 결정된 복잡도 임계치보다 낮은 복잡도를 갖는다고 판정하는 단계; 및상기 가상 코드의 상기 본문 내에 상기 적어도 하나의 서브루틴을 위치시키는 단계를 더 포함하는 컴퓨터 판독가능 매체.
- 제19항에 있어서, 상기 적어도 하나의 서브루틴은 코드의 행을 가지며 상기 본문은 상기 서브루틴에 대응하는 함수 호출을 갖고, 상기 위치시키는 단계는 상기 적어도 하나의 서브루틴으로부터의 상기 코드의 행을 복사하여 상기 함수 호출을 상기 코드의 행을 갖는 상기 가상 코드의 상기 본문에 재배치시키는 단계를 포함하는 컴퓨터 판독가능 매체.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/177,130 US7389500B2 (en) | 2005-07-08 | 2005-07-08 | Selective pre-compilation of virtual code to enhance boot time emulator performance |
US11/177,130 | 2005-07-08 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20080023728A true KR20080023728A (ko) | 2008-03-14 |
Family
ID=37619700
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020087000504A KR20080023728A (ko) | 2005-07-08 | 2006-06-30 | 에뮬레이터 성능을 개선하기 위한 가상 코드의 선택적전처리 컴파일 |
Country Status (6)
Country | Link |
---|---|
US (1) | US7389500B2 (ko) |
EP (1) | EP1902364A4 (ko) |
JP (1) | JP4294084B2 (ko) |
KR (1) | KR20080023728A (ko) |
CN (1) | CN101238438B (ko) |
WO (1) | WO2007008506A2 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100964581B1 (ko) * | 2008-08-20 | 2010-06-21 | 주식회사 컴퍼니원헌드레드 | 두 단계 레지스터 기반 바이트코드를 이용한 스크립트 언어 실행 시스템 |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8157654B2 (en) * | 2000-11-28 | 2012-04-17 | Nintendo Co., Ltd. | Hand-held video game platform emulation |
US7987457B2 (en) * | 2007-06-25 | 2011-07-26 | Microsoft Corporation | Targeted patching for native generation images |
US8875114B2 (en) * | 2007-09-21 | 2014-10-28 | International Business Machines Corporation | Employing identifiers provided by an operating system of a processing environment to optimize the processing environment |
US9239732B2 (en) * | 2011-02-16 | 2016-01-19 | Microsoft Technology Licensing Llc | Unrolling aggregation operations in asynchronous programming code having multiple levels in hierarchy |
US9075913B2 (en) * | 2012-02-27 | 2015-07-07 | Qualcomm Incorporated | Validation of applications for graphics processing unit |
JP5886450B2 (ja) * | 2012-03-22 | 2016-03-16 | インテル コーポレイション | ハイブリッドのエミュレーション及びカーネル関数処理のシステム及び方法 |
US9378001B2 (en) | 2014-05-02 | 2016-06-28 | Microsoft Technology Licensing, Llc | Matching program sections through feature extraction |
JP2018028777A (ja) * | 2016-08-17 | 2018-02-22 | Necプラットフォームズ株式会社 | エミュレーション装置、エミュレーション方法、及び、エミュレーションプログラム |
CN109426503B (zh) * | 2017-07-21 | 2022-05-31 | 华为技术有限公司 | 提供仿真激励的方法及装置 |
US10671758B2 (en) * | 2017-08-30 | 2020-06-02 | Micro Focus Llc | Redacting core dumps by identifying modifiable parameters |
US20190220294A1 (en) * | 2018-01-17 | 2019-07-18 | International Business Machines Corporation | Using lightweight jit compilation for short-lived jvms on parallel distributing computing framework |
US11720340B2 (en) * | 2019-07-30 | 2023-08-08 | Hewlett-Packard Development Company, L.P. | Hash map of executable control blocks |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5097407A (en) * | 1986-08-08 | 1992-03-17 | Integrated Inference Machines | Artificial intelligence processor |
CN1266378A (zh) * | 1998-04-27 | 2000-09-13 | 世嘉企业股份有限公司 | 利用游戏者数据的游戏执行方法及游戏装置 |
US6637025B1 (en) * | 1998-12-03 | 2003-10-21 | International Business Machines Corporation | Dynamic selection/definition of which class/methods should or should not be jit'ed using information stored in a jar file |
US6338160B1 (en) * | 1998-12-08 | 2002-01-08 | Nazomi Communications, Inc. | Constant pool reference resolution method |
US6826749B2 (en) * | 1998-12-08 | 2004-11-30 | Nazomi Communications, Inc. | Java hardware accelerator using thread manager |
US6332215B1 (en) * | 1998-12-08 | 2001-12-18 | Nazomi Communications, Inc. | Java virtual machine hardware for RISC and CISC processors |
US7225436B1 (en) * | 1998-12-08 | 2007-05-29 | Nazomi Communications Inc. | Java hardware accelerator using microcode engine |
US6774885B1 (en) * | 1999-01-20 | 2004-08-10 | Motek B.V. | System for dynamic registration, evaluation, and correction of functional human behavior |
US6842894B1 (en) * | 1999-04-05 | 2005-01-11 | Gateway, Inc. | Dynamic Compiling |
US6354940B1 (en) * | 1999-04-30 | 2002-03-12 | Square Co., Ltd. | Game apparatus, game fight processing method, and computer readable storage medium storage program therefor |
JP3191241B2 (ja) * | 1999-07-14 | 2001-07-23 | 株式会社スクウェア | コンピュータ読み取り可能な記録媒体、ゲーム制御方法およびゲーム装置 |
GB9921720D0 (en) * | 1999-09-14 | 1999-11-17 | Tao Group Ltd | Loading object-oriented computer programs |
US7225456B2 (en) * | 2001-04-23 | 2007-05-29 | Sony Corporation | Gateway screen for interactive television |
US6704926B1 (en) * | 2000-09-28 | 2004-03-09 | International Business Machines Corporation | Bimodal Java just-in-time complier |
JP2002169696A (ja) * | 2000-12-04 | 2002-06-14 | Mitsubishi Electric Corp | データ処理装置 |
CA2456835C (en) * | 2001-08-10 | 2012-03-20 | Stephen John Regelous | A method of rendering an image and a method of animating a graphics character |
US7228533B2 (en) * | 2001-08-24 | 2007-06-05 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for performing programming loops |
GB0220282D0 (en) * | 2002-08-31 | 2002-10-09 | Ibm | Improved just in time compilation of java software methods |
US7090576B2 (en) * | 2003-06-30 | 2006-08-15 | Microsoft Corporation | Personalized behavior of computer controlled avatars in a virtual reality environment |
-
2005
- 2005-07-08 US US11/177,130 patent/US7389500B2/en not_active Expired - Fee Related
-
2006
- 2006-06-30 EP EP06786289A patent/EP1902364A4/en not_active Withdrawn
- 2006-06-30 WO PCT/US2006/026081 patent/WO2007008506A2/en active Application Filing
- 2006-06-30 JP JP2008520347A patent/JP4294084B2/ja not_active Expired - Fee Related
- 2006-06-30 KR KR1020087000504A patent/KR20080023728A/ko not_active Application Discontinuation
- 2006-06-30 CN CN2006800246645A patent/CN101238438B/zh not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100964581B1 (ko) * | 2008-08-20 | 2010-06-21 | 주식회사 컴퍼니원헌드레드 | 두 단계 레지스터 기반 바이트코드를 이용한 스크립트 언어 실행 시스템 |
Also Published As
Publication number | Publication date |
---|---|
CN101238438B (zh) | 2010-12-08 |
WO2007008506A3 (en) | 2007-08-23 |
EP1902364A4 (en) | 2009-01-21 |
US20070011666A1 (en) | 2007-01-11 |
WO2007008506A2 (en) | 2007-01-18 |
CN101238438A (zh) | 2008-08-06 |
JP2009501368A (ja) | 2009-01-15 |
JP4294084B2 (ja) | 2009-07-08 |
US7389500B2 (en) | 2008-06-17 |
EP1902364A2 (en) | 2008-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20080023728A (ko) | 에뮬레이터 성능을 개선하기 위한 가상 코드의 선택적전처리 컴파일 | |
US6314560B1 (en) | Method and apparatus for a translation system that aggressively optimizes and preserves full synchronous exception state | |
KR102059705B1 (ko) | 적응식 이식가능 라이브러리 | |
US7975257B2 (en) | Iterative static and dynamic software analysis | |
EP2359247B1 (en) | Transforming user script code for debugging | |
US8082542B2 (en) | Load time in-lining of subroutines | |
US8458674B2 (en) | Method and apparatus for handling exceptions during binding to native code | |
US9208060B1 (en) | Emulation-based expression evaluation for diagnostic tools | |
US8893100B2 (en) | Return address optimisation for a dynamic code translator | |
US11029924B2 (en) | Program optimization by converting code portions to directly reference internal data representations | |
US8341613B2 (en) | Reducing stack space consumption via head-call optimization | |
US9465595B2 (en) | Computing apparatus, computing method, and computing program | |
US20090254893A1 (en) | Compiler optimized function variants for use when return codes are ignored | |
Mooney | Issues in the specification and measurement of software portability | |
CN110018831B (zh) | 程序处理方法、装置及计算机可读存储介质 | |
CN114911541B (zh) | 配置信息的处理方法、装置、电子设备及存储介质 | |
US20160085523A1 (en) | Selectively loading precompiled header(s) and/or portion(s) thereof | |
US6983361B1 (en) | Apparatus and method for implementing switch instructions in an IA64 architecture | |
US20170116105A1 (en) | Using core files to develop diagnostic programs | |
US6738976B1 (en) | Method, system, and apparatus to minimize exception handling overhead from invoked functions | |
JP2007323358A (ja) | コンパイラプログラムを記録する媒体、コンパイル方法及びこれを伴う情報処理装置 | |
CN113986461A (zh) | 一种目标处理器上系统调用的侵入式半本地化仿真方法 | |
CN116010100A (zh) | 区块链系统中的合约调用方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E601 | Decision to refuse application |